UBsan fails with errors without this commit. The commit changes:
- avoid two possible integer overflows in nr_dlsch_channel_level() and nr_dlsch_channel_level_median()
- nr_dlsch_channel_level_median() is simplified
- use MAX_ANT in avg to handle more than 4x4 config
- deleted: ../../../executables/rfsim.c
- removed unused command line options to set SINR and SNR
- removed unused functions to get SINR and SNR
- removed unused RFSIM struct members
for FR2 offsetToPointA is expressed in terms of 60 kHz SCS and k_SSB expressed in terms of the subcarrier spacing provided by the higher-layer parameter subCarrierSpacingCommon
Fix for CI runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
Fix for CI runtime error: left shift of 128 by 24 places cannot be represented in type 'int'
PUSCH decoding is started multiple times in nr_ulsch_procedures() for
each ULSCH segment, and stopped once inside
phy_procedures_gNB_uespec_RX(). Not only is it not clear if that works
with the API, it also might measure more than just PUSCH decoding.
Remove the PUSCH decoding, it is misleading. Check L1 RX processing
instead.
This commit introduces a separate thread (l1_tx_thread) that processes
gNB DL/TX slots. It receives a message from the ru_thread when a new
slot started, and starts processing.
The DL part of the scheduler is run in the l1_tx_thread. Therefore,
only call UL indication (for scheduler) in UL slots. The UL indication
previously triggered the DL scheduler -- hence, it had to be called in
every slot. Now, since the DL scheduler is moved into the DL thread, we
don't have to call the scheduler in every slot anymore.
The reorder thread is removed, as reordering with this scheme is not
necessary anymore.
The main advantage of this version is that the TX can be scheduled
earlier (sl_ahead). Further, there can no longer be race conditions in
the TX path, since the scheduler/L2, TX L1 processing and the RU tx
function are all execute in the same thread (L1_tX_thread).
Also, the scheduler prepares PRACH/PUSCH/PUCCH FAPI PDUs. As of this
commit, the scheduler runs in the TX processing chain, whereas these
PDUs are destined for RX processing. Thus, too avoid data races,
instead of triggering the RX processing at the same time as TX
processing in the RU thread, this commit changes the code to trigger RX
processing after the scheduler has been run in TX processing to avoid
data races.
Finally, we synchronize RU and L1 threads. This is important for
rfsimulator, since unlike most radios, rfsimulator can run slower or
faster, depending on I/O and CPU (it does not have a stable "tick").
Co-authored-by: kiran <saikiran@iitj.ac.in>
The UL_INFO_mutex is used in only one place, and therefore useless.
Also, the scheduler uses a lock internally to prevent concurrent access.
Hence, the UL_INFO_mutex is not needed.
Remove kill_gNB_proc(), as it is now dead code.
- Rate matching performed by card
- Due to rate matching on card, small TBs are encoded correctly, so the
limitation of encoding small TBs in CPU can be lifted (all TBs encoded
on T2), see a later commits
Reformat code to properly copy memory if we skip precoding.
precoding_stats timing is not part of ru->feptx_ofdm, but
ru->feptx_prec, so always print it.
Previously, in order to speed up processing if precoding is disabled, we
just copy the pointer from txdataF to txdataF_BF, as opposed to do a
full memcpy() to duplicate the data. The same happens if we cannot have
precoding, i.e., in SISO. This has implications such as memory leaks,
which is why this is not being done. However, the code comment is
intentionally placed there.
For 7.2 FH, some RUs do phase compensation, whereas for others, the DU
does it. In fact, this can be "negotiated" using the M plane. Since we
don't have the M plane yet, add a configuration option to set where
phase compensation is performed.