Commit 4183e584 authored by francescomani's avatar francescomani

use BWP specific SS and coreset structures

parent 4af3d76d
This diff is collapsed.
...@@ -409,11 +409,13 @@ typedef struct { ...@@ -409,11 +409,13 @@ typedef struct {
NR_UE_UL_BWP_t current_UL_BWP; NR_UE_UL_BWP_t current_UL_BWP;
NR_UL_TIME_ALIGNMENT_t ul_time_alignment; 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 *otherSI_SS;
NR_SearchSpace_t *ra_SS; NR_SearchSpace_t *ra_SS;
NR_SearchSpace_t *paging_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; bool phy_config_request_sent;
frame_type_t frame_type; frame_type_t frame_type;
...@@ -467,8 +469,6 @@ typedef struct { ...@@ -467,8 +469,6 @@ typedef struct {
uint8_t PHR_reporting_active; uint8_t PHR_reporting_active;
NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config; 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; frequency_range_t frequency_range;
uint16_t nr_band; uint16_t nr_band;
uint8_t ssb_subcarrier_offset; uint8_t ssb_subcarrier_offset;
......
...@@ -250,11 +250,10 @@ int nr_write_ce_ulsch_pdu(uint8_t *mac_ce, ...@@ -250,11 +250,10 @@ int nr_write_ce_ulsch_pdu(uint8_t *mac_ce,
NR_BSR_LONG *long_bsr); NR_BSR_LONG *long_bsr);
void config_dci_pdu(NR_UE_MAC_INST_t *mac, 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, fapi_nr_dl_config_request_t *dl_config,
int rnti_type, int rnti_type,
int slot, 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); 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); ...@@ -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 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, static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
nr_dci_format_t dci_format, nr_dci_format_t dci_format,
uint8_t dci_size, uint8_t dci_size,
......
...@@ -83,12 +83,26 @@ void fill_dci_search_candidates(NR_SearchSpace_t *ss, ...@@ -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, 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, fapi_nr_dl_config_request_t *dl_config,
int rnti_type, int rnti_type,
int slot, int slot,
int ss_id) NR_SearchSpace_t *ss)
{ {
uint16_t monitoringSymbolsWithinSlot = 0; uint16_t monitoringSymbolsWithinSlot = 0;
...@@ -98,33 +112,16 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, ...@@ -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_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_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;
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;
int coreset_id = *ss->controlResourceSetId;
NR_ControlResourceSet_t *coreset;
if(coreset_id > 0) { 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; rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG;
} else { } else {
coreset = mac->coreset0; coreset = mac->coreset0;
if(rnti_type == NR_RNTI_SI) { rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_MIB_SIB1;
rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_MIB_SIB1;
} else {
rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG_CSET_0;
}
} }
rel15->coreset.duration = coreset->duration; rel15->coreset.duration = coreset->duration;
...@@ -293,9 +290,8 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, ...@@ -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) { 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; RA_config_t *ra = &mac->ra;
int ss_id;
uint8_t bwp_id = mac->current_DL_BWP.bwp_id; uint8_t bwp_id = mac->current_DL_BWP.bwp_id;
NR_ServingCellConfig_t *scd = mac->cg->spCellConfig->spCellConfigDedicated; 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: NR_BWP_DownlinkDedicated_t *bwpd = bwp_id > 0 ? scd->downlinkBWP_ToAddModList->list.array[bwp_id - 1]->bwp_Dedicated:
scd->initialDownlinkBWP; scd->initialDownlinkBWP;
...@@ -305,16 +301,14 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl ...@@ -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 // loop over all available SS for bwp_id
if (bwpd) { 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; continue;
} }
LOG_D(NR_MAC, "[DCI_CONFIG] ss_id %d\n",ss_id); LOG_D(NR_MAC, "[DCI_CONFIG] ss_id %d\n",ss_id);
NR_SearchSpace_t *ss = mac->SSpace[bwp_id][ss_id-1]; NR_SearchSpace_t *ss = mac->BWP_searchspaces[ss_id];
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_SetupRelease_PDCCH_ConfigCommon_t *pdcch_ConfigCommon = bwp_Common->pdcch_ConfigCommon; NR_SetupRelease_PDCCH_ConfigCommon_t *pdcch_ConfigCommon = bwp_Common->pdcch_ConfigCommon;
struct NR_PhysicalCellGroupConfig *phy_cgc = mac->cg->physicalCellGroupConfig; struct NR_PhysicalCellGroupConfig *phy_cgc = mac->cg->physicalCellGroupConfig;
switch (ss->searchSpaceType->present){ 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 ...@@ -329,14 +323,14 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
case WAIT_RAR: 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"); 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) { 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 { } 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; break;
case WAIT_CONTENTION_RESOLUTION: 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"); 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; break;
default: default:
break; break;
...@@ -404,7 +398,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl ...@@ -404,7 +398,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
mac->crnti > 0) { mac->crnti > 0) {
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI // 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"); 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 //#ifdef DEBUG_DCI
LOG_D(NR_MAC, "[DCI_CONFIG] ss %d ue_Specific %p searchSpaceType->present %d dci_Formats %d\n", 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) ...@@ -978,9 +978,8 @@ void nr_ue_dl_scheduler(nr_downlink_indication_t *dl_info)
if (mac->ra.ra_state >= WAIT_RAR) { if (mac->ra.ra_state >= WAIT_RAR) {
if(mac->ul_time_alignment.ta_apply) if(mac->ul_time_alignment.ta_apply)
schedule_ta_command(dl_config, &mac->ul_time_alignment); 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, dl_config, mac->ra.ra_state == WAIT_RAR ? NR_RNTI_RA : NR_RNTI_TC , rx_slot, mac->ra_SS);
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 for type0_pdcch, num_pdus %d\n", mac->cg, dl_config->number_pdus);
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);
fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->phy_data); 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) if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
mac->if_module->scheduled_response(&scheduled_response); mac->if_module->scheduled_response(&scheduled_response);
...@@ -2622,18 +2621,18 @@ void nr_ue_sib1_scheduler(module_id_t module_idP, ...@@ -2622,18 +2621,18 @@ void nr_ue_sib1_scheduler(module_id_t module_idP,
frame_s = 0; // same frame as ssb frame_s = 0; // same frame as ssb
slot_s = mac->type0_PDCCH_CSS_config.n_c; 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_coresetZero(mac->coreset0, &mac->type0_PDCCH_CSS_config);
fill_searchSpaceZero(mac->search_space_zero, &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); fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, module_idP, cc_id, frame_s, slot_s, phy_data);
if (dl_config->number_pdus) { 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