From 3ec14152a156a533a677b7c0e051f7d3dde28c92 Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 1 Apr 2025 09:53:24 +0200 Subject: [PATCH] fix for ULSCH number of layers in case of DCI00 --- .../LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c | 14 ++++++++++---- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 4 ++-- openair2/LAYER2/NR_MAC_gNB/mac_proto.h | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 17a6ae53bd..7b9ad1ed3b 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -125,16 +125,22 @@ static const uint16_t cqi_table3[16][2] = {{0, 0}, static void determine_aggregation_level_search_order(int agg_level_search_order[NUM_PDCCH_AGG_LEVELS], float pdcch_cl_adjust); -uint8_t get_dl_nrOfLayers(const NR_UE_sched_ctrl_t *sched_ctrl, - const nr_dci_format_t dci_format) { - +uint8_t get_dl_nrOfLayers(const NR_UE_sched_ctrl_t *sched_ctrl, const nr_dci_format_t dci_format) +{ // TODO check this but it should be enough for now // if there is not csi report activated RI is 0 from initialization if(dci_format == NR_DL_DCI_FORMAT_1_0) return 1; else - return (sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.ri + 1); + return sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.ri + 1; +} +int get_ul_nrOfLayers(const NR_UE_sched_ctrl_t *sched_ctrl, const nr_dci_format_t dci_format) +{ + if(dci_format == NR_UL_DCI_FORMAT_0_0) + return 1; + else + return sched_ctrl->srs_feedback.ul_ri + 1; } // Table 5.2.2.2.1-3 and Table 5.2.2.2.1-4 in 38.214 diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 49fe0fca5e..258f3c8c76 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -1947,7 +1947,7 @@ static void pf_ul(module_id_t module_id, continue; } - sched_pusch->nrOfLayers = sched_ctrl->srs_feedback.ul_ri + 1; + sched_pusch->nrOfLayers = get_ul_nrOfLayers(sched_ctrl, current_BWP->dci_format); sched_pusch->time_domain_allocation = get_ul_tda(nrmac, sched_frame, sched_slot); sched_pusch->tda_info = get_ul_tda_info(current_BWP, sched_ctrl->coreset->controlResourceSetId, @@ -2097,7 +2097,7 @@ static void pf_ul(module_id_t module_id, - sched_pusch->nrOfLayers = sched_ctrl->srs_feedback.ul_ri + 1; + sched_pusch->nrOfLayers = get_ul_nrOfLayers(sched_ctrl, current_BWP->dci_format); sched_pusch->time_domain_allocation = get_ul_tda(nrmac, sched_frame, sched_slot); sched_pusch->tda_info = get_ul_tda_info(current_BWP, sched_ctrl->coreset->controlResourceSetId, diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h index 563cfd19b2..3ac09ce98a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h @@ -380,6 +380,7 @@ uint16_t get_pm_index(const gNB_MAC_INST *nrmac, uint8_t get_mcs_from_cqi(int mcs_table, int cqi_table, int cqi_idx); uint8_t get_dl_nrOfLayers(const NR_UE_sched_ctrl_t *sched_ctrl, const nr_dci_format_t dci_format); +int get_ul_nrOfLayers(const NR_UE_sched_ctrl_t *sched_ctrl, const nr_dci_format_t dci_format); void free_sched_pucch_list(NR_UE_sched_ctrl_t *sched_ctrl); bool add_UE_to_list(int list_size, NR_UE_info_t *list[list_size], NR_UE_info_t *UE);