From 84ade524e4b4d5e02b11b1b7a2a8bc91e1f3d2f8 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Tue, 23 Jan 2024 18:38:11 +0100 Subject: [PATCH] Simplify interface by removing dcireq_t struct that was only calling one function and remove fill_scheduled_response that also fills only a struct in a complex way --- openair1/SIMULATION/NR_PHY/dlsim.c | 9 +- openair2/LAYER2/NR_MAC_UE/mac_proto.h | 20 ---- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 105 +++++++------------- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 34 ++----- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 23 ----- 5 files changed, 46 insertions(+), 145 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index e802adda22..9f4a2643fc 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -873,7 +873,6 @@ int main(int argc, char **argv) UE_mac->state = UE_CONNECTED; UE_mac->ra.ra_state = RA_SUCCEEDED; - nr_dcireq_t dcireq; nr_phy_data_t phy_data = {0}; fapi_nr_dl_config_request_t dl_config = {.sfn = frame, .slot = slot}; nr_scheduled_response_t scheduled_response = {.dl_config = &dl_config, .phy_data = &phy_data, .mac = UE_mac}; @@ -961,9 +960,6 @@ int main(int argc, char **argv) UE_proc.frame_rx = frame; UE_proc.nr_slot_rx = slot; UE_proc.gNB_id = 0; - - dcireq.frame = frame; - dcireq.slot = slot; NR_UE_DLSCH_t *dlsch0 = &phy_data.dlsch[0]; @@ -1099,8 +1095,9 @@ int main(int argc, char **argv) // Apply MIMO Channel multipath_channel(gNB2UE, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials == 1) ? 1 : 0); add_noise(UE->common_vars.rxdata, (const double **) r_re, (const double **) r_im, sigma2, slot_length, slot_offset, ts, delay, pdu_bit_map, 0x1, frame_parms->nb_antennas_rx); - - nr_ue_dcireq(&dcireq); //to be replaced with function pointer later + dl_config.sfn = frame; + dl_config.slot = slot; + ue_dci_configuration(UE_mac, &dl_config, frame, slot); nr_ue_scheduled_response(&scheduled_response); pbch_pdcch_processing(UE, diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index ca0fac4908..70ba74158e 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -215,26 +215,6 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac); void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info); void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info); -/**\brief fill nr_scheduled_response struct instance - @param nr_scheduled_response_t * pointer to scheduled_response instance to fill - @param fapi_nr_dl_config_request_t* pointer to dl_config, - @param fapi_nr_ul_config_request_t* pointer to ul_config, - @param fapi_nr_tx_request_t* pointer to tx_request; - @param module_id_t mod_id module ID - @param int cc_id CC ID - @param frame_t frame frame number - @param int slot reference number - @param void *phy_pata pointer to a PHY specific structure to be filled in the scheduler response (can be null) */ -void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, - fapi_nr_dl_config_request_t *dl_config, - fapi_nr_ul_config_request_t *ul_config, - fapi_nr_tx_request_t *tx_request, - module_id_t mod_id, - int cc_id, - frame_t frame, - int slot, - void *phy_data); - /*! \fn int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP); \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index bb65c03c56..cd96a389b7 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -93,33 +93,6 @@ void fill_ul_config(fapi_nr_ul_config_request_t *ul_config, frame_t frame_tx, in ul_config->number_pdus); } -void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, - fapi_nr_dl_config_request_t *dl_config, - fapi_nr_ul_config_request_t *ul_config, - fapi_nr_tx_request_t *tx_request, - module_id_t mod_id, - int cc_id, - frame_t frame, - int slot, - void *phy_data) -{ - scheduled_response->dl_config = dl_config; - scheduled_response->ul_config = ul_config; - scheduled_response->tx_request = tx_request; - scheduled_response->module_id = mod_id; - scheduled_response->CC_id = cc_id; - if (dl_config) { - dl_config->sfn = frame; - dl_config->slot = slot; - } - if (ul_config) { - ul_config->frame = frame; - ul_config->slot = slot; - } - scheduled_response->phy_data = phy_data; - -} - /* * This function returns the UL config corresponding to a given UL slot * from MAC instance . @@ -959,9 +932,7 @@ bool nr_ue_periodic_srs_scheduling(module_id_t mod_id, frame_t frame, slot_t slo // 3. TODO: Perform PHR procedures void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info) { - module_id_t mod_id = dl_info->module_id; - uint32_t gNB_index = dl_info->gNB_index; - int cc_id = dl_info->cc_id; + module_id_t mod_id = dl_info->module_id; frame_t rx_frame = dl_info->frame; slot_t rx_slot = dl_info->slot; NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id); @@ -969,37 +940,29 @@ void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info) fapi_nr_dl_config_request_t *dl_config = get_dl_config_request(mac, rx_slot); dl_config->sfn = rx_frame; dl_config->slot = rx_slot; + dl_config->number_pdus = 0; - nr_scheduled_response_t scheduled_response; - nr_dcireq_t dcireq; + if (mac->state == UE_NOT_SYNC) + return; - if(mac->state > UE_NOT_SYNC) { + ue_dci_configuration(mac, dl_config, rx_frame, rx_slot); - dcireq.module_id = mod_id; - dcireq.gNB_index = gNB_index; - dcireq.cc_id = cc_id; - dcireq.frame = rx_frame; - dcireq.slot = rx_slot; - dcireq.dl_config_req.number_pdus = 0; - nr_ue_dcireq(&dcireq); //to be replaced with function pointer later - *dl_config = dcireq.dl_config_req; - - if(mac->ul_time_alignment.ta_apply) - schedule_ta_command(dl_config, &mac->ul_time_alignment); - if(mac->state == UE_CONNECTED) { - nr_schedule_csirs_reception(mac, rx_frame, rx_slot); - nr_schedule_csi_for_im(mac, rx_frame, rx_slot); - } - dcireq.dl_config_req = *dl_config; - - fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data); - if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) { - LOG_D(NR_MAC,"1# scheduled_response transmitted, %d, %d\n", rx_frame, rx_slot); - mac->if_module->scheduled_response(&scheduled_response); - } + if (mac->ul_time_alignment.ta_apply) + schedule_ta_command(dl_config, &mac->ul_time_alignment); + if (mac->state == UE_CONNECTED) { + nr_schedule_csirs_reception(mac, rx_frame, rx_slot); + nr_schedule_csi_for_im(mac, rx_frame, rx_slot); } + + nr_scheduled_response_t scheduled_response = {.dl_config = dl_config, + .module_id = dl_info->module_id, + .CC_id = dl_info->cc_id, + .phy_data = dl_info->phy_data, + .mac = mac}; + if (mac->if_module != NULL && mac->if_module->scheduled_response != NULL) + mac->if_module->scheduled_response(&scheduled_response); else - dl_config->number_pdus = 0; + LOG_E(NR_MAC, "Internal error, no scheduled_response function\n"); } void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info) @@ -1040,7 +1003,6 @@ void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info) ul_config->slot); uint8_t ulsch_input_buffer_array[NFAPI_MAX_NUM_UL_PDU][MAX_ULSCH_PAYLOAD_BYTES]; - nr_scheduled_response_t scheduled_response; fapi_nr_tx_request_t tx_req; tx_req.slot = slot_tx; tx_req.sfn = frame_tx; @@ -1093,7 +1055,12 @@ void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info) } } pthread_mutex_unlock(&ul_config->mutex_ul_config); // avoid double lock - fill_scheduled_response(&scheduled_response, NULL, ul_config, &tx_req, mod_id, cc_id, frame_tx, slot_tx, ul_info->phy_data); + nr_scheduled_response_t scheduled_response = {.ul_config = ul_config, + .mac = mac, + .module_id = ul_info->module_id, + .CC_id = ul_info->cc_id, + .phy_data = ul_info->phy_data, + .tx_request = &tx_req}; if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){ LOG_D(NR_MAC,"3# scheduled_response transmitted,%d, %d\n", frame_tx, slot_tx); mac->if_module->scheduled_response(&scheduled_response); @@ -1569,7 +1536,6 @@ static void build_ro_list(NR_UE_MAC_INST_t *mac) } // Create the PRACH occasions map - // ============================== // WIP: For now assume no rejected PRACH occasions because of conflict with SSB or TDD_UL_DL_ConfigurationCommon schedule int unpaired = mac->phy_config.config_req.cell_config.frame_duplex_type; @@ -1724,7 +1690,6 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { // Map SSBs to PRACH occasions - // =========================== // WIP: Assumption: No PRACH occasion is rejected because of a conflict with SSBs or TDD_UL_DL_ConfigurationCommon schedule NR_RACH_ConfigCommon_t *setup = mac->current_UL_BWP->rach_ConfigCommon; NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR ssb_perRACH_config = setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present; @@ -1735,7 +1700,6 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) uint8_t required_nb_of_prach_conf_period; // Nb of PRACH configuration periods required to map all the SSBs // Determine the SSB to RACH mapping ratio - // ======================================= switch (ssb_perRACH_config){ case NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth: multiple_ssb_per_ro = false; @@ -1779,8 +1743,8 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) ssb_list_info_t *ssb_list = &mac->ssb_list[bwp_id]; // Evaluate the number of PRACH configuration periods required to map all the SSBs and set the association period - // ============================================================================================================== - // WIP: Assumption for now is that all the PRACH configuration periods within a maximum association pattern period have the same number of PRACH occasions + // WIP: Assumption for now is that all the PRACH configuration periods within a maximum association pattern period have the same + // number of PRACH occasions // (No PRACH occasions are conflicting with SSBs nor TDD_UL_DL_ConfigurationCommon schedule) // There is only one possible association period which can contain up to 16 PRACH configuration periods LOG_D(NR_MAC,"Evaluate the number of PRACH configuration periods required to map all the SSBs and set the association period\n"); @@ -1827,7 +1791,6 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) prach_association_period_list->nb_of_frame); // Proceed to the SSB to RO mapping - // ================================ uint8_t ssb_idx = 0; uint8_t prach_configuration_period_idx; // PRACH Configuration period index within the association pattern prach_conf_period_t *prach_conf_period_p; @@ -2176,8 +2139,11 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, vo mac->crnti, // FIXME not sure this is valid for all pucch instances &pucch[j], pucch_pdu); - nr_scheduled_response_t scheduled_response; - fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, phy_data); + nr_scheduled_response_t scheduled_response = {.ul_config = ul_config, + .mac = mac, + .module_id = module_idP, + .CC_id = 0 /*TBR fix*/, + .phy_data = phy_data}; if (mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } @@ -2490,7 +2456,6 @@ static void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_fr fapi_nr_ul_config_prach_pdu *prach_config_pdu; fapi_nr_config_request_t *cfg = &mac->phy_config.config_req; fapi_nr_prach_config_t *prach_config = &cfg->prach_config; - nr_scheduled_response_t scheduled_response; NR_RACH_ConfigCommon_t *setup = mac->current_UL_BWP->rach_ConfigCommon; NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &setup->rach_ConfigGeneric; @@ -2616,8 +2581,10 @@ static void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_fr prach_config_pdu->ra_PreambleIndex = ra->ra_PreambleIndex; prach_config_pdu->prach_tx_power = get_prach_tx_power(module_idP); set_ra_rnti(mac, prach_config_pdu); - - fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, NULL); + nr_scheduled_response_t scheduled_response = {.ul_config = ul_config, + .mac = mac, + .module_id = module_idP, + .CC_id = 0 /*TBR fix*/}; if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index ae3914ba3c..4ed70d202d 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1171,8 +1171,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info) if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) { LOG_T(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { - LOG_T(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); - nr_scheduled_response_t scheduled_response; + LOG_T(MAC, ">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n", i, dl_info->dci_ind->number_of_dcis); int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, dl_info->gNB_index, @@ -1193,10 +1192,13 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info) LOG_T(NR_MAC, "Setting harq_pid = %d and dci_index = %d (based on format)\n", g_harq_pid, dci_index->dci_format); ret_mask |= (ret << FAPI_NR_DCI_IND); - AssertFatal( nr_ue_if_module_inst[module_id] != NULL, "IF module is NULL!\n" ); - AssertFatal( nr_ue_if_module_inst[module_id]->scheduled_response != NULL, "scheduled_response is NULL!\n" ); + AssertFatal(nr_ue_if_module_inst[module_id] != NULL, "IF module is NULL!\n"); fapi_nr_dl_config_request_t *dl_config = get_dl_config_request(mac, dl_info->slot); - fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->phy_data); + nr_scheduled_response_t scheduled_response = {.dl_config = dl_config, + .mac = mac, + .module_id = dl_info->module_id, + .CC_id = dl_info->cc_id, + .phy_data = dl_info->phy_data}; nr_ue_if_module_inst[module_id]->scheduled_response(&scheduled_response); memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); } @@ -1289,28 +1291,6 @@ nr_ue_if_module_t *nr_ue_if_module_init(uint32_t module_id) return nr_ue_if_module_inst[module_id]; } -int nr_ue_if_module_kill(uint32_t module_id) { - - if (nr_ue_if_module_inst[module_id] != NULL){ - free(nr_ue_if_module_inst[module_id]); - } - return 0; -} - -int nr_ue_dcireq(nr_dcireq_t *dcireq) { - - fapi_nr_dl_config_request_t *dl_config = &dcireq->dl_config_req; - NR_UE_MAC_INST_t *UE_mac = get_mac_inst(0); - dl_config->sfn = dcireq->frame; - dl_config->slot = dcireq->slot; - - LOG_T(PHY, "Entering UE DCI configuration frame %d slot %d \n", dcireq->frame, dcireq->slot); - - ue_dci_configuration(UE_mac, dl_config, dcireq->frame, dcireq->slot); - - return 0; -} - void RCconfig_nr_ue_macrlc(void) { int j; paramdef_t MACRLC_Params[] = MACRLCPARAMS_DESC; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index b07b527fa1..093a1b4c59 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -58,22 +58,6 @@ typedef struct { /// slot int slot; - fapi_nr_dl_config_request_t dl_config_req; - fapi_nr_ul_config_request_t ul_config_req; -} nr_dcireq_t; - -typedef struct { - /// module id - module_id_t module_id; - /// gNB index - uint32_t gNB_index; - /// component carrier id - int cc_id; - /// frame - frame_t frame; - /// slot - int slot; - /// NR UE FAPI-like P7 message, direction: L1 to L2 /// data reception indication structure fapi_nr_rx_indication_t *rx_ind; @@ -315,18 +299,11 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, bool sfn_slot_matcher(void *wanted, void *candidate); -/**\brief done free of memory allocation by module_id and release to pointer pool. - \param module_id module id*/ -int nr_ue_if_module_kill(uint32_t module_id); - - /**\brief interface between L1/L2, indicating the downlink related information, like dci_ind and rx_req \param dl_info including dci_ind and rx_request messages*/ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info); int nr_ue_ul_indication(nr_uplink_indication_t *ul_info); -int nr_ue_dcireq(nr_dcireq_t *dcireq); - #endif