rework PTRS configuration via file
This commit is contained in:
@@ -139,22 +139,6 @@
|
|||||||
|
|
||||||
/* Serving Cell Config Dedicated */
|
/* Serving Cell Config Dedicated */
|
||||||
#define GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED "servingCellConfigDedicated"
|
#define GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED "servingCellConfigDedicated"
|
||||||
#define GNB_CONFIG_STRING_DLPTRSFREQDENSITY0_0 "dl_ptrsFreqDensity0_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSFREQDENSITY1_0 "dl_ptrsFreqDensity1_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY0_0 "dl_ptrsTimeDensity0_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY1_0 "dl_ptrsTimeDensity1_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY2_0 "dl_ptrsTimeDensity2_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSEPRERATIO_0 "dl_ptrsEpreRatio_0"
|
|
||||||
#define GNB_CONFIG_STRING_DLPTRSREOFFSET_0 "dl_ptrsReOffset_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSFREQDENSITY0_0 "ul_ptrsFreqDensity0_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSFREQDENSITY1_0 "ul_ptrsFreqDensity1_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY0_0 "ul_ptrsTimeDensity0_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY1_0 "ul_ptrsTimeDensity1_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY2_0 "ul_ptrsTimeDensity2_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSREOFFSET_0 "ul_ptrsReOffset_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSMAXPORTS_0 "ul_ptrsMaxPorts_0"
|
|
||||||
#define GNB_CONFIG_STRING_ULPTRSPOWER_0 "ul_ptrsPower_0"
|
|
||||||
|
|
||||||
#define GNB_CONFIG_STRING_DLBWP1_ID "dl_bwp-Id_1"
|
#define GNB_CONFIG_STRING_DLBWP1_ID "dl_bwp-Id_1"
|
||||||
#define GNB_CONFIG_STRING_DLBWP2_ID "dl_bwp-Id_2"
|
#define GNB_CONFIG_STRING_DLBWP2_ID "dl_bwp-Id_2"
|
||||||
#define GNB_CONFIG_STRING_DLBWP3_ID "dl_bwp-Id_3"
|
#define GNB_CONFIG_STRING_DLBWP3_ID "dl_bwp-Id_3"
|
||||||
@@ -277,21 +261,6 @@
|
|||||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define SCDPARAMS_DESC(scd) { \
|
#define SCDPARAMS_DESC(scd) { \
|
||||||
{GNB_CONFIG_STRING_DLPTRSFREQDENSITY0_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity->list.array[0],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSFREQDENSITY1_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity->list.array[1],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY0_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity->list.array[0],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY1_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity->list.array[1],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY2_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity->list.array[2],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSEPRERATIO_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->epre_Ratio,.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_DLPTRSREOFFSET_0,NULL,0,.i64ptr=scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->resourceElementOffset,.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSFREQDENSITY0_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->frequencyDensity->list.array[0],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSFREQDENSITY1_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->frequencyDensity->list.array[1],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY0_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.array[0],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY1_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.array[1],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY2_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.array[2],.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSREOFFSET_0,NULL,0,.i64ptr=scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->resourceElementOffset,.defint64val=-1,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSMAXPORTS_0,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->maxNrofPorts,.defint64val=0,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_ULPTRSPOWER_0,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup->transformPrecoderDisabled->ptrs_Power,.defint64val=0,TYPE_INT64,0}, \
|
|
||||||
{GNB_CONFIG_STRING_FIRSTACTIVEDLBWP_ID,NULL,0,.i64ptr=scd->firstActiveDownlinkBWP_Id,.defint64val=1,TYPE_INT64,0}, \
|
{GNB_CONFIG_STRING_FIRSTACTIVEDLBWP_ID,NULL,0,.i64ptr=scd->firstActiveDownlinkBWP_Id,.defint64val=1,TYPE_INT64,0}, \
|
||||||
{GNB_CONFIG_STRING_FIRSTACTIVEULBWP_ID,NULL,0,.i64ptr=scd->uplinkConfig->firstActiveUplinkBWP_Id,.defint64val=1,TYPE_INT64,0}, \
|
{GNB_CONFIG_STRING_FIRSTACTIVEULBWP_ID,NULL,0,.i64ptr=scd->uplinkConfig->firstActiveUplinkBWP_Id,.defint64val=1,TYPE_INT64,0}, \
|
||||||
{GNB_CONFIG_STRING_DLBWP1_ID,NULL,0,.i64ptr=&scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Id,.defint64val=1,TYPE_INT64,0}, \
|
{GNB_CONFIG_STRING_DLBWP1_ID,NULL,0,.i64ptr=&scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Id,.defint64val=1,TYPE_INT64,0}, \
|
||||||
@@ -320,6 +289,7 @@
|
|||||||
{GNB_CONFIG_STRING_LOCATIONANDBANDWIDTH_ULBWP4,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[3]->bwp_Common->genericParameters.locationAndBandwidth,.defint64val=0,TYPE_INT64,0}, \
|
{GNB_CONFIG_STRING_LOCATIONANDBANDWIDTH_ULBWP4,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[3]->bwp_Common->genericParameters.locationAndBandwidth,.defint64val=0,TYPE_INT64,0}, \
|
||||||
{GNB_CONFIG_STRING_DEFAULTDLBWP_ID,NULL,0,.i64ptr=scd->defaultDownlinkBWP_Id,.defint64val=0,TYPE_INT64,0}}
|
{GNB_CONFIG_STRING_DEFAULTDLBWP_ID,NULL,0,.i64ptr=scd->defaultDownlinkBWP_Id,.defint64val=0,TYPE_INT64,0}}
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* Serving Cell Config Common configuration parameters to apply in RA 2-Step */
|
/* Serving Cell Config Common configuration parameters to apply in RA 2-Step */
|
||||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|||||||
+45
-170
@@ -686,80 +686,13 @@ void prepare_scd(NR_ServingCellConfig_t *scd) {
|
|||||||
bwp->bwp_Common->pdcch_ConfigCommon = calloc_or_fail(1, sizeof(*bwp->bwp_Common->pdcch_ConfigCommon));
|
bwp->bwp_Common->pdcch_ConfigCommon = calloc_or_fail(1, sizeof(*bwp->bwp_Common->pdcch_ConfigCommon));
|
||||||
bwp->bwp_Common->pdsch_ConfigCommon = calloc_or_fail(1, sizeof(*bwp->bwp_Common->pdsch_ConfigCommon));
|
bwp->bwp_Common->pdsch_ConfigCommon = calloc_or_fail(1, sizeof(*bwp->bwp_Common->pdsch_ConfigCommon));
|
||||||
bwp->bwp_Dedicated = calloc_or_fail(1, sizeof(*bwp->bwp_Dedicated));
|
bwp->bwp_Dedicated = calloc_or_fail(1, sizeof(*bwp->bwp_Dedicated));
|
||||||
bwp->bwp_Dedicated->pdsch_Config = calloc_or_fail(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config));
|
|
||||||
struct NR_SetupRelease_PDSCH_Config *pdsch_Config = bwp->bwp_Dedicated->pdsch_Config;
|
|
||||||
pdsch_Config->present = NR_SetupRelease_PDSCH_Config_PR_setup;
|
|
||||||
pdsch_Config->choice.setup = calloc_or_fail(1, sizeof(*pdsch_Config->choice.setup));
|
|
||||||
struct NR_PDSCH_Config *pc_setup = pdsch_Config->choice.setup;
|
|
||||||
pc_setup->dmrs_DownlinkForPDSCH_MappingTypeA = calloc_or_fail(1, sizeof(*pc_setup->dmrs_DownlinkForPDSCH_MappingTypeA));
|
|
||||||
struct NR_SetupRelease_DMRS_DownlinkConfig *typeA = pc_setup->dmrs_DownlinkForPDSCH_MappingTypeA;
|
|
||||||
typeA->present = NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
|
||||||
|
|
||||||
// Allocate DL DMRS and PTRS configuration
|
|
||||||
typeA->choice.setup = calloc_or_fail(1, sizeof(*typeA->choice.setup));
|
|
||||||
NR_DMRS_DownlinkConfig_t *NR_DMRS_DownlinkCfg = typeA->choice.setup;
|
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS = calloc_or_fail(1, sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS));
|
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup;
|
|
||||||
NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup =
|
|
||||||
calloc_or_fail(1, sizeof(*NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup));
|
|
||||||
NR_PTRS_DownlinkConfig_t *NR_PTRS_DownlinkCfg = NR_DMRS_DownlinkCfg->phaseTrackingRS->choice.setup;
|
|
||||||
NR_PTRS_DownlinkCfg->frequencyDensity = calloc_or_fail(1, sizeof(*NR_PTRS_DownlinkCfg->frequencyDensity));
|
|
||||||
for (int i=0;i<2;i++) {
|
|
||||||
long *a = calloc_or_fail(1, sizeof(*a));
|
|
||||||
asn1cSeqAdd(&NR_PTRS_DownlinkCfg->frequencyDensity->list, a);
|
|
||||||
}
|
|
||||||
NR_PTRS_DownlinkCfg->timeDensity = calloc_or_fail(1, sizeof(*NR_PTRS_DownlinkCfg->timeDensity));
|
|
||||||
for (int i=0;i<3;i++) {
|
|
||||||
long *dl_mcs = calloc_or_fail(1, sizeof(*dl_mcs));
|
|
||||||
asn1cSeqAdd(&NR_PTRS_DownlinkCfg->timeDensity->list, dl_mcs);
|
|
||||||
}
|
|
||||||
NR_PTRS_DownlinkCfg->epre_Ratio = calloc_or_fail(1, sizeof(*NR_PTRS_DownlinkCfg->epre_Ratio));
|
|
||||||
NR_PTRS_DownlinkCfg->resourceElementOffset = calloc_or_fail(1, sizeof(*NR_PTRS_DownlinkCfg->resourceElementOffset));
|
|
||||||
*NR_PTRS_DownlinkCfg->resourceElementOffset = 0;
|
|
||||||
asn1cSeqAdd(&scd->downlinkBWP_ToAddModList->list,bwp);
|
asn1cSeqAdd(&scd->downlinkBWP_ToAddModList->list,bwp);
|
||||||
|
|
||||||
// Allocate uplink structures
|
|
||||||
|
|
||||||
NR_PUSCH_Config_t *pusch_Config = calloc_or_fail(1, sizeof(*pusch_Config));
|
|
||||||
|
|
||||||
// Allocate UL DMRS and PTRS structures
|
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB = calloc_or_fail(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB));
|
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->present = NR_SetupRelease_DMRS_UplinkConfig_PR_setup;
|
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup =
|
|
||||||
calloc_or_fail(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
|
|
||||||
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS = calloc_or_fail(1, sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS));
|
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS->present = NR_SetupRelease_PTRS_UplinkConfig_PR_setup;
|
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup =
|
|
||||||
calloc_or_fail(1, sizeof(*NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup));
|
|
||||||
NR_PTRS_UplinkConfig_t *NR_PTRS_UplinkConfig = NR_DMRS_UplinkConfig->phaseTrackingRS->choice.setup;
|
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled = calloc_or_fail(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled));
|
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity =
|
|
||||||
calloc_or_fail(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity));
|
|
||||||
for (int i=0;i<2;i++) {
|
|
||||||
long *n_rbs = calloc_or_fail(1, sizeof(*n_rbs));
|
|
||||||
asn1cSeqAdd(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->frequencyDensity->list, n_rbs);
|
|
||||||
}
|
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity =
|
|
||||||
calloc_or_fail(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity));
|
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
long *ptrs_mcs = calloc_or_fail(1, sizeof(*ptrs_mcs));
|
|
||||||
asn1cSeqAdd(&NR_PTRS_UplinkConfig->transformPrecoderDisabled->timeDensity->list, ptrs_mcs);
|
|
||||||
}
|
|
||||||
NR_PTRS_UplinkConfig->transformPrecoderDisabled->resourceElementOffset =
|
|
||||||
calloc_or_fail(1, sizeof(*NR_PTRS_UplinkConfig->transformPrecoderDisabled->resourceElementOffset));
|
|
||||||
*NR_PTRS_UplinkConfig->transformPrecoderDisabled->resourceElementOffset = 0;
|
|
||||||
|
|
||||||
// UL bandwidth part
|
// UL bandwidth part
|
||||||
NR_BWP_Uplink_t *ubwp = calloc_or_fail(1, sizeof(*ubwp));
|
NR_BWP_Uplink_t *ubwp = calloc_or_fail(1, sizeof(*ubwp));
|
||||||
ubwp->bwp_Id = j+1;
|
ubwp->bwp_Id = j+1;
|
||||||
ubwp->bwp_Common = calloc_or_fail(1, sizeof(*ubwp->bwp_Common));
|
ubwp->bwp_Common = calloc_or_fail(1, sizeof(*ubwp->bwp_Common));
|
||||||
ubwp->bwp_Dedicated = calloc_or_fail(1, sizeof(*ubwp->bwp_Dedicated));
|
ubwp->bwp_Dedicated = calloc_or_fail(1, sizeof(*ubwp->bwp_Dedicated));
|
||||||
|
|
||||||
ubwp->bwp_Dedicated->pusch_Config = calloc_or_fail(1, sizeof(*ubwp->bwp_Dedicated->pusch_Config));
|
|
||||||
ubwp->bwp_Dedicated->pusch_Config->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
|
||||||
ubwp->bwp_Dedicated->pusch_Config->choice.setup = pusch_Config;
|
|
||||||
|
|
||||||
asn1cSeqAdd(&scd->uplinkConfig->uplinkBWP_ToAddModList->list,ubwp);
|
asn1cSeqAdd(&scd->uplinkConfig->uplinkBWP_ToAddModList->list,ubwp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -788,93 +721,6 @@ void fix_scd(NR_ServingCellConfig_t *scd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for DL PTRS parameters validity
|
|
||||||
for (int bwp_i = 0 ; bwp_i<scd->downlinkBWP_ToAddModList->list.count; bwp_i++) {
|
|
||||||
|
|
||||||
NR_DMRS_DownlinkConfig_t *dmrs_dl_config = scd->downlinkBWP_ToAddModList->list.array[bwp_i]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
|
||||||
|
|
||||||
if (dmrs_dl_config->phaseTrackingRS) {
|
|
||||||
// If any of the frequencyDensity values are not set or are out of bounds, PTRS is assumed to be not present
|
|
||||||
for (int i = dmrs_dl_config->phaseTrackingRS->choice.setup->frequencyDensity->list.count - 1; i >= 0; i--) {
|
|
||||||
if ((*dmrs_dl_config->phaseTrackingRS->choice.setup->frequencyDensity->list.array[i] < 1)
|
|
||||||
|| (*dmrs_dl_config->phaseTrackingRS->choice.setup->frequencyDensity->list.array[i] > 276)) {
|
|
||||||
LOG_I(GNB_APP, "DL PTRS frequencyDensity %d not set. Assuming PTRS not present! \n", i);
|
|
||||||
free(dmrs_dl_config->phaseTrackingRS);
|
|
||||||
dmrs_dl_config->phaseTrackingRS = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmrs_dl_config->phaseTrackingRS) {
|
|
||||||
// If any of the timeDensity values are not set or are out of bounds, PTRS is assumed to be not present
|
|
||||||
for (int i = dmrs_dl_config->phaseTrackingRS->choice.setup->timeDensity->list.count - 1; i >= 0; i--) {
|
|
||||||
if ((*dmrs_dl_config->phaseTrackingRS->choice.setup->timeDensity->list.array[i] < 0)
|
|
||||||
|| (*dmrs_dl_config->phaseTrackingRS->choice.setup->timeDensity->list.array[i] > 29)) {
|
|
||||||
LOG_I(GNB_APP, "DL PTRS timeDensity %d not set. Assuming PTRS not present! \n", i);
|
|
||||||
free(dmrs_dl_config->phaseTrackingRS);
|
|
||||||
dmrs_dl_config->phaseTrackingRS = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmrs_dl_config->phaseTrackingRS) {
|
|
||||||
if (*dmrs_dl_config->phaseTrackingRS->choice.setup->resourceElementOffset > 2) {
|
|
||||||
LOG_I(GNB_APP, "Freeing DL PTRS resourceElementOffset \n");
|
|
||||||
free(dmrs_dl_config->phaseTrackingRS->choice.setup->resourceElementOffset);
|
|
||||||
dmrs_dl_config->phaseTrackingRS->choice.setup->resourceElementOffset = NULL;
|
|
||||||
}
|
|
||||||
if (*dmrs_dl_config->phaseTrackingRS->choice.setup->epre_Ratio > 1) {
|
|
||||||
LOG_I(GNB_APP, "Freeing DL PTRS epre_Ratio \n");
|
|
||||||
free(dmrs_dl_config->phaseTrackingRS->choice.setup->epre_Ratio);
|
|
||||||
dmrs_dl_config->phaseTrackingRS->choice.setup->epre_Ratio = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for UL PTRS parameters validity
|
|
||||||
for (int bwp_i = 0 ; bwp_i<scd->uplinkConfig->uplinkBWP_ToAddModList->list.count; bwp_i++) {
|
|
||||||
|
|
||||||
NR_DMRS_UplinkConfig_t *dmrs_ul_config = scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_i]->bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
|
||||||
|
|
||||||
if (dmrs_ul_config->phaseTrackingRS) {
|
|
||||||
// If any of the frequencyDensity values are not set or are out of bounds, PTRS is assumed to be not present
|
|
||||||
for (int i = dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->frequencyDensity->list.count-1; i >= 0; i--) {
|
|
||||||
if ((*dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->frequencyDensity->list.array[i] < 1)
|
|
||||||
|| (*dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->frequencyDensity->list.array[i] > 276)) {
|
|
||||||
LOG_I(GNB_APP, "UL PTRS frequencyDensity %d not set. Assuming PTRS not present! \n", i);
|
|
||||||
free(dmrs_ul_config->phaseTrackingRS);
|
|
||||||
dmrs_ul_config->phaseTrackingRS = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmrs_ul_config->phaseTrackingRS) {
|
|
||||||
// If any of the timeDensity values are not set or are out of bounds, PTRS is assumed to be not present
|
|
||||||
for (int i = dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.count-1; i >= 0; i--) {
|
|
||||||
if ((*dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.array[i] < 0)
|
|
||||||
|| (*dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->timeDensity->list.array[i] > 29)) {
|
|
||||||
LOG_I(GNB_APP, "UL PTRS timeDensity %d not set. Assuming PTRS not present! \n", i);
|
|
||||||
free(dmrs_ul_config->phaseTrackingRS);
|
|
||||||
dmrs_ul_config->phaseTrackingRS = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmrs_ul_config->phaseTrackingRS) {
|
|
||||||
// Check for UL PTRS parameters validity
|
|
||||||
if (*dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->resourceElementOffset > 2) {
|
|
||||||
LOG_I(GNB_APP, "Freeing UL PTRS resourceElementOffset \n");
|
|
||||||
free(dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->resourceElementOffset);
|
|
||||||
dmrs_ul_config->phaseTrackingRS->choice.setup->transformPrecoderDisabled->resourceElementOffset = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scd->downlinkBWP_ToAddModList->list.count == 0) {
|
if (scd->downlinkBWP_ToAddModList->list.count == 0) {
|
||||||
free(scd->downlinkBWP_ToAddModList->list.array);
|
free(scd->downlinkBWP_ToAddModList->list.array);
|
||||||
free(scd->downlinkBWP_ToAddModList);
|
free(scd->downlinkBWP_ToAddModList);
|
||||||
@@ -1273,21 +1119,6 @@ static NR_ServingCellConfig_t *get_scd_config(configmodule_interface_t *cfg)
|
|||||||
if (SCDsParamList.numelt > 0) {
|
if (SCDsParamList.numelt > 0) {
|
||||||
snprintf(aprefix, sizeof(aprefix), "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED, 0);
|
snprintf(aprefix, sizeof(aprefix), "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED, 0);
|
||||||
GET_PARAMS(SCDsParams, SCDPARAMS_DESC(scd), aprefix);
|
GET_PARAMS(SCDsParams, SCDPARAMS_DESC(scd), aprefix);
|
||||||
const NR_BWP_UplinkDedicated_t *bwp_Dedicated = scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated;
|
|
||||||
const NR_PTRS_UplinkConfig_t *setup =
|
|
||||||
bwp_Dedicated->pusch_Config->choice.setup->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->phaseTrackingRS->choice.setup;
|
|
||||||
LOG_I(RRC,
|
|
||||||
"Read in ServingCellConfigDedicated UL (FreqDensity_0 %ld, FreqDensity_1 %ld, TimeDensity_0 %ld, TimeDensity_1 %ld, "
|
|
||||||
"TimeDensity_2 %ld, RE offset %ld, First_active_BWP_ID %ld SCS %ld, LocationandBW %ld\n",
|
|
||||||
*setup->transformPrecoderDisabled->frequencyDensity->list.array[0],
|
|
||||||
*setup->transformPrecoderDisabled->frequencyDensity->list.array[1],
|
|
||||||
*setup->transformPrecoderDisabled->timeDensity->list.array[0],
|
|
||||||
*setup->transformPrecoderDisabled->timeDensity->list.array[1],
|
|
||||||
*setup->transformPrecoderDisabled->timeDensity->list.array[2],
|
|
||||||
*setup->transformPrecoderDisabled->resourceElementOffset,
|
|
||||||
*scd->firstActiveDownlinkBWP_Id,
|
|
||||||
scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Common->genericParameters.subcarrierSpacing,
|
|
||||||
scd->downlinkBWP_ToAddModList->list.array[0]->bwp_Common->genericParameters.locationAndBandwidth);
|
|
||||||
}
|
}
|
||||||
fix_scd(scd);
|
fix_scd(scd);
|
||||||
|
|
||||||
@@ -1465,6 +1296,49 @@ static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
|||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static nr_ptrs_config_t *get_ptrs_config(int gnb_idx)
|
||||||
|
{
|
||||||
|
char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
|
||||||
|
snprintf(aprefix, sizeof(aprefix), "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0);
|
||||||
|
GET_PARAMS_LIST(ptrs_ParamsList, ptrs_Params, GNB_PTRS_PARAMS_DESC, GNB_CONFIG_STRING_PTRS, aprefix);
|
||||||
|
if (ptrs_ParamsList.numelt == 0) {
|
||||||
|
LOG_I(GNB_APP, "No PTRS configuration found\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
nr_ptrs_config_t *ptrs = calloc_or_fail(1, sizeof(*ptrs));
|
||||||
|
ptrs->dl_FreqDensity0_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSFREQDENSITY0_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_FreqDensity0_0 %d\n", ptrs->dl_FreqDensity0_0);
|
||||||
|
ptrs->dl_FreqDensity1_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSFREQDENSITY1_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_FreqDensity1_0 %d\n", ptrs->dl_FreqDensity1_0);
|
||||||
|
ptrs->dl_TimeDensity0_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSTIMEDENSITY0_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_TimeDensity0_0 %d\n", ptrs->dl_TimeDensity0_0);
|
||||||
|
ptrs->dl_TimeDensity1_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSTIMEDENSITY1_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_TimeDensity1_0 %d\n", ptrs->dl_TimeDensity1_0);
|
||||||
|
ptrs->dl_TimeDensity2_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSTIMEDENSITY2_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_TimeDensity2_0 %d\n", ptrs->dl_TimeDensity2_0);
|
||||||
|
ptrs->dl_EpreRatio_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSEPRERATIO_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_EpreRatio_0 %d\n", ptrs->dl_EpreRatio_0);
|
||||||
|
ptrs->dl_ReOffset_0 = *ptrs_ParamsList.paramarray[0][GNB_DLPTRSREOFFSET_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: dl_ReOffset_0 %d\n", ptrs->dl_ReOffset_0);
|
||||||
|
ptrs->ul_FreqDensity0_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSFREQDENSITY0_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_FreqDensity0_0 %d\n", ptrs->ul_FreqDensity0_0);
|
||||||
|
ptrs->ul_FreqDensity1_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSFREQDENSITY1_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_FreqDensity1_0 %d\n", ptrs->ul_FreqDensity1_0);
|
||||||
|
ptrs->ul_TimeDensity0_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSTIMEDENSITY0_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_TimeDensity0_0 %d\n", ptrs->ul_TimeDensity0_0);
|
||||||
|
ptrs->ul_TimeDensity1_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSTIMEDENSITY1_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_TimeDensity1_0 %d\n", ptrs->ul_TimeDensity1_0);
|
||||||
|
ptrs->ul_TimeDensity2_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSTIMEDENSITY2_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_TimeDensity2_0 %d\n", ptrs->ul_TimeDensity2_0);
|
||||||
|
ptrs->ul_ReOffset_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSREOFFSET_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_ReOffset_0 %d\n", ptrs->ul_ReOffset_0);
|
||||||
|
ptrs->ul_MaxPorts_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSMAXPORTS_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_MaxPorts_0 %d\n", ptrs->ul_MaxPorts_0);
|
||||||
|
ptrs->ul_Power_0 = *ptrs_ParamsList.paramarray[0][GNB_ULPTRSPOWER_0_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP, "PTRS configuration: ul_Power_0 %d\n", ptrs->ul_Power_0);
|
||||||
|
return ptrs;
|
||||||
|
}
|
||||||
|
|
||||||
static nr_redcap_config_t *get_redcap_config(int gnb_idx)
|
static nr_redcap_config_t *get_redcap_config(int gnb_idx)
|
||||||
{
|
{
|
||||||
paramdef_t RedCap_Params[] = GNB_REDCAP_PARAMS_DESC;
|
paramdef_t RedCap_Params[] = GNB_REDCAP_PARAMS_DESC;
|
||||||
@@ -1479,7 +1353,7 @@ static nr_redcap_config_t *get_redcap_config(int gnb_idx)
|
|||||||
// Check for default/non-existing values in configuration file
|
// Check for default/non-existing values in configuration file
|
||||||
if (*RedCap_Params[GNB_REDCAP_CELL_BARRED_REDCAP1_RX_R17_IDX].i8ptr == -1
|
if (*RedCap_Params[GNB_REDCAP_CELL_BARRED_REDCAP1_RX_R17_IDX].i8ptr == -1
|
||||||
|| *RedCap_Params[GNB_REDCAP_CELL_BARRED_REDCAP2_RX_R17_IDX].i8ptr == -1) {
|
|| *RedCap_Params[GNB_REDCAP_CELL_BARRED_REDCAP2_RX_R17_IDX].i8ptr == -1) {
|
||||||
LOG_I(NR_MAC, "No RedCap configuration found\n");
|
LOG_I(GNB_APP, "No RedCap configuration found\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1641,6 +1515,7 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
|||||||
AssertFatal(config.maxMIMO_layers != 0 && config.maxMIMO_layers <= tot_ant, "Invalid maxMIMO_layers %d\n", config.maxMIMO_layers);
|
AssertFatal(config.maxMIMO_layers != 0 && config.maxMIMO_layers <= tot_ant, "Invalid maxMIMO_layers %d\n", config.maxMIMO_layers);
|
||||||
|
|
||||||
config.redcap = get_redcap_config(0);
|
config.redcap = get_redcap_config(0);
|
||||||
|
config.ptrs = get_ptrs_config(0);
|
||||||
|
|
||||||
char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
|
char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
|
||||||
snprintf(aprefix, sizeof(aprefix), "%s.[%d].%s", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_TIMERS_CONFIG);
|
snprintf(aprefix, sizeof(aprefix), "%s.[%d].%s", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_TIMERS_CONFIG);
|
||||||
|
|||||||
@@ -516,6 +516,60 @@ typedef enum {
|
|||||||
#define GNB_REDCAP_CELL_BARRED_REDCAP2_RX_R17_IDX 1
|
#define GNB_REDCAP_CELL_BARRED_REDCAP2_RX_R17_IDX 1
|
||||||
#define GNB_REDCAP_INTRA_FREQ_RESELECTION_REDCAP_R17_IDX 2
|
#define GNB_REDCAP_INTRA_FREQ_RESELECTION_REDCAP_R17_IDX 2
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* PTRS configuration parameters */
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define GNB_CONFIG_STRING_PTRS "phaseTrackingRS"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSFREQDENSITY0_0 "dl_ptrsFreqDensity0_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSFREQDENSITY1_0 "dl_ptrsFreqDensity1_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY0_0 "dl_ptrsTimeDensity0_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY1_0 "dl_ptrsTimeDensity1_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSTIMEDENSITY2_0 "dl_ptrsTimeDensity2_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSEPRERATIO_0 "dl_ptrsEpreRatio_0"
|
||||||
|
#define GNB_CONFIG_STRING_DLPTRSREOFFSET_0 "dl_ptrsReOffset_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSFREQDENSITY0_0 "ul_ptrsFreqDensity0_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSFREQDENSITY1_0 "ul_ptrsFreqDensity1_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY0_0 "ul_ptrsTimeDensity0_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY1_0 "ul_ptrsTimeDensity1_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSTIMEDENSITY2_0 "ul_ptrsTimeDensity2_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSREOFFSET_0 "ul_ptrsReOffset_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSMAXPORTS_0 "ul_ptrsMaxPorts_0"
|
||||||
|
#define GNB_CONFIG_STRING_ULPTRSPOWER_0 "ul_ptrsPower_0"
|
||||||
|
|
||||||
|
#define GNB_PTRS_PARAMS_DESC { \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSFREQDENSITY0_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSFREQDENSITY1_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY0_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY1_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSTIMEDENSITY2_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSEPRERATIO_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_DLPTRSREOFFSET_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSFREQDENSITY0_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSFREQDENSITY1_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY0_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY1_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSTIMEDENSITY2_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSREOFFSET_0, NULL, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSMAXPORTS_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_ULPTRSPOWER_0, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}}
|
||||||
|
|
||||||
|
#define GNB_DLPTRSFREQDENSITY0_0_IDX 0
|
||||||
|
#define GNB_DLPTRSFREQDENSITY1_0_IDX 1
|
||||||
|
#define GNB_DLPTRSTIMEDENSITY0_0_IDX 2
|
||||||
|
#define GNB_DLPTRSTIMEDENSITY1_0_IDX 3
|
||||||
|
#define GNB_DLPTRSTIMEDENSITY2_0_IDX 4
|
||||||
|
#define GNB_DLPTRSEPRERATIO_0_IDX 5
|
||||||
|
#define GNB_DLPTRSREOFFSET_0_IDX 6
|
||||||
|
#define GNB_ULPTRSFREQDENSITY0_0_IDX 7
|
||||||
|
#define GNB_ULPTRSFREQDENSITY1_0_IDX 8
|
||||||
|
#define GNB_ULPTRSTIMEDENSITY0_0_IDX 9
|
||||||
|
#define GNB_ULPTRSTIMEDENSITY1_0_IDX 10
|
||||||
|
#define GNB_ULPTRSTIMEDENSITY2_0_IDX 11
|
||||||
|
#define GNB_ULPTRSREOFFSET_0_IDX 12
|
||||||
|
#define GNB_ULPTRSMAXPORTS_0_IDX 13
|
||||||
|
#define GNB_ULPTRSPOWER_0_IDX 14
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* SCTP configuration parameters section name */
|
/* SCTP configuration parameters section name */
|
||||||
|
|||||||
@@ -155,6 +155,24 @@ typedef struct nr_redcap_config {
|
|||||||
uint8_t intraFreqReselectionRedCap_r17;
|
uint8_t intraFreqReselectionRedCap_r17;
|
||||||
} nr_redcap_config_t;
|
} nr_redcap_config_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int dl_FreqDensity0_0;
|
||||||
|
int dl_FreqDensity1_0;
|
||||||
|
int dl_TimeDensity0_0;
|
||||||
|
int dl_TimeDensity1_0;
|
||||||
|
int dl_TimeDensity2_0;
|
||||||
|
int dl_EpreRatio_0;
|
||||||
|
int dl_ReOffset_0;
|
||||||
|
int ul_FreqDensity0_0;
|
||||||
|
int ul_FreqDensity1_0;
|
||||||
|
int ul_TimeDensity0_0;
|
||||||
|
int ul_TimeDensity1_0;
|
||||||
|
int ul_TimeDensity2_0;
|
||||||
|
int ul_ReOffset_0;
|
||||||
|
int ul_MaxPorts_0;
|
||||||
|
int ul_Power_0;
|
||||||
|
} nr_ptrs_config_t;
|
||||||
|
|
||||||
typedef struct nr_mac_config_t {
|
typedef struct nr_mac_config_t {
|
||||||
int sib1_tda;
|
int sib1_tda;
|
||||||
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
||||||
@@ -177,6 +195,7 @@ typedef struct nr_mac_config_t {
|
|||||||
int32_t *bw_list;
|
int32_t *bw_list;
|
||||||
int num_agg_level_candidates[NUM_PDCCH_AGG_LEVELS];
|
int num_agg_level_candidates[NUM_PDCCH_AGG_LEVELS];
|
||||||
nr_redcap_config_t *redcap;
|
nr_redcap_config_t *redcap;
|
||||||
|
nr_ptrs_config_t *ptrs;
|
||||||
bool do_SINR;
|
bool do_SINR;
|
||||||
} nr_mac_config_t;
|
} nr_mac_config_t;
|
||||||
|
|
||||||
|
|||||||
@@ -1445,12 +1445,60 @@ static void set_dl_mcs_table(int scs,
|
|||||||
bwp_Dedicated->pdsch_Config->choice.setup->mcs_Table = NULL;
|
bwp_Dedicated->pdsch_Config->choice.setup->mcs_Table = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusch_Config,
|
static NR_PTRS_UplinkConfig_t *config_ulptrs(const nr_ptrs_config_t *ptrs)
|
||||||
const bool use_deltaMCS,
|
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
|
||||||
const NR_UE_NR_Capability_t *uecap)
|
|
||||||
{
|
{
|
||||||
struct NR_SetupRelease_PUSCH_Config *setup_puschconfig = calloc(1, sizeof(*setup_puschconfig));
|
struct NR_PTRS_UplinkConfig__transformPrecoderDisabled *ptrs_config = calloc_or_fail(1, sizeof(*ptrs_config));
|
||||||
|
AssertFatal(ptrs->ul_FreqDensity0_0 < 277, "Invalid ul_FreqDensity0_0 %d\n", ptrs->ul_FreqDensity0_0);
|
||||||
|
if (ptrs->ul_FreqDensity0_0 > 0) {
|
||||||
|
ptrs_config->frequencyDensity = calloc_or_fail(1, sizeof(*ptrs_config->frequencyDensity));
|
||||||
|
asn1cSequenceAdd(ptrs_config->frequencyDensity->list, long, f0);
|
||||||
|
*f0 = ptrs->ul_FreqDensity0_0;
|
||||||
|
AssertFatal(ptrs->ul_FreqDensity1_0 < 277, "Invalid ul_FreqDensity1_0 %d\n", ptrs->ul_FreqDensity1_0);
|
||||||
|
if (ptrs->ul_FreqDensity1_0 > 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->frequencyDensity->list, long, f1);
|
||||||
|
*f1 = ptrs->ul_FreqDensity1_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AssertFatal(ptrs->ul_TimeDensity0_0 < 30, "Invalid ul_TimeDensity0_0 %d\n", ptrs->ul_TimeDensity0_0);
|
||||||
|
if (ptrs->ul_TimeDensity0_0 >= 0) {
|
||||||
|
ptrs_config->timeDensity = calloc_or_fail(1, sizeof(*ptrs_config->timeDensity));
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t0);
|
||||||
|
*t0 = ptrs->ul_TimeDensity0_0;
|
||||||
|
AssertFatal(ptrs->ul_TimeDensity1_0 < 30, "Invalid ul_TimeDensity1_0 %d\n", ptrs->ul_TimeDensity1_0);
|
||||||
|
if (ptrs->ul_TimeDensity1_0 >= 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t1);
|
||||||
|
*t1 = ptrs->ul_TimeDensity1_0;
|
||||||
|
}
|
||||||
|
AssertFatal(ptrs->ul_TimeDensity2_0 < 30, "Invalid ul_TimeDensity2_0 %d\n", ptrs->ul_TimeDensity2_0);
|
||||||
|
if (ptrs->ul_TimeDensity2_0 >= 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t2);
|
||||||
|
*t2 = ptrs->ul_TimeDensity2_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AssertFatal(ptrs->ul_ReOffset_0 < 3, "Invalid ul_ReOffset_0 %d\n", ptrs->ul_ReOffset_0);
|
||||||
|
if (ptrs->ul_ReOffset_0 >= 0) {
|
||||||
|
ptrs_config->resourceElementOffset = calloc_or_fail(1, sizeof(*ptrs_config->resourceElementOffset));
|
||||||
|
*ptrs_config->resourceElementOffset = ptrs->ul_ReOffset_0;
|
||||||
|
}
|
||||||
|
AssertFatal(ptrs->ul_MaxPorts_0 == 0 || ptrs->ul_MaxPorts_0 == 1, "Invalid ul_MaxPorts_0 %d\n", ptrs->ul_MaxPorts_0);
|
||||||
|
ptrs_config->maxNrofPorts = ptrs->ul_MaxPorts_0;
|
||||||
|
AssertFatal(ptrs->ul_Power_0 >= 0 || ptrs->ul_Power_0 < 4, "Invalid ul_Power_0 %d\n", ptrs->ul_Power_0);
|
||||||
|
ptrs_config->ptrs_Power = ptrs->ul_Power_0;
|
||||||
|
|
||||||
|
NR_PTRS_UplinkConfig_t *ulptrs = calloc_or_fail(1, sizeof(*ptrs_config));
|
||||||
|
ulptrs->transformPrecoderDisabled = ptrs_config;
|
||||||
|
return ulptrs;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NR_SetupRelease_PUSCH_Config_t *config_pusch(NR_PUSCH_Config_t *pusch_Config,
|
||||||
|
const bool use_deltaMCS,
|
||||||
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
|
const NR_UE_NR_Capability_t *uecap,
|
||||||
|
const nr_ptrs_config_t *ptrs)
|
||||||
|
{
|
||||||
|
NR_SetupRelease_PUSCH_Config_t *setup_puschconfig = calloc(1, sizeof(*setup_puschconfig));
|
||||||
setup_puschconfig->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
setup_puschconfig->present = NR_SetupRelease_PUSCH_Config_PR_setup;
|
||||||
if (!pusch_Config)
|
if (!pusch_Config)
|
||||||
pusch_Config = calloc(1, sizeof(*pusch_Config));
|
pusch_Config = calloc(1, sizeof(*pusch_Config));
|
||||||
@@ -1467,6 +1515,13 @@ static struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusc
|
|||||||
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup)
|
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup)
|
||||||
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
|
pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup = calloc(1, sizeof(*pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup));
|
||||||
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||||
|
if (ptrs) {
|
||||||
|
NR_PTRS_UplinkConfig_t *ptrs_config = config_ulptrs(ptrs);
|
||||||
|
NR_SetupRelease_PTRS_UplinkConfig_t *phaseTrackingRS = calloc(1, sizeof(*phaseTrackingRS));
|
||||||
|
phaseTrackingRS->present = NR_SetupRelease_PTRS_UplinkConfig_PR_setup;
|
||||||
|
phaseTrackingRS->choice.setup = ptrs_config;
|
||||||
|
NR_DMRS_UplinkConfig->phaseTrackingRS = phaseTrackingRS;
|
||||||
|
}
|
||||||
NR_DMRS_UplinkConfig->dmrs_Type = NULL;
|
NR_DMRS_UplinkConfig->dmrs_Type = NULL;
|
||||||
NR_DMRS_UplinkConfig->dmrs_AdditionalPosition = NULL;
|
NR_DMRS_UplinkConfig->dmrs_AdditionalPosition = NULL;
|
||||||
NR_DMRS_UplinkConfig->phaseTrackingRS = NULL;
|
NR_DMRS_UplinkConfig->phaseTrackingRS = NULL;
|
||||||
@@ -1531,9 +1586,54 @@ static struct NR_SetupRelease_PUSCH_Config *config_pusch(NR_PUSCH_Config_t *pusc
|
|||||||
return setup_puschconfig;
|
return setup_puschconfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct NR_SetupRelease_PDSCH_Config *config_pdsch(uint64_t ssb_bitmap, int bwp_Id, int dl_antenna_ports)
|
static NR_PTRS_DownlinkConfig_t *config_dlptrs(const nr_ptrs_config_t *ptrs)
|
||||||
{
|
{
|
||||||
struct NR_SetupRelease_PDSCH_Config *setup_pdsch_Config = calloc(1,sizeof(*setup_pdsch_Config));
|
NR_PTRS_DownlinkConfig_t *ptrs_config = calloc_or_fail(1, sizeof(*ptrs_config));
|
||||||
|
AssertFatal(ptrs->dl_FreqDensity0_0 < 277, "Invalid dl_FreqDensity0_0 %d\n", ptrs->dl_FreqDensity0_0);
|
||||||
|
if (ptrs->dl_FreqDensity0_0 > 0) {
|
||||||
|
ptrs_config->frequencyDensity = calloc_or_fail(1, sizeof(*ptrs_config->frequencyDensity));
|
||||||
|
asn1cSequenceAdd(ptrs_config->frequencyDensity->list, long, f0);
|
||||||
|
*f0 = ptrs->dl_FreqDensity0_0;
|
||||||
|
AssertFatal(ptrs->dl_FreqDensity1_0 < 277, "Invalid dl_FreqDensity1_0 %d\n", ptrs->dl_FreqDensity1_0);
|
||||||
|
if (ptrs->dl_FreqDensity1_0 > 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->frequencyDensity->list, long, f1);
|
||||||
|
*f1 = ptrs->dl_FreqDensity1_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AssertFatal(ptrs->dl_TimeDensity0_0 < 30, "Invalid dl_TimeDensity0_0 %d\n", ptrs->dl_TimeDensity0_0);
|
||||||
|
if (ptrs->dl_TimeDensity0_0 >= 0) {
|
||||||
|
ptrs_config->timeDensity = calloc_or_fail(1, sizeof(*ptrs_config->timeDensity));
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t0);
|
||||||
|
*t0 = ptrs->dl_TimeDensity0_0;
|
||||||
|
AssertFatal(ptrs->dl_TimeDensity1_0 < 30, "Invalid dl_TimeDensity1_0 %d\n", ptrs->dl_TimeDensity1_0);
|
||||||
|
if (ptrs->dl_TimeDensity1_0 >= 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t1);
|
||||||
|
*t1 = ptrs->dl_TimeDensity1_0;
|
||||||
|
}
|
||||||
|
AssertFatal(ptrs->dl_TimeDensity2_0 < 30, "Invalid dl_TimeDensity2_0 %d\n", ptrs->dl_TimeDensity2_0);
|
||||||
|
if (ptrs->dl_TimeDensity2_0 >= 0) {
|
||||||
|
asn1cSequenceAdd(ptrs_config->timeDensity->list, long, t2);
|
||||||
|
*t2 = ptrs->dl_TimeDensity2_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AssertFatal(ptrs->dl_EpreRatio_0 < 4, "Invalid dl_EpreRatio_0 %d\n", ptrs->dl_EpreRatio_0);
|
||||||
|
if (ptrs->dl_EpreRatio_0 >= 0) {
|
||||||
|
ptrs_config->epre_Ratio = calloc_or_fail(1, sizeof(*ptrs_config->epre_Ratio));
|
||||||
|
*ptrs_config->epre_Ratio = ptrs->dl_EpreRatio_0;
|
||||||
|
}
|
||||||
|
AssertFatal(ptrs->dl_ReOffset_0 < 3, "Invalid dl_ReOffset_0 %d\n", ptrs->dl_ReOffset_0);
|
||||||
|
if (ptrs->dl_ReOffset_0 >= 0) {
|
||||||
|
ptrs_config->resourceElementOffset = calloc_or_fail(1, sizeof(*ptrs_config->resourceElementOffset));
|
||||||
|
*ptrs_config->resourceElementOffset = ptrs->dl_ReOffset_0;
|
||||||
|
}
|
||||||
|
return ptrs_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NR_SetupRelease_PDSCH_Config_t *config_pdsch(uint64_t ssb_bitmap, int bwp_Id, int dl_antenna_ports, nr_ptrs_config_t *ptrs)
|
||||||
|
{
|
||||||
|
NR_SetupRelease_PDSCH_Config_t *setup_pdsch_Config = calloc(1,sizeof(*setup_pdsch_Config));
|
||||||
setup_pdsch_Config->present = NR_SetupRelease_PDSCH_Config_PR_setup;
|
setup_pdsch_Config->present = NR_SetupRelease_PDSCH_Config_PR_setup;
|
||||||
NR_PDSCH_Config_t *pdsch_Config = calloc(1, sizeof(*pdsch_Config));
|
NR_PDSCH_Config_t *pdsch_Config = calloc(1, sizeof(*pdsch_Config));
|
||||||
setup_pdsch_Config->choice.setup = pdsch_Config;
|
setup_pdsch_Config->choice.setup = pdsch_Config;
|
||||||
@@ -1541,6 +1641,13 @@ static struct NR_SetupRelease_PDSCH_Config *config_pdsch(uint64_t ssb_bitmap, in
|
|||||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present = NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present = NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
|
||||||
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1, sizeof(*pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
|
pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1, sizeof(*pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
|
||||||
NR_DMRS_DownlinkConfig_t *dmrs_DownlinkForPDSCH_MappingTypeA = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
NR_DMRS_DownlinkConfig_t *dmrs_DownlinkForPDSCH_MappingTypeA = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||||
|
if (ptrs) {
|
||||||
|
NR_PTRS_DownlinkConfig_t *ptrs_config = config_dlptrs(ptrs);
|
||||||
|
NR_SetupRelease_PTRS_DownlinkConfig_t *phaseTrackingRS = calloc(1, sizeof(*phaseTrackingRS));
|
||||||
|
phaseTrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup;
|
||||||
|
phaseTrackingRS->choice.setup = ptrs_config;
|
||||||
|
dmrs_DownlinkForPDSCH_MappingTypeA->phaseTrackingRS = phaseTrackingRS;
|
||||||
|
}
|
||||||
dmrs_DownlinkForPDSCH_MappingTypeA->dmrs_Type = NULL;
|
dmrs_DownlinkForPDSCH_MappingTypeA->dmrs_Type = NULL;
|
||||||
dmrs_DownlinkForPDSCH_MappingTypeA->maxLength = NULL;
|
dmrs_DownlinkForPDSCH_MappingTypeA->maxLength = NULL;
|
||||||
dmrs_DownlinkForPDSCH_MappingTypeA->scramblingID0 = NULL;
|
dmrs_DownlinkForPDSCH_MappingTypeA->scramblingID0 = NULL;
|
||||||
@@ -1582,6 +1689,7 @@ static void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
|||||||
bool force_256qam_off,
|
bool force_256qam_off,
|
||||||
int bwp_loop,
|
int bwp_loop,
|
||||||
bool is_SA,
|
bool is_SA,
|
||||||
|
nr_ptrs_config_t *ptrs,
|
||||||
const int num_agg_level_candidates[NUM_PDCCH_AGG_LEVELS])
|
const int num_agg_level_candidates[NUM_PDCCH_AGG_LEVELS])
|
||||||
{
|
{
|
||||||
bwp->bwp_Common = calloc(1,sizeof(*bwp->bwp_Common));
|
bwp->bwp_Common = calloc(1,sizeof(*bwp->bwp_Common));
|
||||||
@@ -1677,7 +1785,7 @@ static void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
|
|||||||
asn1cSeqAdd(&bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss3);
|
asn1cSeqAdd(&bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss3);
|
||||||
|
|
||||||
bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToReleaseList = NULL;
|
bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToReleaseList = NULL;
|
||||||
bwp->bwp_Dedicated->pdsch_Config = config_pdsch(ssb_bitmap, bwp->bwp_Id, dl_antenna_ports);
|
bwp->bwp_Dedicated->pdsch_Config = config_pdsch(ssb_bitmap, bwp->bwp_Id, dl_antenna_ports, ptrs);
|
||||||
|
|
||||||
set_dl_mcs_table(bwp->bwp_Common->genericParameters.subcarrierSpacing,
|
set_dl_mcs_table(bwp->bwp_Common->genericParameters.subcarrierSpacing,
|
||||||
force_256qam_off ? NULL : uecap,
|
force_256qam_off ? NULL : uecap,
|
||||||
@@ -1745,7 +1853,11 @@ static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
|
|||||||
pusch_Config = clone_pusch_config(servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]
|
pusch_Config = clone_pusch_config(servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]
|
||||||
->bwp_Dedicated->pusch_Config->choice.setup);
|
->bwp_Dedicated->pusch_Config->choice.setup);
|
||||||
}
|
}
|
||||||
ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config, configuration->use_deltaMCS, scc, configuration->force_UL256qam_off ? NULL : uecap);
|
ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config,
|
||||||
|
configuration->use_deltaMCS,
|
||||||
|
scc,
|
||||||
|
configuration->force_UL256qam_off ? NULL : uecap,
|
||||||
|
configuration->ptrs);
|
||||||
|
|
||||||
long maxMIMO_Layers = servingcellconfigdedicated &&
|
long maxMIMO_Layers = servingcellconfigdedicated &&
|
||||||
servingcellconfigdedicated->uplinkConfig
|
servingcellconfigdedicated->uplinkConfig
|
||||||
@@ -3160,7 +3272,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
config_pucch_resset1(pucch_Config, uid, num_pucch2, NULL);
|
config_pucch_resset1(pucch_Config, uid, num_pucch2, NULL);
|
||||||
set_pucch_power_config(pucch_Config, configuration->do_CSIRS);
|
set_pucch_power_config(pucch_Config, configuration->do_CSIRS);
|
||||||
|
|
||||||
initialUplinkBWP->pusch_Config = config_pusch(NULL, configuration->use_deltaMCS, scc, NULL);
|
initialUplinkBWP->pusch_Config = config_pusch(NULL, configuration->use_deltaMCS, scc, NULL, configuration->ptrs);
|
||||||
|
|
||||||
long maxMIMO_Layers = uplinkConfig && uplinkConfig->pusch_ServingCellConfig
|
long maxMIMO_Layers = uplinkConfig && uplinkConfig->pusch_ServingCellConfig
|
||||||
&& uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1
|
&& uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1
|
||||||
@@ -3214,7 +3326,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
asn1cSeqAdd(&bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss);
|
asn1cSeqAdd(&bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss);
|
||||||
asn1cSeqAdd(&bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss2);
|
asn1cSeqAdd(&bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss2);
|
||||||
|
|
||||||
bwp_Dedicated->pdsch_Config = config_pdsch(bitmap, 0, pdsch_AntennaPorts);
|
bwp_Dedicated->pdsch_Config = config_pdsch(bitmap, 0, pdsch_AntennaPorts, configuration->ptrs);
|
||||||
|
|
||||||
SpCellConfig->spCellConfigDedicated->tag_Id = 0;
|
SpCellConfig->spCellConfigDedicated->tag_Id = 0;
|
||||||
SpCellConfig->spCellConfigDedicated->pdsch_ServingCellConfig =
|
SpCellConfig->spCellConfigDedicated->pdsch_ServingCellConfig =
|
||||||
@@ -3255,7 +3367,16 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
calloc(1, sizeof(*SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList));
|
calloc(1, sizeof(*SpCellConfig->spCellConfigDedicated->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 = calloc(1, sizeof(*bwp));
|
||||||
config_downlinkBWP(bwp, scc, servingcellconfigdedicated, NULL, 0, false, bwp_loop, true, configuration->num_agg_level_candidates);
|
config_downlinkBWP(bwp,
|
||||||
|
scc,
|
||||||
|
servingcellconfigdedicated,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
bwp_loop,
|
||||||
|
true,
|
||||||
|
configuration->ptrs,
|
||||||
|
configuration->num_agg_level_candidates);
|
||||||
asn1cSeqAdd(&SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list, bwp);
|
asn1cSeqAdd(&SpCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list, bwp);
|
||||||
}
|
}
|
||||||
const NR_BWP_Id_t *firstActiveDownlinkBWP_Id = servingcellconfigdedicated->firstActiveDownlinkBWP_Id;
|
const NR_BWP_Id_t *firstActiveDownlinkBWP_Id = servingcellconfigdedicated->firstActiveDownlinkBWP_Id;
|
||||||
@@ -3825,7 +3946,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
calloc(1, sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP));
|
calloc(1, sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP));
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdcch_Config = NULL;
|
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdcch_Config = NULL;
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config =
|
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config =
|
||||||
config_pdsch(bitmap, 0, dl_antenna_ports);
|
config_pdsch(bitmap, 0, dl_antenna_ports, configuration->ptrs);
|
||||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->sps_Config =
|
secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->sps_Config =
|
||||||
NULL; // calloc(1,sizeof(struct NR_SetupRelease_SPS_Config));
|
NULL; // calloc(1,sizeof(struct NR_SetupRelease_SPS_Config));
|
||||||
|
|
||||||
@@ -3846,7 +3967,11 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
pusch_Config = clone_pusch_config(
|
pusch_Config = clone_pusch_config(
|
||||||
servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup);
|
servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup);
|
||||||
}
|
}
|
||||||
initialUplinkBWP->pusch_Config = config_pusch(pusch_Config, configuration->use_deltaMCS,servingcellconfigcommon, uecap);
|
initialUplinkBWP->pusch_Config = config_pusch(pusch_Config,
|
||||||
|
configuration->use_deltaMCS,
|
||||||
|
servingcellconfigcommon,
|
||||||
|
uecap,
|
||||||
|
configuration->ptrs);
|
||||||
|
|
||||||
long maxMIMO_Layers =
|
long maxMIMO_Layers =
|
||||||
servingcellconfigdedicated->uplinkConfig && servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig
|
servingcellconfigdedicated->uplinkConfig && servingcellconfigdedicated->uplinkConfig->pusch_ServingCellConfig
|
||||||
@@ -3884,6 +4009,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
configuration->force_256qam_off,
|
configuration->force_256qam_off,
|
||||||
bwp_loop,
|
bwp_loop,
|
||||||
false,
|
false,
|
||||||
|
configuration->ptrs,
|
||||||
configuration->num_agg_level_candidates);
|
configuration->num_agg_level_candidates);
|
||||||
asn1cSeqAdd(&secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list, bwp);
|
asn1cSeqAdd(&secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list, bwp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,8 +144,8 @@ gNBs =
|
|||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# Dedicated Serving Cell Configuration
|
# PTRS Configuration
|
||||||
servingCellConfigDedicated = (
|
phaseTrackingRS = (
|
||||||
{
|
{
|
||||||
# DL PTRS related parameters.
|
# DL PTRS related parameters.
|
||||||
# 3GPP TS 38.331 PTRS-DownlinkConfig
|
# 3GPP TS 38.331 PTRS-DownlinkConfig
|
||||||
|
|||||||
Reference in New Issue
Block a user