transport_eNB.h 16.8 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
 * 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
 */
21 22 23 24 25 26 27 28 29 30 31

/*! \file PHY/LTE_TRANSPORT/defs.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
* \author R. Knopp
* \date 2011
* \version 0.1
* \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note
* \warning
*/
32 33 34
#ifndef __TRANSPORT_ENB__H__
#define __TRANSPORT_ENB__H__
#include "transport_common.h"
35
//#include "PHY/defs_eNB.h"
36
#include "PHY/impl_defs_lte.h"
37
#include "dci.h"
38
#include "mdci.h"
39
#include "uci_common.h"
40
#ifndef STANDALONE_COMPILE
41
#include "UTIL/LISTS/list.h"
42
#endif
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58


// structures below implement 36-211 and 36-212

/** @addtogroup _PHY_TRANSPORT_
 * @{
 */




typedef struct {
  /// Status Flag indicating for this DLSCH (idle,active,disabled)
  SCH_status_t status;
  /// Transport block size
  uint32_t TBS;
59 60
  /// pointer to pdu from MAC interface (this is "a" in 36.212)
  uint8_t *pdu;
61 62
  /// The payload + CRC size in bits, "B" from 36-212
  uint32_t B;
63
  /// Pointer to the payload
64
  uint8_t *b;
65
  /// Pointers to transport block segments
66
  uint8_t *c[MAX_NUM_DLSCH_SEGMENTS];
67 68
  /// RTC values for each segment (for definition see 36-212 V8.6 2009-03, p.15)
  uint32_t RTC[MAX_NUM_DLSCH_SEGMENTS];
69 70 71 72
  /// Frame where current HARQ round was sent
  uint32_t frame;
  /// Subframe where current HARQ round was sent
  uint32_t subframe;
73 74
  /// Index of current HARQ round for this DLSCH
  uint8_t round;
75 76 77
  /// Modulation order
  uint8_t Qm;
  /// MCS
78
  uint8_t mcs;
79 80 81 82
  /// Redundancy-version of the current sub-frame
  uint8_t rvidx;
  /// MIMO mode for this DLSCH
  MIMO_mode_t mimo_mode;
83 84
  /// Current RB allocation
  uint32_t rb_alloc[4];
85 86
  /// distributed/localized flag
  vrb_t vrb_type;
87 88 89 90 91 92 93 94 95 96
  /// Current subband PMI allocation
  uint16_t pmi_alloc;
  /// Current subband RI allocation
  uint32_t ri_alloc;
  /// Current subband CQI1 allocation
  uint32_t cqi_alloc1;
  /// Current subband CQI2 allocation
  uint32_t cqi_alloc2;
  /// Current Number of RBs
  uint16_t nb_rb;
97 98
  /// Current NDI
  uint8_t ndi;
99 100
  /// downlink power offset field
  uint8_t dl_power_off;
101 102
  /// start symbold of pdsch
  uint8_t pdsch_start;
103
  /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
104
  uint8_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
105
  /// Turbo-code outputs (36-212 V8.6 2009-03, p.12
106
  uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))];
107
  /// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17)
108 109 110
  uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*6144];
  /// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
  uint32_t C;
111
  /// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10)
112
  uint32_t Cminus;
113
  /// Number of "large" code segments (for definition see 36-212 V8.6 2009-03, p.10)
114 115 116
  uint32_t Cplus;
  /// Number of bits in "small" code segments (<6144) (for definition see 36-212 V8.6 2009-03, p.10)
  uint32_t Kminus;
117
  /// Number of bits in "large" code segments (<6144) (for definition see 36-212 V8.6 2009-03, p.10)
118
  uint32_t Kplus;
119
  /// Number of "Filler" bits (for definition see 36-212 V8.6 2009-03, p.10)
120
  uint32_t F;
121
  /// Number of MIMO layers (streams) (for definition see 36-212 V8.6 2009-03, p.17, TM3-4)
122
  uint8_t Nl;
123 124 125 126
  /// Number of layers for this PDSCH transmission (TM8-10)
  uint8_t Nlayers;
  /// First layer for this PSCH transmission
  uint8_t first_layer;
127
  /// codeword this transport block is mapped to
128
  uint8_t codeword;
129
#ifdef PHY_TX_THREAD
130
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
131 132 133 134 135
  /// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling
  uint8_t sib1_br_flag;
  /// initial absolute subframe (see 36.211 Section 6.3.1), needed for c_init for scrambling
  uint16_t i0;
  CEmode_t CEmode;
136
#endif
137
#endif
138 139
} LTE_DL_eNB_HARQ_t;

140

141
typedef struct {
Raymond Knopp's avatar
 
Raymond Knopp committed
142
  /// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
Florian Kaltenberger's avatar
Florian Kaltenberger committed
143
  int32_t *txdataF[8];
Xiwen JIANG's avatar
Xiwen JIANG committed
144
  /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers?
145
  int32_t **ue_spec_bf_weights[4];
146 147
  /// dl channel estimates (estimated from ul channel estimates)
  int32_t **calib_dl_ch_estimates;
148
  /// Allocated RNTI (0 means DLSCH_t is not currently used)
149
  uint16_t rnti;
150
  /// Active flag for baseband transmitter processing
151
#ifdef PHY_TX_THREAD
152 153
  uint8_t active[10];
#else
154
  uint8_t active;
155
#endif
nepes's avatar
nepes committed
156 157
  /// indicator of UE type (0 = LTE, 1,2 = Cat-M)
  int ue_type;
158 159
  /// HARQ process mask, indicates which processes are currently active
  uint16_t harq_mask;
160 161
  /// Indicator of TX activation per subframe.  Used during PUCCH detection for ACK/NAK.
  uint8_t subframe_tx[10];
162
  /// First CCE of last PDSCH scheduling per subframe.  Again used during PUCCH detection for ACK/NAK.
163 164
  uint8_t nCCE[10];
  /// Process ID's per subframe.  Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids
165
  uint8_t harq_ids[2][10];
166 167 168 169 170
  /// Window size (in outgoing transport blocks) for fine-grain rate adaptation
  uint8_t ra_window_size;
  /// First-round error threshold for fine-grain rate adaptation
  uint8_t error_threshold;
  /// Pointers to 8 HARQ processes for the DLSCH
171
  LTE_DL_eNB_HARQ_t *harq_processes[8];
172 173 174
  /// Number of soft channel bits
  uint32_t G;
  /// Codebook index for this dlsch (0,1,2,3)
175
  uint8_t codebook_index;
176
  /// Maximum number of HARQ processes (for definition see 36-212 V8.6 2009-03, p.17)
177
  uint8_t Mdlharq;
178 179
  /// Maximum number of HARQ rounds
  uint8_t Mlimit;
180 181
  /// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
  uint8_t Kmimo;
182 183
  /// Nsoft parameter related to UE Category
  uint32_t Nsoft;
184
  /// amplitude of PDSCH (compared to RS) in symbols without pilots
185 186 187
  int16_t sqrt_rho_a;
  /// amplitude of PDSCH (compared to RS) in symbols containing pilots
  int16_t sqrt_rho_b;
188
#ifndef PHY_TX_THREAD
189
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
190
  /// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling
islam.galal's avatar
islam.galal committed
191
  uint8_t sib1_br_flag;
192 193 194
  /// initial absolute subframe (see 36.211 Section 6.3.1), needed for c_init for scrambling
  uint16_t i0;
  CEmode_t CEmode;
islam.galal's avatar
islam.galal committed
195
#endif
196
#endif
197 198 199 200 201 202 203 204 205 206 207
} LTE_eNB_DLSCH_t;



typedef struct {
  /// Flag indicating that this ULSCH has been allocated by a DCI (otherwise it is a retransmission based on PHICH NAK)
  uint8_t dci_alloc;
  /// Flag indicating that this ULSCH has been allocated by a RAR (otherwise it is a retransmission based on PHICH NAK or DCI)
  uint8_t rar_alloc;
  /// Status Flag indicating for this ULSCH (idle,active,disabled)
  SCH_status_t status;
208 209 210 211 212 213
  /// Flag to indicate that eNB should decode UE Msg3
  uint8_t Msg3_flag;
  /// Subframe for reception
  uint8_t subframe;
  /// Frame for reception
  uint32_t frame;
214 215
  /// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around
  uint8_t handled;
216 217 218 219
  /// PHICH active flag
  uint8_t phich_active;
  /// PHICH ACK
  uint8_t phich_ACK;
220
  /// First Allocated RB
221
  uint16_t first_rb;
222 223 224 225
  /// First Allocated RB - previous scheduling
  /// This is needed for PHICH generation which
  /// is done after a new scheduling
  uint16_t previous_first_rb;
226
  /// Current Number of RBs
227
  uint16_t nb_rb;
228 229
  /// Current Modulation order
  uint8_t Qm;
230 231
  /// Transport block size
  uint32_t TBS;
232 233
  /// The payload + CRC size in bits
  uint32_t B;
234 235
  /// Number of soft channel bits
  uint32_t G;
Raymond Knopp's avatar
 
Raymond Knopp committed
236 237 238 239
  /// CQI CRC status
  uint8_t cqi_crc_status;
  /// Pointer to CQI data
  uint8_t o[MAX_CQI_BYTES];
240
  /// Format of CQI data
Raymond Knopp's avatar
 
Raymond Knopp committed
241 242 243 244 245
  UCI_format_t uci_format;
  /// Length of CQI data under RI=1 assumption(bits)
  uint8_t Or1;
  /// Length of CQI data under RI=2 assumption(bits)
  uint8_t Or2;
246
  /// Rank information
Raymond Knopp's avatar
 
Raymond Knopp committed
247 248 249 250 251
  uint8_t o_RI[2];
  /// Length of rank information (bits)
  uint8_t O_RI;
  /// Pointer to ACK
  uint8_t o_ACK[4];
252 253
  /// Length of ACK information (bits)
  uint8_t O_ACK;
254
  /// The value of DAI in DCI format 0
255
  uint8_t V_UL_DAI;
Raymond Knopp's avatar
 
Raymond Knopp committed
256 257 258 259 260 261 262 263 264 265 266 267
  /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27)
  int8_t q[MAX_CQI_PAYLOAD];
  /// number of coded CQI bits after interleaving
  uint8_t o_RCC;
  /// coded and interleaved CQI bits
  int8_t o_w[(MAX_CQI_BITS+8)*3];
  /// coded CQI bits
  int8_t o_d[96+((MAX_CQI_BITS+8)*3)];
  /// coded ACK bits
  int16_t q_ACK[MAX_ACK_PAYLOAD];
  /// coded RI bits
  int16_t q_RI[MAX_RI_PAYLOAD];
268
  /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
269
  int16_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
Raymond Knopp's avatar
 
Raymond Knopp committed
270 271
  /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
  uint8_t h[MAX_NUM_CHANNEL_BITS];
272
  /// Pointer to the payload
273
  uint8_t *b;
274 275
  /// Pointers to transport block segments
  uint8_t *c[MAX_NUM_ULSCH_SEGMENTS];
276 277
  /// RTC values for each segment (for definition see 36-212 V8.6 2009-03, p.15)
  uint32_t RTC[MAX_NUM_ULSCH_SEGMENTS];
Raymond Knopp's avatar
 
Raymond Knopp committed
278 279 280 281
  /// Current Number of Symbols
  uint8_t Nsymb_pusch;
  /// SRS active flag
  uint8_t srs_active;
Raymond Knopp's avatar
Raymond Knopp committed
282 283
  /// NDI
  uint8_t ndi;
284
  /// Index of current HARQ round for this ULSCH
285
  uint8_t round;
286 287
  /// Redundancy-version of the current sub-frame
  uint8_t rvidx;
288
  /// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
289
  int16_t w[MAX_NUM_ULSCH_SEGMENTS][3*(6144+64)];
290
  /// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
291
  int16_t *d[MAX_NUM_ULSCH_SEGMENTS];
292 293
  /// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
  uint32_t C;
294
  /// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10)
295 296 297 298 299 300
  uint32_t Cminus;
  /// Number of "large" code segments (for definition see 36-212 V8.6 2009-03, p.10)
  uint32_t Cplus;
  /// Number of bits in "small" code segments (<6144) (for definition see 36-212 V8.6 2009-03, p.10)
  uint32_t Kminus;
  /// Number of bits in "large" code segments (<6144) (for definition see 36-212 V8.6 2009-03, p.10)
301
  uint32_t Kplus;
302 303
  /// Number of "Filler" bits (for definition see 36-212 V8.6 2009-03, p.10)
  uint32_t F;
304
  /// Number of MIMO layers (streams) (for definition see 36-212 V8.6 2009-03, p.17)
305
  uint8_t Nl;
306 307 308 309 310 311
  /// Msc_initial, Initial number of subcarriers for ULSCH (36-212, v8.6 2009-03, p.26-27)
  uint16_t Msc_initial;
  /// Nsymb_initial, Initial number of symbols for ULSCH (36-212, v8.6 2009-03, p.26-27)
  uint8_t Nsymb_initial;
  /// n_DMRS  for cyclic shift of DMRS (36.213 Table 9.1.2-2)
  uint8_t n_DMRS;
312 313 314 315
  /// n_DMRS  for cyclic shift of DMRS (36.213 Table 9.1.2-2) - previous scheduling
  /// This is needed for PHICH generation which
  /// is done after a new scheduling
  uint8_t previous_n_DMRS;
316 317 318 319
  /// n_DMRS 2 for cyclic shift of DMRS (36.211 Table 5.5.1.1.-1)
  uint8_t n_DMRS2;
  /// Flag to indicate that this ULSCH is for calibration information sent from UE (i.e. no MAC SDU to pass up)
  //  int calibration_flag;
320 321
  /// delta_TF for power control
  int32_t delta_TF;
322 323
} LTE_UL_eNB_HARQ_t;

324 325 326 327 328 329 330 331
typedef struct {
  uint8_t     active;
  /// Absolute frame for this UCI
  uint16_t    frame;
  /// Absolute subframe for this UCI
  uint8_t     subframe;
  /// corresponding UE RNTI
  uint16_t    rnti;
332 333
  /// UE ID from Layer2
  uint16_t    ue_id;
334
  /// Type (SR, HARQ, CQI, HARQ_SR, HARQ_CQI, SR_CQI, HARQ_SR_CQI)
335
  UCI_type_t  type;
336 337
  /// SRS active flag
  uint8_t     srs_active;
338 339
  /// PUCCH format to use
  PUCCH_FMT_t pucch_fmt;
340
  /// number of PUCCH antenna ports
341 342
  uint8_t     num_antenna_ports;
  /// number of PUCCH resources
343
  uint8_t     num_pucch_resources;
344 345 346 347 348
  /// two antenna n1_pucch 1_0
  uint16_t    n_pucch_1[4][2];
  /// two antenna n1_pucch 1_0 for SR
  uint16_t    n_pucch_1_0_sr[2];
   /// two antenna n2_pucch
349
  uint16_t    n_pucch_2[2];
350 351 352 353
  /// two antenna n3_pucch
  uint16_t    n_pucch_3[2];
  /// TDD Bundling/multiplexing flag
  uint8_t     tdd_bundling;
354 355
  /// Received Energy
  uint32_t stat;
356
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
  /// non BL/CE, CEmodeA, CEmodeB
  UE_type_t ue_type;
  /// Indicates the symbols that are left empty due to eMTC retuning.
  uint8_t empty_symbols;
  /// number of repetitions for BL/CE
  uint16_t total_repetitions;
  /// The size of the DL CQI/PMI in bits.
  uint16_t dl_cqi_pmi_size2;
  /// The starting PRB for the PUCCH
  uint8_t starting_prb;
  /// The number of PRB in PUCCH
  uint8_t n_PRB;
  /// Selected CDM option
  uint8_t cdm_Index;
  // Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.
  uint8_t Nsrs;
#endif
374
} LTE_eNB_UCI;
375

376 377
typedef struct {
  /// UL RSSI per receive antenna
378
  int32_t UL_rssi[NB_ANTENNAS_RX];
379
  /// PUCCH1a/b power (digital linear)
380
  uint32_t Po_PUCCH;
381 382 383
  /// PUCCH1a/b power (dBm)
  int32_t Po_PUCCH_dBm;
  /// PUCCH1 power (digital linear), conditioned on below threshold
384
  uint32_t Po_PUCCH1_below;
385
  /// PUCCH1 power (digital linear), conditioned on above threshold
386
  uint32_t Po_PUCCH1_above;
387 388
  /// Indicator that Po_PUCCH has been updated by PHY
  int32_t Po_PUCCH_update;
389 390 391 392 393 394 395 396 397 398 399 400 401
  /// DL Wideband CQI index (2 TBs)
  uint8_t DL_cqi[2];
  /// DL Subband CQI index (from HLC feedback)
  uint8_t DL_subband_cqi[2][13];
  /// DL PMI Single Stream
  uint16_t DL_pmi_single;
  /// DL PMI Dual Stream
  uint16_t DL_pmi_dual;
  /// Current RI
  uint8_t rank;
  /// CRNTI of UE
  uint16_t crnti; ///user id (rnti) of connected UEs
  /// Initial timing offset estimate from PRACH for RAR
402
  int32_t UE_timing_offset;
403
  /// Timing advance estimate from PUSCH for MAC timing advance signalling
404
  int32_t timing_advance_update;
405 406 407 408
  /// Current mode of UE (NOT SYCHED, RAR, PUSCH)
  UE_MODE_t mode;
  /// Current sector where UE is attached
  uint8_t sector;
409

Florian Kaltenberger's avatar
Florian Kaltenberger committed
410 411
  /// dlsch l2 errors
  uint32_t dlsch_l2_errors[8];
412
  /// dlsch trials per harq and round
Florian Kaltenberger's avatar
Florian Kaltenberger committed
413 414 415 416 417 418 419 420
  uint32_t dlsch_trials[8][8];
  /// dlsch ACK/NACK per hard_pid and round
  uint32_t dlsch_ACK[8][8];
  uint32_t dlsch_NAK[8][8];

  /// ulsch l2 errors per harq_pid
  uint32_t ulsch_errors[8];
  /// ulsch l2 consecutive errors per harq_pid
421
  uint32_t ulsch_consecutive_errors; //[8];
Florian Kaltenberger's avatar
Florian Kaltenberger committed
422 423 424 425 426 427
  /// ulsch trials/errors/fer per harq and round
  uint32_t ulsch_decoding_attempts[8][8];
  uint32_t ulsch_round_errors[8][8];
  uint32_t ulsch_decoding_attempts_last[8][8];
  uint32_t ulsch_round_errors_last[8][8];
  uint32_t ulsch_round_fer[8][8];
428 429 430
  uint32_t sr_received;
  uint32_t sr_total;

Florian Kaltenberger's avatar
Florian Kaltenberger committed
431 432 433
  /// dlsch sliding count and total errors in round 0 are used to compute the dlsch_mcs_offset
  uint32_t dlsch_sliding_cnt;
  uint32_t dlsch_NAK_round0;
434
  int8_t dlsch_mcs_offset;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
435

436 437 438 439
  /// Target mcs1 after rate-adaptation (used by MAC layer scheduler)
  uint8_t dlsch_mcs1;
  /// Target mcs2 after rate-adaptation (used by MAC layer scheduler)
  uint8_t dlsch_mcs2;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
440 441 442
  /// Total bits received from MAC on PDSCH
  int total_TBS_MAC;
  /// Total bits acknowledged on PDSCH
443
  int total_TBS;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
444
  /// Total bits acknowledged on PDSCH (last interval)
445
  int total_TBS_last;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
446
  /// Bitrate on the PDSCH [bps]
447 448 449 450
  unsigned int dlsch_bitrate;
} LTE_eNB_UE_stats;

typedef struct {
451
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
452 453 454
  /// UE type (normal, CEModeA, CEModeB)
  uint8_t ue_type;
#endif
455 456 457 458 459 460 461
  /// HARQ process mask, indicates which processes are currently active
  uint16_t harq_mask;
  /// Pointers to 8 HARQ processes for the ULSCH
  LTE_UL_eNB_HARQ_t *harq_processes[8];
  /// Maximum number of HARQ rounds
  uint8_t Mlimit;
  /// Maximum number of iterations used in eNB turbo decoder
462
  uint8_t max_turbo_iterations;
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483
  /// ACK/NAK Bundling flag
  uint8_t bundling;
  /// beta_offset_cqi times 8
  uint16_t beta_offset_cqi_times8;
  /// beta_offset_ri times 8
  uint16_t beta_offset_ri_times8;
  /// beta_offset_harqack times 8
  uint16_t beta_offset_harqack_times8;
  /// Flag to indicate that eNB awaits UE Msg3
  uint8_t Msg3_active;
  /// RNTI attributed to this ULSCH
  uint16_t rnti;
  /// cyclic shift for DM RS
  uint8_t cyclicShift;
  /// cooperation flag
  uint8_t cooperation_flag;
  /// num active cba group
  uint8_t num_active_cba_groups;
  /// allocated CBA RNTI for this ulsch
  uint16_t cba_rnti[4];//NUM_MAX_CBA_GROUP];
} LTE_eNB_ULSCH_t;
484 485 486 487


/**@}*/
#endif