From ca836b6d677233416bcaf6b65069f6aaae1e3104 Mon Sep 17 00:00:00 2001 From: He Shanyun <heshanyun@cn.fujitsu.com> Date: Fri, 22 May 2020 09:55:28 +0000 Subject: [PATCH] fix issue about build error of UE (cherry picked from commit 9f170c0e55b770cb48d6ae0640e5ae647be21c3c) # Conflicts: # targets/RT/USER/lte-enb.c # targets/RT/USER/lte-ru.c --- targets/RT/USER/lte-enb.c | 87 +++++++++++++++++++++++++++++++++ targets/RT/USER/lte-ru.c | 86 -------------------------------- targets/RT/USER/lte-softmodem.c | 15 +++++- 3 files changed, 101 insertions(+), 87 deletions(-) diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index c73b28698a..ad71befc1b 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -1519,3 +1519,90 @@ void stop_eNB(int nb_inst) { kill_eNB_proc(inst); } } + +#if defined(PRE_SCD_THREAD) +void *pre_scd_task( void *param ) { + static int eNB_pre_scd_status; + protocol_ctxt_t ctxt; + int min_rb_unit[MAX_NUM_CCs]; + int CC_id; + int Mod_id; + int old_subframe; + eNB_MAC_INST *eNB; + UE_list_t *UE_list; + MessageDef *msg_p = NULL; + + /* init */ + old_subframe = 0x7FFFFFFF; + + itti_mark_task_ready (TASK_MAC_ENB_PRE_SCD); + LOG_I(MAC,"Entering main loop of eNB MAC PreSCD task\n"); + + // L2-emulator can work only one eNB + if( NFAPI_MODE==NFAPI_MODE_VNF) + Mod_id = 0; + else + Mod_id = RC.ru[0]->eNB_list[0]->Mod_id; + + eNB = RC.mac[Mod_id]; + UE_list = &eNB->UE_list; + + if(g_dact_collection) + { + uint32_t meas_ret; + meas_ret = fjt_meas_ringbuff_create(PRE_THREAD_FLAG); + if( meas_ret == FJT_MEAS_RET_FATAL ) + { + LOG_E(GTPU, "fjt_meas_ringbuff_create NG in pre_scd_thread.[ret=%u]",meas_ret); + oai_exit = 1; + return 0; + } + } + while (!oai_exit) { + + if(oai_exit) { + break; + } + + // Wait for a message + itti_poll_msg(TASK_MAC_ENB_PRE_SCD, &msg_p); /* reception of one message, non-blocking */ + + if (msg_p != NULL) { + switch (ITTI_MSG_ID(msg_p)) { + case TERMINATE_MESSAGE: + LOG_W(MAC, " *** Exiting eNB MAC PreSCD thread\n"); + itti_exit_task(); + break; + + default: + break; + } + } + + if(old_subframe == eNB->subframe){ + usleep(100); + continue; + } + + memcpy(&pre_scd_eNB_UE_stats,&UE_list->eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX); + memcpy(&pre_scd_activeUE, &UE_list->active, sizeof(boolean_t)*NUMBER_OF_UE_MAX); + + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, Mod_id, ENB_FLAG_YES, + NOT_A_RNTI, eNB->frame, eNB->subframe,Mod_id); + pdcp_run(&ctxt); + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + rrc_rx_tx(&ctxt, CC_id); + min_rb_unit[CC_id] = get_min_rb_unit(Mod_id, CC_id); + } + + pre_scd_nb_rbs_required(Mod_id, eNB->frame, eNB->subframe,min_rb_unit); + + old_subframe = eNB->subframe; + } + + eNB_pre_scd_status = 0; + return &eNB_pre_scd_status; +} +#endif + diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 989ee9bd9c..25be8cdbd5 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -2089,85 +2089,6 @@ void *ru_thread_synch(void *arg) { return &ru_thread_synch_status; } -#if defined(PRE_SCD_THREAD) -void *pre_scd_task( void *param ) { - static int eNB_pre_scd_status; - protocol_ctxt_t ctxt; - int min_rb_unit[MAX_NUM_CCs]; - int CC_id; - int Mod_id; - int old_subframe; - eNB_MAC_INST *eNB; - UE_list_t *UE_list; - MessageDef *msg_p = NULL; - - /* init */ - old_subframe = 0x7FFFFFFF; - - itti_mark_task_ready (TASK_MAC_ENB_PRE_SCD); - LOG_I(MAC,"Entering main loop of eNB MAC PreSCD task\n"); - - // L2-emulator can work only one eNB - if( NFAPI_MODE==NFAPI_MODE_VNF) - Mod_id = 0; - else - Mod_id = RC.ru[0]->eNB_list[0]->Mod_id; - - eNB = RC.mac[Mod_id]; - UE_list = &eNB->UE_list; - - while (!oai_exit) { - - if(oai_exit) { - break; - } - - // Wait for a message - itti_poll_msg(TASK_MAC_ENB_PRE_SCD, &msg_p); /* reception of one message, non-blocking */ - - if (msg_p != NULL) { - switch (ITTI_MSG_ID(msg_p)) { - case TERMINATE_MESSAGE: - LOG_W(MAC, " *** Exiting eNB MAC PreSCD thread\n"); - itti_exit_task(); - break; - - default: - break; - } - } - - if(old_subframe == eNB->subframe){ - usleep(100); - continue; - } - - memcpy(&pre_scd_eNB_UE_stats,&UE_list->eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX); - memcpy(&pre_scd_activeUE, &UE_list->active, sizeof(boolean_t)*NUMBER_OF_UE_MAX); - - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, Mod_id, ENB_FLAG_YES, - NOT_A_RNTI, eNB->frame, eNB->subframe,Mod_id); - pdcp_run(&ctxt); - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - rrc_rx_tx(&ctxt, CC_id); - min_rb_unit[CC_id] = get_min_rb_unit(Mod_id, CC_id); - if (min_rb_unit[CC_id] == -1) { - LOG_E(MAC, "get_min_rb_unit failed\n"); - return NULL; - } - } - - pre_scd_nb_rbs_required(Mod_id, eNB->frame, eNB->subframe,min_rb_unit); - - old_subframe = eNB->subframe; - } - - eNB_pre_scd_status = 0; - return &eNB_pre_scd_status; -} -#endif - #ifdef PHY_TX_THREAD /*! * \brief The phy tx thread of eNB. @@ -3072,13 +2993,6 @@ void init_ru_vnf(void) { } } */ - - { - int rc; - LOG_I(MAC,"Creating MAC eNB PreSCD Task\n"); - rc = itti_create_task (TASK_MAC_ENB_PRE_SCD, pre_scd_task, (void *)ru); - AssertFatal(rc >= 0, "Create task for MAC eNB PreSCD failed\n"); - } } // for ru_id // sleep(1); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 38e1c6a1aa..9709393e8c 100755 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -657,6 +657,10 @@ int main( int argc, char **argv ) { if (NFAPI_MODE==NFAPI_MODE_VNF) {// VNF #if defined(PRE_SCD_THREAD) init_ru_vnf(); // ru pointer is necessary for pre_scd. + int rc; + LOG_I(MAC,"Creating MAC eNB PreSCD Task\n"); + rc = itti_create_task (TASK_MAC_ENB_PRE_SCD, pre_scd_task, NULL); + AssertFatal(rc >= 0, "Create task for MAC eNB PreSCD failed\n"); #endif wait_nfapi_init("main?"); } @@ -689,7 +693,16 @@ int main( int argc, char **argv ) { if (RC.nb_RU >0 && NFAPI_MODE!=NFAPI_MODE_VNF) { printf("Initializing RU threads\n"); init_RU(get_softmodem_params()->rf_config_file,get_softmodem_params()->clock_source,get_softmodem_params()->timing_source,get_softmodem_params()->send_dmrs_sync); - + +#if defined(PRE_SCD_THREAD) + if (NFAPI_MODE == NFAPI_MONOLITHIC) { + int rc; + LOG_I(MAC,"Creating MAC eNB PreSCD Task\n"); + rc = itti_create_task (TASK_MAC_ENB_PRE_SCD, pre_scd_task, NULL); + AssertFatal(rc >= 0, "Create task for MAC eNB PreSCD failed\n"); + } +#endif + for (ru_id=0; ru_id<RC.nb_RU; ru_id++) { RC.ru[ru_id]->rf_map.card=0; RC.ru[ru_id]->rf_map.chain=CC_id+(get_softmodem_params()->chain_offset); -- 2.26.2