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 "dci.h"
37
#include "mdci.h"
38
#include "uci_common.h"
39 40 41
//#ifndef STANDALONE_COMPILE
//  #include "UTIL/LISTS/list.h"
//#endif
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57


// 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;
58 59
  /// pointer to pdu from MAC interface (this is "a" in 36.212)
  uint8_t *pdu;
60 61
  /// The payload + CRC size in bits, "B" from 36-212
  uint32_t B;
62
  /// Pointer to the payload
63
  uint8_t *b;
64
  /// Pointers to transport block segments
65
  uint8_t *c[MAX_NUM_DLSCH_SEGMENTS];
66 67
  /// RTC values for each segment (for definition see 36-212 V8.6 2009-03, p.15)
  uint32_t RTC[MAX_NUM_DLSCH_SEGMENTS];
68 69 70 71
  /// Frame where current HARQ round was sent
  uint32_t frame;
  /// Subframe where current HARQ round was sent
  uint32_t subframe;
72 73
  /// Index of current HARQ round for this DLSCH
  uint8_t round;
74 75 76
  /// Modulation order
  uint8_t Qm;
  /// MCS
77
  uint8_t mcs;
78 79 80 81
  /// Redundancy-version of the current sub-frame
  uint8_t rvidx;
  /// MIMO mode for this DLSCH
  MIMO_mode_t mimo_mode;
82 83
  /// Current RB allocation
  uint32_t rb_alloc[4];
84 85
  /// distributed/localized flag
  vrb_t vrb_type;
86 87 88 89 90 91 92 93 94 95
  /// 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;
96 97
  /// Current NDI
  uint8_t ndi;
98 99
  /// downlink power offset field
  uint8_t dl_power_off;
100 101
  /// start symbold of pdsch
  uint8_t pdsch_start;
102
  /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
laurent's avatar
laurent committed
103
  uint8_t eDL[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
104
  /// Turbo-code outputs (36-212 V8.6 2009-03, p.12
105
  uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))];
106
  /// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17)
107 108 109
  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;
110
  /// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10)
111
  uint32_t Cminus;
112
  /// Number of "large" code segments (for definition see 36-212 V8.6 2009-03, p.10)
113 114 115
  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;
116
  /// Number of bits in "large" code segments (<6144) (for definition see 36-212 V8.6 2009-03, p.10)
117
  uint32_t Kplus;
118
  /// Number of "Filler" bits (for definition see 36-212 V8.6 2009-03, p.10)
119
  uint32_t F;
120
  /// Number of MIMO layers (streams) (for definition see 36-212 V8.6 2009-03, p.17, TM3-4)
121
  uint8_t Nl;
122 123 124 125
  /// Number of layers for this PDSCH transmission (TM8-10)
  uint8_t Nlayers;
  /// First layer for this PSCH transmission
  uint8_t first_layer;
126
  /// codeword this transport block is mapped to
127
  uint8_t codeword;
128
#ifdef PHY_TX_THREAD
129 130 131 132 133
  /// 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;
134
#endif
135 136
} LTE_DL_eNB_HARQ_t;

137

138
typedef struct {
Raymond Knopp's avatar
 
Raymond Knopp committed
139
  /// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
Florian Kaltenberger's avatar
Florian Kaltenberger committed
140
  int32_t *txdataF[8];
Xiwen JIANG's avatar
Xiwen JIANG committed
141
  /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers?
142
  int32_t **ue_spec_bf_weights[4];
143 144
  /// dl channel estimates (estimated from ul channel estimates)
  int32_t **calib_dl_ch_estimates;
145
  /// Allocated RNTI (0 means DLSCH_t is not currently used)
146
  uint16_t rnti;
147
  /// Active flag for baseband transmitter processing
148
#ifdef PHY_TX_THREAD
149 150
  uint8_t active[10];
#else
151
  uint8_t active;
152
#endif
nepes's avatar
nepes committed
153
  /// indicator of UE type (0 = LTE, 1,2 = Cat-M)
laurent's avatar
laurent committed
154
  int ue_type;
155 156
  /// HARQ process mask, indicates which processes are currently active
  uint16_t harq_mask;
157
  /// Indicator of TX activation per subframe.  Used during PUCCH detection for ACK/NAK.
158
  uint8_t subframe_tx[10];
159
  /// First CCE of last PDSCH scheduling per subframe.  Again used during PUCCH detection for ACK/NAK.
160 161
  uint8_t nCCE[10];
  /// Process ID's per subframe.  Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids
162
  uint8_t harq_ids[2][10];
163 164 165 166 167
  /// 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
168
  LTE_DL_eNB_HARQ_t *harq_processes[8];
169 170 171
  /// Number of soft channel bits
  uint32_t G;
  /// Codebook index for this dlsch (0,1,2,3)
172
  uint8_t codebook_index;
173
  /// Maximum number of HARQ processes (for definition see 36-212 V8.6 2009-03, p.17)
174
  uint8_t Mdlharq;
175 176
  /// Maximum number of HARQ rounds
  uint8_t Mlimit;
177 178
  /// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
  uint8_t Kmimo;
179 180
  /// Nsoft parameter related to UE Category
  uint32_t Nsoft;
181
  /// amplitude of PDSCH (compared to RS) in symbols without pilots
182 183 184
  int16_t sqrt_rho_a;
  /// amplitude of PDSCH (compared to RS) in symbols containing pilots
  int16_t sqrt_rho_b;
185
#ifndef PHY_TX_THREAD
186
  /// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling
islam.galal's avatar
islam.galal committed
187
  uint8_t sib1_br_flag;
188 189 190
  /// 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
191
#endif
192 193 194 195 196 197 198 199 200 201 202
} 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;
203 204 205 206 207 208
  /// 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;
209 210
  /// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around
  uint8_t handled;
211 212 213 214
  /// PHICH active flag
  uint8_t phich_active;
  /// PHICH ACK
  uint8_t phich_ACK;
215
  /// First Allocated RB
216
  uint16_t first_rb;
217 218 219 220
  /// First Allocated RB - previous scheduling
  /// This is needed for PHICH generation which
  /// is done after a new scheduling
  uint16_t previous_first_rb;
221
  /// Current Number of RBs
222
  uint16_t nb_rb;
223 224
  /// Current Modulation order
  uint8_t Qm;
225 226
  /// Transport block size
  uint32_t TBS;
227 228
  /// The payload + CRC size in bits
  uint32_t B;
229 230
  /// Number of soft channel bits
  uint32_t G;
Raymond Knopp's avatar
 
Raymond Knopp committed
231 232 233 234
  /// CQI CRC status
  uint8_t cqi_crc_status;
  /// Pointer to CQI data
  uint8_t o[MAX_CQI_BYTES];
235
  /// Format of CQI data
Raymond Knopp's avatar
 
Raymond Knopp committed
236 237 238 239 240
  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;
241
  /// Rank information
Raymond Knopp's avatar
 
Raymond Knopp committed
242 243 244 245 246
  uint8_t o_RI[2];
  /// Length of rank information (bits)
  uint8_t O_RI;
  /// Pointer to ACK
  uint8_t o_ACK[4];
247 248
  /// Length of ACK information (bits)
  uint8_t O_ACK;
249
  /// The value of DAI in DCI format 0
250
  uint8_t V_UL_DAI;
Raymond Knopp's avatar
 
Raymond Knopp committed
251 252 253 254 255 256 257 258 259 260 261 262
  /// "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];
263
  /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
laurent's avatar
laurent committed
264
  int16_t eUL[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
Raymond Knopp's avatar
 
Raymond Knopp committed
265 266
  /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
  uint8_t h[MAX_NUM_CHANNEL_BITS];
267
  /// Pointer to the payload
laurent's avatar
laurent committed
268
  uint8_t *decodedBytes;
269
  /// Pointers to transport block segments
laurent's avatar
laurent committed
270
  //TBD
271
  uint8_t *c[MAX_NUM_ULSCH_SEGMENTS];
272
  /// RTC values for each segment (for definition see 36-212 V8.6 2009-03, p.15)
273
  uint32_t RTC[MAX_NUM_ULSCH_SEGMENTS];
Raymond Knopp's avatar
 
Raymond Knopp committed
274 275 276 277
  /// Current Number of Symbols
  uint8_t Nsymb_pusch;
  /// SRS active flag
  uint8_t srs_active;
Raymond Knopp's avatar
Raymond Knopp committed
278 279
  /// NDI
  uint8_t ndi;
280
  /// Index of current HARQ round for this ULSCH
281
  uint8_t round;
282 283
  /// Redundancy-version of the current sub-frame
  uint8_t rvidx;
284
  /// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
285
  int16_t w[MAX_NUM_ULSCH_SEGMENTS][3*(6144+64)];
286
  int16_t pusch_rep_buffer[MAX_NUM_ULSCH_SEGMENTS][3*(6144+64)];
287
  /// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
laurent's avatar
laurent committed
288
  //TBD
289
  int16_t *d[MAX_NUM_ULSCH_SEGMENTS];
laurent's avatar
laurent committed
290 291
  uint32_t processedSegments;
  uint32_t processedBadSegment;
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 324 325
  // PUSCH Repetition Number for the current SF
  uint32_t repetition_number ;
  // PUSCH Total number of repetitions
  uint32_t total_number_of_repetitions;
326 327
} LTE_UL_eNB_HARQ_t;

328 329 330 331 332 333 334 335
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;
336 337
  /// UE ID from Layer2
  uint16_t    ue_id;
338
  /// Type (SR, HARQ, CQI, HARQ_SR, HARQ_CQI, SR_CQI, HARQ_SR_CQI)
339
  UCI_type_t  type;
340 341
  /// SRS active flag
  uint8_t     srs_active;
342 343
  /// PUCCH format to use
  PUCCH_FMT_t pucch_fmt;
344
  /// number of PUCCH antenna ports
345 346
  uint8_t     num_antenna_ports;
  /// number of PUCCH resources
347
  uint8_t     num_pucch_resources;
348 349 350 351
  /// 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];
352
  /// two antenna n2_pucch
353
  uint16_t    n_pucch_2[2];
354 355 356 357
  /// two antenna n3_pucch
  uint16_t    n_pucch_3[2];
  /// TDD Bundling/multiplexing flag
  uint8_t     tdd_bundling;
358 359
  /// Received Energy
  uint32_t stat;
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
  /// 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;
376
} LTE_eNB_UCI;
377

378 379
typedef struct {
  /// UL RSSI per receive antenna
380
  int32_t UL_rssi[NB_ANTENNAS_RX];
381
  /// PUCCH1a/b power (digital linear)
382
  uint32_t Po_PUCCH;
383 384 385
  /// PUCCH1a/b power (dBm)
  int32_t Po_PUCCH_dBm;
  /// PUCCH1 power (digital linear), conditioned on below threshold
386
  uint32_t Po_PUCCH1_below;
387
  /// PUCCH1 power (digital linear), conditioned on above threshold
388
  uint32_t Po_PUCCH1_above;
389 390
  /// Indicator that Po_PUCCH has been updated by PHY
  int32_t Po_PUCCH_update;
391 392 393 394 395 396 397 398 399 400 401 402 403
  /// 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
404
  int32_t UE_timing_offset;
405
  /// Timing advance estimate from PUSCH for MAC timing advance signalling
406
  int32_t timing_advance_update;
407 408 409 410
  /// Current mode of UE (NOT SYCHED, RAR, PUSCH)
  UE_MODE_t mode;
  /// Current sector where UE is attached
  uint8_t sector;
411

Florian Kaltenberger's avatar
Florian Kaltenberger committed
412 413
  /// dlsch l2 errors
  uint32_t dlsch_l2_errors[8];
414
  /// dlsch trials per harq and round
Florian Kaltenberger's avatar
Florian Kaltenberger committed
415 416 417 418 419 420 421 422
  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
423
  uint32_t ulsch_consecutive_errors; //[8];
Florian Kaltenberger's avatar
Florian Kaltenberger committed
424 425 426 427 428 429
  /// 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];
430 431 432
  uint32_t sr_received;
  uint32_t sr_total;

Florian Kaltenberger's avatar
Florian Kaltenberger committed
433 434 435
  /// 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;
436
  int8_t dlsch_mcs_offset;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
437

438 439 440 441
  /// 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
442 443 444
  /// Total bits received from MAC on PDSCH
  int total_TBS_MAC;
  /// Total bits acknowledged on PDSCH
445
  int total_TBS;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
446
  /// Total bits acknowledged on PDSCH (last interval)
447
  int total_TBS_last;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
448
  /// Bitrate on the PDSCH [bps]
449 450 451 452
  unsigned int dlsch_bitrate;
} LTE_eNB_UE_stats;

typedef struct {
453
  /// UE type (normal, CEModeA, CEModeB)
laurent's avatar
laurent committed
454
  uint8_t ue_type;
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