From c288f8465133d65b0a4799e83edb7504f2140b9b Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 29 Sep 2025 17:26:42 +0000 Subject: [PATCH] mac: fix fapi beam id Set MSB of fapi beam ID based on flag for beamforming done in hiPHY or loPHY. --- common/utils/utils.h | 4 +-- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 2 +- openair2/GNB_APP/gnb_config.c | 1 + openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 33 ++++++++----------- .../LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c | 26 ++++----------- .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 5 +-- .../NR_MAC_gNB/gNB_scheduler_primitives.c | 15 +++++++-- .../LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c | 3 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 3 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 11 ++++--- openair2/LAYER2/NR_MAC_gNB/mac_proto.h | 11 ++++--- openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 2 +- 12 files changed, 58 insertions(+), 58 deletions(-) diff --git a/common/utils/utils.h b/common/utils/utils.h index df188b812f..ede5cf7a84 100644 --- a/common/utils/utils.h +++ b/common/utils/utils.h @@ -33,8 +33,8 @@ extern "C" { __typeof__ (b) _b = (b); \ _a < _b ? _a : _b; }) - - +#define IS_BIT_SET(a, b) ((a >> b) & 1) +#define SET_BIT(a, b) (a | (1 << b)) #ifdef __cplusplus #ifdef min diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index b1971d133f..f7d2496faf 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -77,7 +77,7 @@ int beam_index_allocation(bool das, if (das) return fapi_beam_index; - int ru_beam_idx = analog_bf->analog_beam_list[fapi_beam_index].value; + int ru_beam_idx = analog_bf->analog_beam_list[fapi_beam_index].value & 0x7fff; int idx = -1; for (int j = 0; j < common_vars->num_beams_period; j++) { // L2 analog beam implementation is slot based, so we need to verify occupancy for the whole slot diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index cbf73a861b..d70bf712b8 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1634,6 +1634,7 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg) beam_info->beam_duration = *MacRLC_ParamList.paramarray[j][MACRLC_ANALOG_BEAM_DURATION_IDX].u8ptr; beam_info->beams_per_period = beams_per_period; beam_info->beam_allocation_size = -1; // to be initialized once we have information on frame configuration + // TODO: Indicate this to MAC via FAPI TLV 0x0164. beam_info->beam_mode = ab == 1 ? PRECONFIGURED_BEAM_IDX : LOPHY_BEAM_IDX; } else { RC.nrmac[j]->beam_info.beam_mode = NO_BEAM_MODE; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index a1e63d6e74..5720f28279 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -516,7 +516,8 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, slot_t slotP) prach_pdu->beamforming.num_prgs = 1; prach_pdu->beamforming.prg_size = n_ra_rb; prach_pdu->beamforming.dig_bf_interface = num_td_occ; - prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list[num_td_occ - 1].beam_idx = beam_index; + const uint16_t fapi_beam = convert_to_fapi_beam(beam_index, gNB->beam_info.beam_mode); + prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list[num_td_occ - 1].beam_idx = fapi_beam; LOG_D(NR_MAC, "Frame %d, Slot %d: Prach Occasion id = %u fdm index = %u start symbol = %u slot index = %u subframe index = %u \n", @@ -900,7 +901,8 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP, 0, ra->msg3_round, ul_bwp->pusch_Config && ul_bwp->pusch_Config->frequencyHopping, - UE->rnti); + UE->rnti, + nr_mac->beam_info.beam_mode); future_ul_tti_req->n_pdus += 1; // generation of DCI 0_0 to schedule msg3 retransmission @@ -933,14 +935,9 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP, } // Fill PDCCH DL DCI PDU - nfapi_nr_dl_dci_pdu_t *dci_pdu = prepare_dci_pdu(pdcch_pdu_rel15, - scc, - ss, - coreset, - aggregation_level, - CCEIndex, - UE->UE_beam_index, - UE->rnti); + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, nr_mac->beam_info.beam_mode); + nfapi_nr_dl_dci_pdu_t *dci_pdu = + prepare_dci_pdu(pdcch_pdu_rel15, scc, ss, coreset, aggregation_level, CCEIndex, fapi_beam, UE->rnti); pdcch_pdu_rel15->numDlDci++; dci_pdu_rel15_t uldci_payload = {0}; @@ -1204,7 +1201,8 @@ static void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, slot_ 0, 0, ul_bwp->pusch_Config && ul_bwp->pusch_Config->frequencyHopping, - UE->rnti); + UE->rnti, + mac->beam_info.beam_mode); future_ul_tti_req->n_pdus += 1; // calling function to fill rar message @@ -1326,6 +1324,7 @@ static void prepare_dl_pdus(gNB_MAC_INST *nr_mac, NR_COMMON_channels_t *cc = &nr_mac->common_channels[CC_id]; NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; NR_UE_DL_BWP_t *dl_bwp = &UE->current_DL_BWP; + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, nr_mac->beam_info.beam_mode); nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = prepare_pdsch_pdu(dl_tti_pdsch_pdu, nr_mac, UE, @@ -1334,19 +1333,13 @@ static void prepare_dl_pdus(gNB_MAC_INST *nr_mac, false, round, rnti, - UE->UE_beam_index, + fapi_beam, 1, pduindex); /* Fill PDCCH DL DCI PDU */ - nfapi_nr_dl_dci_pdu_t *dci_pdu = prepare_dci_pdu(pdcch_pdu_rel15, - scc, - sched_ctrl->search_space, - coreset, - aggregation_level, - CCEIndex, - UE->UE_beam_index, - rnti); + nfapi_nr_dl_dci_pdu_t *dci_pdu = + prepare_dci_pdu(pdcch_pdu_rel15, scc, sched_ctrl->search_space, coreset, aggregation_level, CCEIndex, fapi_beam, rnti); pdcch_pdu_rel15->numDlDci++; dci_pdu_rel15_t dci_payload = prepare_dci_dl_payload(nr_mac, diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c index 7bc5d6ed91..937032693b 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c @@ -139,6 +139,7 @@ static void schedule_one_ssb(gNB_MAC_INST *gNB, int beam_index = get_fapi_beamforming_index(gNB, i_ssb); NR_beam_alloc_t beam = beam_allocation_procedure(&gNB->beam_info, frameP, slotP, beam_index, slots_per_frame); AssertFatal(beam.idx >= 0, "Cannot allocate SSB %d in any available beam\n", i_ssb); + beam_index = convert_to_fapi_beam(beam_index, gNB->beam_info.beam_mode); const int prb_offset = (FR == FR2) ? offset_pointa >> (scs - 2) : offset_pointa >> scs; schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, beam_index, ssbSubcarrierOffset, offset_pointa, mib_pdu); fill_ssb_vrb_map(cc, @@ -401,17 +402,9 @@ static void nr_fill_nfapi_dl_SIB_pdu(gNB_MAC_INST *gNB_mac, dl_tti_pdsch_pdu->PDUSize = (uint16_t)(4+sizeof(nfapi_nr_dl_tti_pdsch_pdu)); dl_req->nPDUs += 1; - nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = prepare_pdsch_pdu(dl_tti_pdsch_pdu, - gNB_mac, - NULL, - pdsch, - NULL, - is_sib1, - 0, - SI_RNTI, - beam_index, - 1, - pdu_index); + const uint16_t fapi_beam = convert_to_fapi_beam(beam_index, gNB_mac->beam_info.beam_mode); + nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = + prepare_pdsch_pdu(dl_tti_pdsch_pdu, gNB_mac, NULL, pdsch, NULL, is_sib1, 0, SI_RNTI, fapi_beam, 1, pdu_index); LOG_D(NR_MAC, "OtherSI:bwpStart %d, bwpSize %d, rbStart %d, rbSize %d, dlDmrsSymbPos = 0x%x\n", pdsch_pdu_rel15->BWPStart, @@ -421,14 +414,8 @@ static void nr_fill_nfapi_dl_SIB_pdu(gNB_MAC_INST *gNB_mac, pdsch_pdu_rel15->dlDmrsSymbPos); /* Fill PDCCH DL DCI PDU */ - nfapi_nr_dl_dci_pdu_t *dci_pdu = prepare_dci_pdu(pdcch_pdu_rel15, - scc, - search_space, - coreset, - aggregation_level, - cce_index, - beam_index, - SI_RNTI); + nfapi_nr_dl_dci_pdu_t *dci_pdu = + prepare_dci_pdu(pdcch_pdu_rel15, scc, search_space, coreset, aggregation_level, cce_index, fapi_beam, SI_RNTI); pdcch_pdu_rel15->numDlDci++; /* DCI payload */ @@ -629,6 +616,7 @@ static void other_sib_sched_control(module_id_t module_idP, slot); NR_ServingCellConfigCommon_t *scc = gNB_mac->common_channels[0].ServingCellConfigCommon; int n_slots_frame = gNB_mac->frame_structure.numb_slots_frame; + beam_index = get_fapi_beamforming_index(gNB_mac, beam_index); NR_beam_alloc_t beam = beam_allocation_procedure(&gNB_mac->beam_info, frame, slot, beam_index, n_slots_frame); AssertFatal(beam.idx >= 0, "Cannot allocate otherSIB corresponding for SSB number %d in any available beam\n", beam_index); LOG_D(NR_MAC, "(%d.%d) otherSIB payload %d transmission for ssb number %d\n", frame, slot, payload_idx, beam_index); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index d5c1048ad6..00c41953a1 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -1142,6 +1142,7 @@ void post_process_dlsch(gNB_MAC_INST *nr_mac, post_process_pdsch_t *pdsch, NR_UE maxMIMO_Layers = 1; } const int nl_tbslbrm = min(maxMIMO_Layers, 4); + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, nr_mac->beam_info.beam_mode); nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu = prepare_pdsch_pdu(dl_tti_pdsch_pdu, nr_mac, UE, @@ -1150,7 +1151,7 @@ void post_process_dlsch(gNB_MAC_INST *nr_mac, post_process_pdsch_t *pdsch, NR_UE false, harq->round, rnti, - UE->UE_beam_index, + fapi_beam, nl_tbslbrm, pduindex); @@ -1163,7 +1164,7 @@ void post_process_dlsch(gNB_MAC_INST *nr_mac, post_process_pdsch_t *pdsch, NR_UE sched_ctrl->coreset, sched_ctrl->aggregation_level, sched_ctrl->cce_index, - UE->UE_beam_index, + fapi_beam, rnti); pdcch_pdu->numDlDci++; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 01a3f8d31a..403a4187c9 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -1326,7 +1326,8 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t *pucch_pdu, uint16_t O_csi, uint16_t O_ack, uint8_t O_sr, - int r_pucch) + int r_pucch, + nr_beam_mode_t beam_mode) { NR_PUCCH_Resource_t *pucchres; NR_PUCCH_FormatConfig_t *pucchfmt; @@ -1534,7 +1535,8 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t *pucch_pdu, pucch_pdu->beamforming.num_prgs = 1; pucch_pdu->beamforming.prg_size = pucch_pdu->prb_size; pucch_pdu->beamforming.dig_bf_interface = 1; - pucch_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = UE->UE_beam_index; + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, beam_mode); + pucch_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = fapi_beam; } void set_r_pucch_parms(int rsetindex, @@ -3246,7 +3248,8 @@ void nr_csirs_scheduling(int Mod_idP, frame_t frame, slot_t slot, nfapi_nr_dl_tt csirs_pdu_rel15->precodingAndBeamforming.prg_size = resourceMapping.freqBand.nrofRBs; //1 PRG of max size csirs_pdu_rel15->precodingAndBeamforming.dig_bf_interfaces = 1; csirs_pdu_rel15->precodingAndBeamforming.prgs_list[0].pm_idx = 0; - csirs_pdu_rel15->precodingAndBeamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = UE->UE_beam_index; + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, gNB_mac->beam_info.beam_mode); + csirs_pdu_rel15->precodingAndBeamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = fapi_beam; csirs_pdu_rel15->bwp_size = dl_bwp->BWPSize; csirs_pdu_rel15->bwp_start = dl_bwp->BWPStart; csirs_pdu_rel15->subcarrier_spacing = dl_bwp->scs; @@ -3689,6 +3692,12 @@ NR_beam_alloc_t beam_allocation_procedure(NR_beam_info_t *beam_info, int frame, return (NR_beam_alloc_t) {.new_beam = false, .idx = -1}; } +uint16_t convert_to_fapi_beam(const uint16_t beam_idx, const nr_beam_mode_t mode) +{ + AssertFatal(beam_idx >= 0 && beam_idx < 32768, "Beam index out of range. Valid range is [0, 32767]\n"); + return (mode == LOPHY_BEAM_IDX) ? SET_BIT(beam_idx, 15) : beam_idx; +} + void reset_beam_status(NR_beam_info_t *beam_info, int frame, int slot, int16_t beam_index, int slots_per_frame, bool new_beam) { if(!new_beam) // need to reset only if the beam was allocated specifically for this instance diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c index cf58252ed9..8c8a25e446 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c @@ -473,7 +473,8 @@ static void nr_configure_srs(gNB_MAC_INST *nrmac, srs_pdu->beamforming.num_prgs = m_SRS[srs_pdu->config_index]; srs_pdu->beamforming.prg_size = srs_pdu->srs_parameters_v4.srs_bandwidth_size; } - srs_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = UE->UE_beam_index; + const uint16_t fapi_beam = convert_to_fapi_beam(UE->UE_beam_index, nrmac->beam_info.beam_mode); + srs_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = fapi_beam; NR_beam_alloc_t beam = beam_allocation_procedure(&nrmac->beam_info, frame, slot, UE->UE_beam_index, slots_per_frame); AssertFatal(beam.idx >= 0, "Cannot allocate SRS in any available beam\n"); uint16_t *vrb_map_UL = &nrmac->common_channels[CC_id].vrb_map_UL[beam.idx][buffer_index * MAX_BWP_SIZE]; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index eb32fde2e6..1bd7f3eb72 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -94,7 +94,8 @@ static void nr_fill_nfapi_pucch(gNB_MAC_INST *nrmac, frame_t frame, slot_t slot, pucch->csi_bits, pucch->dai_c, pucch->sr_flag, - pucch->r_pucch); + pucch->r_pucch, + nrmac->beam_info.beam_mode); } #define MIN_RSRP_VALUE -141 diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index abe5cd8361..f815caf9fd 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -2314,7 +2314,8 @@ nfapi_nr_pusch_pdu_t *prepare_pusch_pdu(nfapi_nr_ul_tti_request_t *future_ul_tti int harq_id, int harq_round, int fh, - int rnti) + int rnti, + nr_beam_mode_t beam_mode) { nfapi_nr_pusch_pdu_t *pusch_pdu = &future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pusch_pdu; memset(pusch_pdu, 0, sizeof(nfapi_nr_pusch_pdu_t)); @@ -2364,7 +2365,8 @@ nfapi_nr_pusch_pdu_t *prepare_pusch_pdu(nfapi_nr_ul_tti_request_t *future_ul_tti pusch_pdu->beamforming.num_prgs = 1; pusch_pdu->beamforming.prg_size = pusch_pdu->bwp_size; pusch_pdu->beamforming.dig_bf_interface = 1; - pusch_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = UE->UE_beam_index; + pusch_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = + convert_to_fapi_beam(UE->UE_beam_index, beam_mode); /* TRANSFORM PRECODING --------------------------------------------------------*/ if (pusch_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) { // U as specified in section 6.4.1.1.1.2 in 38.211, if sequence hopping and group hopping are disabled @@ -2522,7 +2524,8 @@ void post_process_ulsch(gNB_MAC_INST *nr_mac, post_process_pusch_t *pusch, NR_UE harq_id, cur_harq->round, current_BWP->pusch_Config && current_BWP->pusch_Config->frequencyHopping, - UE->rnti); + UE->rnti, + nr_mac->beam_info.beam_mode); req->n_pdus += 1; // Calculate the normalized tx_power for PHR @@ -2564,7 +2567,7 @@ void post_process_ulsch(gNB_MAC_INST *nr_mac, post_process_pusch_t *pusch, NR_UE coreset, sched_ctrl->aggregation_level, sched_ctrl->cce_index, - UE->UE_beam_index, + convert_to_fapi_beam(UE->UE_beam_index, nr_mac->beam_info.beam_mode), UE->rnti); pdcch_pdu->numDlDci++; diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h index fb771c4759..b3890d4019 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h @@ -213,14 +213,15 @@ int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset, NR_PUCCH_Config_t *pucch_Config, int CCEIndex); -void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu, +void nr_configure_pucch(nfapi_nr_pucch_pdu_t *pucch_pdu, NR_ServingCellConfigCommon_t *scc, - NR_UE_info_t* UE, + NR_UE_info_t *UE, uint8_t pucch_resource, uint16_t O_csi, uint16_t O_ack, uint8_t O_sr, - int r_pucch); + int r_pucch, + nr_beam_mode_t mode); void find_search_space(int ss_type, NR_BWP_Downlink_t *bwp, @@ -330,7 +331,8 @@ nfapi_nr_pusch_pdu_t *prepare_pusch_pdu(nfapi_nr_ul_tti_request_t *future_ul_tti int harq_id, int harq_round, int fh, - int rnti); + int rnti, + nr_beam_mode_t beam_mode); nfapi_nr_dl_tti_pdsch_pdu_rel15_t *prepare_pdsch_pdu(nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdsch_pdu, const gNB_MAC_INST *mac, const NR_UE_info_t *UE, @@ -447,6 +449,7 @@ int ul_buffer_index(int frame, int slot, int slots_per_frame, int size); void UL_tti_req_ahead_initialization(gNB_MAC_INST *gNB, int n, int CCid, frame_t frameP, int slotP); void fapi_beam_index_allocation(NR_ServingCellConfigCommon_t *scc, const nr_mac_config_t *config, gNB_MAC_INST *mac); int get_fapi_beamforming_index(gNB_MAC_INST *mac, int ssb_idx); +uint16_t convert_to_fapi_beam(const uint16_t beam_idx, const nr_beam_mode_t mode); NR_beam_alloc_t beam_allocation_procedure(NR_beam_info_t *beam_info, int frame, int slot, int16_t beam_index, int slots_per_frame); void reset_beam_status(NR_beam_info_t *beam_info, int frame, int slot, int16_t beam_index, int slots_per_frame, bool new_beam); void beam_selection_procedures(gNB_MAC_INST *mac, NR_UE_info_t *UE); diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index de7962fb7b..608723f510 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -794,7 +794,7 @@ typedef struct NR_UE_info { NR_UE_NR_Capability_t *capability; measgap_config_t measgap_config; // UE selected beam index - uint8_t UE_beam_index; + uint16_t UE_beam_index; float ul_thr_ue; float dl_thr_ue; long pdsch_HARQ_ACK_Codebook;