Files
openairinterface5g/openair2/RRC/CELLULAR/rrc_ue_init.c
T
2013-09-26 09:54:22 +00:00

180 lines
6.1 KiB
C
Executable File

/***************************************************************************
rrc_ue_init.c
-------------------
copyright : (C) 2008, 2010 by Eurecom
created by : Michelle.Wetterwald@eurecom.fr
**************************************************************************
Initialization of RRC protocol entity for User Equipment
***************************************************************************/
/********************
// OpenAir includes
********************/
#include "LAYER2/MAC/extern.h"
#include "COMMON/openair_defs.h"
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include "LAYER2/RLC/rlc.h"
#include "COMMON/mac_rrc_primitives.h"
//#include "SIMULATION/simulation_defs.h"
//extern EMULATION_VARS *Emul_vars;
//extern CH_MAC_INST *CH_mac_inst;
//extern UE_MAC_INST *UE_mac_inst;
/********************
// RRC includes
********************/
#include "rrc_ue_vars.h"
#include "as_configuration.h"
//#include "rrc_L2_proto.h"
//-----------------------------------------------------------------------------
#include "rrc_proto_int.h"
#include "rrc_proto_fsm.h"
//#include "rrc_proto_intf.h"
#include "rrc_proto_bch.h"
#include "rrc_proto_mbms.h"
//-----------------------------------------------------------------------------
int *pt_nas_ue_irq;
u8 nas_IMEI[14];
#ifndef USER_MODE
EXPORT_SYMBOL(pt_nas_ue_irq);
EXPORT_SYMBOL(nas_IMEI);
#endif
LCHAN_DESC BCCH_LCHAN_DESC,CCCH_LCHAN_DESC, DCCH_LCHAN_DESC, DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
rlc_info_t Rlc_info_um;
rlc_info_t Rlc_info_am_config;
//-------------------------------------------------------------------
void rrc_ue_get_mobile_id (void){
//-------------------------------------------------------------------
// TEMP : This function sets the mobile ID - 1st version, hard coded
// Later, will be retrieved from configuration to allow sevearl mobile terminals
rrc_ue_mobileId = 0;
//#ifdef OAI_EMU
#ifdef RRC_OAI_EMU
rrc_ue_mobileId = rrc_ethernet_id - 1;
msg ("[RRC CELL]rrc_ue_get_mobile_id - EMULATION - UE_ID initialized to: %d\n", rrc_ue_mobileId);
#endif
#ifndef RRC_OAI_EMU
msg ("[RRC CELL]rrc_ue_get_mobile_id - UE_ID not initialized. Use default value: %d\n", rrc_ue_mobileId);
#endif
}
//-------------------------------------------------------------------
int rrc_ue_get_initial_id (void){
//-------------------------------------------------------------------
int UE_Id = 99;
// #ifdef USER_MODE
// int uni;
//
// UE_Id = rrc_ue_mobileId;
//
// uni = uniform ();
// protocol_ms->rrc.IMEI[0] = (uni & 0x0F000000) >> 24;
// protocol_ms->rrc.IMEI[1] = (uni & 0x000F0000) >> 16;
// protocol_ms->rrc.IMEI[2] = (uni & 0x00000F00) >> 8;
// protocol_ms->rrc.IMEI[3] = uni & 0x0000000F;
// uni = uniform ();
// protocol_ms->rrc.IMEI[4] = (uni & 0x0F000000) >> 24;
// protocol_ms->rrc.IMEI[5] = (uni & 0x000F0000) >> 16;
// protocol_ms->rrc.IMEI[6] = (uni & 0x00000F00) >> 8;
// protocol_ms->rrc.IMEI[7] = uni & 0x0000000F;
// uni = uniform ();
// protocol_ms->rrc.IMEI[8] = (uni & 0x0F000000) >> 24;
// protocol_ms->rrc.IMEI[9] = (uni & 0x000F0000) >> 16;
// protocol_ms->rrc.IMEI[10] = (uni & 0x00000F00) >> 8;
// protocol_ms->rrc.IMEI[11] = uni & 0x0000000F;
// uni = uniform ();
// protocol_ms->rrc.IMEI[12] = (uni & 0x0F000000) >> 24;
// protocol_ms->rrc.IMEI[13] = (uni & 0x000F0000) >> 16;
// #else
protocol_ms->rrc.IMEI[0] = IMEI_D0;
protocol_ms->rrc.IMEI[1] = IMEI_D1;
protocol_ms->rrc.IMEI[2] = IMEI_D2;
protocol_ms->rrc.IMEI[3] = IMEI_D3;
protocol_ms->rrc.IMEI[4] = IMEI_D4;
protocol_ms->rrc.IMEI[5] = IMEI_D5;
protocol_ms->rrc.IMEI[6] = IMEI_D6;
protocol_ms->rrc.IMEI[7] = IMEI_D7;
protocol_ms->rrc.IMEI[8] = IMEI_D8;
protocol_ms->rrc.IMEI[9] = IMEI_D9;
protocol_ms->rrc.IMEI[10] = IMEI_D10;
protocol_ms->rrc.IMEI[11] = IMEI_D11;
protocol_ms->rrc.IMEI[12] = IMEI_D12;
protocol_ms->rrc.IMEI[13] = rrc_ue_mobileId;
// protocol_ms->rrc.IMEI[13] = IMEI_D13;
// #endif
UE_Id = 32- rrc_ue_mobileId;
#ifdef DEBUG_RRC_STATE
msg ("[RRC CELL]rrc_ue_get_initial_id (UE_ID %d) IMEI initialized to:", UE_Id);
rrc_print_buffer ((char *)protocol_ms->rrc.IMEI, 14);
#endif
return UE_Id;
}
//-----------------------------------------------------------------------------
void rrc_ue_init (u8 Mod_id){
//-----------------------------------------------------------------------------
// int i;
#ifdef DEBUG_RRC_STATE
printk("\n\n***********************************************\n");
printk("**************[RRC CELL][UE-INIT]**************\n");
printk("***********************************************\n");
#endif
printk("[RRC CELL][UE-INIT] Init UE function start\n");
// Initialize the control block for variables
pool_buffer_init();
protocol_ms = &prot_pool_ms;
memset ((char *)protocol_ms, 0, sizeof (struct protocol_pool_ms));
rrm_config = &rrc_as_config;
memset ((char *)rrm_config, 0, sizeof (RRM_VARS));
rrc_release_all_ressources = 0;
protocol_ms->rrc.ue_wait_establish_req = 0;
protocol_ms->rrc.protocol_state = RRC_UE_IDLE;
protocol_ms->rrc.u_rnti = 0;
protocol_ms->rrc.cell_id = 0;
protocol_ms->rrc.mod_id = Mod_id; //Saved for future use in rrc_ue_L2_frontend.c
//list2_init (&protocol_ms->rrc.rrc_timers, NULL);
rrc_ue_bch_init ();
rrc_rb_ue_init ();
// initialise NAS global variables
pt_nas_ue_irq = (int *) &(protocol_ms->rrc.ip_rx_irq);
rrc_ue_get_mobile_id(); // Read mobile Id from command line parameters
protocol_ms->rrc.ue_initial_id = rrc_ue_get_initial_id ();
memcpy (nas_IMEI, (char *)protocol_ms->rrc.IMEI, 14);
rrc_ue_fsm_init (protocol_ms->rrc.ue_initial_id);
protocol_ms->rrc.rrc_currently_updating = FALSE;
#ifdef USER_MODE
#ifdef RRC_NETLINK
rrc_ue_netlink_init ();
#else
rrc_ue_sap_init (); // init FIFOs towards NAS
//qos_fifo_open ();
#endif
#endif
//Initialise MBMS
#ifdef ALLOW_MBMS_PROTOCOL
rrc_ue_mbms_init();
#endif
rrc_init_mac_config();
//
printk("\n[RRC CELL][UE-INIT] cell_id %d\n",protocol_ms->rrc.cell_id );
printk("[RRC CELL][UE-INIT] Init UE function completed\n");
printk("***********************************************\n\n\n");
}