Fix scheduler for long prach
Long PRACH extends beyond a slot. Changes necessary to mark future slots that may contain prach in ru, phy and mac functions. In RU, the PRACH IDFT is done only after receiving last slot and marks for L1 to start processing. The L1 processes at the last prach slot and reports to MAC with the first slot index. In MAC scheduler, the VRB for future slots are also marked as used. PRACH scheduler is called in advance one frame minus num prach slots.
This commit is contained in:
@@ -1287,6 +1287,17 @@ int get_scan_ssb_first_sc(const double fc, const int nbRB, const int nrBand, con
|
||||
return numGscn;
|
||||
}
|
||||
|
||||
// Table 38.211 6.3.3.1-1
|
||||
static uint8_t long_prach_dur[4] = {1, 3, 4, 1}; // 0.9, 2.28, 3.35, 0.9 ms
|
||||
|
||||
uint8_t get_long_prach_dur(unsigned int format, unsigned int mu)
|
||||
{
|
||||
AssertFatal(format < 4, "Invalid long PRACH format %d\n", format);
|
||||
const int num_slots_subframe = (1 << mu);
|
||||
const int prach_dur_subframes = long_prach_dur[format];
|
||||
return (prach_dur_subframes * num_slots_subframe);
|
||||
}
|
||||
|
||||
int get_delay_idx(int delay, int max_delay_comp)
|
||||
{
|
||||
int delay_idx = max_delay_comp + delay;
|
||||
|
||||
@@ -287,6 +287,7 @@ void check_ssb_raster(uint64_t freq, int band, int scs);
|
||||
int get_smallest_supported_bandwidth_index(int scs, frequency_range_t frequency_range, int n_rbs);
|
||||
unsigned short get_m_srs(int c_srs, int b_srs);
|
||||
unsigned short get_N_b_srs(int c_srs, int b_srs);
|
||||
uint8_t get_long_prach_dur(unsigned int format, unsigned int num_slots_subframe);
|
||||
|
||||
int get_slot_idx_in_period(const int slot, const frame_structure_t *fs);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user