phy_init.h 17.5 KB
Newer Older
1 2 3 4 5
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
6
 * the OAI Public License, Version 1.1  (the "License"); you may not use this file
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

22 23 24
#ifndef __INIT_DEFS__H__
#define __INIT_DEFS__H__

25 26
#include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h"
27 28
#include "PHY/defs_gNB.h"
#include "PHY/defs_nr_UE.h"
29

30
#include "LTE_SystemInformationBlockType2.h"
31
//#include "RadioResourceConfigCommonSIB.h"
32 33 34 35 36 37
#include "LTE_RadioResourceConfigDedicated.h"
#include "LTE_TDD-Config.h"
#include "LTE_PHICH-Config.h"
#include "LTE_MBSFN-SubframeConfigList.h"
#include "LTE_MobilityControlInfo.h"
#include "LTE_SCellToAddMod-r10.h"
38
#include "LTE_NonMBSFN-SubframeConfig-r14.h"
39

40 41 42 43
/** @addtogroup _PHY_STRUCTURES_
 * @{
 */

44 45 46 47 48 49 50
/*!
\fn int l1_top_init_eNB(void)
\brief Initialize north interface for L1
@returns 0 on success
 */
int l1_north_init_eNB(void);

51 52 53 54 55
/*!
\fn int phy_init_top(LTE_DL_FRAME_PARMS *frame_parms)
\brief Allocate and Initialize the PHY variables after receiving static configuration
@param frame_parms Pointer to LTE_DL_FRAME_PARMS (common configuration)
@returns 0 on success
56
 */
57 58
int phy_init_top(LTE_DL_FRAME_PARMS *frame_parms);

hongzhi wang's avatar
hongzhi wang committed
59 60
void phy_init_nr_top(PHY_VARS_NR_UE *ue);

61 62

/*!
63
\brief Allocate and Initialize the PHY variables relevant to the LTE ue signal buffers.
64 65
\details Only a subset of phy_vars_ue is initialized.
@param[out] phy_vars_ue Pointer to UE Variables
66 67 68
@param nb_connected_eNB Number of eNB that UE can process in one PDSCH demodulation subframe
@param abstraction_flag 1 indicates memory should be allocated for abstracted MODEM
@returns 0 on success
69 70
@returns -1 if any memory allocation failed
@note The current implementation will never return -1, but segfault.
71
 */
Cedric Roux's avatar
Cedric Roux committed
72
int init_lte_ue_signal(PHY_VARS_UE *phy_vars_ue,
73 74
                       int          nb_connected_eNB,
                       uint8_t         abstraction_flag);
75 76 77 78 79 80 81

/*!
\brief Allocate and initialize the PHY variables releated to the transport channel buffers (UL/DL)
@param ue Pointer to UE L1 context
@param abstraction flag Indicates that abstraction is used in L1
*/
void init_lte_ue_transport(PHY_VARS_UE *ue,int absraction_flag);
82 83

/*!
84 85 86
\brief Allocate and initialize the PHY variables relevant to the LTE implementation (eNB).
\details Only a subset of phy_vars_eNb is initialized.
@param[out] phy_vars_eNb Pointer to eNB Variables
87 88 89
@param is_secondary_eNb Flag to indicate this eNB gets synch from another
@param abstraction_flag 1 indicates memory should be allocated for abstracted MODEM
@returns 0 on success
90 91
@returns -1 if any memory allocation failed
@note The current implementation will never return -1, but segfault.
92
 */
93
int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNb,
94 95
                     unsigned char is_secondary_eNb,
                     unsigned char abstraction_flag);
96

97 98 99 100 101 102 103
/*!
\brief Free the PHY variables relevant to the LTE implementation (eNB).
\details Only a subset of phy_vars_eNb is freed (those who have been allocated with phy_init_lte_eNB()).
@param[in] phy_vars_eNb Pointer to eNB Variables
 */
void phy_free_lte_eNB(PHY_VARS_eNB *phy_vars_eNb);

104 105
/** \brief Configure LTE_DL_FRAME_PARMS with components derived after initial synchronization (MIB decoding + primary/secondary synch).
\details The basically allows configuration of \f$N_{\mathrm{RB}}^{\mathrm{DL}}\f$, the cell id  \f$N_{\mathrm{ID}}^{\mathrm{cell}}\f$, the normal/extended prefix mode, the frame type (FDD/TDD), \f$N_{\mathrm{cp}}\f$, the number of TX antennas at eNB (\f$p\f$) and the number of PHICH groups, \f$N_{\mathrm{group}}^{\mathrm{PHICH}}\f$
106 107 108 109 110 111
@param lte_frame_parms pointer to LTE parameter structure
@param N_RB_DL Number of DL resource blocks
@param Nid_cell Cell ID
@param Ncp Normal/Extended Prefix flag
@param p_eNB Number of eNB TX antennas
@param phich_config Pointer to PHICH_CONFIG_COMMON
112
 */
113
void phy_config_mib_eNB(int                    Mod_id,
114 115 116 117 118 119 120 121 122
                        int                    CC_id,
                        int                    eutra_band,
                        int                    N_RB_DL,
                        LTE_PHICH_Config_t    *phich_config,
                        int                    Nid_cell,
                        int                    Ncp,
                        int                    p_eNB,
                        uint32_t               dl_CarrierFreq,
                        uint32_t               ul_CarrierFreq);
123

124 125


126 127
/** \brief Configure LTE_DL_FRAME_PARMS with components derived after reception of SIB1.
\details From a PHY perspective this allows configuration of TDD framing parameters and SI reception.
128
@param Mod_id Instance ID of eNB
Raymond Knopp's avatar
 
Raymond Knopp committed
129
@param CC_id Component Carrier index
130
@param tdd_Config TDD UL/DL and S-subframe configurations
131
@param SIwindowsize Size of a SI window in frames where repetitions of a unique System Information message block is repeated
132
@param SIperiod Periodicity of System Information Messages (in multiples of a frame)*/
133
void phy_config_sib1_eNB(module_id_t    Mod_id,
Raymond Knopp's avatar
 
Raymond Knopp committed
134
                         int CC_id,
135
                         LTE_TDD_Config_t  *tdd_Config,
136 137
                         uint8_t           SIwindowsize,
                         uint16_t            SIperiod);
138

139 140
/** \brief Configure LTE_DL_FRAME_PARMS with components derived after reception of SIB1.
\details From a PHY perspective this allows configuration of TDD framing parameters and SI reception.
141
@param Mod_id Instance ID of UE
Raymond Knopp's avatar
 
Raymond Knopp committed
142
@param CC_id Component Carrier index
143 144
@param CH_index Index of eNB for this configuration
@param tdd_Config TDD UL/DL and S-subframe configurations
145
@param SIwindowsize Size of a SI window in frames where repetitions of a unique System Information message block is repeated
146
@param SIperiod Periodicity of System Information Messages (in multiples of a frame)*/
147
void phy_config_sib1_ue(module_id_t   Mod_id,
Raymond Knopp's avatar
 
Raymond Knopp committed
148
                        int CC_id,
149
                        uint8_t          CH_index,
150
                        LTE_TDD_Config_t *tdd_Config,
151 152
                        uint8_t          SIwindowsize,
                        uint16_t           SIperiod);
153 154

/*!
Raymond Knopp's avatar
 
Raymond Knopp committed
155
  \fn void phy_config_sib2_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t CH_index,
156 157 158 159 160 161
      RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
      ARFCN_ValueEUTRA_t *ul_CArrierFreq,
            long *ul_Bandwidth,
      AdditionalSpectrumEmission_t additionalSpectrumEmission,
      struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList)
  \brief Configure LTE_DL_FRAME_PARMS with components derived after reception of SIB2 (at UE).
162
  @param Mod_id Instance id
Raymond Knopp's avatar
 
Raymond Knopp committed
163
  @param CC_id
164
  @param CH_index Index of CH to which UE is connected
Raymond Knopp's avatar
 
Raymond Knopp committed
165
  @param CC_id Component Carrier Index
166 167 168 169 170
  @param radioResourceConfigCommon Radio Configuration from SIB2
  @param ul_CarrierFreq UL carrier ARFCN, null if optional (i.e. implicit from DL)
  @param ul_Bandwidth UL bandwidth, null if optional (i.e. same as DL)
  @param additionalSpectrumEmission UL parameter (see 36.101)
  @param mbsfn_SubframeConfigList MBSFN subframe configuration
171
 */
172 173 174 175 176 177 178 179
void phy_config_sib2_ue(module_id_t                          Mod_id,
                        int                                  CC_id,
                        uint8_t                              CH_index,
                        LTE_RadioResourceConfigCommonSIB_t  *radioResourceConfigCommon,
                        LTE_ARFCN_ValueEUTRA_t              *ul_CArrierFreq,
                        long                                *ul_Bandwidth,
                        LTE_AdditionalSpectrumEmission_t    *additionalSpectrumEmission,
                        struct LTE_MBSFN_SubframeConfigList *mbsfn_SubframeConfigList);
180

181

182
/*!
183 184
  \fn phy_config_afterHO_ue
  \brief Configure Common PHY parameters from mobilityControlInfo
185
  @param Mod_id
Raymond Knopp's avatar
 
Raymond Knopp committed
186
  @param CC_id
187 188 189 190
  @param eNB_index
  @param mobilityControlInfo pointer to the mobility control information for handover
  @param ho_failed flag to indicated whether the ho was successful or not
 */
191
void phy_config_afterHO_ue(module_id_t Mod_id,
192
                           uint8_t CC_id,
193
                           uint8_t eNB_index,
194
                           LTE_MobilityControlInfo_t *mobilityControlInfo,
195
                           uint8_t ho_failed);
196
/*!
197
  \fn void phy_config_sib2_eNB(module_id_t Mod_id,
198
                               RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
199 200 201 202 203
             ARFCN_ValueEUTRA_t *ul_CArrierFreq,
             long *ul_Bandwidth,
             AdditionalSpectrumEmission_t additionalSpectrumEmission,
             struct MBSFN_SubframeConfigList  *mbsfn_SubframeConfigList)
  \brief Configure LTE_DL_FRAME_PARMS with components of SIB2 (at eNB).
204
  @param Mod_id Instance id
Raymond Knopp's avatar
 
Raymond Knopp committed
205
  @param Mod_id Component Carrier index
206 207 208 209 210
  @param radioResourceConfigCommon Radio Configuration from SIB2
  @param ul_CarrierFreq UL carrier ARFCN, null if optional (i.e. implicit from DL)
  @param ul_Bandwidth UL bandwidth, null if optional (i.e. same as DL)
  @param additionalSpectrumEmission UL parameter (see 36.101)
  @param mbsfn_SubframeConfigList MBSFN subframe configuration
211
 */
212 213 214 215
void phy_config_sib2_eNB(module_id_t                             Mod_id,
                         int                                     CC_id,
                         LTE_RadioResourceConfigCommonSIB_t     *radioResourceConfigCommon,
                         LTE_ARFCN_ValueEUTRA_t                 *ul_CArrierFreq,
216
                         long                                   *ul_Bandwidth,
217 218
                         LTE_AdditionalSpectrumEmission_t       *additionalSpectrumEmission,
                         struct LTE_MBSFN_SubframeConfigList    *mbsfn_SubframeConfigList);
219 220 221


/*!
Raymond Knopp's avatar
 
Raymond Knopp committed
222
\fn void phy_config_dedicated_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t CH_index,
223
               struct PhysicalConfigDedicated *physicalConfigDedicated)
224 225
\brief Configure UE dedicated parameters.
\details Invoked upon reception of RRCConnectionSetup or RRCConnectionReconfiguration from eNB.
226
@param Mod_id Instance ID for eNB
Raymond Knopp's avatar
 
Raymond Knopp committed
227
@param CC_id Component Carrier index
228 229 230
@param CH_index Index of eNB for this configuration
@param physicalConfigDedicated PHY Configuration information

231
 */
Raymond Knopp's avatar
 
Raymond Knopp committed
232 233
void phy_config_dedicated_ue(module_id_t Mod_id,
                             int CC_id,
234
                             uint8_t CH_index,
235
                             struct LTE_PhysicalConfigDedicated *physicalConfigDedicated);
Raymond Knopp's avatar
 
Raymond Knopp committed
236

hbilel's avatar
hbilel committed
237 238 239 240 241 242 243 244 245
/*!
\fn void phy_config_harq_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t CH_index,
               uint16_t max_harq_tx)
\brief Configure UE UL max harq Tx.
\details Invoked upon reception of RRCConnectionSetup or RRCConnectionReconfiguration from eNB.
@param Mod_id Instance ID for eNB
@param CC_id Component Carrier index
@param CH_index Index of eNB for this configuration
@param max_harq_tx max harq tx information
246

hbilel's avatar
hbilel committed
247 248
 */
void phy_config_harq_ue(module_id_t Mod_id,int CC_id,uint8_t CH_index,
249
                        uint16_t max_harq_tx);
250
/**
251 252
\brief Configure UE MBSFN common parameters.
\details Invoked upon reception of SIB13 from eNB.
253
@param Mod_id Instance ID for UE
Raymond Knopp's avatar
 
Raymond Knopp committed
254
@param CC_id Component Carrier Index
255 256 257
@param CH_index eNB id (for multiple eNB reception)
@param mbsfn_Area_idx Index of MBSFN-Area for which this command operates
@param mbsfn_AreaId_r9 MBSFN-Area Id
258
 */
259

260
void phy_config_sib13_ue(module_id_t Mod_id,
Raymond Knopp's avatar
 
Raymond Knopp committed
261
                         int CC_id,uint8_t CH_index,int mbsfn_Area_idx,
262
                         long mbsfn_AreaId_r9);
263

264
void phy_config_sib1_fembms_ue(module_id_t Mod_id,int CC_id,
265 266
                               uint8_t eNB_id,
                               struct LTE_NonMBSFN_SubframeConfig_r14 *nonMBSFN_SubframeConfig);
267

268
/**
269 270
\brief Configure eNB MBSFN common parameters.
\details Invoked upon transmission of SIB13 from eNB.
271
@param Mod_id Instance ID for eNB
Raymond Knopp's avatar
 
Raymond Knopp committed
272
@param CC_id Component Carrier index
273 274
@param mbsfn_Area_idx Index of MBSFN-Area for which this command operates
@param mbsfn_AreaId_r9 MBSFN-Area Id
275 276
 */
void phy_config_sib13_eNB(module_id_t Mod_id,
277
                          int CC_id,
278 279
                          int mbsfn_Area_idx,
                          long mbsfn_AreaId_r9);
280 281 282 283

/**
\brief Configure cba rnti for .
@param Mod_id Instance ID for eNB
Raymond Knopp's avatar
 
Raymond Knopp committed
284
@param CC_id Component Carrier Index
285
@param eNB_flag flag indicating whether the nodeis eNB (1) or UE (0)
286
@param index index of the node
287 288
@param cba_rnti rnti for the cba transmission
@param num_active_cba_groups num active cba group
289
 */
Raymond Knopp's avatar
 
Raymond Knopp committed
290
void  phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, rnti_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
291 292 293

/** \brief Configure RRC inter-cell measurements procedures
@param Mod_id Index of UE
Raymond Knopp's avatar
 
Raymond Knopp committed
294
@param CC_id
295 296 297
@param eNB_index Index of corresponding eNB
@param n_adj_cells Number of adjacent cells on which to perform the measuremnts
@param adj_cell_id Array of cell ids of adjacent cells
298 299
 */
void phy_config_meas_ue(module_id_t Mod_id,
300
                        uint8_t CC_id,
301
                        uint8_t eNB_index,
302 303
                        uint8_t n_adj_cells,
                        uint32_t *adj_cell_id);
304 305

/*!
306
\fn void phy_config_dedicated_eNB(module_id_t Mod_id,uint16_t rnti,
307
                                  struct PhysicalConfigDedicated *physicalConfigDedicated)
308 309
\brief Prepare for configuration of PHY with dedicated parameters.
\details Invoked just prior to transmission of RRCConnectionSetup or RRCConnectionReconfiguration at eNB.
310
@param Mod_id Instance ID for eNB
Raymond Knopp's avatar
 
Raymond Knopp committed
311
@param CC_id Component Carrier index
312 313
@param rnti rnti for UE context
@param physicalConfigDedicated PHY Configuration information
314 315
 */
void phy_config_dedicated_eNB(module_id_t Mod_id,
Raymond Knopp's avatar
 
Raymond Knopp committed
316
                              int CC_id,
317
                              rnti_t rnti,
318
                              struct LTE_PhysicalConfigDedicated *physicalConfigDedicated);
319 320 321 322 323

/*!
\fn void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB)
\brief Configure PHY with dedicated parameters between configuration of DLSCH (n) and ULSCH (n+4) in current subframe (n).
@param phy_vars_eNB Pointer to PHY_VARS_eNB structure
324
 */
325 326 327 328
void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB);

/*
  \fn int phy_init_secsys_eNB(PHY_VARS_eNB *phy_vars_eNb)
329
\brief Allocate and Initialize the PHY variables relevant to the LTE implementation.
330
@param phy_vars_eNb pointer to LTE parameter structure for the eNb
331
 */
332 333
int phy_init_secsys_eNB(PHY_VARS_eNB *phy_vars_eNb);

334
void free_lte_top(void);
335

336
void init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms);
337 338 339

//void copy_lte_parms_to_phy_framing(LTE_DL_FRAME_PARMS *frame_parm, PHY_FRAMING *phy_framing);

340
void lte_param_init(PHY_VARS_eNB **eNBp,
341 342 343
                    PHY_VARS_UE **UEp,
                    RU_t **rup,
                    unsigned char N_tx_port_eNB,
344
                    unsigned char N_tx_phy,
345 346 347 348 349 350 351 352 353 354
                    unsigned char N_rx_ru,
                    unsigned char N_rx_ue,
                    unsigned char transmission_mode,
                    uint8_t extended_prefix_flag,
                    frame_t frame_type,
                    uint16_t Nid_cell,
                    uint8_t tdd_config,
                    uint8_t N_RB_DL,
                    uint8_t pa,
                    uint8_t threequarter_fs,
355
                    uint8_t osf,
356
                    uint32_t perfect_ce);
357

358

359
void phy_config_dedicated_scell_ue(uint8_t Mod_id,
360
                                   uint8_t eNB_index,
361
                                   LTE_SCellToAddMod_r10_t *sCellToAddMod_r10,
362
                                   int CC_id);
363 364

void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
365
                                    uint16_t rnti,
366
                                    LTE_SCellToAddMod_r10_t *sCellToAddMod_r10,
367
                                    int CC_id);
368

369

370 371 372


/*! !\fn void phy_cleanup(void)
373
\brief Cleanup the PHY variables*/
374 375
void phy_cleanup(void);

376
void phy_config_request(PHY_Config_t *phy_config);
377

378
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
379
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
380
int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp, uint8_t i_ssb, uint8_t half_frame_index);
381
int nr_is_ssb_slot(nfapi_nr_config_request_t *cfg, int slot, int frame);
382
int nr_init_frame_parms(nfapi_nr_config_request_t *config, NR_DL_FRAME_PARMS *frame_parms);
383
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms,int mu,int Ncp,int N_RB_DL,int n_ssb_crb,int ssb_subcarrier_offset);
Hongzhi Wang's avatar
Hongzhi Wang committed
384
int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
385
void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
Guy De Souza's avatar
Guy De Souza committed
386 387
void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);
388
void nr_phy_config_request(NR_PHY_Config_t *gNB);
389
void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst);
Guy De Souza's avatar
Guy De Souza committed
390
void phy_free_nr_gNB(PHY_VARS_gNB *gNB);
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
391
int l1_north_init_gNB(void);
392
void init_nr_transport(PHY_VARS_gNB *gNB);
393

Cedric Roux's avatar
Cedric Roux committed
394 395
void init_dfts(void);

396

397 398 399
/** @} */
#endif