Commit Graph
28272 Commits
Author SHA1 Message Date
Robert Schmidt c5a76d6654 Remove unnecessary handle_nr_slot_ind()
the slot indication is sent from the tx_thread (tx_func()). Thus, we
don't need to send it a second time.
2025-01-27 10:59:15 +01:00
Robert Schmidt 84d92ac820 Prevent memory leak, use stack for slot indications 2025-01-27 10:59:15 +01:00
Robert Schmidt 9f80c82f54 Only use refcount if monolithic
There is a reference counting mechanism used in monolithic. It does not
apply for the PNF.
2025-01-27 10:59:15 +01:00
Robert Schmidt 9634593da7 Don't call L1 code in VNF
The VNF should never call into the L1, it's L2/L3, by definition. Also,
it's not necessary.
2025-01-27 10:59:15 +01:00
Robert Schmidt 1b44f6448b Allow to use multiple PUCCH at once
We are required to store multiple PUCCH (e.g., for multiple UEs).
However, nr_fill_pucch() automatically freed the previously active PUCCH
structure. Of course(!) this does not make sense.

However, the problem is that init_nr_transport() allocated only one
PUCCH structure. Also this does not make sense to me. The problem was
that slot_ahead was 0, which logically cannot happen in this function
(because slot_ahead is illogical, we must give the radio some time). The
reason is that it uses if_inst->sl_ahead, which, prior to this commit,
was not set.

The init_nr_transport() function is called normally from main() through
init_eNB_afterRU(). In this case, we initialize if_inst->sl_ahead to
what is set in main(). In the PNF case, however, we call
init_nr_transport() from the PNF thread, when receiving the start
request. In the main(), we wait for this to happen, before setting
if_inst->sl_ahead. Hence, initializing this variable (which we should
safely be able to do) before solves the problem.
2025-01-27 10:59:15 +01:00
Robert Schmidt 84d9df501d No special handling for PNF for RX procedures
See also a later commit "Allow to use multiple PUCCH at once", in which
PUCCH handling in the case of PNF is reworked.

We might squash both commits.
2025-01-27 10:59:15 +01:00
Rúben Soares da Silva a6b40ace23 Assign NFAPI_NR_CONFIG_SLOT_CONFIG_TAG tag in TLVs used for transmitting the TDD Slot configuration through CONFIG.request. 2025-01-27 10:59:15 +01:00
Robert Schmidt 4ceac17cd5 Shorten the sleep
sync_var is set in main() (which likely is wrong in that the L1 code
sync itself, and not require the help of main()).
2025-01-27 10:58:42 +01:00
Robert Schmidt dd3b3caf32 Sync PNF through the radio
The radio gives the clock. Therefore, we do not need to keep the time
separately in the PNF.

Also, the VNF should not run the ru_thread, as this is an L1 thread.
2025-01-27 10:43:57 +01:00
Robert Schmidt 604cfe8709 Request timing every slot
This is to align with monolithic/FAPI, where we get slot indications in
each slot. In the nFAPI, this is replaced by timing information, such
that the VNF ticks automatically, and gets indications from the PNF on
early/late messages. The timing information handling is not implemented
in the present nFAPI implementation. Instead, we adopt the FAPI behavior
and send timing information in every slot, abusing it to be a slot
indication.
2025-01-27 10:43:57 +01:00
Robert Schmidt ce0737fc9d Remove double-add of PNF connection
There is no need to add the PNF in nr_start_resp_cb(), because it has
already been done in nr_param_resp_cb(). This might be wrong, because 4G
does it only in nr_start_resp_cb(), but for the moment, since it is also
used in nr_param_resp_cb(), avoid the double add.
2025-01-27 10:43:47 +01:00
Robert Schmidt d4715fdeca Add PNF to VNF's list of PNFs when IP available
The same function is called in nr_start_resp_cb(), why there and not here?

At reception of nr_param_response, we receive the remote PNF information
on PNF/VNF. We have to store it.

In nr_start_response, it might not be correct and/or can be taken out.
The next commit will remove it.
2025-01-27 10:42:42 +01:00
Robert Schmidt 1dd71b51e1 Properly implement PNF/VNF list find
maybe take this out
2025-01-22 18:29:55 +01:00
Robert Schmidt f4862fe23b Avoid buffer overflow: initialize for multiple PRACH FD occasions
Maybe cosmetic
2025-01-22 18:29:55 +01:00
Robert Schmidt 4132fcc597 Place NFAPI waiting after RU init; don't wait for F1 if in PNF
harmonize with monolithic
2025-01-22 18:29:55 +01:00
Rúben Soares Silva 90435ccba8 Change init_eNB_afterRU to configure L1 according to proper amount.
Now uses RC.nb_nr_L1_inst instead of RC.nb_nr_inst in order to configure the L1, since in PNF RC.nb_nr_inst is always 0, and so, it wouldn't configure the L1
2025-01-22 18:29:55 +01:00
Rúben Soares Silva c910d9f71f Change Assert condition to allow configuration when in PNF mode. 2025-01-22 18:29:55 +01:00
Robert Schmidt e0aaa8fa5e Update nFAPI configs
Rename configs according to name guidelines. Put into right directory.
2025-01-22 18:29:50 +01:00
Robert Schmidt 337faca6f5 log changes
Remove useless message bytes printing

Print message if callback missing

less newlines in log

logs
2025-01-22 15:04:46 +01:00
Robert Schmidt 10e07bc67f Merge branch 'integration_2025_w03' into 'develop'
Integration: `2025.w03`

See merge request oai/openairinterface5g!3206

* !3167 remove calls to clear SIMD registers, that was a historical issue
* !3179 UE statistics improvements
* !3193 Remove spinlock from threadpool task return
* !3195 UE MAC: in phy-test/do-ra, fill TB randomly
* !3201 T tracer: minor fixes for compilation
* !3204 CI: Increase number of test trials for timing tests
* !3034 Delay compensation for PUCCH2
* !3205 Fix calculation of RSSI in pucch_rx.c
2025-01-16 07:47:02 +00:00
Robert Schmidt 998d8c9480 Merge remote-tracking branch 'origin/pucch-rssi-fix' into integration_2025_w03 (!3205)
Fix calculation of RSSI in pucch_rx.c

Fix two issues with RSSI calculation in PUCCH:

- RSSI was calculated using partial sum instead of average of squared samples.
- There was a missing parentheses pair which causes the RSSI value to underflow.

The proper way to calculate power in dBFS is

    let signal_energy = average of squared samples of received signal over resource elements, antennas and symbols under measurement

then:

    rssi[dBFS] = -10log10(max_sample^2 / signal_energy),

or (to avoid division):

    rssi[dBFS] = -(10log10(max_sample^2) - 10log10(signal_energy))
2025-01-15 22:07:31 +01:00
Robert Schmidt 55220c3919 Merge remote-tracking branch 'origin/ci-physim-adjust' into integration_2025_w03 (!3204)
CI: Increase number of test trials for timing tests

- Increasing a number of test trials aims to reduce variations and
  improve reliability of the nr_ulsim and nr_dlsim test results.
- Disable CPU sleep states on the machine when running physims.
- Minor adjustment of timing threshold in 60 MHz phytest.
2025-01-15 18:35:47 +01:00
Robert Schmidt a20d229b6b Merge remote-tracking branch 'origin/pucch2-delay-compensation' into integration_2025_w03 (!3034)
Delay compensation for PUCCH2

- Implementation of delay compensation for PUCCH2, which minimizes for
  exampe logs "reported RSRP index XXX invalid"
- Adding a test to the CI to perform the delay compensation in PUCCH2
- Refactor code to use c16_t data type in PUCCH decoder
2025-01-15 18:34:53 +01:00
Robert Schmidt 284a0edea7 Merge remote-tracking branch 'origin/minor-t-compilation-fixes' into integration_2025_w03 (!3201)
T tracer: minor fixes for compilation

only fixing some hacks tools, no functional change in main programs, no
need to test anything.
2025-01-15 15:05:31 +01:00
Robert Schmidt 356aec9aa4 Merge remote-tracking branch 'origin/phytest-ue-random-data' into integration_2025_w03 (!3195)
UE MAC: in phy-test/do-ra, fill TB randomly

See commit description for more details.
2025-01-15 15:05:03 +01:00
Robert Schmidt 77ddc36236 Merge remote-tracking branch 'origin/tpool-nospinlock' into integration_2025_w03 (!3193)
Remove spinlock from threadpool task return

The idea to use atomic aligned to cache line for counting finished jobs
is reused, but instead of polling a semaphore was added.
2025-01-15 15:04:37 +01:00
Robert Schmidt a4bbf9e513 Merge remote-tracking branch 'origin/UE_log_improv' into integration_2025_w03 (!3179)
UE statistics improvements
2025-01-15 15:04:19 +01:00
Robert Schmidt 876343e7f8 Merge remote-tracking branch 'origin/remove-_mm_empty' into integration_2025_w03 (!3167)
remove calls to clear SIMD registers, that was a historical issue

This works because gcc/clang replaces the MMX calls by SSE2 automatically.

There are some mm_empty() calls in bad places (places where we don't use
_m64) and it is lacking in places where we still use _m64. Given that
MMX calls are converted to SSE2, there is no problem, and we will remove
remaining _m64 variables.
2025-01-15 15:02:09 +01:00
Jaroslava Fiedlerova 85b163b6b9 CI: Adjust timing thresholds in timing-phytest pipeline
CI test sometimes fails because measured value is lower than allowed
threshold.
2025-01-15 14:44:39 +01:00
Jaroslava Fiedlerova 9b6f1be163 CI: disable sleep states of CPU for running timing tests
Enable sleep states once the test is done.
2025-01-15 14:44:35 +01:00
Jaroslava Fiedlerova 69195457d7 CI: Increase number of test trials in nr_ulsim/nr_dlsim timing test
Increasing a number of test trials aims to reduce variations and
improve reliability of the nr_ulsim and nr_dlsim test results.
2025-01-15 14:43:42 +01:00
Bartosz Podrygajlo 7bd048e6af Fix calculation of RSSI in pucch_rx.c
Fix two issues with RSSI calculation in PUCCH:
 - RSSI was calculated using partial sum instead of average of squared samples.
 - There was a missing parentheses pair which causes the RSSI value to underflow.
   The proper way to calculate power in dBFS is

    let signal_energy = average of squared samples of received signal over resource
     elements, antennas and symbols under measurement

    then:
     rssi[dBFS] = -10log10(max_sample^2 / signal_energy),
    or (to avoid division):
     rssi[dBFS] = -(10log10(max_sample^2) - 10log10(signal_energy))
2025-01-15 13:49:05 +01:00
Bartosz Podrygajlo 0657ab2275 Remove spinlock from threadpool task return
The idea to use atomic aligned to cache line for counting finished jobs
is reused, but instead of polling a semaphore was added
2025-01-14 15:17:19 +01:00
Cedric Roux c77874d64e T tracer: minor fixes for compilation 2025-01-14 11:51:41 +01:00
Laurent THOMAS 48226d10bf add cpu measurement option in nr_pucchsim 2025-01-14 11:34:22 +01:00
rmagueta dc5f4bf868 Apply delay compensation only when delay is different from 0 2025-01-14 11:34:22 +01:00
Laurent THOMAS 6384517c01 Better code for PUCCH2 decoding 2025-01-14 11:34:22 +01:00
rmagueta bf69131c21 Add CI test for delay compensation in PUCCH2 2025-01-14 11:34:22 +01:00
rmagueta 39a50faa6e Delay compensation for PUCCH2 2025-01-14 11:34:22 +01:00
Laurent THOMAS f919246121 remove part of code using _m64 type (so old mmx instructions) 2025-01-14 10:07:59 +01:00
Laurent THOMAS ba27aefe4e add some const and remove dead code 2025-01-14 10:07:31 +01:00
Laurent THOMAS 7d0c89185c gcc warning on #define duplicated 2025-01-14 10:07:31 +01:00
Laurent THOMAS d5c72cf843 remove a race condition in viberti_lte and a useless global table 2025-01-14 10:07:30 +01:00
Laurent THOMAS a0d6057294 remove calls to clear SIMD registers, that was a historical issue 2025-01-14 10:06:06 +01:00
Robert Schmidt b96dfadae9 Fix compilation problem when defining ENABLE_MAC_PAYLOAD_DEBUG
Reported-by:  Abdo Gaber <abdo.nasser.ali.gaber@emerson.com>
2025-01-14 08:03:54 +01:00
Robert Schmidt f7d3b72851 Merge branch 'integration_2025_w02' into 'develop'
Integration: `2025.w02`

Closes #866 and #887

See merge request oai/openairinterface5g!3197

* !3135 replace a set of #define by a C bit array, remove duplicated extern global variable declaration
* !3173 nrLDPC_coding: improvements
* !3181 Use UL actor for processSlotTx
* !3186 chore(ci): improved errors messages visibility
* !3101 NR gNB improvements for analog beam management
* !3130 NR gNB MSG3 TPC
* !3175 Improvements for PUSCH per symbol processing
* !3177 CI: change frequency for timing and B200-SABOX pipelines
* !3188 NR UE fix DCI mask size
* !3119 Config files improvements for PRACH
* !3196 Fix yaml example config file
* !3187 nrLDPC_coding: Fix naming, comments, superfluous variables and documentation typos in coding library interfaces
* !3076 move UL_INFO structure allocation local to a rx slot processing
* !3189 fhi_72: allow to provide dpdk_iova_mode to xran
* !3182 RSSI threshold for PUSCH & PUCCH power control
* !3103 Introduce ITTI queue in RRC-to-MAC direction
2025-01-13 14:13:42 +00:00
Robert Schmidt 959bb59f35 Merge remote-tracking branch 'origin/rssi-thres' into integration_2025_w02 (!3182)
RSSI threshold for PUSCH & PUCCH power control

To prevent ADC railing or "clipping" when the received power is too
large, introduce RSSI threshold parameters for PUSCH and PUCCH, which
are now configured in units of 0.1 dB. Here is how you can configure and
use these thresholds:

1. Configuration:
   - Set the pusch_RSSI_Threshold and pucch_RSSI_Threshold parameters in
     your configuration file (e.g., gnb.conf) (MACRLC section).
   - These parameters define the maximum acceptable RSSI values for
     PUSCH and PUCCH, respectively. The unit is either dBm or dBFS,
     depending on the RSSI reporting configuration.

2. Usage:
   - The nr_limit_tpc function will automatically adjust the Transmit
     Power Control (TPC) commands based on the configured RSSI
     thresholds.
   - If the RSSI exceeds the threshold, the TPC command will be limited
     to prevent further increase in power, thereby avoiding ADC
     clipping.
2025-01-13 10:10:29 +01:00
Robert Schmidt 72aaf45fa8 Merge remote-tracking branch 'origin/race-ue-rrc-mac' into integration_2025_w02 (!3103)
Introduce ITTI queue in RRC-to-MAC direction

resolve ue rcc to mac race conditions by a itti queue, but it doesn't
resolve the problem of exact slot we should apply the new cell
configurtion
2025-01-13 10:10:07 +01:00
Robert Schmidt 4dfbd0dd9e Merge remote-tracking branch 'origin/oran-iova-config' into integration_2025_w02 (!3189)
fhi_72: allow to provide dpdk_iova_mode to xran

- Introduce a gNB configuration option that enables users to select the
  desired IOVA mode for DPDK ("PA" or "VA") with dpdk_iova_mode
  parameters in fhi_72 configuration section. If not set, the default
  remains PA mode to ensure backward compatibility with existing
  configurations. Detailed information about IOVA modes, including their
  advantages and disadvantages, can be found in the DPDK documentation:
  Memory in DPDK Part 2: Deep Dive into IOVA
- Using IOVA VA mode allows DPDK to run without requiring SYS_ADMIN
  capability for the docker container.
- Switch to IOVA VA mode in the FHI7.2 pipeline and reduce the required
  capabilities for the docker container.
2025-01-13 07:46:47 +01:00
Robert Schmidt 39d9d32eda Merge remote-tracking branch 'origin/local-UL_INFO' into integration_2025_w02 (!3076)
Move UL_INFO structure allocation local to a rx slot processing

UL_INFO is allocated a gNB, so require mutex and obscur information
passing function to function.  Instead, make a local UL_INFO per slot,
removing the mutex and making the code easier to understand.
2025-01-13 07:46:05 +01:00