1111#pragma once
1212
1313#include " srsran/adt/bounded_bitset.h"
14+ #include " srsran/adt/bounded_integer.h"
1415#include " srsran/adt/expected.h"
1516#include " srsran/adt/optional.h"
1617#include " srsran/adt/static_vector.h"
1718#include " srsran/ran/dmrs.h"
1819#include " srsran/ran/pdcch/pdcch_constants.h"
1920#include " srsran/ran/physical_cell_group.h"
21+ #include " srsran/ran/pusch/tx_scheme_configuration.h"
2022#include " srsran/support/units.h"
23+ #include < variant>
2124
2225namespace srsran {
2326
@@ -31,14 +34,6 @@ enum class resource_allocation { resource_allocation_type_0, resource_allocation
3134// / Dynamic resource allocation indicator for DCI formats 0_1 and 1_1.
3235enum class dynamic_resource_allocation { type_0, type_1 };
3336
34- // / \brief Subset of PMIs addressed by TPMI, where PMIs are those supported by UEs with maximum coherence capabilities.
35- // / \remark See TS38.214, Section 6.1.1.1.
36- enum class tx_scheme_codebook_subset : unsigned {
37- fully_and_partial_and_non_coherent,
38- partial_and_non_coherent,
39- non_coherent
40- };
41-
4237// / \brief DCI configuration parameters required to perform the DCI size alignment procedure.
4338// /
4439// / The size alignment procedure, specified in TS38.212 Section 7.3.1.0, reduces the number of different DCI sizes, to
@@ -137,11 +132,16 @@ struct dci_size_config {
137132 // / Set to \c true if PUSCH frequency hopping is configured, i.e., if the higher layer parameter \e frequencyHopping
138133 // / (see TS38.331 Section 6.3.2, Information Element \e PUSCH-Config) is configured.
139134 bool frequency_hopping_configured;
140- // / \brief Non-codebook based transmission flag.
135+ // / \brief PUSCH transmission schemes according to TS 38.214 Section 6.1.1.
136+ // /
137+ // / The transmit scheme is given by the field \e txConfig in TS 38.331 Section 6.3.2, Information Element
138+ // / \e PUSCH-Config.
141139 // /
142- // / Set to \c true if non-codebook based transmission is configured, i.e., if the higher layer parameter \e txConfig
143- // / (see TS38.331 Section 6.3.2, Information Element \e PUSCH-Config) is set for non-codebook transmission.
144- bool tx_config_non_codebook;
140+ // / This field is required for DCI Format 0_1.
141+ // /
142+ // / The maximum rank \ref tx_scheme_codebook::max_rank must be smaller than or equal to the number of \ref
143+ // / nof_srs_ports.
144+ std::optional<pusch_tx_scheme_configuration> pusch_tx_scheme;
145145 // / \brief UL transform precoding flag.
146146 // /
147147 // / Set to \c true if UL transform precoding is enabled.
@@ -176,8 +176,8 @@ struct dci_size_config {
176176 // / \brief Number of antenna ports used for PUSCH codebook-based transmission.
177177 // /
178178 // / Set according to the higher layer parameter \e nrofSRS-Ports (see TS38.331 Section 6.3.2, Information Element \e
179- // / SRS-Config), as per TS38.214 Section 6.1.1.1, if codebook-based PUSCH transmission is configured, i.e., if \ref
180- // / tx_config_non_codebook is set to \c false. Otherwise, leave it unset. Values: {1, 2, 4}.
179+ // / SRS-Config), as per TS38.214 Section 6.1.1.1, if the field \e txConfig is present. Otherwise, leave it
180+ // / unset. Values: {1, 2, 4}.
181181 std::optional<unsigned > nof_srs_ports;
182182 // / \brief Parameter \f$N_{SRS}\f$ in TS38.212 Section 7.3.1.1.2, indicating the number of SRS resources.
183183 // /
@@ -195,21 +195,6 @@ struct dci_size_config {
195195 // /
196196 // / \remark Required if \ref tx_config_non_codebook is set to \c true, indicating non-codebook transmission.
197197 std::optional<unsigned > pusch_max_layers;
198- // / \brief Maximum UE transmission rank for codebook based operation.
199- // /
200- // / Specifies the maximum UE transmission rank, determined by the higher layer parameter \e maxRank (see TS38.331
201- // / Section 6.3.2, Information Element \e PUSCH-Config). Values: {1, ..., 4} and it must be smaller or equal than \ref
202- // / nof_srs_ports.
203- // /
204- // / \remark Required for codebook based transmission, i.e., if \ref tx_config_non_codebook is set to \c false.
205- std::optional<unsigned > max_rank;
206- // / \brief Subset of PMIs addressed by TPMI.
207- // /
208- // / Restricts the available PMIs to those supported by the UE, according to its coherence capabilities. Its value is
209- // / indicated by the higher layer parameter \e codebookSubset (see TS38.331 Section 6.3.2, Information Element \e
210- // / PUSCH-Config). It is required for codebook based transmission with more than one antenna port, i.e., if \ref
211- // / tx_config_non_codebook is set to \c false and \ref nof_srs_ports is greater than one. Otherwise, leave it unset.
212- std::optional<tx_scheme_codebook_subset> cb_subset;
213198 // / \brief UL DM-RS type for DM-RS mapping type A.
214199 // /
215200 // / Set according to the higher layer parameter \e dmrs-Type (see TS38.331 Section 6.3.2, Information Element \e
@@ -894,9 +879,9 @@ struct dci_0_1_configuration {
894879 // /
895880 // / The content and actual number of bits is defined by TS38.212 Tables 7.3.1.1.2-2/3/4/5, according to whether
896881 // / transform precoding is enabled or disabled, and the values of the higher layer parameters \e maxRank (see
897- // / dci_size_config ::max_rank) and \e codebookSubset (see dci_size_config ::cb_subset). It is required for codebook
898- // / based transmission with more than one antenna port, i.e., if \ref dci_size_config::cb_subset is set when computing
899- // / the DCI sizes.
882+ // / tx_scheme_codebook ::max_rank) and \e codebookSubset (see tx_scheme_codebook ::cb_subset). It is required for
883+ // / codebook based transmission with more than one antenna port, i.e., if \ref dci_size_config::cb_subset is set when
884+ // / computing the DCI sizes.
900885 unsigned precoding_info_nof_layers;
901886 // / \brief Antenna ports for PUSCH transmission - 2, 3, 4 or 5 bits.
902887 // /
0 commit comments