Commit 4183e584 authored by francescomani's avatar francescomani

use BWP specific SS and coreset structures

parent 4af3d76d
......@@ -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; i<controlResourceSetToAddModList->list.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);
}
......@@ -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;
......
......@@ -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,
......
......@@ -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;
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;
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(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",
......
......@@ -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) {
......
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