RRC configuration for more than 1 reported RS
option via configuration file to limit the number of reports to be configured
This commit is contained in:
@@ -1431,6 +1431,7 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
|||||||
LOG_I(GNB_APP, "SIB1 TDA %d\n", config.sib1_tda);
|
LOG_I(GNB_APP, "SIB1 TDA %d\n", config.sib1_tda);
|
||||||
config.do_CSIRS = *GNBParamList.paramarray[0][GNB_DO_CSIRS_IDX].iptr;
|
config.do_CSIRS = *GNBParamList.paramarray[0][GNB_DO_CSIRS_IDX].iptr;
|
||||||
config.do_SRS = *GNBParamList.paramarray[0][GNB_DO_SRS_IDX].iptr;
|
config.do_SRS = *GNBParamList.paramarray[0][GNB_DO_SRS_IDX].iptr;
|
||||||
|
config.max_num_rsrp = *GNBParamList.paramarray[0][GNB_LIMIT_RSRP_REPORT_IDX].iptr;
|
||||||
config.do_SINR = *GNBParamList.paramarray[0][GNB_DO_SINR_IDX].iptr;
|
config.do_SINR = *GNBParamList.paramarray[0][GNB_DO_SINR_IDX].iptr;
|
||||||
config.force_256qam_off = *GNBParamList.paramarray[0][GNB_FORCE256QAMOFF_IDX].iptr;
|
config.force_256qam_off = *GNBParamList.paramarray[0][GNB_FORCE256QAMOFF_IDX].iptr;
|
||||||
config.force_UL256qam_off = *GNBParamList.paramarray[0][GNB_FORCEUL256QAMOFF_IDX].iptr;
|
config.force_UL256qam_off = *GNBParamList.paramarray[0][GNB_FORCEUL256QAMOFF_IDX].iptr;
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ typedef enum {
|
|||||||
#define GNB_CONFIG_STRING_DU_SIB_LIST "du_sibs"
|
#define GNB_CONFIG_STRING_DU_SIB_LIST "du_sibs"
|
||||||
#define GNB_CONFIG_STRING_DOSINR "do_SINR"
|
#define GNB_CONFIG_STRING_DOSINR "do_SINR"
|
||||||
#define GNB_CONFIG_STRING_1ST_ACTIVE_BWP "first_active_bwp"
|
#define GNB_CONFIG_STRING_1ST_ACTIVE_BWP "first_active_bwp"
|
||||||
|
#define GNB_CONFIG_STRING_LIMIT_RSRP_REPORT "max_num_RSRP_reported"
|
||||||
|
|
||||||
#define GNB_CONFIG_HLP_STRING_ENABLE_SDAP "enable the SDAP layer\n"
|
#define GNB_CONFIG_HLP_STRING_ENABLE_SDAP "enable the SDAP layer\n"
|
||||||
#define GNB_CONFIG_HLP_FORCE256QAMOFF "suppress activation of 256 QAM despite UE support"
|
#define GNB_CONFIG_HLP_FORCE256QAMOFF "suppress activation of 256 QAM despite UE support"
|
||||||
@@ -202,6 +203,7 @@ typedef enum {
|
|||||||
{GNB_CONFIG_STRING_DU_SIB_LIST, GNB_CONFIG_HLP_DU_SIBS, 0, .iptr=NULL, .defintarrayval=0, TYPE_INTARRAY, 0}, \
|
{GNB_CONFIG_STRING_DU_SIB_LIST, GNB_CONFIG_HLP_DU_SIBS, 0, .iptr=NULL, .defintarrayval=0, TYPE_INTARRAY, 0}, \
|
||||||
{GNB_CONFIG_STRING_DOSINR, GNB_CONFIG_HLP_DOSINR, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_DOSINR, GNB_CONFIG_HLP_DOSINR, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_1ST_ACTIVE_BWP, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_1ST_ACTIVE_BWP, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_LIMIT_RSRP_REPORT, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
}
|
}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@@ -246,6 +248,7 @@ typedef enum {
|
|||||||
#define GNB_DU_SIBS_IDX 37
|
#define GNB_DU_SIBS_IDX 37
|
||||||
#define GNB_DO_SINR_IDX 38
|
#define GNB_DO_SINR_IDX 38
|
||||||
#define GNB_1ST_ACTIVE_BWP_IDX 39
|
#define GNB_1ST_ACTIVE_BWP_IDX 39
|
||||||
|
#define GNB_LIMIT_RSRP_REPORT_IDX 40
|
||||||
|
|
||||||
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
||||||
#define NUM_DL_HARQ_OKVALUES {2,4,6,8,10,12,16,32}
|
#define NUM_DL_HARQ_OKVALUES {2,4,6,8,10,12,16,32}
|
||||||
@@ -292,6 +295,7 @@ typedef enum {
|
|||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
|
{ .s5 = { NULL } }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ typedef struct nr_mac_config_t {
|
|||||||
int minRXTXTIME;
|
int minRXTXTIME;
|
||||||
int do_CSIRS;
|
int do_CSIRS;
|
||||||
int do_SRS;
|
int do_SRS;
|
||||||
|
int max_num_rsrp;
|
||||||
bool force_256qam_off;
|
bool force_256qam_off;
|
||||||
bool force_UL256qam_off;
|
bool force_UL256qam_off;
|
||||||
bool use_deltaMCS;
|
bool use_deltaMCS;
|
||||||
|
|||||||
@@ -2094,21 +2094,52 @@ static void config_csi_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
|
|||||||
asn1cSeqAdd(&csi_MeasConfig->csi_ReportConfigToAddModList->list, csirep);
|
asn1cSeqAdd(&csi_MeasConfig->csi_ReportConfigToAddModList->list, csirep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long config_nrofReportedRS(const NR_UE_NR_Capability_t *uecap,
|
||||||
|
uint64_t ssb_bitmap,
|
||||||
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
|
int max_num_reported_rs)
|
||||||
|
{
|
||||||
|
long nb_band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
||||||
|
int num_supported_rs = 0;
|
||||||
|
if (uecap) {
|
||||||
|
for (int i = 0; i < uecap->rf_Parameters.supportedBandListNR.list.count; i++) {
|
||||||
|
NR_BandNR_t *band = uecap->rf_Parameters.supportedBandListNR.list.array[i];
|
||||||
|
if (band->bandNR == nb_band) {
|
||||||
|
if (band->mimo_ParametersPerBand && band->mimo_ParametersPerBand->maxNumberNonGroupBeamReporting) {
|
||||||
|
int maxNumberNonGroupBeamReporting = 1 << *band->mimo_ParametersPerBand->maxNumberNonGroupBeamReporting;
|
||||||
|
if (num_supported_rs == 0 || num_supported_rs > maxNumberNonGroupBeamReporting)
|
||||||
|
num_supported_rs = maxNumberNonGroupBeamReporting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int configured_rs = max_num_reported_rs > 0 ? min(num_supported_rs, max_num_reported_rs) : num_supported_rs;
|
||||||
|
uint32_t num_ssb = count_bits64(ssb_bitmap);
|
||||||
|
if (num_ssb == 1 || configured_rs < 2)
|
||||||
|
return NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n1;
|
||||||
|
if (num_ssb == 2 || configured_rs == 2)
|
||||||
|
return NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n2;
|
||||||
|
if (num_ssb == 3 || configured_rs == 3)
|
||||||
|
return NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n3;
|
||||||
|
return NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n4;
|
||||||
|
}
|
||||||
|
|
||||||
static void config_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
|
static void config_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
|
||||||
|
const NR_UE_NR_Capability_t *uecap,
|
||||||
const NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
const NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
||||||
NR_PUCCH_CSI_Resource_t *pucchcsires,
|
NR_PUCCH_CSI_Resource_t *pucchcsires,
|
||||||
int do_csi, // if rsrp is based on CSI or SSB
|
const nr_mac_config_t *configuration,
|
||||||
int rep_id,
|
int rep_id,
|
||||||
int uid,
|
int uid,
|
||||||
int curr_bwp,
|
int curr_bwp,
|
||||||
int num_antenna_ports,
|
int num_antenna_ports,
|
||||||
bool do_sinr)
|
uint64_t ssb_bitmap)
|
||||||
{
|
{
|
||||||
int resource_id = -1;
|
int resource_id = -1;
|
||||||
for (int csi_list = 0; csi_list < csi_MeasConfig->csi_ResourceConfigToAddModList->list.count; csi_list++) {
|
for (int csi_list = 0; csi_list < csi_MeasConfig->csi_ResourceConfigToAddModList->list.count; csi_list++) {
|
||||||
NR_CSI_ResourceConfig_t *csires = csi_MeasConfig->csi_ResourceConfigToAddModList->list.array[csi_list];
|
NR_CSI_ResourceConfig_t *csires = csi_MeasConfig->csi_ResourceConfigToAddModList->list.array[csi_list];
|
||||||
if (csires->csi_RS_ResourceSetList.present == NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB) {
|
if (csires->csi_RS_ResourceSetList.present == NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB) {
|
||||||
if (do_csi && num_antenna_ports < 4) {
|
if (configuration->do_CSIRS && num_antenna_ports < 4) {
|
||||||
if (csires->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList)
|
if (csires->csi_RS_ResourceSetList.choice.nzp_CSI_RS_SSB->nzp_CSI_RS_ResourceSetList)
|
||||||
resource_id = csires->csi_ResourceConfigId;
|
resource_id = csires->csi_ResourceConfigId;
|
||||||
} else {
|
} else {
|
||||||
@@ -2130,13 +2161,13 @@ static void config_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
|
|||||||
csirep->reportConfigType.choice.periodic = calloc(1, sizeof(*csirep->reportConfigType.choice.periodic));
|
csirep->reportConfigType.choice.periodic = calloc(1, sizeof(*csirep->reportConfigType.choice.periodic));
|
||||||
set_csi_meas_periodicity(servingcellconfigcommon, csirep, uid, curr_bwp, true);
|
set_csi_meas_periodicity(servingcellconfigcommon, csirep, uid, curr_bwp, true);
|
||||||
asn1cSeqAdd(&csirep->reportConfigType.choice.periodic->pucch_CSI_ResourceList.list, pucchcsires);
|
asn1cSeqAdd(&csirep->reportConfigType.choice.periodic->pucch_CSI_ResourceList.list, pucchcsires);
|
||||||
if (do_csi && num_antenna_ports < 4) {
|
if (configuration->do_CSIRS && num_antenna_ports < 4) {
|
||||||
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_cri_RSRP;
|
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_cri_RSRP;
|
||||||
csirep->reportQuantity.choice.cri_RSRP = (NULL_t)0;
|
csirep->reportQuantity.choice.cri_RSRP = (NULL_t)0;
|
||||||
} else {
|
} else {
|
||||||
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_ssb_Index_RSRP;
|
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_ssb_Index_RSRP;
|
||||||
csirep->reportQuantity.choice.ssb_Index_RSRP = (NULL_t)0;
|
csirep->reportQuantity.choice.ssb_Index_RSRP = (NULL_t)0;
|
||||||
if (do_sinr) {
|
if (configuration->do_SINR) {
|
||||||
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_none;
|
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_none;
|
||||||
csirep->reportQuantity.choice.none = (NULL_t)0;
|
csirep->reportQuantity.choice.none = (NULL_t)0;
|
||||||
csirep->ext2 = calloc(1, sizeof(*csirep->ext2));
|
csirep->ext2 = calloc(1, sizeof(*csirep->ext2));
|
||||||
@@ -2148,7 +2179,10 @@ static void config_rsrp_meas_report(NR_CSI_MeasConfig_t *csi_MeasConfig,
|
|||||||
csirep->groupBasedBeamReporting.present = NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled;
|
csirep->groupBasedBeamReporting.present = NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled;
|
||||||
csirep->groupBasedBeamReporting.choice.disabled = calloc(1, sizeof(*csirep->groupBasedBeamReporting.choice.disabled));
|
csirep->groupBasedBeamReporting.choice.disabled = calloc(1, sizeof(*csirep->groupBasedBeamReporting.choice.disabled));
|
||||||
csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS = calloc(1, sizeof(*csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS));
|
csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS = calloc(1, sizeof(*csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS));
|
||||||
*csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS = NR_CSI_ReportConfig__groupBasedBeamReporting__disabled__nrofReportedRS_n1;
|
*csirep->groupBasedBeamReporting.choice.disabled->nrofReportedRS = config_nrofReportedRS(uecap,
|
||||||
|
ssb_bitmap,
|
||||||
|
servingcellconfigcommon,
|
||||||
|
configuration->max_num_rsrp);
|
||||||
asn1cSeqAdd(&csi_MeasConfig->csi_ReportConfigToAddModList->list, csirep);
|
asn1cSeqAdd(&csi_MeasConfig->csi_ReportConfigToAddModList->list, csirep);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3292,6 +3326,7 @@ static NR_BWP_DownlinkDedicated_t *configure_initial_dl_bwp(const NR_ServingCell
|
|||||||
}
|
}
|
||||||
|
|
||||||
static NR_CSI_MeasConfig_t *get_csiMeasConfig(const NR_ServingCellConfig_t *configDedicated,
|
static NR_CSI_MeasConfig_t *get_csiMeasConfig(const NR_ServingCellConfig_t *configDedicated,
|
||||||
|
const NR_UE_NR_Capability_t *uecap,
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
const nr_mac_config_t *configuration,
|
const nr_mac_config_t *configuration,
|
||||||
int uid,
|
int uid,
|
||||||
@@ -3396,14 +3431,15 @@ static NR_CSI_MeasConfig_t *get_csiMeasConfig(const NR_ServingCellConfig_t *conf
|
|||||||
pucchrsrp->uplinkBandwidthPartId = bwp_id;
|
pucchrsrp->uplinkBandwidthPartId = bwp_id;
|
||||||
pucchrsrp->pucch_Resource = pucch_Resource;
|
pucchrsrp->pucch_Resource = pucch_Resource;
|
||||||
config_rsrp_meas_report(csi_MeasConfig,
|
config_rsrp_meas_report(csi_MeasConfig,
|
||||||
|
uecap,
|
||||||
scc,
|
scc,
|
||||||
pucchrsrp,
|
pucchrsrp,
|
||||||
configuration->do_CSIRS,
|
configuration,
|
||||||
bwp_id + 10,
|
bwp_id + 10,
|
||||||
uid,
|
uid,
|
||||||
curr_bwp,
|
curr_bwp,
|
||||||
pdsch_AntennaPorts,
|
pdsch_AntennaPorts,
|
||||||
configuration->do_SINR);
|
bitmap);
|
||||||
return csi_MeasConfig;
|
return csi_MeasConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3482,6 +3518,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
|||||||
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;
|
||||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||||
|
NULL,
|
||||||
scc,
|
scc,
|
||||||
configuration,
|
configuration,
|
||||||
uid,
|
uid,
|
||||||
@@ -3786,6 +3823,7 @@ NR_CellGroupConfig_t * update_cellGroupConfig_for_BWP_switch(NR_CellGroupConfig_
|
|||||||
|
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_CSI_MeasConfig, configDedicated->csi_MeasConfig->choice.setup);
|
ASN_STRUCT_FREE(asn_DEF_NR_CSI_MeasConfig, configDedicated->csi_MeasConfig->choice.setup);
|
||||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||||
|
uecap,
|
||||||
scc,
|
scc,
|
||||||
configuration,
|
configuration,
|
||||||
uid,
|
uid,
|
||||||
@@ -4101,6 +4139,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
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;
|
||||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||||
|
uecap,
|
||||||
servingcellconfigcommon,
|
servingcellconfigcommon,
|
||||||
configuration,
|
configuration,
|
||||||
uid,
|
uid,
|
||||||
|
|||||||
Reference in New Issue
Block a user