set cset0 and ss0 independently from BWP in generic MAC structure at UE
This commit is contained in:
@@ -420,9 +420,7 @@ void release_common_ss_cset(NR_BWP_PDCCH_t *pdcch)
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->ra_SS);
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->search_space_zero);
|
||||
asn1cFreeStruc(asn_DEF_NR_ControlResourceSet, pdcch->commonControlResourceSet);
|
||||
asn1cFreeStruc(asn_DEF_NR_ControlResourceSet, pdcch->coreset0);
|
||||
}
|
||||
|
||||
static void modlist_ss(NR_SearchSpace_t *source, NR_SearchSpace_t *target)
|
||||
@@ -443,12 +441,13 @@ static void modlist_ss(NR_SearchSpace_t *source, NR_SearchSpace_t *target)
|
||||
UPDATE_MAC_IE(target->searchSpaceType, source->searchSpaceType, struct NR_SearchSpace__searchSpaceType);
|
||||
}
|
||||
|
||||
static NR_SearchSpace_t *get_common_search_space(const struct NR_PDCCH_ConfigCommon__commonSearchSpaceList *commonSearchSpaceList,
|
||||
static NR_SearchSpace_t *get_common_search_space(const NR_UE_MAC_INST_t *mac,
|
||||
const struct NR_PDCCH_ConfigCommon__commonSearchSpaceList *commonSearchSpaceList,
|
||||
const NR_BWP_PDCCH_t *pdcch,
|
||||
const NR_SearchSpaceId_t ss_id)
|
||||
{
|
||||
if (ss_id == 0)
|
||||
return pdcch->search_space_zero;
|
||||
return mac->search_space_zero;
|
||||
|
||||
NR_SearchSpace_t *css = NULL;
|
||||
for (int i = 0; i < commonSearchSpaceList->list.count; i++) {
|
||||
@@ -462,12 +461,15 @@ static NR_SearchSpace_t *get_common_search_space(const struct NR_PDCCH_ConfigCom
|
||||
return css;
|
||||
}
|
||||
|
||||
static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCommon_t *pdcch_ConfigCommon)
|
||||
static void configure_common_ss_coreset(const NR_UE_MAC_INST_t *mac,
|
||||
NR_BWP_PDCCH_t *pdcch,
|
||||
NR_PDCCH_ConfigCommon_t *pdcch_ConfigCommon)
|
||||
{
|
||||
if (pdcch_ConfigCommon) {
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
|
||||
if (pdcch_ConfigCommon->searchSpaceOtherSystemInformation)
|
||||
pdcch->otherSI_SS = get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList,
|
||||
pdcch->otherSI_SS = get_common_search_space(mac,
|
||||
pdcch_ConfigCommon->commonSearchSpaceList,
|
||||
pdcch,
|
||||
*pdcch_ConfigCommon->searchSpaceOtherSystemInformation);
|
||||
|
||||
@@ -477,7 +479,7 @@ static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCo
|
||||
pdcch->ra_SS = pdcch->otherSI_SS;
|
||||
else
|
||||
pdcch->ra_SS =
|
||||
get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList, pdcch, *pdcch_ConfigCommon->ra_SearchSpace);
|
||||
get_common_search_space(mac, pdcch_ConfigCommon->commonSearchSpaceList, pdcch, *pdcch_ConfigCommon->ra_SearchSpace);
|
||||
}
|
||||
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
|
||||
@@ -488,7 +490,7 @@ static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCo
|
||||
pdcch->paging_SS = pdcch->ra_SS;
|
||||
if (!pdcch->paging_SS)
|
||||
pdcch->paging_SS =
|
||||
get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList, pdcch, *pdcch_ConfigCommon->pagingSearchSpace);
|
||||
get_common_search_space(mac, pdcch_ConfigCommon->commonSearchSpaceList, pdcch, *pdcch_ConfigCommon->pagingSearchSpace);
|
||||
}
|
||||
|
||||
UPDATE_MAC_IE(pdcch->commonControlResourceSet, pdcch_ConfigCommon->commonControlResourceSet, NR_ControlResourceSet_t);
|
||||
@@ -1304,7 +1306,7 @@ static void configure_common_BWP_dl(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Do
|
||||
NR_BWP_PDCCH_t *pdcch = &mac->config_BWP_PDCCH[bwp_id];
|
||||
if (dl_common->pdcch_ConfigCommon) {
|
||||
if (dl_common->pdcch_ConfigCommon->present == NR_SetupRelease_PDCCH_ConfigCommon_PR_setup)
|
||||
configure_common_ss_coreset(pdcch, dl_common->pdcch_ConfigCommon->choice.setup);
|
||||
configure_common_ss_coreset(mac, pdcch, dl_common->pdcch_ConfigCommon->choice.setup);
|
||||
if (dl_common->pdcch_ConfigCommon->present == NR_SetupRelease_PDCCH_ConfigCommon_PR_release)
|
||||
release_common_ss_cset(pdcch);
|
||||
}
|
||||
|
||||
@@ -446,9 +446,7 @@ typedef struct {
|
||||
NR_SearchSpace_t *otherSI_SS;
|
||||
NR_SearchSpace_t *ra_SS;
|
||||
NR_SearchSpace_t *paging_SS;
|
||||
NR_ControlResourceSet_t *coreset0;
|
||||
NR_ControlResourceSet_t *commonControlResourceSet;
|
||||
NR_SearchSpace_t *search_space_zero;
|
||||
A_SEQUENCE_OF(NR_ControlResourceSet_t) list_Coreset;
|
||||
A_SEQUENCE_OF(NR_SearchSpace_t) list_SS;
|
||||
} NR_BWP_PDCCH_t;
|
||||
@@ -472,6 +470,8 @@ typedef struct NR_UE_MAC_INST_s {
|
||||
A_SEQUENCE_OF(NR_UE_DL_BWP_t) dl_BWPs;
|
||||
A_SEQUENCE_OF(NR_UE_UL_BWP_t) ul_BWPs;
|
||||
NR_BWP_PDCCH_t config_BWP_PDCCH[MAX_NUM_BWP_UE];
|
||||
NR_ControlResourceSet_t *coreset0;
|
||||
NR_SearchSpace_t *search_space_zero;
|
||||
NR_UE_DL_BWP_t *current_DL_BWP;
|
||||
NR_UE_UL_BWP_t *current_UL_BWP;
|
||||
|
||||
|
||||
@@ -220,6 +220,9 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac)
|
||||
for (int i = 0; i < mac->ul_BWPs.count; i++)
|
||||
release_ul_BWP(mac, i);
|
||||
|
||||
asn1cFreeStruc(asn_DEF_NR_SearchSpace, mac->search_space_zero);
|
||||
asn1cFreeStruc(asn_DEF_NR_ControlResourceSet, mac->coreset0);
|
||||
|
||||
for (int i = 0; i < mac->lc_ordered_list.count; i++) {
|
||||
nr_lcordered_info_t *lc_info = mac->lc_ordered_list.array[i];
|
||||
asn_sequence_del(&mac->lc_ordered_list, i, 0);
|
||||
|
||||
@@ -121,7 +121,7 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac,
|
||||
coreset = ue_get_coreset(pdcch_config, coreset_id);
|
||||
rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG;
|
||||
} else {
|
||||
coreset = pdcch_config->coreset0;
|
||||
coreset = mac->coreset0;
|
||||
rel15->coreset.CoreSetType = NFAPI_NR_CSET_CONFIG_MIB_SIB1;
|
||||
}
|
||||
|
||||
@@ -483,22 +483,22 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
|
||||
mac->mib_ssb,
|
||||
1, // If the UE is not configured with a periodicity, the UE assumes a periodicity of a half frame
|
||||
ssb_offset_point_a);
|
||||
if (pdcch_config->search_space_zero == NULL)
|
||||
pdcch_config->search_space_zero = calloc(1, sizeof(*pdcch_config->search_space_zero));
|
||||
if (pdcch_config->coreset0 == NULL)
|
||||
pdcch_config->coreset0 = calloc(1, sizeof(*pdcch_config->coreset0));
|
||||
fill_coresetZero(pdcch_config->coreset0, &mac->type0_PDCCH_CSS_config);
|
||||
fill_searchSpaceZero(pdcch_config->search_space_zero, slots_per_frame, &mac->type0_PDCCH_CSS_config);
|
||||
if (is_ss_monitor_occasion(frame, slot, slots_per_frame, pdcch_config->search_space_zero)) {
|
||||
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, slots_per_frame, &mac->type0_PDCCH_CSS_config);
|
||||
if (is_ss_monitor_occasion(frame, slot, slots_per_frame, mac->search_space_zero)) {
|
||||
LOG_D(NR_MAC, "Monitoring DCI for SIB1 in frame %d slot %d\n", frame, slot);
|
||||
config_dci_pdu(mac, dl_config, TYPE_SI_RNTI_, slot, pdcch_config->search_space_zero);
|
||||
config_dci_pdu(mac, dl_config, TYPE_SI_RNTI_, slot, mac->search_space_zero);
|
||||
}
|
||||
}
|
||||
if (mac->get_otherSI) {
|
||||
// If searchSpaceOtherSystemInformation is set to zero,
|
||||
// PDCCH monitoring occasions for SI message reception in SI-window
|
||||
// are same as PDCCH monitoring occasions for SIB1
|
||||
const NR_SearchSpace_t *ss = pdcch_config->otherSI_SS ? pdcch_config->otherSI_SS : pdcch_config->search_space_zero;
|
||||
const NR_SearchSpace_t *ss = pdcch_config->otherSI_SS ? pdcch_config->otherSI_SS : mac->search_space_zero;
|
||||
// TODO configure SI-window
|
||||
if (monitior_dci_for_other_SI(mac, ss, slots_per_frame, frame, slot)) {
|
||||
LOG_D(NR_MAC, "Monitoring DCI for other SIs in frame %d slot %d\n", frame, slot);
|
||||
|
||||
Reference in New Issue
Block a user