diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c index 7bd3ea69516f585afd34ac48d56900ad3d5c37a8..03b380ee2fc8246fc7c5b529c19f37baadbf4ccc 100644 --- a/common/config/config_load_configmodule.c +++ b/common/config/config_load_configmodule.c @@ -212,7 +212,6 @@ configmodule_interface_t *load_configmodule(int argc, if ( (strcmp(argv[i]+1, "h") == 0) || (strstr(argv[i]+1, "help_") != NULL ) ) { tmpflags = CONFIG_HELP; } - } /* look for the OAI_CONFIGMODULE environment variable */ diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index 83efb580d6830fdd6d09959b9fb99961af38ac31..94ce740e47b94874768e66b2c94aec67d8747da4 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -184,6 +184,7 @@ clock_gettime(CLOCK_MONOTONIC, ¤t); // **************************************** T(T_GNB_PHY_DL_TICK, T_INT(gNB->Mod_id), T_INT(frame_tx), T_INT(slot_tx)); + /* hack to remove UEs */ extern int rnti_to_remove[10]; extern volatile int rnti_to_remove_count; @@ -244,15 +245,16 @@ clock_gettime(CLOCK_MONOTONIC, ¤t); } */ // Call the scheduler + pthread_mutex_lock(&gNB->UL_INFO_mutex); gNB->UL_INFO.frame = frame_rx; gNB->UL_INFO.slot = slot_rx; gNB->UL_INFO.module_id = gNB->Mod_id; gNB->UL_INFO.CC_id = gNB->CC_id; - gNB->if_inst->NR_UL_indication(&gNB->UL_INFO); - pthread_mutex_unlock(&gNB->UL_INFO_mutex); + + // RX processing int tx_slot_type = nr_slot_select(cfg,frame_tx,slot_tx); int rx_slot_type = nr_slot_select(cfg,frame_rx,slot_rx); @@ -401,12 +403,9 @@ static void *gNB_L1_thread( void *param ) { while (!oai_exit) { - struct timespec t; - clock_gettime(CLOCK_MONOTONIC,&t); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0, 0 ); if (wait_on_condition(&L1_proc->mutex,&L1_proc->cond,&L1_proc->instance_cnt,thread_name)<0) break; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0, 1 ); - clock_gettime(CLOCK_MONOTONIC,&t); int frame_rx = L1_proc->frame_rx; int slot_rx = L1_proc->slot_rx; diff --git a/executables/nr-ru.c b/executables/nr-ru.c index 1184a9d80c925b2732d0cebd2f7779d286564f95..9144d9989800f64da3b54cf6cc3e63a43e9a552c 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -97,6 +97,7 @@ static int DEFBFW[] = {0x00007fff}; extern volatile int oai_exit; + extern struct timespec timespec_sub(struct timespec lhs, struct timespec rhs); extern struct timespec timespec_add(struct timespec lhs, struct timespec rhs); extern void nr_phy_free_RU(RU_t *); @@ -711,7 +712,6 @@ void rx_rf(RU_t *ru,int *frame,int *slot) { void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) { - RU_proc_t *proc = &ru->proc; NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms; nfapi_nr_config_request_scf_t *cfg = &ru->config; @@ -1564,15 +1564,12 @@ void *ru_thread( void *param ) { if((slot_start.tv_sec > curr_time.tv_sec) || (slot_start.tv_sec == curr_time.tv_sec && slot_start.tv_nsec > curr_time.tv_nsec)){ sleep_time = timespec_sub(slot_start,curr_time); - usleep(sleep_time.tv_nsec * 1e-3); } else{//continue } - // clock_gettime(CLOCK_MONOTONIC, &curr_time); - //printf("sfn:%d, slot:%d, start time %d.%d slot start %d.%d \n",frame,slot,curr_time.tv_sec,curr_time.tv_nsec,slot_start.tv_sec,slot_start.tv_nsec); - if (slot==(fp->slots_per_frame-1)) { + if(slot==(fp->slots_per_frame-1)) { slot=0; frame++; frame&=1023; diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c index 2a7ec31ac460fbc41627ec1ffe8afb982a12e336..b31be5ca66f1eb1f8bc6ab150c6a3fadbf8be739 100644 --- a/executables/nr-softmodem.c +++ b/executables/nr-softmodem.c @@ -737,7 +737,6 @@ void init_pdcp(void) { int main( int argc, char **argv ) { int ru_id, CC_id = 0; - start_background_system(); ///static configuration for NR at the moment diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c index ab35d6bb55be8f0fc2d78f0cee13eceead2bed37..1077c0e1ac4ae40c32953758c77424dbda479880 100644 --- a/executables/softmodem-common.c +++ b/executables/softmodem-common.c @@ -45,6 +45,7 @@ static softmodem_params_t softmodem_params; char *parallel_config=NULL; char *worker_config=NULL; + uint8_t nfapi_mode=0; static mapping softmodem_funcs[] = MAPPING_SOFTMODEM_FUNCTIONS; diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h index 832e68ee8b4c6edc76527a0f96732df61d6d744e..60a761c732a8bdbb3ad710516285ac6e9dec1d8b 100644 --- a/executables/softmodem-common.h +++ b/executables/softmodem-common.h @@ -91,7 +91,8 @@ extern "C" #define CONFIG_HLP_RFSIM "Run in rf simulator mode (also known as basic simulator)\n" #define CONFIG_HLP_NOKRNMOD "(noS1 only): Use tun instead of namesh module \n" #define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n" -#define CONFIG_HLP_NFAPI "Change the nFAPI mode for NR\n" +#define CONFIG_HLP_NFAPI "Change the nFAPI mode for NR\n" + /*-----------------------------------------------------------------------------------------------------------------------------------------------------*/ /* command line parameters common to eNodeB and UE */ /* optname helpstr paramflags XXXptr defXXXval type numelt */ @@ -232,7 +233,6 @@ typedef struct { uint32_t send_dmrs_sync; int use_256qam_table; uint8_t nfapi; - } softmodem_params_t; extern uint64_t get_softmodem_optmask(void); @@ -245,7 +245,6 @@ extern void set_softmodem_sighandler(void); extern uint64_t downlink_frequency[MAX_NUM_CCs][4]; extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; extern uint8_t nfapi_mode; - #ifdef __cplusplus } #endif diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 1fb33152ff772e59324c721f4c82374805175ff8..2c7e3e88eb5b06cc8c9a03f7e8713266687b06f0 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -81,6 +81,7 @@ l1_north_init_eNB () { return(0); } + void phy_config_request(PHY_Config_t *phy_config) { uint8_t Mod_id = phy_config->Mod_id; int CC_id = phy_config->CC_id; @@ -572,7 +573,6 @@ void phy_free_lte_eNB(PHY_VARS_eNB *eNB) { for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) eNB->UE_stats_ptr[UE_id] = NULL; } - void install_schedule_handlers(IF_Module_t *if_inst) { if_inst->PHY_config_req = phy_config_request; if_inst->schedule_response = schedule_response; diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index a5790ed23dc8acf2ca51e12918ac2c3bb166bb1c..f5b7a6c7e86022f5a2e8e389e78957a8830de204 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -183,7 +183,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms, } - void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms) { LOG_I(PHY,"frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL); LOG_I(PHY,"frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL); diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c index ac603a15c9b6e1062a11a17a91a959d83ba3cd7f..3f342802b4906d4d66c223ad9990d486266b1473 100644 --- a/openair1/SCHED/fapi_l1.c +++ b/openair1/SCHED/fapi_l1.c @@ -101,6 +101,8 @@ void handle_nfapi_hi_dci0_mpdcch_dci_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, // copy dci configuration in to eNB structure fill_mpdcch_dci0(eNB,proc,&pdcch_vars->mdci_alloc[pdcch_vars->num_dci], &hi_dci0_config_pdu->mpdcch_dci_pdu); } + + void handle_nfapi_hi_dci0_hi_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t *proc, nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu) { LTE_eNB_PHICH *phich = &eNB->phich_vars[subframe&1]; diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c index 759a9faab51da99d012f7b690e0c749b849f718d..33561ac671774cf33ffff55b88df03f88658cba3 100644 --- a/openair1/SCHED_NR/fapi_nr_l1.c +++ b/openair1/SCHED_NR/fapi_nr_l1.c @@ -143,9 +143,6 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){ frame_t frame = Sched_INFO->frame; sub_frame_t slot = Sched_INFO->slot; - //LOG_I(PHY,"NFAPI: Sched_INFO:SFN/SLOT:%04d/%d\n",frame,slot); - - AssertFatal(RC.gNB!=NULL,"RC.gNB is null\n"); AssertFatal(RC.gNB[Mod_id]!=NULL,"RC.gNB[%d] is null\n",Mod_id); @@ -177,6 +174,7 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){ switch (dl_tti_pdu->PDUType) { case NFAPI_NR_DL_TTI_SSB_PDU_TYPE: gNB->pbch_configured=1; + if(NFAPI_MODE != NFAPI_MODE_VNF) handle_nr_nfapi_ssb_pdu(gNB,frame,slot, dl_tti_pdu); @@ -209,10 +207,10 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){ } // if (UL_tti_req!=NULL) memcpy(&gNB->UL_tti_req,UL_tti_req,sizeof(nfapi_nr_ul_tti_request_t)); - if(NFAPI_MODE != NFAPI_MODE_VNF) - for (int i=0;i<number_ul_dci_pdu;i++) { - handle_nfapi_nr_ul_dci_pdu(gNB, frame, slot, &UL_dci_req->ul_dci_pdu_list[i]); - } + if(NFAPI_MODE != NFAPI_MODE_VNF) + for (int i=0;i<number_ul_dci_pdu;i++) { + handle_nfapi_nr_ul_dci_pdu(gNB, frame, slot, &UL_dci_req->ul_dci_pdu_list[i]); + } if(NFAPI_MODE != NFAPI_MODE_VNF) for (int i = 0; i < number_ul_tti_pdu; i++) { @@ -242,7 +240,7 @@ if(NFAPI_MODE != NFAPI_MODE_VNF) // if (NFAPI_MODE != NFAPI_MONOLITHIC && Sched_INFO->UL_dci_req->numPdus!=0) // { // oai_nfapi_ul_dci_req(Sched_INFO->UL_dci_req); -// }//Only DL in nFAPI mode +// } //Uncomment for UL_TTI and UL_DCI messages in in nFAPI mode if (NFAPI_MODE != NFAPI_MONOLITHIC) { diff --git a/openair1/SCHED_NR/phy_frame_config_nr.c b/openair1/SCHED_NR/phy_frame_config_nr.c index ee0e6d7c0b793150f45a29ced445f7629f370285..ac8220521584ca051799df46620f5c4dbf539934 100644 --- a/openair1/SCHED_NR/phy_frame_config_nr.c +++ b/openair1/SCHED_NR/phy_frame_config_nr.c @@ -116,10 +116,8 @@ int set_tdd_config_nr( nfapi_nr_config_request_scf_t *cfg, while(slot_number != nb_slots_to_set) { if(nrofDownlinkSlots != 0) { for (int number_of_symbol = 0; number_of_symbol < nrofDownlinkSlots*NR_NUMBER_OF_SYMBOLS_PER_SLOT; number_of_symbol++) { - cfg->tdd_table.max_tdd_periodicity_list[slot_number].max_num_of_symbol_per_slot_list[number_of_symbol%NR_NUMBER_OF_SYMBOLS_PER_SLOT].slot_config.value= 0; // was 0, made 10 to check - // cfg->tdd_table.max_tdd_periodicity_list[slot_number].max_num_of_symbol_per_slot_list[number_of_symbol%NR_NUMBER_OF_SYMBOLS_PER_SLOT].slot_config.tl.tag= NFAPI_NR_CONFIG_SLOT_CONFIG_TAG; + cfg->tdd_table.max_tdd_periodicity_list[slot_number].max_num_of_symbol_per_slot_list[number_of_symbol%NR_NUMBER_OF_SYMBOLS_PER_SLOT].slot_config.value= 0; - if((number_of_symbol+1)%NR_NUMBER_OF_SYMBOLS_PER_SLOT == 0) slot_number++; } @@ -150,7 +148,6 @@ int set_tdd_config_nr( nfapi_nr_config_request_scf_t *cfg, } } } - //printf("Set tdd config nr tti: 26, symbol count: 0 value: %d \n", cfg->tdd_table.max_tdd_periodicity_list[26].max_num_of_symbol_per_slot_list[0].slot_config.value); /* while(slot_number != nb_slots_to_set) { @@ -313,7 +310,6 @@ int set_tdd_configuration_dedicated_nr(NR_DL_FRAME_PARMS *frame_parms) { int nr_slot_select(nfapi_nr_config_request_scf_t *cfg, int nr_frame, int nr_tti) { /* for FDD all slot can be considered as an uplink */ - int mu = cfg->ssb_config.scs_common.value,check_slot=0; if (cfg->cell_config.frame_duplex_type.value == FDD) { @@ -321,9 +317,7 @@ int nr_slot_select(nfapi_nr_config_request_scf_t *cfg, int nr_frame, int nr_tti) } if (nr_frame%2 == 0) { - - - for(int symbol_count=0; symbol_count<NR_NUMBER_OF_SYMBOLS_PER_SLOT; symbol_count++) { + for(int symbol_count=0; symbol_count<NR_NUMBER_OF_SYMBOLS_PER_SLOT; symbol_count++) { if (cfg->tdd_table.max_tdd_periodicity_list[nr_tti].max_num_of_symbol_per_slot_list[symbol_count].slot_config.value==1) { check_slot++; } @@ -347,7 +341,6 @@ int nr_slot_select(nfapi_nr_config_request_scf_t *cfg, int nr_frame, int nr_tti) return (NR_MIXED_SLOT); } } else { - for(int symbol_count=0; symbol_count<NR_NUMBER_OF_SYMBOLS_PER_SLOT; symbol_count++) { if (cfg->tdd_table.max_tdd_periodicity_list[((1<<mu) * NR_NUMBER_OF_SUBFRAMES_PER_FRAME) + nr_tti].max_num_of_symbol_per_slot_list[symbol_count].slot_config.value==1) { check_slot++; @@ -372,7 +365,6 @@ int nr_slot_select(nfapi_nr_config_request_scf_t *cfg, int nr_frame, int nr_tti) return (NR_MIXED_SLOT); } } - } /******************************************************************* diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 88c87b07f3d5bb096bd196c3364a0ed5af1ea0ee..f775eb9130824c6f2897ac2a7c238b9034e37bb4 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -138,9 +138,6 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) { void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, int frame,int slot, int do_meas) { - // struct timespec time; - // clock_gettime(CLOCK_MONOTONIC, &time); - // LOG_I(PHY,"\nphy_procedures_gNB_TX frame tx %d slot tx %d time %d.%d\n",frame,slot,time.tv_sec,time.tv_nsec); int aa; NR_DL_FRAME_PARMS *fp=&gNB->frame_parms; nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config; diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index bf7ae5a2888391ad0b9e973a90e839d5ab930b55..e70c353589554e45141b51abef271bfa9c1e3ede 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -254,7 +254,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ memset(ul_config, 0, sizeof(fapi_nr_ul_config_request_t)); } - } return 0; } diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c index 8b343875a483d5880b614b6587a757f131411cb8..5bcc7f8226700c824186269cf55caed459bcd0e1 100644 --- a/openair2/LAYER2/NR_MAC_gNB/config.c +++ b/openair2/LAYER2/NR_MAC_gNB/config.c @@ -283,7 +283,6 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm cfg->num_tlv++; cfg->num_tlv++; - // TDD Table Configuration //cfg->tdd_table.tdd_period.value = scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity; cfg->tdd_table.tdd_period.tl.tag = NFAPI_NR_CONFIG_TDD_PERIOD_TAG; @@ -307,8 +306,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm if (return_tdd != 0) LOG_E(MAC,"TDD configuration can not be done\n"); else - LOG_I(MAC,"TDD has been properly configurated\n"); - + LOG_I(MAC,"TDD has been properly configurated\n"); } } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c index 3656c559e4903b76f44d8a8784c27b23a95b980e..4d44ebf48deddea36ae017be5a2d1a5a51b321c6 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c @@ -381,6 +381,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, UE_info->num_pdcch_cand[UE_id][i] = 0; for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { //mbsfn_status[CC_id] = 0; + // clear vrb_maps memset(cc[CC_id].vrb_map, 0, sizeof(uint16_t) * MAX_BWP_SIZE); // clear last scheduled slot's content (only)! @@ -392,6 +393,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, clear_nr_nfapi_information(RC.nrmac[module_idP], CC_id, frame, slot); } + if ((slot == 0) && (frame & 127) == 0) dump_mac_stats(RC.nrmac[module_idP]); @@ -429,6 +431,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, if (get_softmodem_params()->phy_test == 0) { nr_schedule_RA(module_idP, frame, slot); } + // This schedules the DCI for Uplink and subsequently PUSCH { nr_schedule_ulsch(module_idP, frame, slot, num_slots_per_tdd, nr_ulmix_slots, ulsch_in_slot_bitmap); diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c index 7b874004e8a7f5182d79f1873a139082649e2ecf..1ad7bc078c3ec2e892e815f41712d77510e2f1fc 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c @@ -242,8 +242,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) { LOG_D(PHY,"NR_Schedule_response: SFN_SF:%d%d dl_pdus:%d\n", sched_info->frame, sched_info->slot, - sched_info->DL_req->dl_tti_request_body.nPDUs); - + sched_info->DL_req->dl_tti_request_body.nPDUs); } } }