function to determine max UL MIMO layers
This commit is contained in:
@@ -3726,6 +3726,30 @@ NR_CellGroupConfig_t *get_initial_cellGroupConfig(int uid,
|
|||||||
return cellGroupConfig;
|
return cellGroupConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long set_ul_max_layers(const nr_mac_config_t *configuration, const NR_UE_NR_Capability_t *uecap)
|
||||||
|
{
|
||||||
|
long ul_max_layers = 1;
|
||||||
|
if (uecap && uecap->featureSets
|
||||||
|
&& uecap->featureSets->featureSetsUplinkPerCC
|
||||||
|
&& uecap->featureSets->featureSetsUplinkPerCC->list.count > 0) {
|
||||||
|
NR_FeatureSetUplinkPerCC_t *ul_feature_setup_per_cc = uecap->featureSets->featureSetsUplinkPerCC->list.array[0];
|
||||||
|
if (ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
||||||
|
switch (*ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
||||||
|
case NR_MIMO_LayersUL_twoLayers:
|
||||||
|
ul_max_layers = 2;
|
||||||
|
break;
|
||||||
|
case NR_MIMO_LayersUL_fourLayers:
|
||||||
|
ul_max_layers = 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ul_max_layers = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul_max_layers = min(ul_max_layers, configuration->pusch_AntennaPorts);
|
||||||
|
}
|
||||||
|
return ul_max_layers;
|
||||||
|
}
|
||||||
|
|
||||||
void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
||||||
const int uid,
|
const int uid,
|
||||||
const NR_UE_NR_Capability_t *uecap,
|
const NR_UE_NR_Capability_t *uecap,
|
||||||
@@ -3753,46 +3777,24 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
NR_UplinkConfig_t *uplinkConfig =
|
NR_UplinkConfig_t *uplinkConfig =
|
||||||
SpCellConfig && SpCellConfig->spCellConfigDedicated ? SpCellConfig->spCellConfigDedicated->uplinkConfig : NULL;
|
SpCellConfig && SpCellConfig->spCellConfigDedicated ? SpCellConfig->spCellConfigDedicated->uplinkConfig : NULL;
|
||||||
|
|
||||||
uint8_t ul_max_layers = 1;
|
long maxMIMO_Layers = set_ul_max_layers(configuration, uecap);
|
||||||
if (uecap && uecap->featureSets && uecap->featureSets->featureSetsUplinkPerCC
|
if (uplinkConfig->initialUplinkBWP->pusch_Config) {
|
||||||
&& uecap->featureSets->featureSetsUplinkPerCC->list.count > 0) {
|
NR_PUSCH_Config_t *pusch_Config = uplinkConfig->initialUplinkBWP->pusch_Config->choice.setup;
|
||||||
NR_FeatureSetUplinkPerCC_t *ul_feature_setup_per_cc = uecap->featureSets->featureSetsUplinkPerCC->list.array[0];
|
if (pusch_Config->maxRank == NULL) {
|
||||||
if (ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
switch (*ul_feature_setup_per_cc->mimo_CB_PUSCH->maxNumberMIMO_LayersCB_PUSCH) {
|
|
||||||
case NR_MIMO_LayersUL_twoLayers:
|
|
||||||
ul_max_layers = 2;
|
|
||||||
break;
|
|
||||||
case NR_MIMO_LayersUL_fourLayers:
|
|
||||||
ul_max_layers = 4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ul_max_layers = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ul_max_layers = min(ul_max_layers, configuration->pusch_AntennaPorts);
|
*pusch_Config->maxRank = maxMIMO_Layers;
|
||||||
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 = ul_max_layers;
|
|
||||||
}
|
|
||||||
if (!uplinkConfig->pusch_ServingCellConfig)
|
|
||||||
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
|
||||||
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
|
||||||
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup)
|
|
||||||
uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup));
|
|
||||||
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1)
|
|
||||||
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1 =
|
|
||||||
calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1));
|
|
||||||
asn1cCallocOne(uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers, ul_max_layers);
|
|
||||||
}
|
}
|
||||||
|
if (!uplinkConfig->pusch_ServingCellConfig)
|
||||||
|
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||||
|
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup)
|
||||||
|
uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup));
|
||||||
|
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1)
|
||||||
|
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);
|
||||||
|
|
||||||
long maxMIMO_Layers = uplinkConfig && uplinkConfig->pusch_ServingCellConfig
|
|
||||||
&& uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1
|
|
||||||
&& uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers
|
|
||||||
? *uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers
|
|
||||||
: 1;
|
|
||||||
|
|
||||||
// UL and SRS configuration
|
// UL and SRS configuration
|
||||||
if (configuration->do_SRS && uplinkConfig && uplinkConfig->initialUplinkBWP) {
|
if (configuration->do_SRS && uplinkConfig && uplinkConfig->initialUplinkBWP) {
|
||||||
@@ -3837,7 +3839,7 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
|||||||
if (pusch_Config->maxRank == NULL) {
|
if (pusch_Config->maxRank == NULL) {
|
||||||
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
pusch_Config->maxRank = calloc(1, sizeof(*pusch_Config->maxRank));
|
||||||
}
|
}
|
||||||
*pusch_Config->maxRank = ul_max_layers;
|
*pusch_Config->maxRank = maxMIMO_Layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_SetupRelease_SRS_Config, ul_bwp->bwp_Dedicated->srs_Config);
|
ASN_STRUCT_FREE(asn_DEF_NR_SetupRelease_SRS_Config, ul_bwp->bwp_Dedicated->srs_Config);
|
||||||
@@ -3973,13 +3975,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
uecap,
|
uecap,
|
||||||
configuration->ptrs);
|
configuration->ptrs);
|
||||||
|
|
||||||
long maxMIMO_Layers =
|
long maxMIMO_Layers = set_ul_max_layers(configuration, uecap);
|
||||||
servingcellconfigdedicated->uplinkConfig && servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig
|
|
||||||
&& servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1
|
|
||||||
&& servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers
|
|
||||||
? *servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers
|
|
||||||
: 1;
|
|
||||||
|
|
||||||
int curr_bwp = NRRIV2BW(servingcellconfigcommon->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,
|
int curr_bwp = NRRIV2BW(servingcellconfigcommon->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,
|
||||||
MAX_BWP_SIZE);
|
MAX_BWP_SIZE);
|
||||||
initialUplinkBWP->srs_Config = get_config_srs(servingcellconfigcommon,
|
initialUplinkBWP->srs_Config = get_config_srs(servingcellconfigcommon,
|
||||||
@@ -4064,7 +4060,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
pusch_scc->xOverhead = NULL;
|
pusch_scc->xOverhead = NULL;
|
||||||
if (!pusch_scc->ext1)
|
if (!pusch_scc->ext1)
|
||||||
pusch_scc->ext1 = calloc(1, sizeof(*pusch_scc->ext1));
|
pusch_scc->ext1 = calloc(1, sizeof(*pusch_scc->ext1));
|
||||||
asn1cCallocOne(pusch_scc->ext1->maxMIMO_Layers, 1);
|
asn1cCallocOne(pusch_scc->ext1->maxMIMO_Layers, maxMIMO_Layers);
|
||||||
pusch_scc->ext1->processingType2Enabled = NULL;
|
pusch_scc->ext1->processingType2Enabled = NULL;
|
||||||
|
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->carrierSwitching = NULL;
|
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->carrierSwitching = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user