configure only 1 BWP at a given time (1st active BWP)
This commit is contained in:
@@ -1665,15 +1665,15 @@ static NR_SetupRelease_PDSCH_Config_t *config_pdsch(uint64_t ssb_bitmap, int bwp
|
|||||||
return setup_pdsch_Config;
|
return setup_pdsch_Config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
static NR_BWP_Downlink_t *config_downlinkBWP(const NR_ServingCellConfigCommon_t *scc,
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
const NR_UE_NR_Capability_t *uecap,
|
||||||
const NR_UE_NR_Capability_t *uecap,
|
int dl_antenna_ports,
|
||||||
int dl_antenna_ports,
|
bool force_256qam_off,
|
||||||
bool force_256qam_off,
|
int bwp_loop,
|
||||||
int bwp_loop,
|
bool is_SA,
|
||||||
bool is_SA,
|
const nr_mac_config_t *configuration)
|
||||||
const nr_mac_config_t *configuration)
|
|
||||||
{
|
{
|
||||||
|
NR_BWP_Downlink_t *bwp = calloc_or_fail(1, sizeof(*bwp));
|
||||||
bwp->bwp_Common = calloc(1,sizeof(*bwp->bwp_Common));
|
bwp->bwp_Common = calloc(1,sizeof(*bwp->bwp_Common));
|
||||||
if(configuration->num_additional_bwps > 0) {
|
if(configuration->num_additional_bwps > 0) {
|
||||||
const nr_bwp_config_t *bwp_config = &configuration->bwp_config[bwp_loop];
|
const nr_bwp_config_t *bwp_config = &configuration->bwp_config[bwp_loop];
|
||||||
@@ -1772,17 +1772,18 @@ static void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
|||||||
force_256qam_off ? NULL : uecap,
|
force_256qam_off ? NULL : uecap,
|
||||||
bwp->bwp_Dedicated,
|
bwp->bwp_Dedicated,
|
||||||
scc);
|
scc);
|
||||||
|
return bwp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
|
static NR_BWP_Uplink_t *config_uplinkBWP(long bwp_loop,
|
||||||
long bwp_loop,
|
bool is_SA,
|
||||||
bool is_SA,
|
int uid,
|
||||||
int uid,
|
int maxMIMO_Layers,
|
||||||
int maxMIMO_Layers,
|
const nr_mac_config_t *configuration,
|
||||||
const nr_mac_config_t *configuration,
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
const NR_UE_NR_Capability_t *uecap)
|
||||||
const NR_UE_NR_Capability_t *uecap)
|
|
||||||
{
|
{
|
||||||
|
NR_BWP_Uplink_t *ubwp = calloc_or_fail(1, sizeof(*ubwp));
|
||||||
ubwp->bwp_Common = calloc(1, sizeof(*ubwp->bwp_Common));
|
ubwp->bwp_Common = calloc(1, sizeof(*ubwp->bwp_Common));
|
||||||
if(configuration->num_additional_bwps > 0) {
|
if(configuration->num_additional_bwps > 0) {
|
||||||
ubwp->bwp_Id = configuration->bwp_config[bwp_loop].id;
|
ubwp->bwp_Id = configuration->bwp_config[bwp_loop].id;
|
||||||
@@ -1843,6 +1844,7 @@ static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
|
|||||||
|
|
||||||
ubwp->bwp_Dedicated->configuredGrantConfig = NULL;
|
ubwp->bwp_Dedicated->configuredGrantConfig = NULL;
|
||||||
ubwp->bwp_Dedicated->beamFailureRecoveryConfig = NULL;
|
ubwp->bwp_Dedicated->beamFailureRecoveryConfig = NULL;
|
||||||
|
return ubwp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_phr_config(NR_MAC_CellGroupConfig_t *mac_CellGroupConfig)
|
static void set_phr_config(NR_MAC_CellGroupConfig_t *mac_CellGroupConfig)
|
||||||
@@ -3103,16 +3105,28 @@ static NR_MAC_CellGroupConfig_t *configure_mac_cellgroup(const nr_mac_timers_t *
|
|||||||
return mac_CellGroupConfig;
|
return mac_CellGroupConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set HARQ related IEs according to the number of DL, UL harqprocesses configured
|
static void allocate_32_harq(NR_PDSCH_Config_t *pdsch_Config)
|
||||||
static void fill_harq_IEs(NR_ServingCellConfig_t *scc, int num_dlharq, int num_ulharq)
|
|
||||||
{
|
{
|
||||||
|
if (!pdsch_Config->ext3)
|
||||||
|
pdsch_Config->ext3 = calloc(1, sizeof(*pdsch_Config->ext3));
|
||||||
|
asn1cCallocOne(pdsch_Config->ext3->harq_ProcessNumberSizeDCI_1_1_r17, 5);
|
||||||
|
}
|
||||||
|
|
||||||
AssertFatal(scc && scc->pdsch_ServingCellConfig &&
|
static void allocate_32_ul_harq(NR_PUSCH_Config_t *pusch_Config)
|
||||||
scc->pdsch_ServingCellConfig->present == NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup,
|
{
|
||||||
|
if (!pusch_Config->ext2)
|
||||||
|
pusch_Config->ext2 = calloc(1, sizeof(*pusch_Config->ext2));
|
||||||
|
asn1cCallocOne(pusch_Config->ext2->harq_ProcessNumberSizeDCI_0_1_r17, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set HARQ related IEs according to the number of DL, UL harqprocesses configured
|
||||||
|
static void fill_harq_IEs(NR_ServingCellConfig_t *scc, int num_dlharq, int num_ulharq, int bwp_id)
|
||||||
|
{
|
||||||
|
AssertFatal(scc
|
||||||
|
&& scc->pdsch_ServingCellConfig
|
||||||
|
&& scc->pdsch_ServingCellConfig->present == NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup,
|
||||||
"PDSCH_Servingcellconfig IEs NOT present\n");
|
"PDSCH_Servingcellconfig IEs NOT present\n");
|
||||||
|
|
||||||
NR_PDSCH_ServingCellConfig_t *pdsch_scc = scc->pdsch_ServingCellConfig->choice.setup;
|
NR_PDSCH_ServingCellConfig_t *pdsch_scc = scc->pdsch_ServingCellConfig->choice.setup;
|
||||||
|
|
||||||
switch (num_dlharq) {
|
switch (num_dlharq) {
|
||||||
case 2:
|
case 2:
|
||||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n2;
|
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n2;
|
||||||
@@ -3141,34 +3155,27 @@ static void fill_harq_IEs(NR_ServingCellConfig_t *scc, int num_dlharq, int num_u
|
|||||||
pdsch_scc->ext3 = calloc(1, sizeof(*pdsch_scc->ext3));
|
pdsch_scc->ext3 = calloc(1, sizeof(*pdsch_scc->ext3));
|
||||||
asn1cCallocOne(pdsch_scc->ext3->nrofHARQ_ProcessesForPDSCH_v1700,
|
asn1cCallocOne(pdsch_scc->ext3->nrofHARQ_ProcessesForPDSCH_v1700,
|
||||||
NR_PDSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPDSCH_v1700_n32);
|
NR_PDSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPDSCH_v1700_n32);
|
||||||
NR_BWP_DownlinkDedicated_t *dlbwp = scc->initialDownlinkBWP;
|
NR_BWP_DownlinkDedicated_t *dlbwp = NULL;
|
||||||
if (dlbwp && dlbwp->pdsch_Config &&
|
if (bwp_id == 0) {
|
||||||
dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup) {
|
dlbwp = scc->initialDownlinkBWP;
|
||||||
NR_PDSCH_Config_t *dlcfg = scc->initialDownlinkBWP->pdsch_Config->choice.setup;
|
if (dlbwp && dlbwp->pdsch_Config && dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup)
|
||||||
if (!dlcfg->ext3)
|
allocate_32_harq(scc->initialDownlinkBWP->pdsch_Config->choice.setup);
|
||||||
dlcfg->ext3 = calloc(1, sizeof(*dlcfg->ext3));
|
} else {
|
||||||
asn1cCallocOne(dlcfg->ext3->harq_ProcessNumberSizeDCI_1_1_r17, 5);
|
for (int i = 0; i < scc->downlinkBWP_ToAddModList->list.count; i++) {
|
||||||
}
|
if (scc->downlinkBWP_ToAddModList->list.array[i]->bwp_Id != bwp_id)
|
||||||
int num_dl_bwp = 0;
|
continue;
|
||||||
if (scc->downlinkBWP_ToAddModList)
|
dlbwp = scc->downlinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
||||||
num_dl_bwp = scc->downlinkBWP_ToAddModList->list.count;
|
if (dlbwp && dlbwp->pdsch_Config && dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup)
|
||||||
for (int i = 0;i < num_dl_bwp; i++) {
|
allocate_32_harq(dlbwp->pdsch_Config->choice.setup);
|
||||||
dlbwp = scc->downlinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
|
||||||
if (dlbwp && dlbwp->pdsch_Config &&
|
|
||||||
dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup) {
|
|
||||||
NR_PDSCH_Config_t *dlcfg = dlbwp->pdsch_Config->choice.setup;
|
|
||||||
if (!dlcfg->ext3)
|
|
||||||
dlcfg->ext3 = calloc(1, sizeof(*dlcfg->ext3));
|
|
||||||
asn1cCallocOne(dlcfg->ext3->harq_ProcessNumberSizeDCI_1_1_r17, 5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: // Already IE should have been set to 16 harq processes
|
default: // Already IE should have been set to 16 harq processes
|
||||||
|
AssertFatal(false, "Invalid number of HARQ processes\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AssertFatal(scc->uplinkConfig, "uplinkConfig IE NOT present\n");
|
||||||
AssertFatal(scc->uplinkConfig,"uplinkConfig IE NOT present\n");
|
|
||||||
|
|
||||||
if (num_ulharq == 32) {
|
if (num_ulharq == 32) {
|
||||||
if (!scc->uplinkConfig->pusch_ServingCellConfig)
|
if (!scc->uplinkConfig->pusch_ServingCellConfig)
|
||||||
@@ -3181,25 +3188,18 @@ static void fill_harq_IEs(NR_ServingCellConfig_t *scc, int num_dlharq, int num_u
|
|||||||
pusch_scc->ext3 = calloc(1, sizeof(*pusch_scc->ext3));
|
pusch_scc->ext3 = calloc(1, sizeof(*pusch_scc->ext3));
|
||||||
asn1cCallocOne(pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17,
|
asn1cCallocOne(pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17,
|
||||||
NR_PUSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPUSCH_r17_n32);
|
NR_PUSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPUSCH_r17_n32);
|
||||||
NR_BWP_UplinkDedicated_t *ulbwp = scc->uplinkConfig->initialUplinkBWP;
|
NR_BWP_UplinkDedicated_t *ulbwp = NULL;
|
||||||
if (ulbwp && ulbwp->pusch_Config &&
|
if (bwp_id == 0) {
|
||||||
ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup) {
|
ulbwp = scc->uplinkConfig->initialUplinkBWP;
|
||||||
NR_PUSCH_Config_t *ulcfg = ulbwp->pusch_Config->choice.setup;
|
if (ulbwp && ulbwp->pusch_Config && ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup)
|
||||||
if (!ulcfg->ext2)
|
allocate_32_ul_harq(ulbwp->pusch_Config->choice.setup);
|
||||||
ulcfg->ext2 = calloc(1, sizeof(*ulcfg->ext2));
|
} else {
|
||||||
asn1cCallocOne(ulcfg->ext2->harq_ProcessNumberSizeDCI_0_1_r17, 5);
|
for (int i = 0; i < scc->uplinkConfig->uplinkBWP_ToAddModList->list.count; i++) {
|
||||||
}
|
if (bwp_id != scc->uplinkConfig->uplinkBWP_ToAddModList->list.array[i]->bwp_Id)
|
||||||
int num_ul_bwp = 0;
|
continue;
|
||||||
if (scc->uplinkConfig->uplinkBWP_ToAddModList)
|
ulbwp = scc->uplinkConfig->uplinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
||||||
num_ul_bwp = scc->uplinkConfig->uplinkBWP_ToAddModList->list.count;
|
if (ulbwp && ulbwp->pusch_Config && ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup)
|
||||||
for (int i = 0;i < num_ul_bwp; i++) {
|
allocate_32_ul_harq(ulbwp->pusch_Config->choice.setup);
|
||||||
ulbwp = scc->uplinkConfig->uplinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
|
||||||
if (ulbwp && ulbwp->pusch_Config &&
|
|
||||||
ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup) {
|
|
||||||
NR_PUSCH_Config_t *ulcfg = ulbwp->pusch_Config->choice.setup;
|
|
||||||
if (!ulcfg->ext2)
|
|
||||||
ulcfg->ext2 = calloc(1, sizeof(*ulcfg->ext2));
|
|
||||||
asn1cCallocOne(ulcfg->ext2->harq_ProcessNumberSizeDCI_0_1_r17, 5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3321,43 +3321,29 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64_t bitmap = get_ssb_bitmap(scc);
|
uint64_t bitmap = get_ssb_bitmap(scc);
|
||||||
uplinkConfig->initialUplinkBWP = configure_initial_ul_bwp(scc, configuration, maxMIMO_Layers, uid);
|
int first_active_bwp = 0;
|
||||||
configDedicated->initialDownlinkBWP = configure_initial_dl_bwp(scc, pdsch_AntennaPorts, bitmap, configuration);
|
if (configuration->num_additional_bwps > 0)
|
||||||
|
first_active_bwp = configuration->first_active_bwp;
|
||||||
|
|
||||||
// Downlink BWPs
|
asn1cCallocOne(configDedicated->firstActiveDownlinkBWP_Id, first_active_bwp);
|
||||||
int n_dl_bwp = configuration->num_additional_bwps;
|
asn1cCallocOne(uplinkConfig->firstActiveUplinkBWP_Id, first_active_bwp);
|
||||||
int first_active_dl_bwp = 0;
|
if (first_active_bwp == 0) {
|
||||||
if (n_dl_bwp > 0) {
|
uplinkConfig->initialUplinkBWP = configure_initial_ul_bwp(scc, configuration, maxMIMO_Layers, uid);
|
||||||
|
configDedicated->initialDownlinkBWP = configure_initial_dl_bwp(scc, pdsch_AntennaPorts, bitmap, configuration);
|
||||||
|
} else {
|
||||||
configDedicated->downlinkBWP_ToAddModList = calloc(1, sizeof(*configDedicated->downlinkBWP_ToAddModList));
|
configDedicated->downlinkBWP_ToAddModList = calloc(1, sizeof(*configDedicated->downlinkBWP_ToAddModList));
|
||||||
for (int bwp_loop = 0; bwp_loop < n_dl_bwp; bwp_loop++) {
|
NR_BWP_Downlink_t *bwp = config_downlinkBWP(scc,
|
||||||
NR_BWP_Downlink_t *bwp = calloc(1, sizeof(*bwp));
|
NULL,
|
||||||
config_downlinkBWP(bwp,
|
0,
|
||||||
scc,
|
false,
|
||||||
NULL,
|
first_active_bwp - 1,
|
||||||
0,
|
true,
|
||||||
false,
|
configuration);
|
||||||
bwp_loop,
|
asn1cSeqAdd(&configDedicated->downlinkBWP_ToAddModList->list, bwp);
|
||||||
true,
|
|
||||||
configuration);
|
|
||||||
asn1cSeqAdd(&configDedicated->downlinkBWP_ToAddModList->list, bwp);
|
|
||||||
}
|
|
||||||
first_active_dl_bwp = configuration->first_active_bwp;
|
|
||||||
}
|
|
||||||
asn1cCallocOne(configDedicated->firstActiveDownlinkBWP_Id, first_active_dl_bwp);
|
|
||||||
|
|
||||||
// Uplink BWPs
|
|
||||||
int n_ul_bwp = configuration->num_additional_bwps;
|
|
||||||
int first_active_ul_bwp = 0;
|
|
||||||
if (n_ul_bwp > 0) {
|
|
||||||
uplinkConfig->uplinkBWP_ToAddModList = calloc(1, sizeof(*uplinkConfig->uplinkBWP_ToAddModList));
|
uplinkConfig->uplinkBWP_ToAddModList = calloc(1, sizeof(*uplinkConfig->uplinkBWP_ToAddModList));
|
||||||
for (int bwp_loop = 0; bwp_loop < n_ul_bwp; bwp_loop++) {
|
NR_BWP_Uplink_t *ubwp = config_uplinkBWP(first_active_bwp - 1, true, uid, maxMIMO_Layers, configuration, scc, NULL);
|
||||||
NR_BWP_Uplink_t *ubwp = calloc(1, sizeof(*ubwp));
|
asn1cSeqAdd(&uplinkConfig->uplinkBWP_ToAddModList->list, ubwp);
|
||||||
config_uplinkBWP(ubwp, bwp_loop, true, uid, maxMIMO_Layers, configuration, scc, NULL);
|
|
||||||
asn1cSeqAdd(&uplinkConfig->uplinkBWP_ToAddModList->list, ubwp);
|
|
||||||
}
|
|
||||||
first_active_ul_bwp = configuration->first_active_bwp;
|
|
||||||
}
|
}
|
||||||
asn1cCallocOne(uplinkConfig->firstActiveUplinkBWP_Id, first_active_ul_bwp);
|
|
||||||
|
|
||||||
configDedicated->csi_MeasConfig = calloc(1, sizeof(*configDedicated->csi_MeasConfig));
|
configDedicated->csi_MeasConfig = calloc(1, sizeof(*configDedicated->csi_MeasConfig));
|
||||||
configDedicated->csi_MeasConfig->present = NR_SetupRelease_CSI_MeasConfig_PR_setup;
|
configDedicated->csi_MeasConfig->present = NR_SetupRelease_CSI_MeasConfig_PR_setup;
|
||||||
@@ -3384,97 +3370,93 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
}
|
}
|
||||||
asn1cSeqAdd(&csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list, ssbresset0);
|
asn1cSeqAdd(&csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list, ssbresset0);
|
||||||
|
|
||||||
int bwp_loop_end = n_dl_bwp + 1;
|
int curr_bwp, bwp_id;
|
||||||
for (int bwp_loop = 0; bwp_loop < bwp_loop_end; bwp_loop++) {
|
NR_SetupRelease_PDSCH_Config_t *pdsch_Config;
|
||||||
int curr_bwp, bwp_id;
|
if (first_active_bwp == 0) {
|
||||||
struct NR_SetupRelease_PDSCH_Config *pdsch_Config;
|
pdsch_Config = configDedicated->initialDownlinkBWP->pdsch_Config;
|
||||||
if (bwp_loop == 0) {
|
curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
pdsch_Config = configDedicated->initialDownlinkBWP->pdsch_Config;
|
bwp_id = 0;
|
||||||
curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
} else {
|
||||||
bwp_id = 0;
|
NR_BWP_Downlink_t *bwp = configDedicated->downlinkBWP_ToAddModList->list.array[0];
|
||||||
} else {
|
pdsch_Config = bwp->bwp_Dedicated->pdsch_Config;
|
||||||
NR_BWP_Downlink_t *bwp = configDedicated->downlinkBWP_ToAddModList->list.array[bwp_loop - 1];
|
curr_bwp = NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
pdsch_Config = bwp->bwp_Dedicated->pdsch_Config;
|
bwp_id = bwp->bwp_Id;
|
||||||
curr_bwp = NRRIV2BW(bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
|
||||||
bwp_id = bwp->bwp_Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
config_csirs(scc, csi_MeasConfig, pdsch_AntennaPorts, curr_bwp, configuration->do_CSIRS, bwp_loop);
|
|
||||||
config_csiim(configuration->do_CSIRS, pdsch_AntennaPorts, curr_bwp, csi_MeasConfig, bwp_loop);
|
|
||||||
|
|
||||||
NR_CSI_ResourceConfig_t *csires1 = calloc(1, sizeof(*csires1));
|
|
||||||
csires1->csi_ResourceConfigId = bwp_id + 20;
|
|
||||||
csires1->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB;
|
|
||||||
csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB =
|
|
||||||
calloc(1, sizeof(*csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB));
|
|
||||||
csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList =
|
|
||||||
calloc(1, sizeof(*csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList));
|
|
||||||
NR_CSI_SSB_ResourceSetId_t *ssbres00 = calloc(1, sizeof(*ssbres00));
|
|
||||||
*ssbres00 = 0;
|
|
||||||
asn1cSeqAdd(&csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList->list, ssbres00);
|
|
||||||
csires1->bwp_Id = bwp_id;
|
|
||||||
csires1->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
|
||||||
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires1);
|
|
||||||
|
|
||||||
int pucch_Resource = 2;
|
|
||||||
|
|
||||||
if (configuration->do_CSIRS) {
|
|
||||||
NR_CSI_ResourceConfig_t *csires0 = calloc(1, sizeof(*csires0));
|
|
||||||
csires0->csi_ResourceConfigId = bwp_id;
|
|
||||||
csires0->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB;
|
|
||||||
csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB =
|
|
||||||
calloc(1, sizeof(*csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB));
|
|
||||||
csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList =
|
|
||||||
calloc(1, sizeof(*csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList));
|
|
||||||
NR_NZP_CSI_RS_ResourceSetId_t *nzp0 = calloc(1, sizeof(*nzp0));
|
|
||||||
*nzp0 = bwp_loop;
|
|
||||||
asn1cSeqAdd(&csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList->list, nzp0);
|
|
||||||
csires0->bwp_Id = bwp_id;
|
|
||||||
csires0->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
|
||||||
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (configuration->do_CSIRS && pdsch_AntennaPorts > 1) {
|
|
||||||
NR_CSI_ResourceConfig_t *csires2 = calloc(1, sizeof(*csires2));
|
|
||||||
csires2->csi_ResourceConfigId = bwp_id + 10;
|
|
||||||
csires2->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_csi_IM_ResourceSetList;
|
|
||||||
csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList =
|
|
||||||
calloc(1, sizeof(*csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList));
|
|
||||||
NR_CSI_IM_ResourceSetId_t *csiim00 = calloc(1, sizeof(*csiim00));
|
|
||||||
*csiim00 = bwp_loop;
|
|
||||||
asn1cSeqAdd(&csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList->list, csiim00);
|
|
||||||
csires2->bwp_Id = bwp_id;
|
|
||||||
csires2->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
|
||||||
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires2);
|
|
||||||
|
|
||||||
NR_PUCCH_CSI_Resource_t *pucchcsi = calloc(1, sizeof(*pucchcsi));
|
|
||||||
pucchcsi->uplinkBandwidthPartId = bwp_id;
|
|
||||||
pucchcsi->pucch_Resource = pucch_Resource;
|
|
||||||
config_csi_meas_report(csi_MeasConfig,
|
|
||||||
scc,
|
|
||||||
pucchcsi,
|
|
||||||
pdsch_Config,
|
|
||||||
&configuration->pdsch_AntennaPorts,
|
|
||||||
*pdsch_servingcellconfig->ext1->maxMIMO_Layers,
|
|
||||||
bwp_id,
|
|
||||||
uid,
|
|
||||||
curr_bwp);
|
|
||||||
}
|
|
||||||
NR_PUCCH_CSI_Resource_t *pucchrsrp = calloc(1, sizeof(*pucchrsrp));
|
|
||||||
pucchrsrp->uplinkBandwidthPartId = bwp_id;
|
|
||||||
pucchrsrp->pucch_Resource = pucch_Resource;
|
|
||||||
config_rsrp_meas_report(csi_MeasConfig,
|
|
||||||
scc,
|
|
||||||
pucchrsrp,
|
|
||||||
configuration->do_CSIRS,
|
|
||||||
bwp_id + 10,
|
|
||||||
uid,
|
|
||||||
curr_bwp,
|
|
||||||
pdsch_AntennaPorts,
|
|
||||||
configuration->do_SINR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fill_harq_IEs(configDedicated, configuration->num_dlharq, configuration->num_ulharq);
|
config_csirs(scc, csi_MeasConfig, pdsch_AntennaPorts, curr_bwp, configuration->do_CSIRS, first_active_bwp);
|
||||||
|
config_csiim(configuration->do_CSIRS, pdsch_AntennaPorts, curr_bwp, csi_MeasConfig, first_active_bwp);
|
||||||
|
|
||||||
|
NR_CSI_ResourceConfig_t *csires1 = calloc(1, sizeof(*csires1));
|
||||||
|
csires1->csi_ResourceConfigId = bwp_id + 20;
|
||||||
|
csires1->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB;
|
||||||
|
csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB =
|
||||||
|
calloc(1, sizeof(*csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB));
|
||||||
|
csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList =
|
||||||
|
calloc(1, sizeof(*csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList));
|
||||||
|
NR_CSI_SSB_ResourceSetId_t *ssbres00 = calloc(1, sizeof(*ssbres00));
|
||||||
|
*ssbres00 = 0;
|
||||||
|
asn1cSeqAdd(&csires1->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->csi_SSB_ResourceSetList->list, ssbres00);
|
||||||
|
csires1->bwp_Id = bwp_id;
|
||||||
|
csires1->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
||||||
|
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires1);
|
||||||
|
|
||||||
|
int pucch_Resource = 2;
|
||||||
|
if (configuration->do_CSIRS) {
|
||||||
|
NR_CSI_ResourceConfig_t *csires0 = calloc(1, sizeof(*csires0));
|
||||||
|
csires0->csi_ResourceConfigId = bwp_id;
|
||||||
|
csires0->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB;
|
||||||
|
csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB =
|
||||||
|
calloc(1, sizeof(*csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB));
|
||||||
|
csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList =
|
||||||
|
calloc(1, sizeof(*csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList));
|
||||||
|
NR_NZP_CSI_RS_ResourceSetId_t *nzp0 = calloc(1, sizeof(*nzp0));
|
||||||
|
*nzp0 = first_active_bwp;
|
||||||
|
asn1cSeqAdd(&csires0->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList->list, nzp0);
|
||||||
|
csires0->bwp_Id = bwp_id;
|
||||||
|
csires0->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
||||||
|
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->do_CSIRS && pdsch_AntennaPorts > 1) {
|
||||||
|
NR_CSI_ResourceConfig_t *csires2 = calloc(1, sizeof(*csires2));
|
||||||
|
csires2->csi_ResourceConfigId = bwp_id + 10;
|
||||||
|
csires2->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_csi_IM_ResourceSetList;
|
||||||
|
csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList =
|
||||||
|
calloc(1, sizeof(*csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList));
|
||||||
|
NR_CSI_IM_ResourceSetId_t *csiim00 = calloc(1, sizeof(*csiim00));
|
||||||
|
*csiim00 = first_active_bwp;
|
||||||
|
asn1cSeqAdd(&csires2->csi_RS_ResourceSetList.choice.csi_IM_ResourceSetList->list, csiim00);
|
||||||
|
csires2->bwp_Id = bwp_id;
|
||||||
|
csires2->resourceType = NR_CSI_ResourceConfig__resourceType_periodic;
|
||||||
|
asn1cSeqAdd(&csi_MeasConfig->csi_ResourceConfigToAddModList->list, csires2);
|
||||||
|
|
||||||
|
NR_PUCCH_CSI_Resource_t *pucchcsi = calloc(1, sizeof(*pucchcsi));
|
||||||
|
pucchcsi->uplinkBandwidthPartId = bwp_id;
|
||||||
|
pucchcsi->pucch_Resource = pucch_Resource;
|
||||||
|
config_csi_meas_report(csi_MeasConfig,
|
||||||
|
scc,
|
||||||
|
pucchcsi,
|
||||||
|
pdsch_Config,
|
||||||
|
&configuration->pdsch_AntennaPorts,
|
||||||
|
*pdsch_servingcellconfig->ext1->maxMIMO_Layers,
|
||||||
|
bwp_id,
|
||||||
|
uid,
|
||||||
|
curr_bwp);
|
||||||
|
}
|
||||||
|
NR_PUCCH_CSI_Resource_t *pucchrsrp = calloc(1, sizeof(*pucchrsrp));
|
||||||
|
pucchrsrp->uplinkBandwidthPartId = bwp_id;
|
||||||
|
pucchrsrp->pucch_Resource = pucch_Resource;
|
||||||
|
config_rsrp_meas_report(csi_MeasConfig,
|
||||||
|
scc,
|
||||||
|
pucchrsrp,
|
||||||
|
configuration->do_CSIRS,
|
||||||
|
bwp_id + 10,
|
||||||
|
uid,
|
||||||
|
curr_bwp,
|
||||||
|
pdsch_AntennaPorts,
|
||||||
|
configuration->do_SINR);
|
||||||
|
|
||||||
|
fill_harq_IEs(configDedicated, configuration->num_dlharq, configuration->num_ulharq, first_active_bwp);
|
||||||
SpCellConfig->spCellConfigDedicated = configDedicated;
|
SpCellConfig->spCellConfigDedicated = configDedicated;
|
||||||
|
|
||||||
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
||||||
@@ -3709,33 +3691,24 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
{
|
{
|
||||||
DevAssert(cellGroupConfig != NULL);
|
DevAssert(cellGroupConfig != NULL);
|
||||||
DevAssert(cellGroupConfig->spCellConfig != NULL);
|
DevAssert(cellGroupConfig->spCellConfig != NULL);
|
||||||
|
DevAssert(cellGroupConfig->spCellConfig->spCellConfigDedicated != NULL);
|
||||||
DevAssert(configuration != NULL);
|
DevAssert(configuration != NULL);
|
||||||
DevAssert(scc != NULL);
|
DevAssert(scc != NULL);
|
||||||
|
|
||||||
NR_SpCellConfig_t *SpCellConfig = cellGroupConfig->spCellConfig;
|
NR_SpCellConfig_t *SpCellConfig = cellGroupConfig->spCellConfig;
|
||||||
|
NR_ServingCellConfig_t *spCellConfigDedicated = SpCellConfig->spCellConfigDedicated;
|
||||||
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = SpCellConfig->spCellConfigDedicated->pdsch_ServingCellConfig->choice.setup;
|
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = spCellConfigDedicated->pdsch_ServingCellConfig->choice.setup;
|
||||||
set_dl_maxmimolayers(pdsch_servingcellconfig, scc, uecap, configuration->maxMIMO_layers);
|
set_dl_maxmimolayers(pdsch_servingcellconfig, scc, uecap, configuration->maxMIMO_layers);
|
||||||
|
|
||||||
NR_CSI_MeasConfig_t *csi_MeasConfig = SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
NR_CSI_MeasConfig_t *csi_MeasConfig = spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
||||||
for (int report = 0; report < csi_MeasConfig->csi_ReportConfigToAddModList->list.count; report++) {
|
for (int report = 0; report < csi_MeasConfig->csi_ReportConfigToAddModList->list.count; report++) {
|
||||||
NR_CSI_ReportConfig_t *csirep = csi_MeasConfig->csi_ReportConfigToAddModList->list.array[report];
|
NR_CSI_ReportConfig_t *csirep = csi_MeasConfig->csi_ReportConfigToAddModList->list.array[report];
|
||||||
if(csirep->codebookConfig)
|
if(csirep->codebookConfig)
|
||||||
config_csi_codebook(&configuration->pdsch_AntennaPorts, *pdsch_servingcellconfig->ext1->maxMIMO_Layers, csirep->codebookConfig);
|
config_csi_codebook(&configuration->pdsch_AntennaPorts, *pdsch_servingcellconfig->ext1->maxMIMO_Layers, csirep->codebookConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
NR_UplinkConfig_t *uplinkConfig = spCellConfigDedicated->uplinkConfig;
|
||||||
NR_UplinkConfig_t *uplinkConfig =
|
|
||||||
SpCellConfig && SpCellConfig->spCellConfigDedicated ? SpCellConfig->spCellConfigDedicated->uplinkConfig : NULL;
|
|
||||||
|
|
||||||
long maxMIMO_Layers = set_ul_max_layers(configuration, uecap);
|
long maxMIMO_Layers = set_ul_max_layers(configuration, uecap);
|
||||||
if (uplinkConfig->initialUplinkBWP->pusch_Config) {
|
|
||||||
NR_PUSCH_Config_t *pusch_Config = uplinkConfig->initialUplinkBWP->pusch_Config->choice.setup;
|
|
||||||
if (pusch_Config->maxRank == NULL) {
|
|
||||||
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
|
||||||
}
|
|
||||||
*pusch_Config->maxRank = maxMIMO_Layers;
|
|
||||||
}
|
|
||||||
if (!uplinkConfig->pusch_ServingCellConfig)
|
if (!uplinkConfig->pusch_ServingCellConfig)
|
||||||
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
||||||
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||||
@@ -3746,64 +3719,57 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1));
|
calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1));
|
||||||
asn1cCallocOne(uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers, maxMIMO_Layers);
|
asn1cCallocOne(uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers, maxMIMO_Layers);
|
||||||
|
|
||||||
// UL and SRS configuration
|
// Update UL BWP
|
||||||
if (configuration->do_SRS && uplinkConfig && uplinkConfig->initialUplinkBWP) {
|
NR_BWP_UplinkDedicated_t *ul_bwp_Dedicated = NULL;
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_SetupRelease_SRS_Config, uplinkConfig->initialUplinkBWP->srs_Config);
|
int curr_bwp = 0;
|
||||||
uplinkConfig->initialUplinkBWP->srs_Config = get_config_srs(scc,
|
int bwp_id = 0;
|
||||||
uecap,
|
if (uplinkConfig && uplinkConfig->initialUplinkBWP) {
|
||||||
curr_bwp,
|
ul_bwp_Dedicated = uplinkConfig->initialUplinkBWP;
|
||||||
uid,
|
curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
0,
|
} else if (uplinkConfig && uplinkConfig->uplinkBWP_ToAddModList) {
|
||||||
maxMIMO_Layers,
|
struct NR_UplinkConfig__uplinkBWP_ToAddModList *UL_BWP_list = uplinkConfig->uplinkBWP_ToAddModList;
|
||||||
configuration->minRXTXTIME,
|
AssertFatal(UL_BWP_list->list.count == 1, "We should only have 1 BWP configured at a given time\n");
|
||||||
configuration->do_SRS);
|
NR_BWP_Uplink_t *ul_bwp = UL_BWP_list->list.array[0];
|
||||||
|
curr_bwp = NRRIV2BW(ul_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
ul_bwp_Dedicated = ul_bwp->bwp_Dedicated;
|
||||||
|
bwp_id = ul_bwp->bwp_Id;
|
||||||
}
|
}
|
||||||
|
if (ul_bwp_Dedicated) {
|
||||||
// Set DL MCS table
|
NR_PUSCH_Config_t *pusch_Config = ul_bwp_Dedicated->pusch_Config->choice.setup;
|
||||||
NR_BWP_DownlinkDedicated_t *bwp_Dedicated = SpCellConfig->spCellConfigDedicated->initialDownlinkBWP;
|
if (!pusch_Config->maxRank)
|
||||||
set_dl_mcs_table(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing,
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
configuration->force_256qam_off ? NULL : uecap,
|
*pusch_Config->maxRank = maxMIMO_Layers;
|
||||||
bwp_Dedicated,
|
if (configuration->do_SRS) {
|
||||||
scc);
|
ASN_STRUCT_FREE(asn_DEF_NR_SetupRelease_SRS_Config, ul_bwp_Dedicated->srs_Config);
|
||||||
|
ul_bwp_Dedicated->srs_Config = get_config_srs(scc,
|
||||||
NR_BWP_UplinkDedicated_t *ul_bwp_Dedicated = SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
|
uecap,
|
||||||
set_ul_mcs_table(configuration->force_UL256qam_off ? NULL : uecap, scc, ul_bwp_Dedicated->pusch_Config->choice.setup);
|
curr_bwp,
|
||||||
|
uid,
|
||||||
struct NR_ServingCellConfig__downlinkBWP_ToAddModList *DL_BWP_list =
|
bwp_id,
|
||||||
SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList;
|
maxMIMO_Layers,
|
||||||
struct NR_UplinkConfig__uplinkBWP_ToAddModList *UL_BWP_list = uplinkConfig ? uplinkConfig->uplinkBWP_ToAddModList : NULL;
|
configuration->minRXTXTIME,
|
||||||
if (DL_BWP_list) {
|
configuration->do_SRS);
|
||||||
for (int i = 0; i < DL_BWP_list->list.count; i++) {
|
|
||||||
NR_BWP_Downlink_t *bwp = DL_BWP_list->list.array[i];
|
|
||||||
int scs = bwp->bwp_Common->genericParameters.subcarrierSpacing;
|
|
||||||
set_dl_mcs_table(scs, configuration->force_256qam_off ? NULL : uecap, bwp->bwp_Dedicated, scc);
|
|
||||||
}
|
}
|
||||||
|
set_ul_mcs_table(configuration->force_UL256qam_off ? NULL : uecap, scc, pusch_Config);
|
||||||
}
|
}
|
||||||
if (UL_BWP_list) {
|
|
||||||
for (int i = 0; i < UL_BWP_list->list.count; i++) {
|
|
||||||
NR_BWP_Uplink_t *ul_bwp = UL_BWP_list->list.array[i];
|
|
||||||
int bwp_size = NRRIV2BW(ul_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
|
||||||
if (ul_bwp->bwp_Dedicated->pusch_Config) {
|
|
||||||
NR_PUSCH_Config_t *pusch_Config = ul_bwp->bwp_Dedicated->pusch_Config->choice.setup;
|
|
||||||
set_ul_mcs_table(configuration->force_UL256qam_off ? NULL : uecap, scc, pusch_Config);
|
|
||||||
if (pusch_Config->maxRank == NULL) {
|
|
||||||
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
|
||||||
}
|
|
||||||
*pusch_Config->maxRank = maxMIMO_Layers;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_SetupRelease_SRS_Config, ul_bwp->bwp_Dedicated->srs_Config);
|
// Update DL BWP
|
||||||
ul_bwp->bwp_Dedicated->srs_Config = get_config_srs(scc,
|
NR_BWP_DownlinkDedicated_t *bwp_Dedicated = NULL;
|
||||||
uecap,
|
int scs = -1;
|
||||||
bwp_size,
|
if (spCellConfigDedicated->initialDownlinkBWP) {
|
||||||
uid,
|
bwp_Dedicated = spCellConfigDedicated->initialDownlinkBWP;
|
||||||
i + 1,
|
scs = scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing;
|
||||||
maxMIMO_Layers,
|
} else if (spCellConfigDedicated->downlinkBWP_ToAddModList) {
|
||||||
configuration->minRXTXTIME,
|
struct NR_ServingCellConfig__downlinkBWP_ToAddModList *DL_BWP_list = spCellConfigDedicated->downlinkBWP_ToAddModList;
|
||||||
configuration->do_SRS);
|
AssertFatal(DL_BWP_list->list.count == 1, "We should only have 1 BWP configured at a given time\n");
|
||||||
}
|
NR_BWP_Downlink_t *bwp = DL_BWP_list->list.array[0];
|
||||||
|
bwp_Dedicated = bwp->bwp_Dedicated;
|
||||||
|
scs = bwp->bwp_Common->genericParameters.subcarrierSpacing;
|
||||||
|
}
|
||||||
|
if (bwp_Dedicated) {
|
||||||
|
set_dl_mcs_table(scs, configuration->force_256qam_off ? NULL : uecap, bwp_Dedicated, scc);
|
||||||
|
update_cqitables(bwp_Dedicated->pdsch_Config, csi_MeasConfig);
|
||||||
}
|
}
|
||||||
update_cqitables(bwp_Dedicated->pdsch_Config, csi_MeasConfig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig)
|
void free_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig)
|
||||||
@@ -3935,15 +3901,13 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
}
|
}
|
||||||
configDedicated->downlinkBWP_ToAddModList = calloc(1, sizeof(*configDedicated->downlinkBWP_ToAddModList));
|
configDedicated->downlinkBWP_ToAddModList = calloc(1, sizeof(*configDedicated->downlinkBWP_ToAddModList));
|
||||||
for (int bwp_loop = 0; bwp_loop < n_dl_bwp; bwp_loop++) {
|
for (int bwp_loop = 0; bwp_loop < n_dl_bwp; bwp_loop++) {
|
||||||
NR_BWP_Downlink_t *bwp = calloc(1, sizeof(*bwp));
|
NR_BWP_Downlink_t *bwp = config_downlinkBWP(servingcellconfigcommon,
|
||||||
config_downlinkBWP(bwp,
|
uecap,
|
||||||
servingcellconfigcommon,
|
dl_antenna_ports,
|
||||||
uecap,
|
configuration->force_256qam_off,
|
||||||
dl_antenna_ports,
|
bwp_loop,
|
||||||
configuration->force_256qam_off,
|
false,
|
||||||
bwp_loop,
|
configuration);
|
||||||
false,
|
|
||||||
configuration);
|
|
||||||
asn1cSeqAdd(&configDedicated->downlinkBWP_ToAddModList->list, bwp);
|
asn1cSeqAdd(&configDedicated->downlinkBWP_ToAddModList->list, bwp);
|
||||||
configDedicated->firstActiveDownlinkBWP_Id = calloc(1, sizeof(*configDedicated->firstActiveDownlinkBWP_Id));
|
configDedicated->firstActiveDownlinkBWP_Id = calloc(1, sizeof(*configDedicated->firstActiveDownlinkBWP_Id));
|
||||||
*configDedicated->firstActiveDownlinkBWP_Id = firstActiveDownlinkBWP_Id;
|
*configDedicated->firstActiveDownlinkBWP_Id = firstActiveDownlinkBWP_Id;
|
||||||
@@ -3961,8 +3925,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
if (n_ul_bwp > 0) {
|
if (n_ul_bwp > 0) {
|
||||||
ulConfig->uplinkBWP_ToAddModList = calloc(1, sizeof(*ulConfig->uplinkBWP_ToAddModList));
|
ulConfig->uplinkBWP_ToAddModList = calloc(1, sizeof(*ulConfig->uplinkBWP_ToAddModList));
|
||||||
for (int bwp_loop = 0; bwp_loop < n_ul_bwp; bwp_loop++) {
|
for (int bwp_loop = 0; bwp_loop < n_ul_bwp; bwp_loop++) {
|
||||||
NR_BWP_Uplink_t *ubwp = calloc(1, sizeof(*ubwp));
|
NR_BWP_Uplink_t *ubwp = config_uplinkBWP(bwp_loop, false, uid, maxMIMO_Layers, configuration, servingcellconfigcommon, uecap);
|
||||||
config_uplinkBWP(ubwp, bwp_loop, false, uid, maxMIMO_Layers, configuration, servingcellconfigcommon, uecap);
|
|
||||||
asn1cSeqAdd(&ulConfig->uplinkBWP_ToAddModList->list, ubwp);
|
asn1cSeqAdd(&ulConfig->uplinkBWP_ToAddModList->list, ubwp);
|
||||||
}
|
}
|
||||||
ulConfig->firstActiveUplinkBWP_Id = calloc(1, sizeof(*ulConfig->firstActiveUplinkBWP_Id));
|
ulConfig->firstActiveUplinkBWP_Id = calloc(1, sizeof(*ulConfig->firstActiveUplinkBWP_Id));
|
||||||
@@ -4125,7 +4088,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
configDedicated->pathlossReferenceLinking = NULL;
|
configDedicated->pathlossReferenceLinking = NULL;
|
||||||
configDedicated->servingCellMO = NULL;
|
configDedicated->servingCellMO = NULL;
|
||||||
|
|
||||||
fill_harq_IEs(configDedicated, configuration->num_dlharq, configuration->num_ulharq);
|
fill_harq_IEs(configDedicated, configuration->num_dlharq, configuration->num_ulharq, firstActiveDownlinkBWP_Id);
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated = configDedicated;
|
secondaryCellGroup->spCellConfig->spCellConfigDedicated = configDedicated;
|
||||||
|
|
||||||
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user