added coreset and search configuration MAC from CellGroupConfig.
This commit is contained in:
@@ -237,16 +237,20 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
|
||||
if (secondaryCellGroup) {
|
||||
|
||||
NR_UE_list_t *UE_list = &RC.nrmac[Mod_idP]->UE_list;
|
||||
int UE_id;
|
||||
if (add_ue == 1) {
|
||||
int UE_id = add_new_nr_ue(Mod_idP,rnti);
|
||||
UE_id = add_new_nr_ue(Mod_idP,rnti);
|
||||
UE_list->secondaryCellGroup[UE_id] = secondaryCellGroup;
|
||||
LOG_I(PHY,"Added new UE_id %d/%x with initial secondaryCellGroup\n",UE_id,rnti);
|
||||
}
|
||||
else { // secondaryCellGroup has been updated
|
||||
int UE_id = find_nr_UE_id(Mod_idP,rnti);
|
||||
UE_id = find_nr_UE_id(Mod_idP,rnti);
|
||||
UE_list->secondaryCellGroup[UE_id] = secondaryCellGroup;
|
||||
LOG_I(PHY,"Modified UE_id %d/%x with secondaryCellGroup\n",UE_id,rnti);
|
||||
}
|
||||
fill_nfapi_coresets_and_searchspaces(secondaryCellGroup,
|
||||
UE_list->coreset[UE_id],
|
||||
UE_list->search_space[UE_id]);
|
||||
}
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
|
||||
|
||||
|
||||
@@ -337,21 +337,18 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
||||
if (UE_list->active[i]) {
|
||||
|
||||
nfapi_nr_config_request_t *cfg = &RC.nrmac[module_idP]->config[CC_id];
|
||||
|
||||
nfapi_nr_coreset_t coreset = RC.nrmac[module_idP]->coreset[CC_id][1];
|
||||
nfapi_nr_search_space_t search_space = RC.nrmac[module_idP]->search_space[CC_id][1];
|
||||
|
||||
if (nr_is_dci_opportunity(search_space,
|
||||
coreset,
|
||||
frameP,
|
||||
slotP,
|
||||
*cfg))
|
||||
nr_schedule_uss_dlsch_phytest(module_idP, frameP, slotP);
|
||||
|
||||
|
||||
if (nr_is_dci_opportunity(UE_list->search_space[i][1],
|
||||
UE_list->coreset[i][1],
|
||||
frameP,
|
||||
slotP,
|
||||
*cfg))
|
||||
nr_schedule_uss_dlsch_phytest(module_idP, frameP, slotP);
|
||||
|
||||
|
||||
rnti = 0;//UE_RNTI(module_idP, i);
|
||||
CC_id = 0;//UE_PCCID(module_idP, i);
|
||||
|
||||
|
||||
} //END if (UE_list->active[i])
|
||||
} //END for (i = 0; i < MAX_MOBILES_PER_GNB; i++)
|
||||
|
||||
@@ -372,7 +369,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
||||
nr_schedule_css_dlsch_phytest(module_idP, frameP, slotP);*/
|
||||
|
||||
if (slotP==1)
|
||||
nr_schedule_uss_dlsch_phytest(module_idP, frameP, slotP);
|
||||
nr_schedule_uss_dlsch_phytest(module_idP, frameP, slotP);
|
||||
|
||||
/*
|
||||
// Allocate CCEs for good after scheduling is done
|
||||
|
||||
@@ -208,8 +208,8 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
LOG_D(MAC, "Scheduling UE specific search space DCI type 1 for CC_id %d\n",CC_id);
|
||||
|
||||
nfapi_nr_coreset_t* coreset = &nr_mac->coreset[CC_id][1];
|
||||
nfapi_nr_search_space_t* search_space = &nr_mac->search_space[CC_id][1];
|
||||
nfapi_nr_coreset_t* coreset = &nr_mac->UE_list.coreset[0][1];
|
||||
nfapi_nr_search_space_t* search_space = &nr_mac->UE_list.search_space[0][1];
|
||||
|
||||
dl_req = &nr_mac->DL_req[CC_id].dl_config_request_body;
|
||||
dl_config_dci_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
||||
|
||||
@@ -55,6 +55,9 @@
|
||||
#endif
|
||||
|
||||
#include "T.h"
|
||||
#include "NR_PDCCH-ConfigCommon.h"
|
||||
#include "NR_ControlResourceSet.h"
|
||||
#include "NR_SearchSpace.h"
|
||||
|
||||
#define ENABLE_MAC_PAYLOAD_DEBUG
|
||||
#define DEBUG_gNB_SCHEDULER 1
|
||||
@@ -413,10 +416,10 @@ void nr_configure_dci_from_pdcch_config(nfapi_nr_dl_config_pdcch_parameters_rel1
|
||||
}
|
||||
|
||||
int nr_is_dci_opportunity(nfapi_nr_search_space_t search_space,
|
||||
nfapi_nr_coreset_t coreset,
|
||||
uint16_t frame,
|
||||
uint16_t slot,
|
||||
nfapi_nr_config_request_t cfg) {
|
||||
nfapi_nr_coreset_t coreset,
|
||||
uint16_t frame,
|
||||
uint16_t slot,
|
||||
nfapi_nr_config_request_t cfg) {
|
||||
|
||||
AssertFatal(search_space.coreset_id==coreset.coreset_id, "Invalid association of coreset(%d) and search space(%d)\n",
|
||||
search_space.search_space_id, coreset.coreset_id);
|
||||
@@ -654,3 +657,295 @@ int add_new_nr_ue(module_id_t mod_idP,
|
||||
0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void fill_nfapi_coresets_and_searchspaces(NR_CellGroupConfig_t *cg,
|
||||
nfapi_nr_coreset_t *coreset,
|
||||
nfapi_nr_search_space_t *search_space) {
|
||||
|
||||
nfapi_nr_coreset_t *cs;
|
||||
nfapi_nr_search_space_t *ss;
|
||||
|
||||
AssertFatal(cg->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count == 1,
|
||||
"downlinkBWP_ToAddModList has %d BWP!\n",
|
||||
cg->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count);
|
||||
|
||||
NR_BWP_Downlink_t *bwp=cg->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[0];
|
||||
struct NR_PDCCH_Config__controlResourceSetToAddModList *coreset_list = bwp->bwp_Dedicated->pdcch_Config->choice.setup->controlResourceSetToAddModList;
|
||||
AssertFatal(coreset_list->list.count>0,
|
||||
"cs list has 0 elements\n");
|
||||
for (int i=0;i<coreset_list->list.count;i++) {
|
||||
NR_ControlResourceSet_t *coreset_i=coreset_list->list.array[i];
|
||||
cs = coreset + coreset_i->controlResourceSetId;
|
||||
|
||||
cs->coreset_id = coreset_i->controlResourceSetId;
|
||||
AssertFatal(coreset_i->frequencyDomainResources.size <=8 && coreset_i->frequencyDomainResources.size>0,
|
||||
"coreset_i->frequencyDomainResources.size=%d\n",
|
||||
coreset_i->frequencyDomainResources.size);
|
||||
|
||||
for (int f=0;f<coreset_i->frequencyDomainResources.size;f++)
|
||||
((uint8_t*)&cs->frequency_domain_resources)[coreset_i->frequencyDomainResources.size-1-f]=coreset_i->frequencyDomainResources.buf[f];
|
||||
|
||||
cs->frequency_domain_resources>>=coreset_i->frequencyDomainResources.bits_unused;
|
||||
|
||||
cs->duration = coreset_i->duration;
|
||||
// Need to add information about TCI_StateIDs
|
||||
|
||||
if (coreset_i->cce_REG_MappingType.present == NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved)
|
||||
cs->cce_reg_mapping_type = NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED;
|
||||
else {
|
||||
cs->cce_reg_mapping_type = NFAPI_NR_CCE_REG_MAPPING_INTERLEAVED;
|
||||
|
||||
if (coreset_i->cce_REG_MappingType.choice.interleaved->reg_BundleSize==NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6)
|
||||
cs->reg_bundle_size = 6;
|
||||
else cs->reg_bundle_size = 2+coreset_i->cce_REG_MappingType.choice.interleaved->reg_BundleSize;
|
||||
|
||||
if (coreset_i->cce_REG_MappingType.choice.interleaved->interleaverSize==NR_ControlResourceSet__cce_REG_MappingType__interleaved__interleaverSize_n6)
|
||||
cs->interleaver_size = 6;
|
||||
else cs->interleaver_size = 2+coreset_i->cce_REG_MappingType.choice.interleaved->interleaverSize;
|
||||
|
||||
if (coreset_i->cce_REG_MappingType.choice.interleaved->shiftIndex)
|
||||
cs->shift_index = *coreset_i->cce_REG_MappingType.choice.interleaved->shiftIndex;
|
||||
else cs->shift_index = 0;
|
||||
}
|
||||
|
||||
if (coreset_i->precoderGranularity == NR_ControlResourceSet__precoderGranularity_sameAsREG_bundle)
|
||||
cs->precoder_granularity = NFAPI_NR_CSET_SAME_AS_REG_BUNDLE;
|
||||
else cs->precoder_granularity = NFAPI_NR_CSET_ALL_CONTIGUOUS_RBS;
|
||||
if (coreset_i->tci_PresentInDCI == NULL) cs->tci_present_in_dci = 0;
|
||||
else cs->tci_present_in_dci = 1;
|
||||
|
||||
if (coreset_i->tci_PresentInDCI == NULL) cs->dmrs_scrambling_id = 0;
|
||||
else cs->dmrs_scrambling_id = *coreset_i->tci_PresentInDCI;
|
||||
}
|
||||
|
||||
struct NR_PDCCH_ConfigCommon__commonSearchSpaceList *commonSearchSpaceList = bwp->bwp_Common->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList;
|
||||
AssertFatal(commonSearchSpaceList->list.count>0,
|
||||
"common SearchSpace list has 0 elements\n");
|
||||
// Common searchspace list
|
||||
for (int i=0;i<commonSearchSpaceList->list.count;i++) {
|
||||
NR_SearchSpace_t *searchSpace_i=commonSearchSpaceList->list.array[i];
|
||||
ss=search_space + searchSpace_i->searchSpaceId;
|
||||
if (searchSpace_i->controlResourceSetId) ss->coreset_id = *searchSpace_i->controlResourceSetId;
|
||||
switch(searchSpace_i->monitoringSlotPeriodicityAndOffset->present) {
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL1;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL2;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl2;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL4;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl4;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL5;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl5;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL8;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl8;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL10;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl10;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL16;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl16;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL20;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl20;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL40;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl40;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL80;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl80;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL160;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl160;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL320;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl320;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL640;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl640;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL1280;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl1280;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL2560;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl2560;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"Shouldn't get here\n");
|
||||
break;
|
||||
}
|
||||
if (searchSpace_i->duration) ss->duration = *searchSpace_i->duration;
|
||||
else ss->duration = 1;
|
||||
|
||||
|
||||
AssertFatal(searchSpace_i->monitoringSymbolsWithinSlot->size == 2,
|
||||
"ss_i->monitoringSymbolsWithinSlot = %d != 2\n",
|
||||
searchSpace_i->monitoringSymbolsWithinSlot->size);
|
||||
((uint8_t*)&ss->monitoring_symbols_in_slot)[1] = searchSpace_i->monitoringSymbolsWithinSlot->buf[0];
|
||||
((uint8_t*)&ss->monitoring_symbols_in_slot)[0] = searchSpace_i->monitoringSymbolsWithinSlot->buf[1];
|
||||
|
||||
AssertFatal(searchSpace_i->nrofCandidates!=NULL,"searchSpace_%d->nrofCandidates is null\n",searchSpace_i->searchSpaceId);
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel1 == NR_SearchSpace__nrofCandidates__aggregationLevel1_n8)
|
||||
ss->number_of_candidates[0] = 8;
|
||||
else ss->number_of_candidates[0] = searchSpace_i->nrofCandidates->aggregationLevel1;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel2 == NR_SearchSpace__nrofCandidates__aggregationLevel2_n8)
|
||||
ss->number_of_candidates[1] = 8;
|
||||
else ss->number_of_candidates[1] = searchSpace_i->nrofCandidates->aggregationLevel2;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel4 == NR_SearchSpace__nrofCandidates__aggregationLevel4_n8)
|
||||
ss->number_of_candidates[2] = 8;
|
||||
else ss->number_of_candidates[2] = searchSpace_i->nrofCandidates->aggregationLevel4;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel8 == NR_SearchSpace__nrofCandidates__aggregationLevel8_n8)
|
||||
ss->number_of_candidates[3] = 8;
|
||||
else ss->number_of_candidates[3] = searchSpace_i->nrofCandidates->aggregationLevel8;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel16 == NR_SearchSpace__nrofCandidates__aggregationLevel16_n8)
|
||||
ss->number_of_candidates[4] = 8;
|
||||
else ss->number_of_candidates[4] = searchSpace_i->nrofCandidates->aggregationLevel16;
|
||||
|
||||
AssertFatal(searchSpace_i->searchSpaceType->present==NR_SearchSpace__searchSpaceType_PR_common,
|
||||
"searchspace %d is not common\n",searchSpace_i->searchSpaceId);
|
||||
AssertFatal(searchSpace_i->searchSpaceType->choice.common!=NULL,
|
||||
"searchspace %d common is null\n",searchSpace_i->searchSpaceId);
|
||||
ss->search_space_type = NFAPI_NR_SEARCH_SPACE_TYPE_COMMON;
|
||||
if (searchSpace_i->searchSpaceType->choice.common->dci_Format0_0_AndFormat1_0)
|
||||
ss->css_formats_0_0_and_1_0 = 1;
|
||||
if (searchSpace_i->searchSpaceType->choice.common->dci_Format2_0) {
|
||||
ss->css_format_2_0 = 1;
|
||||
// add aggregation info
|
||||
}
|
||||
if (searchSpace_i->searchSpaceType->choice.common->dci_Format2_1)
|
||||
ss->css_format_2_1 = 1;
|
||||
if (searchSpace_i->searchSpaceType->choice.common->dci_Format2_2)
|
||||
ss->css_format_2_2 = 1;
|
||||
if (searchSpace_i->searchSpaceType->choice.common->dci_Format2_3)
|
||||
ss->css_format_2_3 = 1;
|
||||
}
|
||||
|
||||
struct NR_PDCCH_Config__searchSpacesToAddModList *dedicatedSearchSpaceList = bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList;
|
||||
AssertFatal(dedicatedSearchSpaceList->list.count>0,
|
||||
"Dedicated Search Space list has 0 elements\n");
|
||||
// Dedicated searchspace list
|
||||
for (int i=0;i<dedicatedSearchSpaceList->list.count;i++) {
|
||||
NR_SearchSpace_t *searchSpace_i=dedicatedSearchSpaceList->list.array[i];
|
||||
ss=search_space + searchSpace_i->searchSpaceId;
|
||||
ss->search_space_id = searchSpace_i->searchSpaceId;
|
||||
if (searchSpace_i->controlResourceSetId) ss->coreset_id = *searchSpace_i->controlResourceSetId;
|
||||
switch(searchSpace_i->monitoringSlotPeriodicityAndOffset->present) {
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL1;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL2;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl2;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL4;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl4;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL5;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl5;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL8;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl8;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL10;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl10;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL16;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl16;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL20;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl20;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl40:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL40;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl40;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl80:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL80;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl80;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl160:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL160;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl160;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl320:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL320;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl320;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl640:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL640;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl640;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1280:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL1280;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl1280;
|
||||
break;
|
||||
case NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2560:
|
||||
ss->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL2560;
|
||||
ss->slot_monitoring_offset = searchSpace_i->monitoringSlotPeriodicityAndOffset->choice.sl2560;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"Shouldn't get here\n");
|
||||
break;
|
||||
}
|
||||
if (searchSpace_i->duration) ss->duration = *searchSpace_i->duration;
|
||||
else ss->duration = 1;
|
||||
|
||||
|
||||
AssertFatal(searchSpace_i->monitoringSymbolsWithinSlot->size == 2,
|
||||
"ss_i->monitoringSymbolsWithinSlot = %d != 2\n",
|
||||
searchSpace_i->monitoringSymbolsWithinSlot->size);
|
||||
((uint8_t*)&ss->monitoring_symbols_in_slot)[1] = searchSpace_i->monitoringSymbolsWithinSlot->buf[0];
|
||||
((uint8_t*)&ss->monitoring_symbols_in_slot)[0] = searchSpace_i->monitoringSymbolsWithinSlot->buf[1];
|
||||
|
||||
AssertFatal(searchSpace_i->nrofCandidates!=NULL,"searchSpace_%d->nrofCandidates is null\n",searchSpace_i->searchSpaceId);
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel1 == NR_SearchSpace__nrofCandidates__aggregationLevel1_n8)
|
||||
ss->number_of_candidates[0] = 8;
|
||||
else ss->number_of_candidates[0] = searchSpace_i->nrofCandidates->aggregationLevel1;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel2 == NR_SearchSpace__nrofCandidates__aggregationLevel2_n8)
|
||||
ss->number_of_candidates[1] = 8;
|
||||
else ss->number_of_candidates[1] = searchSpace_i->nrofCandidates->aggregationLevel2;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel4 == NR_SearchSpace__nrofCandidates__aggregationLevel4_n8)
|
||||
ss->number_of_candidates[2] = 8;
|
||||
else ss->number_of_candidates[2] = searchSpace_i->nrofCandidates->aggregationLevel4;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel8 == NR_SearchSpace__nrofCandidates__aggregationLevel8_n8)
|
||||
ss->number_of_candidates[3] = 8;
|
||||
else ss->number_of_candidates[3] = searchSpace_i->nrofCandidates->aggregationLevel8;
|
||||
if (searchSpace_i->nrofCandidates->aggregationLevel16 == NR_SearchSpace__nrofCandidates__aggregationLevel16_n8)
|
||||
ss->number_of_candidates[4] = 8;
|
||||
else ss->number_of_candidates[4] = searchSpace_i->nrofCandidates->aggregationLevel16;
|
||||
|
||||
AssertFatal(searchSpace_i->searchSpaceType->present==NR_SearchSpace__searchSpaceType_PR_ue_Specific,
|
||||
"searchspace %d is not ue-Specific\n",searchSpace_i->searchSpaceId);
|
||||
AssertFatal(searchSpace_i->searchSpaceType->choice.ue_Specific!=NULL,
|
||||
"searchspace %d ue-Specific is null\n",searchSpace_i->searchSpaceId);
|
||||
ss->search_space_type = NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC;
|
||||
|
||||
ss->uss_dci_formats = searchSpace_i->searchSpaceType->choice.ue_Specific-> dci_Formats;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -44,34 +44,6 @@
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
|
||||
void nr_init_coreset(nfapi_nr_coreset_t *coreset) {
|
||||
|
||||
coreset->coreset_id = 1;
|
||||
coreset->frequency_domain_resources = 0x1E0000000000;//0x1FFFE0000000; // 96 RB starting from CRB0
|
||||
coreset->duration = 2;
|
||||
coreset->cce_reg_mapping_type = NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED;
|
||||
coreset->reg_bundle_size = 6;
|
||||
coreset->interleaver_size = 2;
|
||||
coreset->precoder_granularity = NFAPI_NR_CSET_SAME_AS_REG_BUNDLE;
|
||||
coreset->tci_present_in_dci = 0;
|
||||
coreset->dmrs_scrambling_id = 0;
|
||||
}
|
||||
|
||||
void nr_init_search_space(nfapi_nr_search_space_t *search_space)
|
||||
{
|
||||
search_space->search_space_id = 1;
|
||||
search_space->coreset_id = 1;
|
||||
search_space->search_space_type = NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC;
|
||||
search_space->duration = 5;
|
||||
search_space->slot_monitoring_periodicity = NFAPI_NR_SS_PERIODICITY_SL10;
|
||||
search_space->slot_monitoring_offset = 1;
|
||||
search_space->monitoring_symbols_in_slot = 0xC0000000; // first 2 ofdm symbols
|
||||
search_space->css_formats_0_0_and_1_0 = 1;
|
||||
search_space->uss_dci_formats = 0; // enum to be defined-- formats 0.0 and 1.0
|
||||
for (int i=0; i<NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS; i++)
|
||||
search_space->number_of_candidates[i] = 4; // TODO
|
||||
}
|
||||
|
||||
void mac_top_init_gNB(void)
|
||||
{
|
||||
module_id_t i,j;
|
||||
@@ -84,73 +56,71 @@ void mac_top_init_gNB(void)
|
||||
if (RC.nb_nr_macrlc_inst > 0) {
|
||||
|
||||
RC.nrmac = (gNB_MAC_INST **) malloc16(RC.nb_nr_macrlc_inst *sizeof(gNB_MAC_INST *));
|
||||
|
||||
|
||||
AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n",
|
||||
RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *),
|
||||
RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST));
|
||||
|
||||
|
||||
for (i = 0; i < RC.nb_nr_macrlc_inst; i++) {
|
||||
RC.nrmac[i] = (gNB_MAC_INST *) malloc16(sizeof(gNB_MAC_INST));
|
||||
|
||||
AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n",
|
||||
RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *),
|
||||
RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST));
|
||||
|
||||
LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d gNB_MAC_INST @ %p\n",sizeof(gNB_MAC_INST), RC.nb_nr_macrlc_inst, RC.mac);
|
||||
|
||||
bzero(RC.nrmac[i], sizeof(gNB_MAC_INST));
|
||||
|
||||
RC.nrmac[i]->Mod_id = i;
|
||||
|
||||
|
||||
for (j = 0; j < MAX_NUM_CCs; j++) {
|
||||
RC.nrmac[i]->DL_req[j].dl_config_request_body.dl_config_pdu_list = RC.nrmac[i]->dl_config_pdu_list[j];
|
||||
RC.nrmac[i]->UL_req[j].ul_config_request_body.ul_config_pdu_list = RC.nrmac[i]->ul_config_pdu_list[j];
|
||||
|
||||
for (int k = 0; k < 10; k++)
|
||||
RC.nrmac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.nrmac[i]->ul_config_pdu_list_tmp[j][k];
|
||||
RC.nrmac[i] = (gNB_MAC_INST *) malloc16(sizeof(gNB_MAC_INST));
|
||||
|
||||
AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n",
|
||||
RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *),
|
||||
RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST));
|
||||
|
||||
LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d gNB_MAC_INST @ %p\n",sizeof(gNB_MAC_INST), RC.nb_nr_macrlc_inst, RC.mac);
|
||||
|
||||
bzero(RC.nrmac[i], sizeof(gNB_MAC_INST));
|
||||
|
||||
RC.nrmac[i]->Mod_id = i;
|
||||
|
||||
|
||||
for (j = 0; j < MAX_NUM_CCs; j++) {
|
||||
RC.nrmac[i]->DL_req[j].dl_config_request_body.dl_config_pdu_list = RC.nrmac[i]->dl_config_pdu_list[j];
|
||||
RC.nrmac[i]->UL_req[j].ul_config_request_body.ul_config_pdu_list = RC.nrmac[i]->ul_config_pdu_list[j];
|
||||
|
||||
for (int k = 0; k < 10; k++)
|
||||
RC.nrmac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.nrmac[i]->ul_config_pdu_list_tmp[j][k];
|
||||
|
||||
RC.nrmac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list = RC.nrmac[i]->hi_dci0_pdu_list[j];
|
||||
RC.nrmac[i]->TX_req[j].tx_request_body.tx_pdu_list = RC.nrmac[i]->tx_request_pdu[j];
|
||||
RC.nrmac[i]->ul_handle = 0;
|
||||
|
||||
|
||||
// Init PDCCH structures
|
||||
nr_init_coreset(&RC.nrmac[i]->coreset[j][1]);
|
||||
nr_init_search_space(&RC.nrmac[i]->search_space[j][1]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
||||
|
||||
AssertFatal(rlc_module_init() == 0,"Could not initialize RLC layer\n");
|
||||
|
||||
// These should be out of here later
|
||||
pdcp_layer_init();
|
||||
|
||||
rrc_init_nr_global_param();
|
||||
|
||||
|
||||
AssertFatal(rlc_module_init() == 0,"Could not initialize RLC layer\n");
|
||||
|
||||
// These should be out of here later
|
||||
pdcp_layer_init();
|
||||
|
||||
rrc_init_nr_global_param();
|
||||
|
||||
}else {
|
||||
RC.nrmac = NULL;
|
||||
}
|
||||
|
||||
|
||||
// Initialize Linked-List for Active UEs
|
||||
for (i = 0; i < RC.nb_nr_macrlc_inst; i++) {
|
||||
|
||||
nrmac = RC.nrmac[i];
|
||||
nrmac->if_inst = NR_IF_Module_init(i);
|
||||
|
||||
|
||||
UE_list = &nrmac->UE_list;
|
||||
UE_list->num_UEs = 0;
|
||||
UE_list->head = -1;
|
||||
UE_list->head_ul = -1;
|
||||
UE_list->avail = 0;
|
||||
|
||||
|
||||
for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) {
|
||||
UE_list->next[list_el] = list_el + 1;
|
||||
UE_list->next_ul[list_el] = list_el + 1;
|
||||
UE_list->active[list_el] = FALSE;
|
||||
}
|
||||
|
||||
|
||||
UE_list->next[list_el] = -1;
|
||||
UE_list->next_ul[list_el] = -1;
|
||||
UE_list->active[list_el] = FALSE;
|
||||
|
||||
@@ -115,6 +115,12 @@ typedef struct {
|
||||
boolean_t active[MAX_MOBILES_PER_GNB];
|
||||
rnti_t rnti[MAX_MOBILES_PER_GNB];
|
||||
NR_CellGroupConfig_t *secondaryCellGroup[MAX_MOBILES_PER_GNB];
|
||||
/// NFAPI coreset structure
|
||||
nfapi_nr_coreset_t coreset[MAX_MOBILES_PER_GNB][NFAPI_NR_MAX_NB_CORESETS];
|
||||
/// NFAPI search space structure
|
||||
nfapi_nr_search_space_t search_space[MAX_MOBILES_PER_GNB][NFAPI_NR_MAX_NB_SEARCH_SPACES];
|
||||
|
||||
|
||||
} NR_UE_list_t;
|
||||
|
||||
/*! \brief top level eNB MAC structure */
|
||||
@@ -158,11 +164,6 @@ typedef struct gNB_MAC_INST_s {
|
||||
nfapi_tx_request_pdu_t tx_request_pdu[NFAPI_CC_MAX][MAX_NUM_TX_REQUEST_PDU];
|
||||
/// NFAPI DL PDU structure
|
||||
nfapi_tx_request_t TX_req[NFAPI_CC_MAX];
|
||||
/// NFAPI coreset structure
|
||||
nfapi_nr_coreset_t coreset[NFAPI_CC_MAX][NFAPI_NR_MAX_NB_CORESETS];
|
||||
/// NFAPI search space structure
|
||||
nfapi_nr_search_space_t search_space[NFAPI_CC_MAX][NFAPI_NR_MAX_NB_SEARCH_SPACES];
|
||||
|
||||
NR_UE_list_t UE_list;
|
||||
|
||||
/// UL handle
|
||||
|
||||
@@ -513,8 +513,8 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
||||
ss3->monitoringSymbolsWithinSlot->buf = calloc(1,2);
|
||||
ss3->monitoringSymbolsWithinSlot->size = 2;
|
||||
ss3->monitoringSymbolsWithinSlot->bits_unused = 2;
|
||||
ss3->monitoringSymbolsWithinSlot->buf[0]=0x3;
|
||||
ss3->monitoringSymbolsWithinSlot->buf[0]=0x0;
|
||||
ss3->monitoringSymbolsWithinSlot->buf[0]=0xc0;
|
||||
ss3->monitoringSymbolsWithinSlot->buf[1]=0x0;
|
||||
ss3->nrofCandidates=calloc(1,sizeof(*ss3->nrofCandidates));
|
||||
ss3->nrofCandidates->aggregationLevel1 = NR_SearchSpace__nrofCandidates__aggregationLevel1_n0;
|
||||
ss3->nrofCandidates->aggregationLevel2 = NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
|
||||
@@ -540,8 +540,8 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
||||
ss2->monitoringSymbolsWithinSlot->buf = calloc(1,2);
|
||||
ss2->monitoringSymbolsWithinSlot->size = 2;
|
||||
ss2->monitoringSymbolsWithinSlot->bits_unused = 2;
|
||||
ss2->monitoringSymbolsWithinSlot->buf[0]=0x3;
|
||||
ss2->monitoringSymbolsWithinSlot->buf[0]=0x0;
|
||||
ss2->monitoringSymbolsWithinSlot->buf[0]=0xc0;
|
||||
ss2->monitoringSymbolsWithinSlot->buf[1]=0x0;
|
||||
ss2->nrofCandidates=calloc(1,sizeof(*ss2->nrofCandidates));
|
||||
ss2->nrofCandidates->aggregationLevel1 = NR_SearchSpace__nrofCandidates__aggregationLevel1_n0;
|
||||
ss2->nrofCandidates->aggregationLevel2 = NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
|
||||
|
||||
Reference in New Issue
Block a user