Merge remote-tracking branch 'origin/min-grant-fixes' into integration_2025_w19 (!3409)
Correctly handle minimum RB condition in MAC - Correctly handle Msg3 min PRB size == BWP size - Make min_grant_prb u16 to also allow to have 273 PRBs
This commit is contained in:
@@ -135,7 +135,7 @@
|
|||||||
{CONFIG_STRING_MACRLC_UL_MAX_MCS, HLP_MACRLC_UL_MAX_MCS, 0, .u8ptr=NULL, .defintval=28, TYPE_UINT8, 0}, \
|
{CONFIG_STRING_MACRLC_UL_MAX_MCS, HLP_MACRLC_UL_MAX_MCS, 0, .u8ptr=NULL, .defintval=28, TYPE_UINT8, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_DL_HARQ_ROUND_MAX, HLP_MACRLC_DL_HARQ_MAX, 0, .u8ptr=NULL, .defintval=4, TYPE_UINT8, 0}, \
|
{CONFIG_STRING_MACRLC_DL_HARQ_ROUND_MAX, HLP_MACRLC_DL_HARQ_MAX, 0, .u8ptr=NULL, .defintval=4, TYPE_UINT8, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_UL_HARQ_ROUND_MAX, HLP_MACRLC_UL_HARQ_MAX, 0, .u8ptr=NULL, .defintval=4, TYPE_UINT8, 0}, \
|
{CONFIG_STRING_MACRLC_UL_HARQ_ROUND_MAX, HLP_MACRLC_UL_HARQ_MAX, 0, .u8ptr=NULL, .defintval=4, TYPE_UINT8, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_MIN_GRANT_PRB, HLP_MACRLC_MIN_GRANT_PRB, 0, .u8ptr=NULL, .defintval=5, TYPE_UINT8, 0}, \
|
{CONFIG_STRING_MACRLC_MIN_GRANT_PRB, HLP_MACRLC_MIN_GRANT_PRB, 0, .u16ptr=NULL, .defintval=5, TYPE_UINT16, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_IDENTITY_PM, HLP_MACRLC_IDENTITY_PM, PARAMFLAG_BOOL, .u8ptr=NULL, .defintval=0, TYPE_UINT8, 0}, \
|
{CONFIG_STRING_MACRLC_IDENTITY_PM, HLP_MACRLC_IDENTITY_PM, PARAMFLAG_BOOL, .u8ptr=NULL, .defintval=0, TYPE_UINT8, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS_F1U, NULL, 0, .strptr=NULL, .defstrval=NULL, TYPE_STRING, 0}, \
|
{CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS_F1U, NULL, 0, .strptr=NULL, .defstrval=NULL, TYPE_STRING, 0}, \
|
||||||
{CONFIG_STRING_MACRLC_TRANSPORT_S_SHM_PREFIX, NULL, 0, .strptr=NULL, .defstrval="nvipc", TYPE_STRING, 0}, \
|
{CONFIG_STRING_MACRLC_TRANSPORT_S_SHM_PREFIX, NULL, 0, .strptr=NULL, .defstrval="nvipc", TYPE_STRING, 0}, \
|
||||||
|
|||||||
@@ -1685,7 +1685,7 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
|||||||
ul_bler_options->harq_round_max = 1;
|
ul_bler_options->harq_round_max = 1;
|
||||||
else
|
else
|
||||||
ul_bler_options->harq_round_max = *(MacRLC_ParamList.paramarray[j][MACRLC_UL_HARQ_ROUND_MAX_IDX].u8ptr);
|
ul_bler_options->harq_round_max = *(MacRLC_ParamList.paramarray[j][MACRLC_UL_HARQ_ROUND_MAX_IDX].u8ptr);
|
||||||
RC.nrmac[j]->min_grant_prb = *(MacRLC_ParamList.paramarray[j][MACRLC_MIN_GRANT_PRB_IDX].u8ptr);
|
RC.nrmac[j]->min_grant_prb = *(MacRLC_ParamList.paramarray[j][MACRLC_MIN_GRANT_PRB_IDX].u16ptr);
|
||||||
RC.nrmac[j]->identity_pm = *(MacRLC_ParamList.paramarray[j][MACRLC_IDENTITY_PM_IDX].u8ptr);
|
RC.nrmac[j]->identity_pm = *(MacRLC_ParamList.paramarray[j][MACRLC_IDENTITY_PM_IDX].u8ptr);
|
||||||
// PRB Blacklist
|
// PRB Blacklist
|
||||||
uint16_t prbbl[MAX_BWP_SIZE] = {0};
|
uint16_t prbbl[MAX_BWP_SIZE] = {0};
|
||||||
|
|||||||
@@ -1047,7 +1047,7 @@ static bool nr_get_Msg3alloc(gNB_MAC_INST *mac, int CC_id, int current_slot, fra
|
|||||||
NR_RA_t *ra = UE->ra;
|
NR_RA_t *ra = UE->ra;
|
||||||
DevAssert(ra->Msg3_tda_id >= 0 && ra->Msg3_tda_id < 16);
|
DevAssert(ra->Msg3_tda_id >= 0 && ra->Msg3_tda_id < 16);
|
||||||
|
|
||||||
uint16_t msg3_nb_rb = 8; // sdu has 6 or 8 bytes
|
uint16_t msg3_nb_rb = max(8, mac->min_grant_prb); // sdu has 6 or 8 bytes
|
||||||
|
|
||||||
NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
|
NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
|
||||||
NR_UE_ServingCell_Info_t *sc_info = &UE->sc_info;
|
NR_UE_ServingCell_Info_t *sc_info = &UE->sc_info;
|
||||||
@@ -1057,14 +1057,6 @@ static bool nr_get_Msg3alloc(gNB_MAC_INST *mac, int CC_id, int current_slot, fra
|
|||||||
int startSymbolAndLength = pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
int startSymbolAndLength = pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||||
SLIV2SL(startSymbolAndLength, &ra->msg3_startsymb, &ra->msg3_nbSymb);
|
SLIV2SL(startSymbolAndLength, &ra->msg3_startsymb, &ra->msg3_nbSymb);
|
||||||
|
|
||||||
LOG_I(NR_MAC,
|
|
||||||
"UE %04x: Msg3 scheduled at %d.%d (%d.%d TDA %u)\n",
|
|
||||||
UE->rnti,
|
|
||||||
ra->Msg3_frame,
|
|
||||||
ra->Msg3_slot,
|
|
||||||
current_frame,
|
|
||||||
current_slot,
|
|
||||||
ra->Msg3_tda_id);
|
|
||||||
const int buffer_index = ul_buffer_index(ra->Msg3_frame,
|
const int buffer_index = ul_buffer_index(ra->Msg3_frame,
|
||||||
ra->Msg3_slot,
|
ra->Msg3_slot,
|
||||||
mac->frame_structure.numb_slots_frame,
|
mac->frame_structure.numb_slots_frame,
|
||||||
@@ -1099,6 +1091,16 @@ static bool nr_get_Msg3alloc(gNB_MAC_INST *mac, int CC_id, int current_slot, fra
|
|||||||
ra->msg3_nb_rb = msg3_nb_rb;
|
ra->msg3_nb_rb = msg3_nb_rb;
|
||||||
ra->msg3_first_rb = rbStart;
|
ra->msg3_first_rb = rbStart;
|
||||||
ra->msg3_bwp_start = bwpStart;
|
ra->msg3_bwp_start = bwpStart;
|
||||||
|
LOG_I(NR_MAC,
|
||||||
|
"UE %04x: Msg3 scheduled at %d.%d (%d.%d TDA %u) start %d RBs %d\n",
|
||||||
|
UE->rnti,
|
||||||
|
ra->Msg3_frame,
|
||||||
|
ra->Msg3_slot,
|
||||||
|
current_frame,
|
||||||
|
current_slot,
|
||||||
|
ra->Msg3_tda_id,
|
||||||
|
ra->msg3_first_rb,
|
||||||
|
ra->msg3_nb_rb);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1968,7 +1968,7 @@ static void pf_ul(module_id_t module_id,
|
|||||||
const uint16_t slbitmap = SL_to_bitmap(sched_pusch->tda_info.startSymbolIndex, sched_pusch->tda_info.nrOfSymbols);
|
const uint16_t slbitmap = SL_to_bitmap(sched_pusch->tda_info.startSymbolIndex, sched_pusch->tda_info.nrOfSymbols);
|
||||||
while (rbStart < bwpSize && (rballoc_mask[rbStart + bwpStart] & slbitmap))
|
while (rbStart < bwpSize && (rballoc_mask[rbStart + bwpStart] & slbitmap))
|
||||||
rbStart++;
|
rbStart++;
|
||||||
if (rbStart + min_rb >= bwpSize) {
|
if (rbStart + min_rb > bwpSize) {
|
||||||
LOG_D(NR_MAC,
|
LOG_D(NR_MAC,
|
||||||
"[UE %04x][%4d.%2d] could not allocate continuous UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
|
"[UE %04x][%4d.%2d] could not allocate continuous UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
|
||||||
UE->rnti,
|
UE->rnti,
|
||||||
@@ -2121,7 +2121,7 @@ static void pf_ul(module_id_t module_id,
|
|||||||
while (rbStart + max_rbSize < bwpSize && !(rballoc_mask[rbStart + bwpStart + max_rbSize] & slbitmap))
|
while (rbStart + max_rbSize < bwpSize && !(rballoc_mask[rbStart + bwpStart + max_rbSize] & slbitmap))
|
||||||
max_rbSize++;
|
max_rbSize++;
|
||||||
|
|
||||||
if (rbStart + min_rb >= bwpSize || max_rbSize < min_rb) {
|
if (rbStart + min_rb > bwpSize || max_rbSize < min_rb) {
|
||||||
reset_beam_status(&nrmac->beam_info, frame, slot, iterator->UE->UE_beam_index, slots_per_frame, dci_beam.new_beam);
|
reset_beam_status(&nrmac->beam_info, frame, slot, iterator->UE->UE_beam_index, slots_per_frame, dci_beam.new_beam);
|
||||||
reset_beam_status(&nrmac->beam_info, sched_frame, sched_slot, iterator->UE->UE_beam_index, slots_per_frame, beam.new_beam);
|
reset_beam_status(&nrmac->beam_info, sched_frame, sched_slot, iterator->UE->UE_beam_index, slots_per_frame, beam.new_beam);
|
||||||
LOG_D(NR_MAC, "[UE %04x][%4d.%2d] could not allocate UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
|
LOG_D(NR_MAC, "[UE %04x][%4d.%2d] could not allocate UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)\n",
|
||||||
|
|||||||
@@ -908,7 +908,7 @@ typedef struct gNB_MAC_INST_s {
|
|||||||
bool first_MIB;
|
bool first_MIB;
|
||||||
NR_bler_options_t dl_bler;
|
NR_bler_options_t dl_bler;
|
||||||
NR_bler_options_t ul_bler;
|
NR_bler_options_t ul_bler;
|
||||||
uint8_t min_grant_prb;
|
uint16_t min_grant_prb;
|
||||||
bool identity_pm;
|
bool identity_pm;
|
||||||
int precoding_matrix_size[NR_MAX_NB_LAYERS];
|
int precoding_matrix_size[NR_MAX_NB_LAYERS];
|
||||||
int fapi_beam_index[MAX_NUM_OF_SSB];
|
int fapi_beam_index[MAX_NUM_OF_SSB];
|
||||||
|
|||||||
Reference in New Issue
Block a user