Skip to content

Commit 5d72d8b

Browse files
committed
fapi_adaptor: changed the phy adaptor to accept late FAPI messages based in a configuration parameter
1 parent b6d10eb commit 5d72d8b

19 files changed

+482
-164
lines changed

apps/examples/du/fapi_factory.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ srsran::build_phy_fapi_adaptor(unsigned
3737
report_fatal_error_if_not(adaptor_factory, "Invalid PHY adaptor factory.");
3838

3939
phy_fapi_adaptor_factory_config phy_fapi_config;
40-
phy_fapi_config.sector_id = sector_id;
41-
phy_fapi_config.scs = scs;
42-
phy_fapi_config.scs_common = scs_common;
43-
phy_fapi_config.prach_cfg = &prach_cfg;
44-
phy_fapi_config.carrier_cfg = &carrier_cfg;
45-
phy_fapi_config.prach_ports = std::move(prach_ports);
40+
phy_fapi_config.sector_id = sector_id;
41+
// Do not allow delay.
42+
phy_fapi_config.nof_slots_request_headroom = 0;
43+
phy_fapi_config.scs = scs;
44+
phy_fapi_config.scs_common = scs_common;
45+
phy_fapi_config.prach_cfg = &prach_cfg;
46+
phy_fapi_config.carrier_cfg = &carrier_cfg;
47+
phy_fapi_config.prach_ports = std::move(prach_ports);
4648

4749
phy_fapi_adaptor_factory_dependencies phy_fapi_dependencies;
4850
phy_fapi_dependencies.logger = &srslog::fetch_basic_logger("FAPI");

apps/gnb/gnb_appconfig.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,11 @@ struct expert_upper_phy_appconfig {
826826
/// -\c post_equalization: SINR is calculated using the post-equalization noise variances of the equalized RE.
827827
/// -\c evm: SINR is obtained from the EVM of the PUSCH symbols.
828828
std::string pusch_sinr_calc_method = "evm";
829+
/// \brief Request headroom size in slots.
830+
///
831+
/// The request headroom size is the number of delayed slots that the upper physical layer will accept, ie, if the
832+
/// current slot is M, the upper phy will consider the slot M - nof_slots_request_headroom as valid and process it.
833+
unsigned nof_slots_request_headroom = 0U;
829834
};
830835

831836
struct test_mode_ue_appconfig {

apps/gnb/gnb_appconfig_cli11_schema.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,11 @@ static void configure_cli11_expert_phy_args(CLI::App& app, expert_upper_phy_appc
456456
"PUSCH SINR calculation method: channel_estimator, post_equalization and evm.")
457457
->capture_default_str()
458458
->check(pusch_sinr_method_check);
459+
app.add_option("--max_request_headroom_slots",
460+
expert_phy_params.nof_slots_request_headroom,
461+
"Maximum request headroom size in slots.")
462+
->capture_default_str()
463+
->check(CLI::Range(0, 3));
459464
}
460465

461466
static void configure_cli11_pdcch_common_args(CLI::App& app, pdcch_common_appconfig& common_params)

apps/gnb/gnb_appconfig_translators.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,6 +1570,7 @@ std::vector<upper_phy_config> srsran::generate_du_low_config(const gnb_appconfig
15701570
max_pusch_concurrency = 1;
15711571
}
15721572

1573+
cfg.nof_slots_request_headroom = config.expert_phy_cfg.nof_slots_request_headroom;
15731574
cfg.log_level = srslog::str_to_basic_level(config.log_cfg.phy_level);
15741575
cfg.enable_logging_broadcast = config.log_cfg.broadcast_enabled;
15751576
cfg.rx_symbol_printer_filename = config.log_cfg.phy_rx_symbols_filename;

include/srsran/fapi/message_builders.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,10 @@ class dl_tti_request_message_builder
931931
{
932932
public:
933933
/// Constructs a builder that will help to fill the given DL TTI request message.
934-
explicit dl_tti_request_message_builder(dl_tti_request_message& msg_) : msg(msg_) {}
934+
explicit dl_tti_request_message_builder(dl_tti_request_message& msg_) : msg(msg_)
935+
{
936+
msg.is_last_message_in_slot = false;
937+
}
935938

936939
/// Sets the DL_TTI.request basic parameters and returns a reference to the builder.
937940
/// \note nPDUs and nPDUsOfEachType properties are filled by the add_*_pdu() functions.
@@ -1069,6 +1072,13 @@ class dl_tti_request_message_builder
10691072
return builder;
10701073
}
10711074

1075+
/// Sets the flag of the last message in slot.
1076+
dl_tti_request_message_builder& set_last_message_in_slot_flag()
1077+
{
1078+
msg.is_last_message_in_slot = true;
1079+
return *this;
1080+
}
1081+
10721082
//: TODO: PDU groups array
10731083
//: TODO: top level rate match patterns
10741084

@@ -1085,6 +1095,7 @@ class ul_dci_request_message_builder
10851095
explicit ul_dci_request_message_builder(ul_dci_request_message& msg_) : msg(msg_)
10861096
{
10871097
msg.num_pdus_of_each_type.fill(0);
1098+
msg.is_last_message_in_slot = false;
10881099
}
10891100

10901101
/// Sets the UL_DCI.request basic parameters and returns a reference to the builder.
@@ -1118,6 +1129,13 @@ class ul_dci_request_message_builder
11181129

11191130
return builder;
11201131
}
1132+
1133+
/// Sets the flag of the last message in slot.
1134+
ul_dci_request_message_builder& set_last_message_in_slot_flag()
1135+
{
1136+
msg.is_last_message_in_slot = true;
1137+
return *this;
1138+
}
11211139
};
11221140

11231141
/// Tx_Data.request message builder that helps to fill in the parameters specified in SCF-222 v4.0 section 3.4.6.

include/srsran/fapi/messages.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ struct dl_pdsch_pdu {
314314
dl_pdsch_ptrs_maintenance_v3 ptrs_maintenance_v3;
315315
// :TODO: Rel16 PDSCH params v3
316316
dl_pdsch_parameters_v4 pdsch_parameters_v4;
317-
// Vendor specific parameters.
317+
/// Vendor specific parameters.
318318
optional<pdsch_context> context;
319319
};
320320

@@ -427,6 +427,8 @@ struct dl_tti_request_message : public base_message {
427427
static_vector<dl_tti_request_pdu, MAX_DL_PDUS_PER_SLOT> pdus;
428428
//: TODO: groups array
429429
//: TODO: top level rate match patterns
430+
/// Vendor specific parameters.
431+
bool is_last_message_in_slot;
430432
};
431433

432434
/// Downlink TTI response pdu information.
@@ -802,6 +804,8 @@ struct ul_dci_request_message : public base_message {
802804
uint16_t slot;
803805
std::array<uint16_t, MAX_NUM_DL_TYPES> num_pdus_of_each_type;
804806
static_vector<ul_dci_pdu, MAX_NUM_UCI_PDUS> pdus;
807+
// Vendor specific parameters.
808+
bool is_last_message_in_slot;
805809
};
806810

807811
/// Encodes the generic information of a TLV.

include/srsran/fapi_adaptor/phy/phy_fapi_adaptor_factory.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ namespace fapi_adaptor {
3434
struct phy_fapi_adaptor_factory_config {
3535
/// Base station sector identifier.
3636
unsigned sector_id;
37+
/// Request headroom size in slots.
38+
unsigned nof_slots_request_headroom;
3739
/// Subcarrier spacing as per TS38.211 Section 4.2.
3840
subcarrier_spacing scs;
3941
/// Common subcarrier spacing as per TS38.331 Section 6.2.2.

include/srsran/phy/upper/upper_phy_factories.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,8 @@ struct upper_phy_config {
280280
unsigned dl_bw_rb;
281281
/// Number of RBs for uplink.
282282
unsigned ul_bw_rb;
283+
/// Request headroom size in slots.
284+
unsigned nof_slots_request_headroom;
283285
/// List of active subcarrier spacing, indexed by numerology.
284286
std::array<bool, to_numerology_value(subcarrier_spacing::invalid)> active_scs;
285287
/// Transmit buffer pool configuration.

lib/du/adapters/fapi_factory.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,20 @@ using namespace srsran;
1717
using namespace fapi_adaptor;
1818

1919
std::unique_ptr<phy_fapi_adaptor>
20-
srsran::build_phy_fapi_adaptor(unsigned sector_id,
21-
subcarrier_spacing scs,
22-
subcarrier_spacing scs_common,
23-
downlink_processor_pool& dl_processor_pool,
24-
resource_grid_pool& dl_rg_pool,
25-
uplink_request_processor& ul_request_processor,
26-
resource_grid_pool& ul_rg_pool,
27-
uplink_slot_pdu_repository& ul_pdu_repository,
28-
const downlink_pdu_validator& dl_pdu_validator,
29-
const uplink_pdu_validator& ul_pdu_validator,
30-
const fapi::prach_config& prach_cfg,
31-
const fapi::carrier_config& carrier_cfg,
32-
std::unique_ptr<precoding_matrix_repository> pm_repo,
20+
srsran::build_phy_fapi_adaptor(unsigned sector_id,
21+
unsigned nof_slots_request_headroom,
22+
subcarrier_spacing scs,
23+
subcarrier_spacing scs_common,
24+
downlink_processor_pool& dl_processor_pool,
25+
resource_grid_pool& dl_rg_pool,
26+
uplink_request_processor& ul_request_processor,
27+
resource_grid_pool& ul_rg_pool,
28+
uplink_slot_pdu_repository& ul_pdu_repository,
29+
const downlink_pdu_validator& dl_pdu_validator,
30+
const uplink_pdu_validator& ul_pdu_validator,
31+
const fapi::prach_config& prach_cfg,
32+
const fapi::carrier_config& carrier_cfg,
33+
std::unique_ptr<precoding_matrix_repository> pm_repo,
3334
std::unique_ptr<fapi_adaptor::uci_part2_correspondence_repository> part2_repo,
3435
task_executor& async_executor,
3536
tx_buffer_pool& buffer_pool,
@@ -39,12 +40,13 @@ srsran::build_phy_fapi_adaptor(unsigned
3940
report_error_if_not(adaptor_factory, "Invalid PHY adaptor factory.");
4041

4142
phy_fapi_adaptor_factory_config phy_fapi_config;
42-
phy_fapi_config.sector_id = sector_id;
43-
phy_fapi_config.scs = scs;
44-
phy_fapi_config.scs_common = scs_common;
45-
phy_fapi_config.prach_cfg = &prach_cfg;
46-
phy_fapi_config.carrier_cfg = &carrier_cfg;
47-
phy_fapi_config.prach_ports = std::move(prach_ports);
43+
phy_fapi_config.sector_id = sector_id;
44+
phy_fapi_config.nof_slots_request_headroom = nof_slots_request_headroom;
45+
phy_fapi_config.scs = scs;
46+
phy_fapi_config.scs_common = scs_common;
47+
phy_fapi_config.prach_cfg = &prach_cfg;
48+
phy_fapi_config.carrier_cfg = &carrier_cfg;
49+
phy_fapi_config.prach_ports = std::move(prach_ports);
4850

4951
phy_fapi_adaptor_factory_dependencies phy_fapi_dependencies;
5052
phy_fapi_dependencies.logger = &srslog::fetch_basic_logger("FAPI");

lib/du/adapters/fapi_factory.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace srsran {
2222

2323
std::unique_ptr<fapi_adaptor::phy_fapi_adaptor>
2424
build_phy_fapi_adaptor(unsigned sector_id,
25+
unsigned nof_slots_request_headroom,
2526
subcarrier_spacing scs,
2627
subcarrier_spacing scs_common,
2728
downlink_processor_pool& dl_processor_pool,

0 commit comments

Comments
 (0)