From 95bf85b3d3bbaa0564c1a3f12e1645924911fb2b Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Fri, 22 Oct 2021 13:00:07 +0200 Subject: [PATCH] Reduced maximum number of CSI reports --- lib/include/srsran/phy/phch/csi.h | 6 +++--- lib/include/srsran/phy/phch/csi_cfg.h | 14 +++++--------- lib/include/srsran/phy/phch/uci_cfg_nr.h | 16 ++++++++-------- lib/src/phy/phch/csi.c | 17 ++++++++++++----- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/lib/include/srsran/phy/phch/csi.h b/lib/include/srsran/phy/phch/csi.h index 0bbfe0e24..5801f94ad 100644 --- a/lib/include/srsran/phy/phch/csi.h +++ b/lib/include/srsran/phy/phch/csi.h @@ -39,7 +39,7 @@ srsran_csi_new_nzp_csi_rs_measurement(const srsran_csi_hl_resource_cfg_t csi_res */ SRSRAN_API int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, const srsran_slot_cfg_t* slot_cfg, - srsran_csi_report_cfg_t report_cfg[SRSRAN_CSI_MAX_NOF_REPORT]); + srsran_csi_report_cfg_t report_cfg[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]); /** * @brief Quantifies a given set of CSI reports from the given set of measurements @@ -49,9 +49,9 @@ SRSRAN_API int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, * @return The number CSI reports for transmission if the provided data is valid, SRSRAN_ERROR code otherwise */ SRSRAN_API int -srsran_csi_reports_quantify(const srsran_csi_report_cfg_t reports[SRSRAN_CSI_MAX_NOF_REPORT], +srsran_csi_reports_quantify(const srsran_csi_report_cfg_t reports[SRSRAN_CSI_SLOT_MAX_NOF_REPORT], const srsran_csi_channel_measurements_t measurements[SRSRAN_CSI_MAX_NOF_RESOURCES], - srsran_csi_report_value_t report_value[SRSRAN_CSI_MAX_NOF_REPORT]); + srsran_csi_report_value_t report_value[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]); /** * @brief Compute number of CSI bits necessary to transmit all the CSI reports for a PUCCH transmission diff --git a/lib/include/srsran/phy/phch/csi_cfg.h b/lib/include/srsran/phy/phch/csi_cfg.h index 6471c9fc8..a43e554f5 100644 --- a/lib/include/srsran/phy/phch/csi_cfg.h +++ b/lib/include/srsran/phy/phch/csi_cfg.h @@ -22,6 +22,11 @@ */ #define SRSRAN_CSI_MAX_NOF_REPORT 48 +/** + * @brief Maximum number of supported simultaneous CSI reports in a single slot transmission + */ +#define SRSRAN_CSI_SLOT_MAX_NOF_REPORT 2 + /** * @brief Maximum number of CSI-RS resources defined in TS 38.331 maxNrofCSI-ResourceConfigurations */ @@ -193,13 +198,4 @@ typedef struct SRSRAN_API { }; } srsran_csi_report_value_t; -/** - * @brief Complete report configuration and value - */ -typedef struct SRSRAN_API { - srsran_csi_report_cfg_t cfg[SRSRAN_CSI_MAX_NOF_REPORT]; ///< Configuration ready for encoding - srsran_csi_report_value_t value[SRSRAN_CSI_MAX_NOF_REPORT]; ///< Quantified values - uint32_t nof_reports; ///< Total number of reports to transmit -} srsran_csi_reports_t; - #endif // SRSRAN_CSI_CFG_H diff --git a/lib/include/srsran/phy/phch/uci_cfg_nr.h b/lib/include/srsran/phy/phch/uci_cfg_nr.h index dd4e3a410..7be80b72e 100644 --- a/lib/include/srsran/phy/phch/uci_cfg_nr.h +++ b/lib/include/srsran/phy/phch/uci_cfg_nr.h @@ -68,11 +68,11 @@ typedef struct { */ typedef struct SRSRAN_API { /// Common Parameters - srsran_harq_ack_cfg_t ack; ///< HARQ-ACK configuration - uint32_t o_sr; ///< Number of SR bits - bool sr_positive_present; ///< Set to true if there is at least one positive SR - srsran_csi_report_cfg_t csi[SRSRAN_CSI_MAX_NOF_REPORT]; ///< CSI report configuration - uint32_t nof_csi; ///< Number of CSI reports + srsran_harq_ack_cfg_t ack; ///< HARQ-ACK configuration + uint32_t o_sr; ///< Number of SR bits + bool sr_positive_present; ///< Set to true if there is at least one positive SR + srsran_csi_report_cfg_t csi[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]; ///< CSI report configuration + uint32_t nof_csi; ///< Number of CSI reports union { srsran_uci_nr_pucch_cfg_t pucch; ///< Configuration for transmission in PUCCH srsran_uci_nr_pusch_cfg_t pusch; ///< Configuration for transmission in PUSCH @@ -83,9 +83,9 @@ typedef struct SRSRAN_API { * @brief Uplink Control Information (UCI) message packed information */ typedef struct SRSRAN_API { - uint8_t ack[SRSRAN_HARQ_ACK_MAX_NOF_BITS]; ///< HARQ ACK feedback bits - uint32_t sr; ///< Number of positive SR - srsran_csi_report_value_t csi[SRSRAN_CSI_MAX_NOF_REPORT]; ///< Packed CSI report values + uint8_t ack[SRSRAN_HARQ_ACK_MAX_NOF_BITS]; ///< HARQ ACK feedback bits + uint32_t sr; ///< Number of positive SR + srsran_csi_report_value_t csi[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]; ///< Packed CSI report values bool valid; ///< Indicates whether the message has been decoded successfully, ignored in the transmitter } srsran_uci_value_nr_t; diff --git a/lib/src/phy/phch/csi.c b/lib/src/phy/phch/csi.c index 412aec709..79f38485a 100644 --- a/lib/src/phy/phch/csi.c +++ b/lib/src/phy/phch/csi.c @@ -179,7 +179,7 @@ int srsran_csi_new_nzp_csi_rs_measurement( int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, const srsran_slot_cfg_t* slot_cfg, - srsran_csi_report_cfg_t report_cfg[SRSRAN_CSI_MAX_NOF_REPORT]) + srsran_csi_report_cfg_t report_cfg[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]) { uint32_t count = 0; @@ -189,7 +189,7 @@ int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, } // Make sure report configuration is initialised to zero - SRSRAN_MEM_ZERO(report_cfg, srsran_csi_report_cfg_t, SRSRAN_CSI_MAX_NOF_REPORT); + SRSRAN_MEM_ZERO(report_cfg, srsran_csi_report_cfg_t, SRSRAN_CSI_SLOT_MAX_NOF_REPORT); // Iterate every possible configured CSI report for (uint32_t i = 0; i < SRSRAN_CSI_MAX_NOF_REPORT; i++) { @@ -198,6 +198,13 @@ int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, continue; } + if (count >= SRSRAN_CSI_SLOT_MAX_NOF_REPORT) { + ERROR("The number of CSI reports in the slot (%d) exceeds the maximum (%d)", + count++, + SRSRAN_CSI_SLOT_MAX_NOF_REPORT); + return SRSRAN_ERROR; + } + // Configure report report_cfg[count].cfg = cfg->reports[i]; report_cfg[count].nof_ports = 1; @@ -209,9 +216,9 @@ int srsran_csi_reports_generate(const srsran_csi_hl_cfg_t* cfg, return (int)count; } -int srsran_csi_reports_quantify(const srsran_csi_report_cfg_t reports[SRSRAN_CSI_MAX_NOF_REPORT], +int srsran_csi_reports_quantify(const srsran_csi_report_cfg_t reports[SRSRAN_CSI_SLOT_MAX_NOF_REPORT], const srsran_csi_channel_measurements_t measurements[SRSRAN_CSI_MAX_NOF_RESOURCES], - srsran_csi_report_value_t report_value[SRSRAN_CSI_MAX_NOF_REPORT]) + srsran_csi_report_value_t report_value[SRSRAN_CSI_SLOT_MAX_NOF_REPORT]) { uint32_t count = 0; @@ -221,7 +228,7 @@ int srsran_csi_reports_quantify(const srsran_csi_report_cfg_t reports[ } // Iterate every possible configured CSI report - for (uint32_t i = 0; i < SRSRAN_CSI_MAX_NOF_REPORT; i++) { + for (uint32_t i = 0; i < SRSRAN_CSI_SLOT_MAX_NOF_REPORT; i++) { // If the report is the last one, break if (reports->cfg.type == SRSRAN_CSI_REPORT_TYPE_NONE) { break;