From ebd95c5b831c484c330ba689d381b5642aff5f96 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 3 Jun 2015 15:53:55 +0000
Subject: [PATCH] remove global variable prach_ifft, make it local (was a
 problem with multiple CCs)

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7525 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair1/PHY/INIT/lte_init.c            | 10 +++++++++-
 openair1/PHY/LTE_TRANSPORT/prach.c      |  3 +--
 openair1/PHY/impl_defs_lte.h            |  4 ++++
 openair1/SCHED/phy_procedures_lte_eNb.c |  3 ---
 4 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 3ce1eb2040..9adbe31916 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -1346,7 +1346,6 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
   /* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
   AssertFatal(frame_parms->nb_antennas_rx <= sizeof(eNB_prach_vars->rxsigF) / sizeof(eNB_prach_vars->rxsigF[0]),
               "nb_antennas_rx too large");
-
   for (i=0; i<frame_parms->nb_antennas_rx; i++) {
     eNB_prach_vars->rxsigF[i] = (int16_t*)malloc16_clear( frame_parms->ofdm_symbol_size*12*2*sizeof(int16_t) );
 #ifdef DEBUG_PHY
@@ -1354,6 +1353,15 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
 #endif
   }
 
+  AssertFatal(frame_parms->nb_antennas_rx <= sizeof(eNB_prach_vars->prach_ifft) / sizeof(eNB_prach_vars->prach_ifft[0]),
+              "nb_antennas_rx too large");
+  for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+    eNB_prach_vars->prach_ifft[i] = (int16_t*)malloc16_clear(1024*2*sizeof(int16_t));
+#ifdef DEBUG_PHY
+    msg("[openair][LTE_PHY][INIT] prach_vars->prach_ifft[%d] = %p\n",i,eNB_prach_vars->prach_ifft[i]);
+#endif
+  }
+
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
 
     //FIXME
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index db21c8bd4f..4749598616 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -1002,8 +1002,6 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
 
 
 __m128i mmtmpX0,mmtmpX1,mmtmpX2,mmtmpX3;
-int16_t prach_ifft[4][1024*2];
-
 
 void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_energy_list, uint16_t *preamble_delay_list, uint16_t Nf, uint8_t tdd_mapindex)
 {
@@ -1019,6 +1017,7 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
   uint8_t n_ra_prboffset     = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
   int16_t *prachF           = phy_vars_eNB->lte_eNB_prach_vars.prachF;
   int16_t **rxsigF          = phy_vars_eNB->lte_eNB_prach_vars.rxsigF;
+  int16_t **prach_ifft      = phy_vars_eNB->lte_eNB_prach_vars.prach_ifft;
   int16_t *prach[4];
   int16_t *prach2;
   uint8_t n_ra_prb;
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index 55ce81cac6..47c32d87c8 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -1003,6 +1003,10 @@ typedef struct {
   /// first index: rx antenna [0..3] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx.
   /// second index: ? [0..ofdm_symbol_size*12[
   int16_t *rxsigF[4];
+  /// \brief local buffer to compute prach_ifft (necessary in case of multiple CCs)
+  /// first index: rx antenna [0..3] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx.
+  /// second index: ? [0..2047] (hard coded)
+  int16_t *prach_ifft[4];
 } LTE_eNB_PRACH;
 
 typedef struct {
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index b6bed6591e..3828a9be72 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -3034,9 +3034,6 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
   }
 }
 
-
-extern int16_t prach_ifft[4][1024*4];
-
 void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t abstraction_flag)
 {
 
-- 
GitLab