Merge remote-tracking branch 'origin/feedback_disabled_ra' into integration_2025_w10
This commit is contained in:
@@ -2147,6 +2147,16 @@ static void nr_generate_Msg4_MsgB(module_id_t module_idP,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int delta_PRI = 0;
|
||||||
|
int r_pucch = nr_get_pucch_resource(coreset, ra->UL_BWP.pucch_Config, CCEIndex);
|
||||||
|
LOG_D(NR_MAC, "Msg4 r_pucch %d (CCEIndex %d, delta_PRI %d)\n", r_pucch, CCEIndex, delta_PRI);
|
||||||
|
int alloc = nr_acknack_scheduling(nr_mac, UE, frameP, slotP, ra->beam_id, r_pucch, 1);
|
||||||
|
if (alloc < 0) {
|
||||||
|
LOG_D(NR_MAC,"Couldn't find a pucch allocation for ack nack (msg4) in frame %d slot %d\n", frameP, slotP);
|
||||||
|
reset_beam_status(&nr_mac->beam_info, frameP, slotP, ra->beam_id, n_slots_frame, beam.new_beam);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// HARQ management
|
// HARQ management
|
||||||
if (current_harq_pid < 0) {
|
if (current_harq_pid < 0) {
|
||||||
AssertFatal(sched_ctrl->available_dl_harq.head >= 0,
|
AssertFatal(sched_ctrl->available_dl_harq.head >= 0,
|
||||||
@@ -2155,39 +2165,16 @@ static void nr_generate_Msg4_MsgB(module_id_t module_idP,
|
|||||||
remove_front_nr_list(&sched_ctrl->available_dl_harq);
|
remove_front_nr_list(&sched_ctrl->available_dl_harq);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int delta_PRI = 0;
|
|
||||||
|
|
||||||
int alloc = -1;
|
|
||||||
if (!get_FeedbackDisabled(UE->sc_info.downlinkHARQ_FeedbackDisabled_r17, current_harq_pid)) {
|
|
||||||
int r_pucch = nr_get_pucch_resource(coreset, ra->UL_BWP.pucch_Config, CCEIndex);
|
|
||||||
|
|
||||||
LOG_D(NR_MAC, "Msg4 r_pucch %d (CCEIndex %d, delta_PRI %d)\n", r_pucch, CCEIndex, delta_PRI);
|
|
||||||
|
|
||||||
alloc = nr_acknack_scheduling(nr_mac, UE, frameP, slotP, ra->beam_id, r_pucch, 1);
|
|
||||||
if (alloc < 0) {
|
|
||||||
LOG_D(NR_MAC,"Couldn't find a pucch allocation for ack nack (msg4) in frame %d slot %d\n", frameP, slotP);
|
|
||||||
reset_beam_status(&nr_mac->beam_info, frameP, slotP, ra->beam_id, n_slots_frame, beam.new_beam);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NR_UE_harq_t *harq = &sched_ctrl->harq_processes[current_harq_pid];
|
NR_UE_harq_t *harq = &sched_ctrl->harq_processes[current_harq_pid];
|
||||||
NR_sched_pucch_t *pucch = NULL;
|
NR_sched_pucch_t *pucch = &sched_ctrl->sched_pucch[alloc];
|
||||||
DevAssert(!harq->is_waiting);
|
DevAssert(!harq->is_waiting);
|
||||||
if (alloc < 0) {
|
|
||||||
finish_nr_dl_harq(sched_ctrl, current_harq_pid);
|
|
||||||
} else {
|
|
||||||
pucch = &sched_ctrl->sched_pucch[alloc];
|
|
||||||
add_tail_nr_list(&sched_ctrl->feedback_dl_harq, current_harq_pid);
|
add_tail_nr_list(&sched_ctrl->feedback_dl_harq, current_harq_pid);
|
||||||
harq->feedback_slot = pucch->ul_slot;
|
harq->feedback_slot = pucch->ul_slot;
|
||||||
harq->feedback_frame = pucch->frame;
|
harq->feedback_frame = pucch->frame;
|
||||||
harq->is_waiting = true;
|
harq->is_waiting = true;
|
||||||
}
|
|
||||||
ra->harq_pid = current_harq_pid;
|
ra->harq_pid = current_harq_pid;
|
||||||
UE->mac_stats.dl.rounds[harq->round]++;
|
UE->mac_stats.dl.rounds[harq->round]++;
|
||||||
|
|
||||||
harq->tb_size = tb_size;
|
harq->tb_size = tb_size;
|
||||||
|
|
||||||
uint8_t *buf = allocate_transportBlock_buffer(&harq->transportBlock, tb_size);
|
uint8_t *buf = allocate_transportBlock_buffer(&harq->transportBlock, tb_size);
|
||||||
// Bytes to be transmitted
|
// Bytes to be transmitted
|
||||||
if (harq->round == 0) {
|
if (harq->round == 0) {
|
||||||
@@ -2292,20 +2279,6 @@ static void nr_generate_Msg4_MsgB(module_id_t module_idP,
|
|||||||
vrb_map[BWPStart + rb + rbStart] |= SL_to_bitmap(msg4_tda.startSymbolIndex, msg4_tda.nrOfSymbols);
|
vrb_map[BWPStart + rb + rbStart] |= SL_to_bitmap(msg4_tda.startSymbolIndex, msg4_tda.nrOfSymbols);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pucch == NULL) {
|
|
||||||
LOG_A(NR_MAC, "(UE RNTI 0x%04x) Skipping Ack of RA-Msg4. CBRA procedure succeeded!\n", ra->rnti);
|
|
||||||
UE->Msg4_MsgB_ACKed = true;
|
|
||||||
|
|
||||||
// Pause scheduling according to:
|
|
||||||
// 3GPP TS 38.331 Section 12 Table 12.1-1: UE performance requirements for RRC procedures for UEs
|
|
||||||
// Msg4 may transmit a RRCReconfiguration, for example when UE sends RRCReestablishmentComplete and MAC CE for C-RNTI in Msg3.
|
|
||||||
// In that case, gNB will generate a RRCReconfiguration that will be transmitted in Msg4, so we need to apply CellGroup after the Ack,
|
|
||||||
// UE->reconfigCellGroup was already set when processing RRCReestablishment message
|
|
||||||
int delay = nr_mac_get_reconfig_delay_slots(UE->current_UL_BWP.scs);
|
|
||||||
nr_mac_interrupt_ue_transmission(nr_mac, UE, UE->interrupt_action, delay);
|
|
||||||
|
|
||||||
nr_clear_ra_proc(ra);
|
|
||||||
} else {
|
|
||||||
ra->ra_state = nrRA_WAIT_Msg4_MsgB_ACK;
|
ra->ra_state = nrRA_WAIT_Msg4_MsgB_ACK;
|
||||||
LOG_I(NR_MAC,
|
LOG_I(NR_MAC,
|
||||||
"UE %04x Generate %s: feedback at %4d.%2d, payload %d bytes, next state nrRA_WAIT_Msg4_MsgB_ACK\n",
|
"UE %04x Generate %s: feedback at %4d.%2d, payload %d bytes, next state nrRA_WAIT_Msg4_MsgB_ACK\n",
|
||||||
@@ -2316,7 +2289,6 @@ static void nr_generate_Msg4_MsgB(module_id_t module_idP,
|
|||||||
harq->tb_size);
|
harq->tb_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static void nr_check_Msg4_MsgB_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_frame_t slot, NR_RA_t *ra)
|
static void nr_check_Msg4_MsgB_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_frame_t slot, NR_RA_t *ra)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user