Use NR_timer_t for UE transmission interrupt, e.g., RRC processing
Refactor the RRC processing timer to be a generic "transmission interrupt" timer, and use NR_timer_t for it. Also, depending on the kind of RRC processing (see 38.331 table 12.1-1), timing requirements might be different. However, the DU does not always know which RRC processing is ongoing, and does not get this information via F1. Hence, introduce a "worst case" delay time, which aligns with the spec (it says these times are "minima") and is accepted by COTS UE. The gNB MAC might need to stop transmission either for some time (RRC processing), or continuously (transmission stop requested by CU). Those can be handled in one common timer implementation. The continuous case will be used in a follow-up commit. Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
This commit is contained in:
co-authored by
Luis Pereira
parent
2c07f0081e
commit
5c6d90aaff
@@ -334,9 +334,8 @@ static void nr_store_dlsch_buffer(module_id_t module_id, frame_t frame, sub_fram
|
||||
const int lcid = c->lcid;
|
||||
const uint16_t rnti = UE->rnti;
|
||||
LOG_D(NR_MAC, "In %s: UE %x: LCID %d\n", __FUNCTION__, rnti, lcid);
|
||||
if (lcid == DL_SCH_LCID_DTCH && sched_ctrl->rrc_processing_timer > 0) {
|
||||
if (lcid == DL_SCH_LCID_DTCH && nr_timer_is_active(&sched_ctrl->transm_interrupt))
|
||||
continue;
|
||||
}
|
||||
start_meas(&RC.nrmac[module_id]->rlc_status_ind);
|
||||
sched_ctrl->rlc_status[lcid] = mac_rlc_status_ind(module_id,
|
||||
rnti,
|
||||
@@ -985,7 +984,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
||||
* Possible improvement: take the periodicity from input file.
|
||||
* If such UE is not scheduled now, it will be by the preprocessor later.
|
||||
* If we add the CE, ta_apply will be reset */
|
||||
if (frame == (sched_ctrl->ta_frame + 100) % 1024) {
|
||||
if (frame == ((sched_ctrl->ta_frame + 100) % 1024) && !nr_timer_is_active(&sched_ctrl->transm_interrupt)) {
|
||||
sched_ctrl->ta_apply = true; /* the timer is reset once TA CE is scheduled */
|
||||
LOG_D(NR_MAC, "[UE %04x][%d.%d] UL timing alignment procedures: setting flag for Timing Advance command\n", UE->rnti, frame, slot);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user