defs.h 23.1 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * 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
 * the OAI Public License, Version 1.0  (the "License"); you may not use this file
 * 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
25
26
27
28
29
30
31
32
/*
  \author R. Knopp, F. Kaltenberger
  \company EURECOM
  \email knopp@eurecom.fr
*/

#ifndef __openair_SCHED_H__
#define __openair_SCHED_H__

#include "PHY/defs.h"

knopp's avatar
   
knopp committed
33

34
enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0,
35
                    TOP_LEVEL_SCHEDULER_THREAD_INDEX,
36
                    DLC_SCHED_THREAD_INDEX,
37
38
                    openair_SCHED_NB_THREADS
                  }; // do not modify this line
39
40
41
42
43


#define OPENAIR_THREAD_PRIORITY        255


thomasl's avatar
thomasl committed
44
#define OPENAIR_THREAD_STACK_SIZE     PTHREAD_STACK_MIN //4096 //RTL_PTHREAD_STACK_MIN*6
45
46
47
//#define DLC_THREAD_STACK_SIZE        4096 //DLC stack size

enum openair_SCHED_STATUS {
48
49
50
51
52
  openair_SCHED_STOPPED=1,
  openair_SCHED_STARTING,
  openair_SCHED_STARTED,
  openair_SCHED_STOPPING
};
53
54
55
56
57
58
59
60
61
62
63
64
65
66

enum openair_ERROR {
  // HARDWARE CAUSES
  openair_ERROR_HARDWARE_CLOCK_STOPPED= 1,

  // SCHEDULER CAUSE
  openair_ERROR_OPENAIR_RUNNING_LATE,
  openair_ERROR_OPENAIR_SCHEDULING_FAILED,

  // OTHERS
  openair_ERROR_OPENAIR_TIMING_OFFSET_OUT_OF_BOUNDS,
};

enum openair_SYNCH_STATUS {
67
68
69
70
  openair_NOT_SYNCHED=1,
  openair_SYNCHED,
  openair_SCHED_EXIT
};
71
72
73
74
75
76
77
78
79
80
81


#define DAQ_AGC_ON 1
#define DAQ_AGC_OFF 0


/** @addtogroup _PHY_PROCEDURES_
 * @{
 */


82
83

/*! \brief Top-level entry routine for eNB procedures.  Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required).  On odd slots, it generate TX waveform for the following subframe.
knopp's avatar
   
knopp committed
84
  @param subframe Index of current subframe (0-9)
85
86
  @param phy_vars_eNB Pointer to eNB variables on which to act
  @param abstraction_flag Indicator of PHY abstraction
87
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
88
  @param *phy_vars_rn pointer to RN variables
89
*/
knopp's avatar
   
knopp committed
90
void phy_procedures_eNB_lte(uint8_t subframe,PHY_VARS_eNB **phy_vars_eNB,uint8_t abstraction_flag, relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn);
91
92

/*! \brief Top-level entry routine for UE procedures.  Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required).  On odd slots, it generate TX waveform for the following subframe.
93
94
95
96
  @param phy_vars_ue Pointer to UE variables on which to act
  @param eNB_id ID of eNB on which to act
  @param abstraction_flag Indicator of PHY abstraction
  @param mode calibration/debug mode
97
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
98
  @param *phy_vars_rn pointer to RN variables
99
*/
100
void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn);
101

102
#ifdef Rel10
103
/*! \brief Top-level entry routine for relay node procedures when acting as eNB. This proc will make us of the existing eNB procs.
104
105
106
107
108
  @param last_slot Index of last slot (0-19)
  @param next_slot Index of next_slot (0-19)
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
*/
int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, relaying_type_t r_type);
109
/*! \brief Top-level entry routine for relay node procedures actinf as UE. This proc will make us of the existing UE procs.
110
111
112
113
114
115
  @param last_slot Index of last slot (0-19)
  @param next_slot Index of next_slot (0-19)
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
*/
int phy_procedures_RN_UE_RX(unsigned char last_slot, unsigned char next_slot, relaying_type_t r_type);
#endif
116

117
/*! \brief Scheduling for UE TX procedures in normal subframes.
118
  @param phy_vars_ue Pointer to UE variables on which to act
119
  @param proc Pointer to RXn-TXnp4 proc information
120
121
122
  @param eNB_id Local id of eNB on which to act
  @param abstraction_flag Indicator of PHY abstraction
  @param mode calib/normal mode
123
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
124
*/
125
void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type);
126
/*! \brief Scheduling for UE RX procedures in normal subframes.
127
128
  @param last_slot Index of last slot (0-19)
  @param phy_vars_ue Pointer to UE variables on which to act
129
  @param proc Pointer to RXn_TXnp4 proc information
130
131
132
  @param eNB_id Local id of eNB on which to act
  @param abstraction_flag Indicator of PHY abstraction
  @param mode calibration/debug mode
133
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
134
  @param phy_vars_rn pointer to RN variables
135
*/
136
int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn);
137

138
/*! \brief Scheduling for UE TX procedures in TDD S-subframes.
139
140
141
  @param phy_vars_ue Pointer to UE variables on which to act
  @param eNB_id Local id of eNB on which to act
  @param abstraction_flag Indicator of PHY abstraction
142
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
143
*/
knopp's avatar
   
knopp committed
144
void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type);
145

146
/*! \brief Scheduling for UE RX procedures in TDD S-subframes.
147
148
149
  @param phy_vars_ue Pointer to UE variables on which to act
  @param eNB_id Local id of eNB on which to act
  @param abstraction_flag Indicator of PHY abstraction
150
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
151
*/
152
void phy_procedures_UE_S_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag, relaying_type_t r_type);
153

154
/*! \brief Scheduling for eNB TX procedures in normal subframes.
155
156
  @param phy_vars_eNB Pointer to eNB variables on which to act
  @param abstraction_flag Indicator of PHY abstraction
157
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
158
  @param phy_vars_rn pointer to the RN variables
159
  @param do_meas Do inline timing measurement
160
*/
161
void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn,int do_meas);
162

163
/*! \brief Scheduling for eNB RX UE-specific procedures in normal subframes.
164
  @param phy_vars_eNB Pointer to eNB variables on which to act
knopp's avatar
knopp committed
165
  @param proc Pointer to RXn-TXnp4 proc information
166
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
167
*/
168
void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,relaying_type_t r_type);
169

170
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
171
  @param phy_vars_eNB Pointer to eNB variables on which to act
knopp's avatar
knopp committed
172
  @param proc Pointer to RXn-TXnp4 proc information
173
174
175
176
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
*/

/*! \brief Scheduling for eNB RX common procedures in normal subframes.
177
178
  @param phy_vars_eNB Pointer to eNB variables on which to act
  @param abstraction_flag Indicator of PHY abstraction
179
*/
180
void phy_procedures_eNB_common_RX(PHY_VARS_eNB *phy_vars_eNB);
181

182
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
183
  @param phy_vars_eNB Pointer to eNB variables on which to act
184
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
185
*/
186

187
void phy_procedures_eNB_S_TX(PHY_VARS_eNB *phy_vars_eNB,relaying_type_t r_type);
188

189
/*! \brief Scheduling for eNB RX procedures in TDD S-subframes.
190
  @param phy_vars_eNB Pointer to eNB variables on which to act
191
  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
192
*/
193
void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,relaying_type_t r_type);
194
195
196

/*! \brief Scheduling for eNB PRACH RX procedures 
  @param phy_vars_eNB Pointer to eNB variables on which to act
knopp's avatar
knopp committed
197
  @param proc Pointer to RXn-TXnp4 proc information
198
*/
199
void prach_procedures(PHY_VARS_eNB *eNB);
200

201
/*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index.
202
203
  @param frame_parms Pointer to DL frame parameter descriptor
  @param subframe Subframe index
204
  @returns Subframe type (DL,UL,S)
205
*/
206
207


gauthier's avatar
gauthier committed
208
lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
209

210
/*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index.  Same as subframe_select, except that it uses the Mod_id and is provided as a service to the MAC scheduler.
211
  @param Mod_id Index of eNB
knopp's avatar
   
knopp committed
212
  @param CC_id Component Carrier Index
213
  @param subframe Subframe index
214
  @returns Subframe type (DL,UL,S)
215
*/
knopp's avatar
   
knopp committed
216
lte_subframe_t get_subframe_direction(uint8_t Mod_id, uint8_t CC_id,uint8_t subframe);
217

218
/*! \brief Function to indicate PHICH transmission subframes.  Implements Table 9.1.2-1 for TDD.
219
220
221
222
  @param frame_parms Pointer to DL frame parameter descriptor
  @param subframe Subframe index
  @returns 1 if PHICH can be transmitted in subframe (always 1 for FDD)
*/
gauthier's avatar
gauthier committed
223
uint32_t is_phich_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
224

225
/*! \brief Function to compute timing of Msg3 transmission on UL-SCH (first UE transmission in RA procedure). This implements the timing in paragraph a) from Section 6.1.1 in 36.213 (p. 17 in version 8.6).  Used by eNB upon transmission of random-access response (RA_RNTI) to program corresponding ULSCH reception procedure.  Used by UE upon reception of random-access response (RA_RNTI) to program corresponding ULSCH transmission procedure.  This does not support the UL_delay field in RAR (always assumed to be 0).
226
  @param frame_parms Pointer to DL frame parameter descriptor
227
  @param current_subframe Index of subframe where RA_RNTI was received
228
229
230
231
232
  @param current_frame Index of frame where RA_RNTI was received
  @param frame Frame index where Msg3 is to be transmitted (n+6 mod 10 for FDD, different for TDD)
  @param subframe subframe index where Msg3 is to be transmitted (n, n+1 or n+2)
*/
void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms,
233
234
235
236
                    uint8_t current_subframe,
                    uint32_t current_frame,
                    uint32_t *frame,
                    uint8_t *subframe);
237

238
/*! \brief Function to compute timing of Msg3 retransmission on UL-SCH (first UE transmission in RA procedure).
239
  @param frame_parms Pointer to DL frame parameter descriptor
240
  @param current_subframe Index of subframe where RA_RNTI was received
241
242
243
244
245
  @param current_frame Index of frame where RA_RNTI was received
  @param frame Frame index where Msg3 is to be transmitted (n+6 mod 10 for FDD, different for TDD)
  @param subframe subframe index where Msg3 is to be transmitted (n, n+1 or n+2)
*/
void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms,
246
247
248
249
                        uint8_t current_subframe,
                        uint32_t current_frame,
                        uint32_t *frame,
                        uint8_t *subframe);
250

251
/*! \brief Get ULSCH harq_pid for Msg3 from RAR subframe.  This returns n+k mod 10 (k>6) and corresponds to the rule in Section 6.1.1 from 36.213
252
253
254
255
256
   @param frame_parms Pointer to DL Frame Parameters
   @param frame Frame index
   @param current_subframe subframe of RAR transmission
   @returns harq_pid (0 ... 7)
 */
gauthier's avatar
gauthier committed
257
uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t current_subframe);
258

259
/*! \brief Get ULSCH harq_pid from PHICH subframe
260
261
262
263
264
   @param frame_parms Pointer to DL Frame Parameters
   @param subframe subframe of PHICH
   @returns harq_pid (0 ... 7)
 */

265
/*! \brief Function to indicate failure of contention resolution or RA procedure.  It places the UE back in PRACH mode.
266
    @param Mod_id Instance index of UE
knopp's avatar
   
knopp committed
267
    @param CC_id Component Carrier Index
268
269
    @param eNB_index Index of eNB
 */
knopp's avatar
   
knopp committed
270
void ra_failed(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
271

272
/*! \brief Function to indicate success of contention resolution or RA procedure.
273
    @param Mod_id Instance index of UE
knopp's avatar
   
knopp committed
274
    @param CC_id Component Carrier Index
275
276
    @param eNB_index Index of eNB
 */
knopp's avatar
   
knopp committed
277
void ra_succeeded(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
278

gauthier's avatar
gauthier committed
279
uint8_t phich_subframe_to_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t subframe);
280

281
/*! \brief Get PDSCH subframe (n+k) from PDCCH subframe n using relationship from Table 8-2 from 36.213
282
283
284
285
   @param frame_parms Pointer to DL Frame Parameters
   @param n subframe of PDCCH
   @returns PDSCH subframe (0 ... 7) (note: this is n+k from Table 8-2)
 */
gauthier's avatar
gauthier committed
286
uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n);
287

288
289

/*! \brief Compute ACK/NACK information for PUSCH/PUCCH for UE transmission in subframe n. This function implements table 10.1-1 of 36.213, p. 69.
290
291
292
293
294
295
  @param frame_parms Pointer to DL frame parameter descriptor
  @param harq_ack Pointer to dlsch_ue harq_ack status descriptor
  @param subframe Subframe for UE transmission (n in 36.213)
  @param o_ACK Pointer to ACK/NAK payload for PUCCH/PUSCH
  @returns status indicator for PUCCH/PUSCH transmission
*/
gauthier's avatar
gauthier committed
296
uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,harq_status_t *harq_ack,uint8_t subframe,uint8_t *o_ACK);
297

298
/*! \brief Compute UL ACK subframe from DL subframe. This is used to retrieve corresponding DLSCH HARQ pid at eNB upon reception of ACK/NAK information on PUCCH/PUSCH.  Derived from Table 10.1-1 in 36.213 (p. 69 in version 8.6)
299
300
301
302
303
  @param frame_parms Pointer to DL frame parameter descriptor
  @param subframe Subframe for UE transmission (n in 36.213)
  @param ACK_index TTI bundling index (0,1)
  @returns Subframe index for corresponding DL transmission
*/
gauthier's avatar
gauthier committed
304
uint8_t ul_ACK_subframe2_dl_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe,uint8_t ACK_index);
305

306
/*! \brief Computes number of DL subframes represented by a particular ACK received on UL (M from Table 10.1-1 in 36.213, p. 69 in version 8.6)
307
308
309
310
  @param frame_parms Pointer to DL frame parameter descriptor
  @param subframe Subframe for UE transmission (n in 36.213)
  @returns Number of DL subframes (M)
*/
gauthier's avatar
gauthier committed
311
uint8_t ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char subframe);
312

313
/*! \brief Indicates the SR TXOp in current subframe.  Implements Table 10.1-5 from 36.213.
314
  @param phy_vars_ue Pointer to UE variables
315
  @param proc Pointer to RXn_TXnp4 thread context
316
317
318
  @param eNB_id ID of eNB which is to receive the SR
  @returns 1 if TXOp is active.
*/
319
uint8_t is_SR_TXOp(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id);
320

321
/*! \brief Indicates the SR TXOp in current subframe for eNB and particular UE index.  Implements Table 10.1-5 from 36.213.
322
323
324
325
  @param phy_vars_eNB Pointer to eNB variables
  @param UE_id ID of UE which may be issuing the SR
  @returns 1 if TXOp is active.
*/
knopp's avatar
knopp committed
326
uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id);
327

328
/*! \brief Gives the UL subframe corresponding to a PDDCH order in subframe n
329
  @param frame_parms Pointer to DL frame parameters
knopp's avatar
knopp committed
330
  @param proc Pointer to RXn-TXnp4 proc information
331
332
333
  @param n subframe of PDCCH
  @returns UL subframe corresponding to pdcch order
*/
gauthier's avatar
gauthier committed
334
uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n);
335

336
/*! \brief Gives the UL frame corresponding to a PDDCH order in subframe n
337
338
339
340
341
  @param frame_parms Pointer to DL frame parameters
  @param frame Frame of received PDCCH
  @param n subframe of PDCCH
  @returns UL frame corresponding to pdcch order
*/
knopp's avatar
   
knopp committed
342
uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t n);
343
344


gauthier's avatar
gauthier committed
345
uint16_t get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1);
346
347


gauthier's avatar
gauthier committed
348
349
int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
350
int mac_phy_remove_ue(module_id_t Mod_idP,rnti_t rnti);
351

352
void process_timing_advance(module_id_t Mod_id,uint8_t CC_id,int16_t timing_advance);
353
void process_timing_advance_rar(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint16_t timing_advance);
354

knopp's avatar
   
knopp committed
355
unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb);
356

357
void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
358

359
/*! \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in
360
361
362
subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch = Ncce + N1_pucch.  For
TDD, this routine computes the complex procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2)
@param phy_vars_ue Pointer to UE variables
363
@param proc Pointer to RXn-TXnp4 proc information
364
365
366
367
368
@param eNB_id Index of eNB
@param b Pointer to PUCCH payload (b[0],b[1])
@param SR 1 means there's a positive SR in parallel to ACK/NAK
@returns n1_pucch
*/
gauthier's avatar
gauthier committed
369
uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
370
		      UE_rxtx_proc_t *proc,
371
372
373
                      uint8_t eNB_id,
                      uint8_t *b,
                      uint8_t SR);
374

375
/*! \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in
376
377
subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch = Ncce + N1_pucch.  For
TDD, this routine computes the procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2)
knopp's avatar
knopp committed
378
379
@param phy_vars_eNB Pointer to eNB variables
@param proc Pointer to RXn-TXnp4 proc information
380
381
382
383
384
385
386
387
388
@param eNB_id Index of eNB
@param subframe Index of subframe
@param b Pointer to PUCCH payload (b[0],b[1])
@param n1_pucch0 Pointer to n1_pucch0
@param n1_pucch1 Pointer to n1_pucch1
@param n1_pucch2 Pointer to n1_pucch2
@param n1_pucch3 Pointer to n1_pucch3
*/
void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
knopp's avatar
knopp committed
389
		      eNB_rxtx_proc_t *proc,
390
391
392
393
394
                      uint8_t UE_id,
                      int16_t *n1_pucch0,
                      int16_t *n1_pucch1,
                      int16_t *n1_pucch2,
                      int16_t *n1_pucch3);
395
396


397
/*! \brief This function retrieves the harq_pid of the corresponding DLSCH process and updates the error statistics of the DLSCH based on the received ACK info from UE along with the round index.  It also performs the fine-grain rate-adaptation based on the error statistics derived from the ACK/NAK process.
398
399
  @param UE_id Local UE index on which to act
  @param phy_vars_eNB Pointer to eNB variables on which to act
knopp's avatar
knopp committed
400
  @param proc Pointer to RXn-TXnp4 proc information
401
402
403
404
405
  @param pusch_flag Indication that feedback came from PUSCH
  @param pucch_payload Resulting payload from pucch
  @param pucch_sel Selection of n1_pucch0 or n1_pucch1 (TDD specific)
  @param SR_payload Indication of SR presence (TDD specific)
*/
406
407
void process_HARQ_feedback(uint8_t UE_id,
                           PHY_VARS_eNB *phy_vars_eNB,
knopp's avatar
knopp committed
408
			   eNB_rxtx_proc_t *proc,
409
410
411
412
                           uint8_t pusch_flag,
                           uint8_t *pucch_payload,
                           uint8_t pucch_sel,
                           uint8_t SR_payload);
413

414
/*! \brief This function retrieves the PHY UE mode. It is used as a helper function for the UE MAC.
415
  @param Mod_id Local UE index on which to act
knopp's avatar
   
knopp committed
416
  @param CC_id Component Carrier Index
417
418
  @param eNB_index ID of eNB
  @returns UE mode
419
*/
knopp's avatar
   
knopp committed
420
UE_MODE_t get_ue_mode(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
421

422
/*! \brief This function implements the power control mechanism for PUCCH from 36.213.
423
    @param phy_vars_ue PHY variables
424
    @param proc Pointer to proc descriptor
425
426
427
428
    @param eNB_id Index of eNB
    @param pucch_fmt Format of PUCCH that is being transmitted
    @returns Transmit power
 */
fnabet's avatar
fnabet committed
429
int8_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,uint8_t eNB_id,PUCCH_FMT_t pucch_fmt);
430

431
/*! \brief This function implements the power control mechanism for PUCCH from 36.213.
432
    @param phy_vars_ue PHY variables
433
    @param proc Pointer to proc descriptor
434
435
436
437
    @param eNB_id Index of eNB
    @param j index of type of PUSCH (SPS, Normal, Msg3)
    @returns Transmit power
 */
438
void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t j, uint8_t abstraction_flag);
439

knopp's avatar
knopp committed
440
441
void get_cqipmiri_params(PHY_VARS_UE *ue,uint8_t eNB_id);

442
int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id, uint8_t eNB_index);
443

444
#ifdef LOCALIZATION
445
/*! \brief This function collects eNB_UE stats and aggregate them in lists for localization
446
447
448
449
450
451
452
453
454
    @param phy_vars_ue PHY variables
    @param UE_id Index of UE
    @param frame Index of frame
    @param subframe Index of subframe
    @param UE_tx_power_dB estimated UE Tx power
    @returns -1 if updated list, 0 if calculated median
 */
double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE_id, frame_t frameP, sub_frame_t subframeP, int32_t UE_tx_power_dB);
#endif
455
LTE_eNB_UE_stats* get_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti);
456

knopp's avatar
knopp committed
457
458


459
460
LTE_DL_FRAME_PARMS *get_lte_frame_parms(module_id_t Mod_id, uint8_t CC_id);

461
MU_MIMO_mode* get_mu_mimo_mode (module_id_t Mod_id, uint8_t CC_id, rnti_t rnti);
462

463
464
int16_t get_hundred_times_delta_IF(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t harq_pid);

465
int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor);
466
467
468

int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);

knopp's avatar
knopp committed
469
470
int16_t get_target_pusch_rx_power(module_id_t module_idP, uint8_t CC_id);
int16_t get_target_pucch_rx_power(module_id_t module_idP, uint8_t CC_id);
471

knopp's avatar
   
knopp committed
472
int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, uint8_t subframe,uint8_t *harq_pid,uint8_t *round,uint8_t ul_flag);
473

474
475
476
477
void dump_dlsch(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid);
void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round);
478

479
/*@}*/
480
481
482
483
484


#endif