Commit d805f3a5 authored by Michele Paffetti's avatar Michele Paffetti

updates on the initialization procedures for NB_IoT

parent b5aa2b2b
...@@ -280,4 +280,4 @@ struct DCIN2_Pag{ ...@@ -280,4 +280,4 @@ struct DCIN2_Pag{
} __attribute__ ((__packed__));; } __attribute__ ((__packed__));;
typedef struct DCIN2_Pag DCIN2_Pag_t; typedef struct DCIN2_Pag DCIN2_Pag_t;
#define sizeof_DCIN2_Pag_t 15 #define sizeof_DCIN2_Pag_t 15
\ No newline at end of file
...@@ -305,6 +305,7 @@ typedef struct { ...@@ -305,6 +305,7 @@ typedef struct {
int32_t ul_out_of_sync; int32_t ul_out_of_sync;
int32_t phr_received;// received from Msg3 MAC Control Element int32_t phr_received;// received from Msg3 MAC Control Element
} UE_sched_ctrl_NB; } UE_sched_ctrl_NB;
/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ /*! \brief UE list used by eNB to order UEs/CC for scheduling*/
typedef struct { typedef struct {
/// DLSCH pdu /// DLSCH pdu
...@@ -330,6 +331,7 @@ typedef struct { ...@@ -330,6 +331,7 @@ typedef struct {
int num_UEs; int num_UEs;
boolean_t active[NUMBER_OF_UE_MAX]; boolean_t active[NUMBER_OF_UE_MAX];
} UE_list_NB_t; } UE_list_NB_t;
/*!\brief Values of BCCH0 logical channel for MIB*/ /*!\brief Values of BCCH0 logical channel for MIB*/
#define BCCH0 11 // MIB-NB #define BCCH0 11 // MIB-NB
/*!\brief Values of BCCH1 logical channel for SIBs */ /*!\brief Values of BCCH1 logical channel for SIBs */
......
...@@ -81,7 +81,7 @@ int mac_init_global_param_NB(void) ...@@ -81,7 +81,7 @@ int mac_init_global_param_NB(void)
return 0; return 0;
} }
int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active) int mac_top_init_NB()
{ {
module_id_t Mod_id,i,j; module_id_t Mod_id,i,j;
...@@ -90,10 +90,11 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ...@@ -90,10 +90,11 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
int size_bytes1,size_bytes2,size_bits1,size_bits2; int size_bytes1,size_bytes2,size_bits1,size_bits2;
int CC_id; int CC_id;
int list_el; int list_el;
UE_list_NB_t *UE_list; UE_list_NB_t *UE_list; //XXX to review if elements are correct
// delete the part to init the UE_INST // delete the part to init the UE_INST
//XXX NB_eNB_INST is global and set in lte-softmodem = 1 always (should be modified???)
LOG_I(MAC,"[MAIN] Init function start:Nb_eNB_INST=%d\n",NB_eNB_INST); LOG_I(MAC,"[MAIN] Init function start:Nb_eNB_INST=%d\n",NB_eNB_INST);
if (NB_eNB_INST>0) { if (NB_eNB_INST>0) {
...@@ -104,10 +105,11 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ...@@ -104,10 +105,11 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
LOG_I(MAC,"[MAC][MAIN] not enough memory for eNB \n"); LOG_I(MAC,"[MAC][MAIN] not enough memory for eNB \n");
exit(1); exit(1);
} else { } else {
LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",sizeof(eNB_MAC_INST),NB_eNB_INST,eNB_mac_inst); LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",sizeof(eNB_MAC_INST),NB_eNB_INST,eNB_mac_inst_NB);
bzero(eNB_mac_inst_NB,NB_eNB_INST*sizeof(eNB_MAC_INST_NB)); bzero(eNB_mac_inst_NB,NB_eNB_INST*sizeof(eNB_MAC_INST_NB));
} }
} else { } else {
LOG_I (MAC, "No instance allocated for the MAC layer (NB-IoT)\n");
eNB_mac_inst_NB = NULL; eNB_mac_inst_NB = NULL;
} }
...@@ -129,32 +131,24 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ...@@ -129,32 +131,24 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
UE_list->next_ul[list_el]=-1; UE_list->next_ul[list_el]=-1;
} }
// TODO : check the pointer to TX
if (Is_rrc_nb_iot_registered == 1) { if (Is_rrc_nb_iot_registered == 1) {
LOG_I(MAC,"[MAIN] calling RRC\n"); LOG_I(MAC,"[MAIN] calling RRC NB-IoT\n");
#ifndef CELLULAR //nothing to be done yet for cellular #ifndef CELLULAR //nothing to be done yet for cellular
openair_rrc_top_init(eMBMS_active, uecap_xer, cba_group_active,HO_active); openair_rrc_top_init_NB();
#endif #endif
} else { } else {
LOG_I(MAC,"[MAIN] Running without an RRC\n"); LOG_I(MAC,"[MAIN] Running without an RRC\n");
} }
#ifndef USER_MODE
#ifndef PHY_EMUL
LOG_I(MAC,"[MAIN] add openair2 proc\n");
//// add_openair2_stats();
#endif
#endif
// initialization for the RA template // initialization for the RA template
for (i=0; i<NB_eNB_INST; i++) for (i=0; i<NB_eNB_INST; i++)
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
LOG_D(MAC,"[MAIN][eNB %d] CC_id %d initializing RA_template\n",i, CC_id); LOG_D(MAC,"[MAIN][eNB %d] CC_id %d initializing RA_template (NB-IoT)\n",i, CC_id);
LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", i); LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", i);
RA_template = (RA_TEMPLATE_NB *)&eNB_mac_inst[i].common_channels[CC_id].RA_template[0]; RA_template = (RA_TEMPLATE_NB *)&eNB_mac_inst_NB[i].common_channels[CC_id].RA_template[0];
for (j=0; j<NB_RA_PROC_MAX; j++) { for (j=0; j<NB_RA_PROC_MAX; j++) {
size_bytes1 = sizeof(DCIN1_RAR_t); size_bytes1 = sizeof(DCIN1_RAR_t);
...@@ -171,7 +165,7 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ...@@ -171,7 +165,7 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
RA_template[j].RA_dci_size_bits2 = size_bits2; RA_template[j].RA_dci_size_bits2 = size_bits2;
RA_template[j].RA_dci_fmt1 = DCIFormatN1_RAR; RA_template[j].RA_dci_fmt1 = DCIFormatN1_RAR;
RA_template[j].RA_dci_fmt2 = DCIFormatN1; RA_template[j].RA_dci_fmt2 = DCIFormatN1; //for MSG4
} }
memset (&eNB_mac_inst_NB[i].eNB_stats,0,sizeof(eNB_STATS_NB)); memset (&eNB_mac_inst_NB[i].eNB_stats,0,sizeof(eNB_STATS_NB));
...@@ -185,11 +179,9 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ...@@ -185,11 +179,9 @@ int mac_top_init_NB(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
} }
//ICIC init param //ICIC not used
//end ALU's algo LOG_I(MAC,"[MAIN][INIT][NB-IoT] Init function finished\n");
LOG_I(MAC,"[MAIN][INIT] Init function finished\n");
return(0); return(0);
...@@ -209,12 +201,10 @@ int l2_init_eNB_NB() ...@@ -209,12 +201,10 @@ int l2_init_eNB_NB()
Is_rrc_nb_iot_registered=1; Is_rrc_nb_iot_registered=1;
LOG_D(MAC,"[MAIN] ALL INIT OK\n"); LOG_D(MAC,"[MAIN][NB-IoT] ALL INIT OK\n");
//
// mac_xface->macphy_init(eMBMS_active,uecap_xer,cba_group_active,HO_active);
//XXX call mac_top_init_NB!!! // mac_xface->macphy_init(eMBMS_active,uecap_xer,cba_group_active,HO_active); (old mac_top_init)
mac_top_init_NB();
return(1); return(1);
} }
......
...@@ -65,8 +65,8 @@ uint8_t *NB_get_dlsch_sdu(module_id_t module_idP,int CC_id,frame_t frameP,rnti_t ...@@ -65,8 +65,8 @@ uint8_t *NB_get_dlsch_sdu(module_id_t module_idP,int CC_id,frame_t frameP,rnti_t
int NB_rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP); int NB_rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP);
int NB_l2_init_eNB(void); int l2_init_eNB_NB(void);
int mac_init_global_param_NB(void); int mac_init_global_param_NB(void);
int mac_top_init_NB(void);
...@@ -259,6 +259,7 @@ openair_rrc_top_init_eNB_NB(void)//MP: XXX Raymond put this directly the definit ...@@ -259,6 +259,7 @@ openair_rrc_top_init_eNB_NB(void)//MP: XXX Raymond put this directly the definit
if (NB_eNB_INST > 0) { if (NB_eNB_INST > 0) {
eNB_rrc_inst_NB = (eNB_RRC_INST_NB*) malloc16(NB_eNB_INST*sizeof(eNB_RRC_INST_NB)); eNB_rrc_inst_NB = (eNB_RRC_INST_NB*) malloc16(NB_eNB_INST*sizeof(eNB_RRC_INST_NB));
memset (eNB_rrc_inst_NB, 0, NB_eNB_INST * sizeof(eNB_RRC_INST_NB)); memset (eNB_rrc_inst_NB, 0, NB_eNB_INST * sizeof(eNB_RRC_INST_NB));
LOG_D(RRC, "ALLOCATE %d Bytes for eNB_RRC_INST NB-IoT @ %p\n", (unsigned int)(NB_eNB_INST*sizeof(eNB_RRC_INST_NB)), eNB_rrc_inst_NB);
//no CBA, no LOcalization, no MBMS flag //no CBA, no LOcalization, no MBMS flag
...@@ -269,7 +270,7 @@ openair_rrc_top_init_eNB_NB(void)//MP: XXX Raymond put this directly the definit ...@@ -269,7 +270,7 @@ openair_rrc_top_init_eNB_NB(void)//MP: XXX Raymond put this directly the definit
} }
//this stuff below i think are no more used //XXX this stuff below i think are no more used
#ifndef NO_RRM #ifndef NO_RRM
#ifndef USER_MODE #ifndef USER_MODE
......
...@@ -1681,6 +1681,11 @@ int main( int argc, char **argv ) { ...@@ -1681,6 +1681,11 @@ int main( int argc, char **argv ) {
NB_eNB_INST=1; NB_eNB_INST=1;
NB_INST=1; NB_INST=1;
//#ifdef NB_IOT
// NB_eNB_INST_NB =1;
// NB_INST_NB = 1;
//#endif
} }
fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx); fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
...@@ -1738,9 +1743,11 @@ int main( int argc, char **argv ) { ...@@ -1738,9 +1743,11 @@ int main( int argc, char **argv ) {
int eMBMS_active=0; int eMBMS_active=0;
if (node_function[0] <= NGFI_RAU_IF4p5) { // don't initialize L2 for RRU if (node_function[0] <= NGFI_RAU_IF4p5) { // don't initialize L2 for RRU
// MP, Nick: Initialization of IF module for NB-IoT should be here---------- // MP, Nick: Initialization of IF module for NB-IoT should be here
#ifdef NB_IOT
if_inst = malloc(sizeof(IF_Module_t)); if_inst = malloc(sizeof(IF_Module_t));
LOG_I(PHY,"Allocate IF-Module for NB-IoT\n"); LOG_I(PHY,"Allocate IF-Module for NB-IoT\n");
#endif
//--------------------------- //---------------------------
LOG_I(PHY,"Intializing L2\n"); LOG_I(PHY,"Intializing L2\n");
...@@ -1864,8 +1871,11 @@ int main( int argc, char **argv ) { ...@@ -1864,8 +1871,11 @@ int main( int argc, char **argv ) {
} }
} else { } else {
#ifdef NB_IOT
printf("Initializing IF Module in PHY layer\n"); printf("Initializing IF Module in PHY layer\n");
//register function
IF_Module_init_L1(); IF_Module_init_L1();
#endif
printf("Initializing eNB threads\n"); printf("Initializing eNB threads\n");
init_eNB(node_function,node_timing,1,eth_params,single_thread_flag,wait_for_sync); init_eNB(node_function,node_timing,1,eth_params,single_thread_flag,wait_for_sync);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment