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);
|
||||
config.do_CSIRS = *GNBParamList.paramarray[0][GNB_DO_CSIRS_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.force_256qam_off = *GNBParamList.paramarray[0][GNB_FORCE256QAMOFF_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_DOSINR "do_SINR"
|
||||
#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_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_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_LIMIT_RSRP_REPORT, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
@@ -246,6 +248,7 @@ typedef enum {
|
||||
#define GNB_DU_SIBS_IDX 37
|
||||
#define GNB_DO_SINR_IDX 38
|
||||
#define GNB_1ST_ACTIVE_BWP_IDX 39
|
||||
#define GNB_LIMIT_RSRP_REPORT_IDX 40
|
||||
|
||||
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
||||
#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 } }, \
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@@ -186,6 +186,7 @@ typedef struct nr_mac_config_t {
|
||||
int minRXTXTIME;
|
||||
int do_CSIRS;
|
||||
int do_SRS;
|
||||
int max_num_rsrp;
|
||||
bool force_256qam_off;
|
||||
bool force_UL256qam_off;
|
||||
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);
|
||||
}
|
||||
|
||||
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,
|
||||
const NR_UE_NR_Capability_t *uecap,
|
||||
const NR_ServingCellConfigCommon_t *servingcellconfigcommon,
|
||||
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 uid,
|
||||
int curr_bwp,
|
||||
int num_antenna_ports,
|
||||
bool do_sinr)
|
||||
uint64_t ssb_bitmap)
|
||||
{
|
||||
int resource_id = -1;
|
||||
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];
|
||||
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)
|
||||
resource_id = csires->csi_ResourceConfigId;
|
||||
} 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));
|
||||
set_csi_meas_periodicity(servingcellconfigcommon, csirep, uid, curr_bwp, true);
|
||||
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.choice.cri_RSRP = (NULL_t)0;
|
||||
} else {
|
||||
csirep->reportQuantity.present = NR_CSI_ReportConfig__reportQuantity_PR_ssb_Index_RSRP;
|
||||
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.choice.none = (NULL_t)0;
|
||||
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.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 = 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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
const NR_UE_NR_Capability_t *uecap,
|
||||
const NR_ServingCellConfigCommon_t *scc,
|
||||
const nr_mac_config_t *configuration,
|
||||
int uid,
|
||||
@@ -3396,14 +3431,15 @@ static NR_CSI_MeasConfig_t *get_csiMeasConfig(const NR_ServingCellConfig_t *conf
|
||||
pucchrsrp->uplinkBandwidthPartId = bwp_id;
|
||||
pucchrsrp->pucch_Resource = pucch_Resource;
|
||||
config_rsrp_meas_report(csi_MeasConfig,
|
||||
uecap,
|
||||
scc,
|
||||
pucchrsrp,
|
||||
configuration->do_CSIRS,
|
||||
configuration,
|
||||
bwp_id + 10,
|
||||
uid,
|
||||
curr_bwp,
|
||||
pdsch_AntennaPorts,
|
||||
configuration->do_SINR);
|
||||
bitmap);
|
||||
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->present = NR_SetupRelease_CSI_MeasConfig_PR_setup;
|
||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||
NULL,
|
||||
scc,
|
||||
configuration,
|
||||
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);
|
||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||
uecap,
|
||||
scc,
|
||||
configuration,
|
||||
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->present = NR_SetupRelease_CSI_MeasConfig_PR_setup;
|
||||
configDedicated->csi_MeasConfig->choice.setup = get_csiMeasConfig(configDedicated,
|
||||
uecap,
|
||||
servingcellconfigcommon,
|
||||
configuration,
|
||||
uid,
|
||||
|
||||
Reference in New Issue
Block a user