diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index 94259fed2e..b66600aa22 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -434,18 +434,6 @@ void config_common_ue(NR_UE_MAC_INST_t *mac, cfg->prach_config.ssb_per_rach = rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present-1; } -/** \brief This function is relavant for the UE procedures for control. It loads the search spaces, the BWPs and the CORESETs into the MAC instance and - \brief performs assert checks on the relevant RRC configuration. - @param NR_UE_MAC_INST_t mac: pointer to local MAC instance - @returns void - */ -void config_control_ue(NR_UE_MAC_INST_t *mac) -{ - NR_ServingCellConfig_t *scd = mac->cg->spCellConfig->spCellConfigDedicated; - NR_BWP_Id_t dl_bwp_id = mac->current_DL_BWP.bwp_id; - - configure_ss_coreset(mac, scd, dl_bwp_id); -} NR_SearchSpace_t *get_common_search_space(struct NR_PDCCH_ConfigCommon__commonSearchSpaceList *commonSearchSpaceList, NR_UE_MAC_INST_t *mac, @@ -465,9 +453,12 @@ NR_SearchSpace_t *get_common_search_space(struct NR_PDCCH_ConfigCommon__commonSe return css; } -void configure_common_ss(NR_UE_MAC_INST_t *mac, - NR_PDCCH_ConfigCommon_t *pdcch_ConfigCommon) +void configure_ss_coreset(NR_UE_MAC_INST_t *mac, + NR_PDCCH_ConfigCommon_t *pdcch_ConfigCommon, + NR_PDCCH_Config_t *pdcch_Config) { + + // configuration of search spaces if (pdcch_ConfigCommon) { mac->otherSI_SS = pdcch_ConfigCommon->searchSpaceOtherSystemInformation ? get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList, mac, @@ -482,75 +473,47 @@ void configure_common_ss(NR_UE_MAC_INST_t *mac, *pdcch_ConfigCommon->pagingSearchSpace) : NULL; } -} - - -void configure_ss_coreset(NR_UE_MAC_INST_t *mac, - NR_ServingCellConfig_t *scd, - NR_BWP_Id_t dl_bwp_id) -{ - NR_BWP_DownlinkCommon_t *bwp_Common = get_bwp_downlink_common(mac, dl_bwp_id); - AssertFatal(bwp_Common != NULL, "bwp_Common is null\n"); - - NR_SetupRelease_PDCCH_ConfigCommon_t *pdcch_ConfigCommon = bwp_Common->pdcch_ConfigCommon; - AssertFatal(pdcch_ConfigCommon != NULL, "pdcch_ConfigCommon is null\n"); - - // configuring eventual common coreset - NR_ControlResourceSet_t *coreset = pdcch_ConfigCommon->choice.setup->commonControlResourceSet; - if (coreset) - mac->coreset[dl_bwp_id][coreset->controlResourceSetId - 1] = coreset; - - NR_BWP_DownlinkDedicated_t *dl_bwp_Dedicated = dl_bwp_id>0 ? scd->downlinkBWP_ToAddModList->list.array[dl_bwp_id - 1]->bwp_Dedicated: - scd->initialDownlinkBWP; - - AssertFatal(dl_bwp_Dedicated != NULL, "dl_bwp_Dedicated is null\n"); - - NR_SetupRelease_PDCCH_Config_t *pdcch_Config = dl_bwp_Dedicated->pdcch_Config; - AssertFatal(pdcch_Config != NULL, "pdcch_Config is null\n"); - - struct NR_PDCCH_Config__controlResourceSetToAddModList *controlResourceSetToAddModList = pdcch_Config->choice.setup->controlResourceSetToAddModList; - AssertFatal(controlResourceSetToAddModList != NULL, "controlResourceSetToAddModList is null\n"); - - // configuring dedicated coreset - // In case network reconfigures control resource set with the same ControlResourceSetId as used for commonControlResourceSet configured via PDCCH-ConfigCommon, - // the configuration from PDCCH-Config always takes precedence - for (int i=0; ilist.count; i++) { - coreset = controlResourceSetToAddModList->list.array[i]; - mac->coreset[dl_bwp_id][coreset->controlResourceSetId - 1] = coreset; + if(pdcch_Config && + pdcch_Config->searchSpacesToAddModList) { + int ss_configured = 0; + struct NR_PDCCH_Config__searchSpacesToAddModList *searchSpacesToAddModList = pdcch_Config->searchSpacesToAddModList; + for (int i = 0; i < searchSpacesToAddModList->list.count; i++) { + AssertFatal(ss_configured < FAPI_NR_MAX_SS, "Attempting to configure %d SS but only %d per BWP are allowed", + ss_configured + 1, FAPI_NR_MAX_SS); + mac->BWP_searchspaces[ss_configured] = searchSpacesToAddModList->list.array[i]; + ss_configured++; + } + for (int i = ss_configured; i < FAPI_NR_MAX_SS; i++) + mac->BWP_searchspaces[i] = NULL; } - struct NR_PDCCH_Config__searchSpacesToAddModList *searchSpacesToAddModList = pdcch_Config->choice.setup->searchSpacesToAddModList; - AssertFatal(searchSpacesToAddModList != NULL, "searchSpacesToAddModList is null\n"); - AssertFatal(searchSpacesToAddModList->list.count > 0, "list of UE specifically configured Search Spaces is empty\n"); - AssertFatal(searchSpacesToAddModList->list.count < FAPI_NR_MAX_SS_PER_BWP, "too many searchpaces per coreset %d\n", searchSpacesToAddModList->list.count); - - // check available Search Spaces in the searchSpacesToAddModList and pass to MAC - // note: the network configures at most 10 Search Spaces per BWP per cell (including UE-specific and common Search Spaces). - for (int ss_id = 0; ss_id < searchSpacesToAddModList->list.count; ss_id++) { - NR_SearchSpace_t *ss = searchSpacesToAddModList->list.array[ss_id]; - AssertFatal(ss->controlResourceSetId != NULL, "ss->controlResourceSetId is null\n"); - AssertFatal(ss->searchSpaceType != NULL, "ss->searchSpaceType is null\n"); - AssertFatal(ss->monitoringSymbolsWithinSlot != NULL, "NR_SearchSpace->monitoringSymbolsWithinSlot is null\n"); - AssertFatal(ss->monitoringSymbolsWithinSlot->buf != NULL, "NR_SearchSpace->monitoringSymbolsWithinSlot->buf is null\n"); - AssertFatal(ss->searchSpaceId <= FAPI_NR_MAX_SS, "Invalid searchSpaceId\n"); - mac->SSpace[dl_bwp_id][ss->searchSpaceId - 1] = ss; + // configuration of coresets + int cset_configured = 0; + int common_cset_id = -1; + if (pdcch_ConfigCommon && + pdcch_ConfigCommon->commonControlResourceSet) { + mac->BWP_coresets[cset_configured] = pdcch_ConfigCommon->commonControlResourceSet; + common_cset_id = pdcch_ConfigCommon->commonControlResourceSet->controlResourceSetId; + cset_configured++; } - - struct NR_PDCCH_ConfigCommon__commonSearchSpaceList *commonSearchSpaceList = pdcch_ConfigCommon->choice.setup->commonSearchSpaceList; - AssertFatal(commonSearchSpaceList != NULL, "commonSearchSpaceList is null\n"); - AssertFatal(commonSearchSpaceList->list.count > 0, "PDCCH CSS list has 0 elements\n"); - - // Check available CSSs in the commonSearchSpaceList (list of additional common search spaces) - // note: commonSearchSpaceList SIZE(1..4) - for (int css_id = 0; css_id < commonSearchSpaceList->list.count; css_id++) { - NR_SearchSpace_t *css = commonSearchSpaceList->list.array[css_id]; - AssertFatal(css->controlResourceSetId != NULL, "ss->controlResourceSetId is null\n"); - AssertFatal(css->searchSpaceType != NULL, "css->searchSpaceType is null\n"); - AssertFatal(css->monitoringSymbolsWithinSlot != NULL, "css->monitoringSymbolsWithinSlot is null\n"); - AssertFatal(css->monitoringSymbolsWithinSlot->buf != NULL, "css->monitoringSymbolsWithinSlot->buf is null\n"); - AssertFatal(css->searchSpaceId <= FAPI_NR_MAX_SS, "Invalid searchSpaceId\n"); - mac->SSpace[dl_bwp_id][css->searchSpaceId - 1] = css; + if(pdcch_Config && + pdcch_Config->controlResourceSetToAddModList) { + struct NR_PDCCH_Config__controlResourceSetToAddModList *controlResourceSetToAddModList = pdcch_Config->controlResourceSetToAddModList; + for (int i = 0; i < controlResourceSetToAddModList->list.count; i++) { + AssertFatal(cset_configured < FAPI_NR_MAX_CORESET_PER_BWP, "Attempting to configure %d CORESET but only %d per BWP are allowed", + cset_configured + 1, FAPI_NR_MAX_CORESET_PER_BWP); + // In case network reconfigures control resource set with the same ControlResourceSetId as used for commonControlResourceSet + // configured via PDCCH-ConfigCommon, the configuration from PDCCH-Config always takes precedence + if (controlResourceSetToAddModList->list.array[i]->controlResourceSetId == common_cset_id) + mac->BWP_coresets[0] = controlResourceSetToAddModList->list.array[i]; + else { + mac->BWP_coresets[cset_configured] = controlResourceSetToAddModList->list.array[i]; + cset_configured++; + } + } } + for (int i = cset_configured; i < FAPI_NR_MAX_CORESET_PER_BWP; i++) + mac->BWP_coresets[i] = NULL; } // todo handle mac_LogicalChannelConfig @@ -602,7 +565,7 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac, if (bwp_ulcommon->rach_ConfigCommon) UL_BWP->rach_ConfigCommon = bwp_ulcommon->rach_ConfigCommon->choice.setup; if (bwp_dlcommon->pdcch_ConfigCommon) - configure_common_ss(mac, bwp_dlcommon->pdcch_ConfigCommon->choice.setup); + configure_ss_coreset(mac, bwp_dlcommon->pdcch_ConfigCommon->choice.setup, NULL); } if(cell_group_config) { @@ -648,15 +611,19 @@ void configure_current_BWP(NR_UE_MAC_INST_t *mac, dl_genericParameters = bwp_downlink->bwp_Common->genericParameters; DL_BWP->pdsch_Config = bwp_downlink->bwp_Dedicated->pdsch_Config->choice.setup; DL_BWP->tdaList_Common = bwp_downlink->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList; - if (bwp_downlink->bwp_Common->pdcch_ConfigCommon) - configure_common_ss(mac, bwp_downlink->bwp_Common->pdcch_ConfigCommon->choice.setup); + configure_ss_coreset(mac, + bwp_downlink->bwp_Common->pdcch_ConfigCommon ? bwp_downlink->bwp_Common->pdcch_ConfigCommon->choice.setup : NULL, + bwp_downlink->bwp_Dedicated->pdcch_Config ? bwp_downlink->bwp_Dedicated->pdcch_Config->choice.setup : NULL); + } else { dl_genericParameters = bwp_dlcommon->genericParameters; DL_BWP->pdsch_Config = spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup; DL_BWP->tdaList_Common = bwp_dlcommon->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList; - if (bwp_dlcommon->pdcch_ConfigCommon) - configure_common_ss(mac, bwp_dlcommon->pdcch_ConfigCommon->choice.setup); + configure_ss_coreset(mac, + bwp_dlcommon->pdcch_ConfigCommon ? bwp_dlcommon->pdcch_ConfigCommon->choice.setup : NULL, + spCellConfigDedicated->initialDownlinkBWP->pdcch_Config ? spCellConfigDedicated->initialDownlinkBWP->pdcch_Config->choice.setup : NULL); + } UL_BWP->msg3_DeltaPreamble = bwp_ulcommon->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble; @@ -783,7 +750,6 @@ void nr_rrc_mac_config_req_mcg(module_id_t module_id, mac->scheduling_info.retxBSR_SF); configure_current_BWP(mac, NULL, cell_group_config); - config_control_ue(mac); RA_config_t *ra = &mac->ra; if (cell_group_config->spCellConfig && cell_group_config->spCellConfig->reconfigurationWithSync) { @@ -845,7 +811,6 @@ void nr_rrc_mac_config_req_scg(module_id_t module_id, LOG_I(MAC,"Configuring CRNTI %x\n",mac->crnti); } configure_current_BWP(mac, NULL, scell_group_config); - config_control_ue(mac); // Setup the SSB to Rach Occasions mapping according to the config build_ssb_to_ro_map(mac); } diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index b9c0f9eab0..77a0fc8e58 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -409,11 +409,13 @@ typedef struct { NR_UE_UL_BWP_t current_UL_BWP; NR_UL_TIME_ALIGNMENT_t ul_time_alignment; - NR_ControlResourceSet_t *coreset[MAX_NUM_BWP_UE][FAPI_NR_MAX_CORESET_PER_BWP]; - NR_SearchSpace_t *SSpace[MAX_NUM_BWP_UE][FAPI_NR_MAX_SS]; NR_SearchSpace_t *otherSI_SS; NR_SearchSpace_t *ra_SS; NR_SearchSpace_t *paging_SS; + NR_ControlResourceSet_t *BWP_coresets[FAPI_NR_MAX_CORESET_PER_BWP]; + NR_ControlResourceSet_t *coreset0; + NR_SearchSpace_t *BWP_searchspaces[FAPI_NR_MAX_SS]; + NR_SearchSpace_t *search_space_zero; bool phy_config_request_sent; frame_type_t frame_type; @@ -467,8 +469,6 @@ typedef struct { uint8_t PHR_reporting_active; NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config; - NR_SearchSpace_t *search_space_zero; - NR_ControlResourceSet_t *coreset0; frequency_range_t frequency_range; uint16_t nr_band; uint8_t ssb_subcarrier_offset; diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 0f1d62ba34..bd1ef3574e 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -250,11 +250,10 @@ int nr_write_ce_ulsch_pdu(uint8_t *mac_ce, NR_BSR_LONG *long_bsr); void config_dci_pdu(NR_UE_MAC_INST_t *mac, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, fapi_nr_dl_config_request_t *dl_config, int rnti_type, int slot, - int ss_id); + NR_SearchSpace_t *ss); void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl_config, frame_t frame, int slot); @@ -429,10 +428,6 @@ void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac); void ue_init_config_request(NR_UE_MAC_INST_t *mac, int scs); -void configure_ss_coreset(NR_UE_MAC_INST_t *mac, - NR_ServingCellConfig_t *scd, - NR_BWP_Id_t dl_bwp_id); - static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac, nr_dci_format_t dci_format, uint8_t dci_size, diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c index bc8b03d5e0..3a1d3eedae 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c @@ -83,12 +83,26 @@ void fill_dci_search_candidates(NR_SearchSpace_t *ss, } } +NR_ControlResourceSet_t *ue_get_coreset(NR_UE_MAC_INST_t *mac, int coreset_id) +{ + NR_ControlResourceSet_t *coreset = NULL; + for (int i = 0; i < FAPI_NR_MAX_CORESET_PER_BWP; i++) { + if (mac->BWP_coresets[i] != NULL && + mac->BWP_coresets[i]->controlResourceSetId == coreset_id) { + coreset = mac->BWP_coresets[i]; + break; + } + } + AssertFatal(coreset, "Couldn't find coreset with id %d\n", coreset_id); + return coreset; +} + + void config_dci_pdu(NR_UE_MAC_INST_t *mac, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, fapi_nr_dl_config_request_t *dl_config, int rnti_type, int slot, - int ss_id) + NR_SearchSpace_t *ss) { uint16_t monitoringSymbolsWithinSlot = 0; @@ -98,33 +112,16 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, NR_UE_UL_BWP_t *current_UL_BWP = &mac->current_UL_BWP; NR_BWP_Id_t dl_bwp_id = current_DL_BWP ? current_DL_BWP->bwp_id : 0; - NR_SearchSpace_t *ss; + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15; + + int coreset_id = *ss->controlResourceSetId; NR_ControlResourceSet_t *coreset; - if(ss_id>=0) { - if (rnti_type == NR_RNTI_TC || rnti_type == NR_RNTI_RA) { - ss = mac->ra_SS; - AssertFatal(mac->ra_SS->searchSpaceId == ss_id, - "Search Space id %d does not correspond to the one in ra_ss %ld for RA procedures\n", - ss_id, mac->ra_SS->searchSpaceId); - } - else - ss = mac->SSpace[dl_bwp_id][ss_id-1]; - } - else - ss = mac->search_space_zero; - - uint8_t coreset_id = *ss->controlResourceSetId; - if(coreset_id > 0) { - coreset = mac->coreset[dl_bwp_id][coreset_id - 1]; + coreset = ue_get_coreset(mac, coreset_id); rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG; } else { coreset = mac->coreset0; - if(rnti_type == NR_RNTI_SI) { - rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_MIB_SIB1; - } else { - rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG_CSET_0; - } + rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_MIB_SIB1; } rel15->coreset.duration = coreset->duration; @@ -293,9 +290,8 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl_config, frame_t frame, int slot) { RA_config_t *ra = &mac->ra; - int ss_id; - uint8_t bwp_id = mac->current_DL_BWP.bwp_id; + NR_ServingCellConfig_t *scd = mac->cg->spCellConfig->spCellConfigDedicated; NR_BWP_DownlinkDedicated_t *bwpd = bwp_id > 0 ? scd->downlinkBWP_ToAddModList->list.array[bwp_id - 1]->bwp_Dedicated: scd->initialDownlinkBWP; @@ -305,16 +301,14 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl // loop over all available SS for bwp_id if (bwpd) { - for (ss_id = 1; ss_id <= FAPI_NR_MAX_SS; ss_id++){ + for (int ss_id = 0; ss_id < FAPI_NR_MAX_SS; ss_id++){ - if(mac->SSpace[bwp_id][ss_id-1]==NULL) { + if(mac->BWP_searchspaces[ss_id]==NULL) { continue; } LOG_D(NR_MAC, "[DCI_CONFIG] ss_id %d\n",ss_id); - NR_SearchSpace_t *ss = mac->SSpace[bwp_id][ss_id-1]; - AssertFatal(ss_id == ss->searchSpaceId,"SS IDs don't correspond\n"); - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15; + NR_SearchSpace_t *ss = mac->BWP_searchspaces[ss_id]; NR_SetupRelease_PDCCH_ConfigCommon_t *pdcch_ConfigCommon = bwp_Common->pdcch_ConfigCommon; struct NR_PhysicalCellGroupConfig *phy_cgc = mac->cg->physicalCellGroupConfig; switch (ss->searchSpaceType->present){ @@ -329,14 +323,14 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl case WAIT_RAR: LOG_D(NR_MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in Type1-PDCCH common random access search space (RA-Msg2)\n"); if (get_softmodem_params()->sa) { - config_dci_pdu(mac, rel15, dl_config, NR_RNTI_RA, slot, -1); + config_dci_pdu(mac, dl_config, NR_RNTI_RA, slot, mac->ra_SS); } else { - config_dci_pdu(mac, rel15, dl_config, NR_RNTI_RA, slot, ss_id); + config_dci_pdu(mac, dl_config, NR_RNTI_RA, slot, ss); } break; case WAIT_CONTENTION_RESOLUTION: LOG_D(NR_MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in Type1-PDCCH common random access search space (RA-Msg4)\n"); - config_dci_pdu(mac, rel15, dl_config, NR_RNTI_TC, slot, -1); + config_dci_pdu(mac, dl_config, NR_RNTI_TC, slot, mac->ra_SS); break; default: break; @@ -404,7 +398,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl mac->crnti > 0) { // Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI LOG_D(NR_MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space\n"); - config_dci_pdu(mac, rel15, dl_config, NR_RNTI_C, slot, ss_id); + config_dci_pdu(mac, dl_config, NR_RNTI_C, slot, ss); //#ifdef DEBUG_DCI LOG_D(NR_MAC, "[DCI_CONFIG] ss %d ue_Specific %p searchSpaceType->present %d dci_Formats %d\n", diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 7b39a32408..7404b18e91 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -978,9 +978,8 @@ void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info) if (mac->ra.ra_state >= WAIT_RAR) { if(mac->ul_time_alignment.ta_apply) schedule_ta_command(dl_config, &mac->ul_time_alignment); - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15; - config_dci_pdu(mac, rel15, dl_config, mac->ra.ra_state == WAIT_RAR ? NR_RNTI_RA : NR_RNTI_TC , rx_slot, mac->ra_SS->searchSpaceId); - LOG_D(MAC,"mac->cg %p: Calling fill_scheduled_response rnti %x, type0_pdcch, num_pdus %d\n",mac->cg,rel15->rnti,dl_config->number_pdus); + config_dci_pdu(mac, dl_config, mac->ra.ra_state == WAIT_RAR ? NR_RNTI_RA : NR_RNTI_TC , rx_slot, mac->ra_SS); + LOG_D(MAC,"mac->cg %p: Calling fill_scheduled_response for type0_pdcch, num_pdus %d\n", mac->cg, dl_config->number_pdus); fill_scheduled_response(&scheduled_response, dl_config, 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) mac->if_module->scheduled_response(&scheduled_response); @@ -2622,18 +2621,18 @@ void nr_ue_sib1_scheduler(module_id_t module_idP, frame_s = 0; // same frame as ssb slot_s = mac->type0_PDCCH_CSS_config.n_c; } - fapi_nr_dl_config_request_t *dl_config = &mac->dl_config_request[0]; // Take the first dl_config_request for SIB1 - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15; - - if(mac->search_space_zero == NULL) mac->search_space_zero=calloc(1,sizeof(*mac->search_space_zero)); - if(mac->coreset0 == NULL) mac->coreset0 = calloc(1,sizeof(*mac->coreset0)); + if(mac->search_space_zero == NULL) + mac->search_space_zero=calloc(1,sizeof(*mac->search_space_zero)); + if(mac->coreset0 == NULL) + mac->coreset0 = calloc(1,sizeof(*mac->coreset0)); fill_coresetZero(mac->coreset0, &mac->type0_PDCCH_CSS_config); fill_searchSpaceZero(mac->search_space_zero, &mac->type0_PDCCH_CSS_config); - rel15 = &dl_config->dl_config_list[dl_config->number_pdus].dci_config_pdu.dci_config_rel15; - config_dci_pdu(mac, rel15, dl_config, NR_RNTI_SI, slot_s, -1); - LOG_D(MAC,"Calling fill_scheduled_response, type0_pdcch, num_pdus %d\n",dl_config->number_pdus); + fapi_nr_dl_config_request_t *dl_config = &mac->dl_config_request[0]; // Take the first dl_config_request for SIB1 + config_dci_pdu(mac, dl_config, NR_RNTI_SI, slot_s, mac->search_space_zero); + + LOG_D(MAC,"Calling fill_scheduled_response, type0_pdcch, num_pdus %d\n", dl_config->number_pdus); fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, module_idP, cc_id, frame_s, slot_s, phy_data); if (dl_config->number_pdus) {