From 1b44f6448b89f64c014fd1ba639f8eb50372910b Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 8 Apr 2024 17:42:57 +0100 Subject: [PATCH] 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. --- executables/nr-softmodem.c | 4 +++- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 4 ---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c index f31155f1ec..e14e482b6d 100644 --- a/executables/nr-softmodem.c +++ b/executables/nr-softmodem.c @@ -690,6 +690,9 @@ int main( int argc, char **argv ) { nvIPC_Init(nrmac->nvipc_params_s); #endif + for (int idx = 0; idx < RC.nb_nr_L1_inst; idx++) + RC.gNB[idx]->if_inst->sl_ahead = sl_ahead; + if (NFAPI_MODE==NFAPI_MODE_PNF) { wait_nfapi_init("main?"); } @@ -698,7 +701,6 @@ int main( int argc, char **argv ) { wait_RUs(); // once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration) - for (int idx=0;idxif_inst->sl_ahead = sl_ahead; if (IS_SOFTMODEM_DOSCOPE || IS_SOFTMODEM_IMSCOPE_ENABLED) { sleep(1); scopeParms_t p; diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 6f2ccc8bc1..83b568b355 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -62,10 +62,6 @@ void nr_fill_pucch(PHY_VARS_gNB *gNB, int slot, nfapi_nr_pucch_pdu_t *pucch_pdu) { - - if (NFAPI_MODE == NFAPI_MODE_PNF) - gNB->pucch[0].active = false; // check if true in monolithic mode - bool found = false; for (int i = 0; i < gNB->max_nb_pucch; i++) { NR_gNB_PUCCH_t *pucch = &gNB->pucch[i];