Fix process_slot_tx_barriers for high rx-to-tx values
Set the number of barriers to 512 and implement proper slot and frame based selection. Now the dynamic barriers should not be overwritten in case the rx-to-tx offset is high. The maximum offset supported is 512.
This commit is contained in:
committed by
Roberto Rosca
parent
0b1dd3ed50
commit
fc26b8c053
+9
-8
@@ -553,8 +553,8 @@ void processSlotTX(void *arg)
|
||||
|
||||
int slots_per_frame = (UE->sl_mode == 2) ? UE->SL_UE_PHY_PARAMS.sl_frame_params.slots_per_frame
|
||||
: UE->frame_parms.slots_per_frame;
|
||||
int next_slot = (proc->nr_slot_tx + 1 + proc->nr_slot_tx_offset) % slots_per_frame;
|
||||
dynamic_barrier_join(&UE->process_slot_tx_barriers[next_slot]);
|
||||
int next_slot_and_frame = proc->nr_slot_tx + 1 + proc->nr_slot_tx_offset + proc->frame_tx * slots_per_frame;
|
||||
dynamic_barrier_join(&UE->process_slot_tx_barriers[next_slot_and_frame % NUM_PROCESS_SLOT_TX_BARRIERS]);
|
||||
RU_write(rxtxD, sl_tx_action);
|
||||
free(rxtxD);
|
||||
TracyCZoneEnd(ctx);
|
||||
@@ -810,8 +810,7 @@ void *UE_thread(void *arg)
|
||||
int absolute_slot = 0, decoded_frame_rx = MAX_FRAME_NUMBER - 1, trashed_frames = 0;
|
||||
int tx_wait_for_dlsch[NR_MAX_SLOTS_PER_FRAME];
|
||||
|
||||
int num_ind_fifo = nb_slot_frame;
|
||||
for(int i = 0; i < num_ind_fifo; i++) {
|
||||
for(int i = 0; i < NUM_PROCESS_SLOT_TX_BARRIERS; i++) {
|
||||
dynamic_barrier_init(&UE->process_slot_tx_barriers[i]);
|
||||
}
|
||||
int shiftForNextFrame = 0;
|
||||
@@ -822,7 +821,7 @@ void *UE_thread(void *arg)
|
||||
if (get_softmodem_params()->sync_ref && UE->sl_mode == 2) {
|
||||
UE->is_synchronized = 1;
|
||||
} else {
|
||||
//warm up the RF board
|
||||
//warm up the RF board
|
||||
int64_t tmp;
|
||||
for (int i = 0; i < 50; i++)
|
||||
readFrame(UE, &tmp, true);
|
||||
@@ -934,7 +933,7 @@ void *UE_thread(void *arg)
|
||||
}
|
||||
// We have resynchronized, maybe after RF loss so we need to purge any existing context
|
||||
memset(tx_wait_for_dlsch, 0, sizeof(tx_wait_for_dlsch));
|
||||
for (int i = 0; i < num_ind_fifo; i++) {
|
||||
for (int i = 0; i < NUM_PROCESS_SLOT_TX_BARRIERS; i++) {
|
||||
dynamic_barrier_reset(&UE->process_slot_tx_barriers[i]);
|
||||
}
|
||||
continue;
|
||||
@@ -957,7 +956,7 @@ void *UE_thread(void *arg)
|
||||
if (UE->ntn_config_message->update) {
|
||||
UE->ntn_config_message->update = false;
|
||||
update_ntn_system_information = true;
|
||||
nr_slot_tx_offset = UE->ntn_config_message->ntn_config_params.cell_specific_k_offset % nb_slot_frame;
|
||||
nr_slot_tx_offset = UE->ntn_config_message->ntn_config_params.cell_specific_k_offset;
|
||||
}
|
||||
|
||||
int slot_nr = absolute_slot % nb_slot_frame;
|
||||
@@ -1054,7 +1053,9 @@ void *UE_thread(void *arg)
|
||||
|
||||
int sync_to_previous_thread = stream_status == STREAM_STATUS_SYNCED ? 1 : 0;
|
||||
int slot = curMsgTx->proc.nr_slot_tx;
|
||||
dynamic_barrier_update(&UE->process_slot_tx_barriers[slot],
|
||||
int slot_and_frame = slot + curMsgTx->proc.frame_tx * UE->frame_parms.slots_per_frame;
|
||||
|
||||
dynamic_barrier_update(&UE->process_slot_tx_barriers[slot_and_frame % NUM_PROCESS_SLOT_TX_BARRIERS],
|
||||
tx_wait_for_dlsch[slot] + sync_to_previous_thread,
|
||||
start_process_slot_tx,
|
||||
curMsgTx);
|
||||
|
||||
Reference in New Issue
Block a user