Initial commit for Bronze release
[o-du/l2.git] / src / 5gnrmac / fapi_interface.h
1 /******************************************************************************\r
2 *   Copyright 2017 Cisco Systems, Inc.\r
3 *   Copyright (c) 2019 Intel.\r
4 *\r
5 *   Licensed under the Apache License, Version 2.0 (the "License");\r
6 *   you may not use this file except in compliance with the License.\r
7 *   You may obtain a copy of the License at\r
8 *\r
9 *       http://www.apache.org/licenses/LICENSE-2.0\r
10 *\r
11 *   Unless required by applicable law or agreed to in writing, software\r
12 *   distributed under the License is distributed on an "AS IS" BASIS,\r
13 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14 *   See the License for the specific language governing permissions and\r
15 *   limitations under the License.\r
16 *\r
17 *******************************************************************************/\r
18 // This file has been modified by Intel in order to support 5G FAPI:PHY API Specification\r
19 // Document 222.10.01 dated June 2019\r
20 // Changes made by luis.farias@intel.com\r
21 \r
22 #ifndef _FAPI_INTERFACE_H_\r
23 #define _FAPI_INTERFACE_H_\r
24 \r
25 #if defined(__cplusplus)\r
26 extern "C" {\r
27 #endif\r
28 \r
29 typedef signed char             int8_t;\r
30 typedef unsigned char   uint8_t;\r
31 typedef int16_t int16_t;\r
32 typedef uint16_t        uint16_t;\r
33 typedef int32_t         int32_t;\r
34 typedef uint32_t        uint32_t;\r
35 \r
36 // Update for 5G FAPI\r
37 #define FAPI_PARAM_REQUEST                                                                      0x00\r
38 #define FAPI_PARAM_RESPONSE                                                                     0x01\r
39 #define FAPI_CONFIG_REQUEST                                                                     0x02\r
40 #define FAPI_CONFIG_RESPONSE                                                            0x03\r
41 #define FAPI_START_REQUEST                                                                      0x04\r
42 #define FAPI_STOP_REQUEST                                                                       0x05\r
43 #define FAPI_STOP_INDICATION                                                            0x06\r
44 #define FAPI_ERROR_INDICATION                               0x07\r
45 // Reserved 0x08 - 0x7f\r
46 #define FAPI_DL_TTI_REQUEST                                                             0x80\r
47 #define FAPI_UL_TTI_REQUEST                                                             0x81\r
48 #define FAPI_SLOT_INDICATION                                                            0x82\r
49 #define FAPI_UL_DCI_REQUEST                                                             0x83\r
50 #define FAPI_TX_DATA_REQUEST                                                            0x84\r
51 #define FAPI_RX_DATA_INDICATION                                                         0x85\r
52 #define FAPI_CRC_INDICATION                                                             0x86\r
53 #define FAPI_UCI_INDICATION                                                             0x87\r
54 #define FAPI_SRS_INDICATION                                                             0x88\r
55 #define FAPI_RACH_INDICATION                                                            0x89\r
56 // Reserved 0x8a -0xff\r
57 \r
58 \r
59 \r
60 // Tags per 5G FAPI\r
61 // Cell Parameters\r
62 #define FAPI_RELEASE_CAPABILITY_TAG                                             0x0001\r
63 #define FAPI_PHY_STATE_TAG                                                  0x0002\r
64 #define FAPI_SKIP_BLANK_DL_CONFIG_TAG                                           0x0003\r
65 #define FAPI_SKIP_BLANK_UL_CONFIG_TAG                                   0x0004\r
66 #define FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG                         0x0005\r
67 #define FAPI_CYCLIC_PREFIX_TAG                              0x0006\r
68 // PDCCH Parameters\r
69 #define FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG                    0x0007\r
70 #define FAPI_SUPPORTED_BANDWIDTH_DL_TAG                                     0x0008\r
71 #define FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG                        0x0009\r
72 #define FAPI_SUPPORTED_BANDWIDTH_UL_TAG                                         0x000A\r
73 #define FAPI_CCE_MAPPING_TYPE_TAG                                               0x000B\r
74 #define FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG      0x000c                                                  \r
75 #define FAPI_PRECODER_GRANULARITY_CORESET_TAG                           0x000d\r
76 #define FAPI_PDCCH_MU_MIMO_TAG                                                          0x000e\r
77 #define FAPI_PDCCH_PRECODER_CYCLING_TAG                                     0x000f\r
78 #define FAPI_MAX_PDCCHS_PER_SLOT_TAG                                    0x0010\r
79 // PUCCH Parameters\r
80 #define FAPI_PUCCH_FORMATS_TAG                                                  0x0011\r
81 #define FAPI_MAX_PUCCHS_PER_SLOT_TAG                                        0x0012\r
82 // PDSCH Parameters\r
83 #define FAPI_PDSCH_MAPPING_TYPE_TAG                                             0x0013\r
84 #define FAPI_PDSCH_ALLOCATION_TYPES_TAG                         0x0014\r
85 #define FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG                                       0x0015\r
86 #define FAPI_PDSCH_CBG_TAG                                                          0x0016\r
87 #define FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG                                        0x0017\r
88 #define FAPI_PDSCH_DMRS_MAX_LENGTH_TAG                                          0x0018\r
89 #define FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG                                      0x0019\r
90 #define FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG                                        0x001a\r
91 #define FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG                           0x001b\r
92 #define FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG                  0x001c                                              \r
93 #define FAPI_MAX_MU_MIMO_USERS_DL_TAG                                           0x001d\r
94 #define FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG                                 0x001e\r
95 #define FAPI_PREMPTIONSUPPORT_TAG                                                       0x001f\r
96 #define FAPI_PDSCH_NON_SLOT_SUPPORT_TAG                                     0x0020\r
97 // PUSCH Parameters\r
98 #define FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG                             0x0021\r
99 #define FAPI_UCI_ONLY_PUSCH_TAG                                         0x0022\r
100 #define FAPI_PUSCH_FREQUENCY_HOPPING_TAG                                    0x0023\r
101 #define FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG                                0x0024\r
102 #define FAPI_PUSCH_DMRS_MAX_LEN_TAG                                             0x0025\r
103 #define FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG                                  0x0026\r
104 #define FAPI_PUSCH_CBG_TAG                                  0x0027\r
105 #define FAPI_PUSCH_MAPPING_TYPE_TAG                         0x0028\r
106 #define FAPI_PUSCH_ALLOCATION_TYPES_TAG                     0x0029\r
107 #define FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG                   0x002a\r
108 #define FAPI_PUSCH_MAX_PTRS_PORTS_TAG                       0x002b\r
109 #define FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG                   0x002c\r
110 #define FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG        0x002d\r
111 #define FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG              0x002e\r
112 #define FAPI_MAX_MU_MIMO_USERS_UL_TAG                       0x002f\r
113 #define FAPI_DFTS_OFDM_SUPPORT_TAG                          0x0030\r
114 #define FAPI_PUSCH_AGGREGATION_FACTOR_TAG                   0x0031\r
115 // PRACH Parameters\r
116 #define FAPI_PRACH_LONG_FORMATS_TAG                         0x0032\r
117 #define FAPI_PRACH_SHORT_FORMATS_TAG                        0x0033\r
118 #define FAPI_PRACH_RESTRICTED_SETS_TAG                      0x0034\r
119 #define FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG           0x0035\r
120 // Measurement Parameters\r
121 #define FAPI_RSSI_MEASUREMENT_SUPPORT_TAG                   0x0036\r
122 \r
123 // CONFIG TLV TAGS per 5G FAPI\r
124 // Carrier Configuration\r
125 #define FAPI_DL_BANDWIDTH_TAG                               0x1001\r
126 #define FAPI_DL_FREQUENCY_TAG                               0x1002\r
127 #define FAPI_DL_K0_TAG                                      0x1003\r
128 #define FAPI_DL_GRIDSIZE_TAG                                0x1004\r
129 #define FAPI_NUM_TX_ANT_TAG                                 0x1005\r
130 #define FAPI_UPLINK_BANDWIDTH_TAG                           0x1006\r
131 #define FAPI_UPLINK_FREQUENCY_TAG                           0x1007\r
132 #define FAPI_UL_K0_TAG                                      0x1008\r
133 #define FAPI_UL_GRID_SIZE_TAG                               0x1009\r
134 #define FAPI_NUM_RX_ANT_TAG                                 0x100a\r
135 #define FAPI_FREQUENCY_SHIFT_7P5_KHZ_TAG                    0x100b\r
136 // Cell Configuration\r
137 #define FAPI_PHY_CELL_ID_TAG                                0x100c\r
138 #define FAPI_FRAME_DUPLEX_TYPE_TAG                          0x100d\r
139 // SSB Configuration\r
140 #define FAPI_SS_PBCH_POWER_TAG                              0x100e\r
141 #define FAPI_BCH_PAYLOAD_TAG                                0x100f\r
142 #define FAPI_SCS_COMMON_TAG                                 0x1010\r
143 // PRACH Configuration\r
144 #define FAPI_PRACH_SEQUENCE_LENGTH_TAG                      0x1011\r
145 #define FAPI_PRACH_SUBC_SPACING_TAG                         0x1012\r
146 #define FAPI_RESTRICTED_SET_CONFIG_TAG                      0x1013\r
147 #define FAPI_NUM_PRACH_FD_OCCASIONS_TAG                     0x1014\r
148 #define FAPI_PRACH_ROOT_SEQUENCE_INDEX_TAG                  0x1015\r
149 #define FAPI_NUM_ROOT_SEQUENCES_TAG                         0x1016\r
150 #define FAPI_K1_TAG                                         0x1017\r
151 #define FAPI_PRACH_ZERO_CORR_CONF_TAG                       0x1018\r
152 #define FAPI_NUM_UNUSED_ROOT_SEQUENCES_TAG                  0x1019\r
153 #define FAPI_UNUSED_ROOT_SEQUENCES_TAG                      0x101a\r
154 #define FAPI_SSB_PER_RACH_TAG                               0x101b\r
155 #define FAPI_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG          0x101c\r
156 // SSB Table\r
157 #define FAPI_SSB_OFFSET_POINT_A_TAG                         0x101d\r
158 #define FAPI_BETA_PSS_TAG                                   0x101e\r
159 #define FAPI_SSB_PERIOD_TAG                                 0x101f\r
160 #define FAPI_SSB_SUBCARRIER_OFFSET_TAG                      0x1020\r
161 #define FAPI_MIB_TAG                                        0x1021\r
162 #define FAPI_SSB_MASK_TAG                                   0x1022\r
163 #define FAPI_BEAM_ID_TAG                                    0x1023\r
164 #define FAPI_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG        0x1024\r
165 #define FAPI_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG        0x1025\r
166 // TDD Table\r
167 #define FAPI_TDD_PERIOD_TAG                                 0x1026\r
168 #define FAPI_SLOT_CONFIG_TAG                                0x1027\r
169 // Measurement Configuration\r
170 #define FAPI_RSSI_MESUREMENT_TAG                            0x1028\r
171 \r
172 // Error Codes updated per 5G FAPI Table 3-31\r
173 #define FAPI_MSG_OK                                                                                     0x0\r
174 #define FAPI_MSG_INVALID_STATE                                                          0x1\r
175 #define FAPI_MSG_INVALID_CONFIG                                                         0x2\r
176 #define FAPI_MSG_SFN_OUT_OF_SYNC                                                        0x3\r
177 #define FAPI_MSG_SLOT_ERR                                                               0x4\r
178 #define FAPI_MSG_BCH_MISSING                                                            0x5\r
179 #define FAPI_MSG_INVALID_SFN                                                            0x6\r
180 #define FAPI_MSG_UL_DCI_ERR                                                                     0x7\r
181 #define FAPI_MSG_TX_ERR                                                                         0x8\r
182 \r
183 \r
184 // TODO : Work out what the correct maximums should be// Needs Review for 5G\r
185 #if 0\r
186 // Number of UL/DL configurations, I, as defined by 36.212 section 5.3.3.1.4\r
187 // todo : work out what the max is\r
188 #define FAPI_MAX_UL_DL_CONFIGURATIONS                                           4\r
189 #define FAPI_MAX_NUM_PHYSICAL_ANTENNAS                                          4\r
190 #define FAPI_MAX_NUM_SCHEDULED_UES                                                      8\r
191 #define FAPI_MAX_NUM_SUBBANDS                                                           8\r
192 #define FAPI_MAX_ANTENNA_PORT_COUNT                                                     2\r
193 #endif\r
194 \r
195 // 5G FAPI Definitions\r
196 #define NUMEROLOGIES                                        5\r
197 #define MAX_NUM_UNUSED_ROOT_SEQUENCES                       63 // 38.331 page 383\r
198 #define MAX_NUM_PRACH_FD_OCCASIONS                          64 // 38.331 page 383\r
199 #define MAX_NUM_OF_SYMBOLS_PER_SLOT                         14\r
200 #define MAX_TDD_PERIODICITY                                 160// 38.212 11.1 for u=4 and P=10 ms\r
201 #define MAX_NUMBER_TX_RUS                                   4  // m=p*q with p number of panels and q number of TxRU/RxRU per panel, depends on\r
202                                                                // the RF configuration, currently n=m=4, q=1, p=4 and k=21 (number of beams per pannel). n number of antenna ports\r
203 #define MAX_NUMBER_OF_BEAMS                                 64 // Intel API Page 27\r
204 #define MAX_NUM_ANT_PORTS                                   8  // Based on current RF\r
205 #define MAX_NUM_LAYERS                                      8  // 38.211 Table 7.3.1.3-1\r
206 #define MAX_NUM_TLVS_CELL_CONFIG                            2  // 5G FAPI Table 3-9  (A)\r
207 #define MAX_NUM_TLVS_CARRIER_CONFIG                         27 // 5G FAPI Table 3-10 (B)\r
208 #define MAX_NUM_TLVS_PDCCH_CONFIG                           6  // 5G FAPI Table 3-11 (C)\r
209 #define MAX_NUM_TLVS_PUCCH_CONFIG                           2  // 5G FAPI Table 3-12 (D)\r
210 #define MAX_NUM_TLVS_PDSCH_CONFIG                           14 // 5G FAPI Table 3-13 (E)\r
211 #define MAX_NUM_TLVS_PUSCH_CONFIG                           17 // 5G FAPI Table 3-14 (F)\r
212 #define MAX_NUM_TLVS_PRACH_CONFIG                           4  // 5G FAPI Table 3-15 (G)\r
213 #define MAX_NUM_TLVS_MEAS_CONFIG                            1  // 5G FAPI Table 3-16 (H)\r
214 #define MAX_NUM_TLVS_CONFIG                                 74 //  A+B+C+D+E+F+G+H + Padding\r
215 #define MAX_NUMBER_UNSUPPORTED_TLVS                         74     \r
216 #define MAX_NUMBER_OF_INVALID_IDLE_ONLY_TLVS                74\r
217 #define MAX_NUMBER_OF_INVALID_RUNNING_ONLY_TLVS             74\r
218 #define MAX_NUMBER_OF_MISSING_TLVS                          74\r
219 #define MAX_NUM_DIGBFINTERFACES                             4 // Based on RF, 5G FAPI says {0,255}         \r
220 #define MAX_NUM_PRGS_PER_TTI                                4 // Based on 38.214 5.1.2.3\r
221 #define DCI_PAYLOAD_BYTE_LEN                                32 // Based on Intel API MAX_DCI_BIT_BYTE_LEN     \r
222 #define MAX_NUMBER_DL_DCI                                   32 // Based on Intel API MAX_NUM_PDCCH                               \r
223 #define MAX_NUMBER_OF_CODEWORDS_PER_PDU                     2 // Based on MAX_DL_CODEWORD\r
224 #define MAX_NUMBER_DL_PDUS_PER_TTI                          129 // Based on (MAX_NUM_PDSCH*MAX_DL_CODEWORD + MAX_NUM_PDCCH + MAX_NUM_SRS + 1 PBCH/SLOT)                       \r
225 #define MAX_NUMBER_OF_UES_PER_TTI                           16  // Per common_ran_parameters.h                                            \r
226 #define MAX_NUM_CB_PER_TTI_IN_BYTES                         192 // Based on Max Tb size of 1376264 bits + 24 crc over (8848-24) and O/H\r
227 #define MAX_NUM_PTRS_PORTS                                  12  // Per 3GPP 38.212 Table 7.3.1.1.2-21\r
228 #define MAX_NUMBER_OF_GROUPS_PER_TTI                        8  // FlexRAN API Table 33\r
229 #define MAX_NUMBER_UL_PDUS_PER_TTI                          328 // (MAX_NUM_PUSCH+MAX_NUM_PUCCH+MAX_NUM_SRS+MAX_NUM_PRACH_DET)\r
230 #define MAX_NUMBER_DCI_PDUS_PER_TTI                         32 // Based on MAX_NUM_PDCCH\r
231 #define MAX_NUMBER_OF_TLVS_PER_PDU                          32 // Based on FAPI/nFAPI implementation\r
232 #define MAX_NUMBER_TX_PDUS_PER_TTI                          129 // Same as MAX_NUMBER_DL_PDUS_PER_TTI\r
233 #define MAX_PDU_LENGTH                                   172096 // Based on 38.214 5.1.3.4, the TBS is 1376264 bits and divided by 8 and aligned to 64 bytes\r
234 #define MAX_NUMBER_OF_PDUS_PER_TTI                          129 // Same as MAX_NUMBER_DL_PDUS_PER_TTI\r
235 #define MAX_NUMBER_OF_ULSCH_PDUS_PER_TTI                    64  // NUM_PUSCH_CHAN*MAX_NUMBER_OF_CODEWORDS_PER_PDU\r
236 #define MAX_NUMBER_OF_CRCS_PER_SLOT                         32  // Based on MAX_NUM_UL_CHAN                      \r
237 #define MAX_HARQ_INFO_LEN_BYTES                             214  // Based on 5G FAPI Table 3-70\r
238 #define MAX_CSI_PART1_DATA_BYTES                            214  // Based on 5G FAPI Table 3-71\r
239 #define MAX_CSI_PART2_DATA_BYTES                            214  // Based on 5G FAPI Table 3-72\r
240 #define MAX_NUMBER_OF_HARQS_PER_IND                         2    // Based on 5G FAPI Table 3-68\r
241 #define MAX_SR_PAYLOAD_SIZE                                 1    // Based on 5G FAPI Table 3-69\r
242 #define MAX_HARQ_PAYLOAD_SIZE                               214  // Based on 5G FAPI Table 3-70\r
243 #define MAX_NUMBER_UCI_PDUS_PER_SLOT                        200  // Based on MAX_NUM_PUCCH\r
244 #define MAX_NUMBER_RBS                                      273  // Based on MAX_NUM_OF_PRB_IN_FULL_BAND\r
245 #define MAX_NUMBER_OF_REP_SYMBOLS                           4    // Based on 5g FAPI Table 3-73\r
246 #define MAX_NUMBER_SRS_PDUS_PER_SLOT                        32   // Based on MAX_NUM_SRS\r
247 #define MAX_NUM_PREAMBLES_PER_SLOT                          64   // Based on MAX_NUM_PRACH_DET\r
248 #define MAX_NUMBER_RACH_PDUS_PER_SLOT                       64   // Based on MAX_NUM_PRACH_DET\r
249 \r
250 // Updated per 5G FAPI\r
251 typedef struct {\r
252     uint8_t                     numberOfMessagesIncluded;\r
253     uint8_t                     handle;   // Can be used for Phy Id or Carrier Id\r
254 } fapi_msg_header_t;\r
255 // Updated per 5G FAPI\r
256 typedef struct {\r
257         uint8_t                     message_type_id;\r
258         uint32_t                    length; // Length of the message body in bytes\r
259 } fapi_msg_t;\r
260 // Updated per 5G FAPI\r
261 typedef struct {\r
262         uint16_t                    tag;\r
263         uint16_t                    length;\r
264 } fapi_tl_t;\r
265 // Updated per 5G FAPI\r
266 typedef struct {\r
267     fapi_tl_t                   tl;\r
268     uint8_t                     value;\r
269 } fapi_uint8_tlv_t;\r
270 // Updated per 5G FAPI\r
271 typedef struct {\r
272     fapi_tl_t                   tl;\r
273     uint16_t                    value;\r
274 } fapi_uint16_tlv_t;\r
275 // Updated per 5G FAPI\r
276 typedef struct {\r
277     fapi_tl_t                   tl;\r
278     int16_t                     value;\r
279 } fapi_int16_tlv_t;\r
280 // Updated per 5G FAPI\r
281 typedef struct {\r
282     fapi_tl_t                   tl;\r
283     uint32_t                    value;\r
284 } fapi_uint32_tlv_t;\r
285 // Updated per 5G FAPI\r
286 typedef struct {\r
287     uint16_t                    tag;                // In 5G FAPI for Cell Params\r
288     uint8_t                     length;\r
289     uint8_t                     value;\r
290 } fapi_config_tlv_t;\r
291     \r
292 // Updated per 5G FAPI\r
293 typedef struct {\r
294         fapi_msg_t                  header;  // For PARAM.req message length in fapi_msg_t is zero\r
295 } fapi_param_req_t;\r
296 \r
297 // Updated per 5G FAPI\r
298 typedef struct {\r
299     fapi_uint16_tlv_t           releaseCapability;\r
300     fapi_uint16_tlv_t           phyState;\r
301     fapi_uint8_tlv_t            skipBlankDlConfig;\r
302     fapi_uint8_tlv_t            skipBlankUlConfig;\r
303     fapi_uint16_tlv_t           numTlvsToReport;\r
304     //fapi_param_tlv_t            tlvStatus[MAX_NUMBER_OF_CONFIG_PARMS];          // Need to define this value based on 5G FAPI\r
305 } fapi_cell_parms_t;\r
306 \r
307 // Updated per 5G FAPI\r
308 typedef struct {\r
309     fapi_uint8_tlv_t            cyclicPrefix;\r
310     fapi_uint8_tlv_t            supportedSubcarrierSpacingDl;\r
311     fapi_uint16_tlv_t           supportedBandwidthDl;\r
312     fapi_uint8_tlv_t            supportedSubcarrierSpecingsUl;\r
313     fapi_uint16_tlv_t           supportedBandwidthUl;\r
314 }   fapi_carrier_parms_t;\r
315 \r
316 // Updated per 5G FAPI    \r
317 typedef struct {\r
318     fapi_uint8_tlv_t            cceMappingType;\r
319     fapi_uint8_tlv_t            coresetOutsideFirst3OfdmSymsOfSlot;\r
320     fapi_uint8_tlv_t            precoderGranularityCoreset;\r
321     fapi_uint8_tlv_t            pdcchMuMimo;\r
322     fapi_uint8_tlv_t            pdcchPrecoderCycling;\r
323     fapi_uint8_tlv_t            maxPdcchsPerSlot;\r
324 }   fapi_pdcch_parms_t;\r
325 \r
326 // Updated per 5G FAPI\r
327 typedef struct {\r
328     fapi_uint8_tlv_t            pucchFormats;\r
329     fapi_uint8_tlv_t            maxPucchsPerSlot;\r
330 }   fapi_pucch_parms_t;\r
331 \r
332 // Updated per 5G FAPI\r
333 typedef struct {\r
334     fapi_uint8_tlv_t            pdschMappingType;\r
335     fapi_uint8_tlv_t            pdschAllocationTypes;\r
336     fapi_uint8_tlv_t            pdschVrbToPrbMapping;\r
337     fapi_uint8_tlv_t            pdschCbg;\r
338     fapi_uint8_tlv_t            pdschDmrsConfigTypes;\r
339     fapi_uint8_tlv_t            pdschDmrsMaxLength;\r
340     fapi_uint8_tlv_t            pdschDmrsAdditionalPos;\r
341     fapi_uint8_tlv_t            maxPdschsTBsPerSlot;\r
342     fapi_uint8_tlv_t            maxNumberMimoLayersPdsch;\r
343     fapi_uint8_tlv_t            supportedMaxModulationOrderDl;\r
344     fapi_uint8_tlv_t            maxMuMimoUsersDl;\r
345     fapi_uint8_tlv_t            pdschDataInDmrsSymbols;\r
346     fapi_uint8_tlv_t            premptionSupport;\r
347     fapi_uint8_tlv_t            pdschNonSlotSupport;\r
348 }   fapi_pdsch_parms_t;\r
349 \r
350 // Updated per 5G FAPI\r
351 typedef struct {\r
352     fapi_uint8_tlv_t            uciMuxUlschInPusch;\r
353     fapi_uint8_tlv_t            uciOnlyPusch;\r
354     fapi_uint8_tlv_t            puschFrequencyHopping;\r
355     fapi_uint8_tlv_t            puschDmrsConfigTypes;\r
356     fapi_uint8_tlv_t            puschDmrsMaxLen;\r
357     fapi_uint8_tlv_t            puschDmrsAditionalPos;\r
358     fapi_uint8_tlv_t            puschCbg;\r
359     fapi_uint8_tlv_t            puschMappingType;     \r
360     fapi_uint8_tlv_t            puschAllocationTypes;\r
361     fapi_uint8_tlv_t            puschVrbToPrbMapping;\r
362     fapi_uint8_tlv_t            puschMaxPtrsPorts;\r
363     fapi_uint8_tlv_t            maxPduschsTBsPerSlot;\r
364     fapi_uint8_tlv_t            maxNumberMimoLayersnonCbPusch;\r
365     fapi_uint8_tlv_t            supportedModulationOrderUl;\r
366     fapi_uint8_tlv_t            maxMuMimoUsersUl;\r
367     fapi_uint8_tlv_t            dftsOfdmSupport;\r
368     fapi_uint8_tlv_t            puschAggregationFactor;\r
369 }   fapi_pusch_parms_t;\r
370 \r
371 // Updated per 5G FAPI\r
372 typedef struct {\r
373     fapi_uint8_tlv_t            prachLongFormats;\r
374     fapi_uint8_tlv_t            prachShortFormats;\r
375     fapi_uint8_tlv_t            prachRestrictedSets;\r
376     fapi_uint8_tlv_t            maxPrachFdOccasionsInASlot;\r
377 }   fapi_prach_parms_t;\r
378 \r
379 // Updated per 5G FAPI\r
380 typedef struct {\r
381     fapi_uint8_tlv_t            rssiMeasurementSupport;\r
382 }   fapi_meas_parms_t;\r
383 \r
384 // Updated per 5G FAPI\r
385 typedef struct {\r
386     fapi_cell_parms_t           cell_parms;\r
387     fapi_carrier_parms_t        carr_parms;\r
388     fapi_pdcch_parms_t          pdcch_parms;\r
389     fapi_pucch_parms_t          pucch_parms;\r
390     fapi_pdsch_parms_t          pdsch_parms;\r
391     fapi_pusch_parms_t          pusch_parms;\r
392     fapi_prach_parms_t          prach_parms;\r
393     fapi_meas_parms_t           meas_parms;\r
394 } fapi_params_t;\r
395 \r
396 // Updated per 5G FAPI\r
397 typedef struct {\r
398         fapi_msg_t                  header;\r
399         uint8_t                     error_code;\r
400         uint8_t                     number_of_tlvs;\r
401     fapi_uint16_tlv_t           tlvs[MAX_NUM_TLVS_CONFIG];\r
402 } fapi_param_resp_t;\r
403 \r
404 // Updated per 5G FAPI\r
405 typedef struct {\r
406     fapi_uint16_tlv_t           dlBandwidth;\r
407     fapi_uint32_tlv_t           dlFrequency;\r
408     fapi_uint16_tlv_t           dlk0[NUMEROLOGIES];\r
409     fapi_uint16_tlv_t           dlGridSize[NUMEROLOGIES];\r
410     fapi_uint16_tlv_t           numTxAnt;\r
411     fapi_uint16_tlv_t           uplinkBandwidth;\r
412     fapi_uint32_tlv_t           uplinkFrequency;\r
413     fapi_uint16_tlv_t           ulk0[NUMEROLOGIES];\r
414     fapi_uint16_tlv_t           ulGridSize[NUMEROLOGIES];\r
415     fapi_uint16_tlv_t           numRxAnt;\r
416     fapi_uint8_tlv_t            frequencyShift7p5KHz;\r
417 } fapi_carrier_config_t;\r
418 \r
419 // Updated per 5G FAPI\r
420 typedef struct {\r
421     fapi_uint8_tlv_t            phyCellId;\r
422     fapi_uint8_tlv_t            frameDuplexType;\r
423 } fapi_cell_config_t;\r
424 \r
425 // Updated per 5G FAPI\r
426 typedef struct {\r
427     fapi_uint32_tlv_t           ssPbchPower;\r
428     fapi_uint8_tlv_t            bchPayload;\r
429     fapi_uint8_tlv_t            scsCommon;\r
430 } fapi_ssb_config_t;\r
431 \r
432 // Updated per 5G FAPI\r
433 typedef struct {\r
434     fapi_uint16_tlv_t           prachRootSequenceIndex;\r
435     fapi_uint8_tlv_t            numRootSequences;\r
436     fapi_uint8_tlv_t            unusedRootSequences[MAX_NUM_UNUSED_ROOT_SEQUENCES];\r
437 } fapi_prachFdOccasion_t;\r
438 \r
439 // Updated per 5G FAPI\r
440 typedef struct {\r
441     fapi_uint8_tlv_t            prachSequenceLength;\r
442     fapi_uint8_tlv_t            prachSubCSpacing;\r
443     fapi_uint8_tlv_t            restrictedSetConfig;\r
444     fapi_prachFdOccasion_t      prachFdOccasion[MAX_NUM_PRACH_FD_OCCASIONS];\r
445     fapi_uint8_tlv_t            ssbPerRach;\r
446     fapi_uint8_tlv_t            prachMultipleCarriersInABand;\r
447 } fapi_prach_configuration_t;\r
448 \r
449 //Updated per 5G FAPI\r
450 typedef struct {\r
451     fapi_uint16_tlv_t           ssbOffsetPointA;\r
452     fapi_uint8_tlv_t            betaPss;\r
453     fapi_uint8_tlv_t            ssbPeriod;\r
454     fapi_uint8_tlv_t            ssbSubCarrierOffset;\r
455     fapi_uint32_tlv_t           mib;\r
456     fapi_uint32_tlv_t           ssbMask[2];\r
457     fapi_uint8_tlv_t            beamId[64];\r
458     fapi_uint8_tlv_t            ssPbchMultipleCarriersInABand;\r
459     fapi_uint8_tlv_t            multipleCellsSsPbchInACarrier;\r
460 } fapi_ssb_table_t;\r
461 \r
462 // Updated per 5G FAPI\r
463 typedef struct {\r
464     fapi_uint8_tlv_t            slotConfig[MAX_NUM_OF_SYMBOLS_PER_SLOT];\r
465 } fapi_slotconfig_t;\r
466 \r
467 // Updated per 5G FAPI\r
468 typedef struct {\r
469     fapi_uint8_tlv_t            tddPeriod;\r
470     fapi_slotconfig_t           slotConfig[MAX_TDD_PERIODICITY];\r
471 } fapi_tdd_table_t;\r
472 \r
473 // Updated per 5G FAPI\r
474 typedef struct {\r
475     fapi_uint8_tlv_t            rssiMeasurement;\r
476 } fapi_meas_config_t;\r
477 \r
478 // Updated per 5G FAPI\r
479 typedef struct {\r
480     int16_t                     digBeamWeightRe;\r
481     int16_t                     digBeamWeightIm;\r
482 } fapi_dig_beam_weight_t;\r
483 \r
484 // Updated per 5G FAPI\r
485 typedef struct {\r
486     uint16_t                    beamIdx;\r
487     fapi_dig_beam_weight_t      digBeamWeight[MAX_NUMBER_TX_RUS];\r
488 } fapi_dig_beam_config_t;\r
489 \r
490 // Updated per 5G FAPI\r
491 typedef struct {\r
492     uint16_t                    numDigBeams;\r
493     uint16_t                    numTxRus;\r
494     fapi_dig_beam_config_t      digBeam[MAX_NUMBER_OF_BEAMS];\r
495 } fapi_beamforming_table_t;\r
496 \r
497 // Updated per 5G FAPI\r
498 typedef struct {\r
499     int16_t                     preCoderWeightRe;\r
500     int16_t                     preCoderWeightIm;\r
501 } fapi_precoderWeight_t;\r
502 \r
503 // Updated per 5G FAPI\r
504 typedef struct {\r
505     fapi_precoderWeight_t       precoder_weight[MAX_NUM_ANT_PORTS];\r
506 } fapi_precoder_weight_t;\r
507 \r
508 // Updated per 5G FAPI\r
509 typedef struct {\r
510     uint16_t                    pmIdx;\r
511     uint16_t                    numLayers;\r
512     uint16_t                    numAntPorts;\r
513     fapi_precoder_weight_t      precoderWeight[MAX_NUM_LAYERS];\r
514 } fapi_precoding_table_t;\r
515 \r
516 // Updated per 5G FAPI\r
517 typedef struct {\r
518     fapi_carrier_config_t       carrierConfig;\r
519     fapi_cell_config_t          cellConfig;\r
520     fapi_ssb_config_t           ssbConfig; \r
521     //fapi_prach_config_t         prachConfig;    //To be defined\r
522     fapi_ssb_table_t            ssbTable;\r
523     fapi_tdd_table_t            tddTable;\r
524     fapi_meas_config_t          measConfig;\r
525     fapi_beamforming_table_t    beamformingTable;\r
526     fapi_precoding_table_t      precodingTable;\r
527  } fapi_config_t;\r
528 \r
529 // Updated per 5G FAPI \r
530 typedef struct {\r
531         fapi_msg_t                  header;\r
532         uint8_t                     number_of_tlvs;\r
533     fapi_uint16_tlv_t           tlvs[MAX_NUM_TLVS_CONFIG];\r
534 } fapi_config_req_t;\r
535 \r
536 // Updated per 5G FAPI\r
537 typedef struct {\r
538         fapi_msg_t                  header;\r
539         uint8_t                     error_code;\r
540         uint8_t                     number_of_invalid_tlvs;\r
541     uint8_t                     number_of_inv_tlvs_idle_only;\r
542     uint8_t                     number_of_missing_tlvs;\r
543     fapi_uint16_tlv_t           tlvs[4*MAX_NUM_TLVS_CONFIG];\r
544  //   fapi_uint16_tlv_t           unsupported_or_invalid_tlvs[MAX_NUMBER_UNSUPPORTED_TLVS];\r
545  //   fapi_uint16_tlv_t           invalid_idle_only_tlvs[MAX_NUMBER_OF_INVALID_IDLE_ONLY_TLVS];\r
546  //   fapi_uint16_tlv_t           invalid_running_only_tlvs[MAX_NUMBER_OF_INVALID_RUNNING_ONLY_TLVS];\r
547  //   fapi_uint16_tlv_t           missing_tlvs[MAX_NUMBER_OF_MISSING_TLVS];\r
548 } fapi_config_resp_t;\r
549 \r
550 // Updated per 5G FAPI\r
551 typedef struct {\r
552         fapi_msg_t                  header;  // Message Length is zero for START.request\r
553 } fapi_start_req_t;\r
554 \r
555 // Updated per 5G FAPI\r
556 typedef struct {\r
557         fapi_msg_t                  header;  // Message Length is zero for STOP.request\r
558 } fapi_stop_req_t;\r
559 \r
560 // Updated per 5G FAPI\r
561 typedef struct {\r
562         fapi_msg_t                  header; // Message Length is zero for STOP.indication\r
563 } fapi_stop_ind_t;\r
564 \r
565 // Updated per 5G FAPI\r
566 typedef struct {\r
567         fapi_msg_t                  header;\r
568     uint16_t                    sfn;\r
569     uint16_t                    slot;\r
570         uint8_t                     message_id;\r
571         uint8_t                     error_code;\r
572 } fapi_error_ind_t;\r
573 \r
574 // Updated per 5G FAPI\r
575 typedef struct {\r
576         fapi_msg_t                  header;\r
577         uint16_t                    sfn;\r
578     uint16_t                    slot;\r
579 } fapi_slot_ind_t;\r
580 \r
581 // Updated per 5G FAPI\r
582 typedef struct {\r
583     uint16_t                    beamidx;\r
584 } fapi_bmi_t;\r
585 \r
586 // Updated per 5G FAPI\r
587 typedef struct {\r
588     uint16_t                    pmIdx;\r
589     fapi_bmi_t                  beamIdx[MAX_NUM_DIGBFINTERFACES];\r
590 } fapi_pmi_bfi_t;\r
591 \r
592 // Updated per 5G FAPI\r
593 typedef struct {   \r
594     uint16_t                    numPrgs;\r
595     uint16_t                    prgSize;\r
596     uint8_t                     digBfInterfaces;\r
597     fapi_pmi_bfi_t              pmi_bfi[MAX_NUM_PRGS_PER_TTI];\r
598 } fapi_precoding_bmform_t;\r
599 \r
600 // Updated per 5G FAPI\r
601 typedef struct {\r
602     uint16_t                    rnti;\r
603     uint16_t                    scramblingId;             \r
604     uint16_t                    scramblingRnti;\r
605     uint8_t                     cceIndex;\r
606     uint8_t                     aggregationLevel;\r
607     fapi_precoding_bmform_t     pc_and_bform;\r
608     uint8_t                     beta_pdcch_1_0;\r
609     uint8_t                     powerControlOfssetSS;\r
610     uint16_t                    payloadSizeBits;\r
611     uint8_t                     payload[DCI_PAYLOAD_BYTE_LEN];\r
612 } fapi_dl_dci_t;\r
613 \r
614 // Updated per 5G FAPI\r
615 typedef struct {\r
616     uint16_t                    bwpSize;\r
617     uint16_t                    bwpPart;\r
618     uint8_t                     subCarrierSpacing;\r
619     uint8_t                     cyclicPrefix;\r
620     uint8_t                     startSymbolIndex;\r
621     uint8_t                     durationSymbols;\r
622     uint8_t                     freqDomainResource[6];\r
623     uint8_t                     cceRegMappingType;\r
624     uint8_t                     regBundleSize;\r
625     uint8_t                     interleaverSize;\r
626     uint8_t                     coreSetSize;\r
627     uint16_t                    shiftIndex;                  \r
628     uint8_t                     precoderGranularity;\r
629     uint16_t                    numDlDci;\r
630     fapi_dl_dci_t*              dlDci;\r
631  } fapi_dl_pddch_pdu_t;\r
632  \r
633  // Updated per 5G FAPI\r
634  typedef struct {\r
635     uint16_t                    targetCodeRate;                     \r
636     uint8_t                     qamModOrder;\r
637     uint8_t                     mcsIndex;\r
638     uint8_t                     mcsTable;\r
639     uint8_t                     rvIndex;\r
640     uint32_t                    tbSize;\r
641  } fapi_codeword_pdu_t;\r
642  \r
643  // Updated per 5G FAPI\r
644  typedef struct {\r
645     uint16_t                    pduBitMap; \r
646     uint16_t                    rnti;\r
647     uint16_t                    pduIndex;\r
648     uint16_t                    bwpSize;\r
649     uint16_t                    bwpStart;\r
650     uint8_t                     subCarrierSpacing;\r
651     uint8_t                     cyclicPrefix;                   \r
652     uint8_t                     nrOfCodeWords;\r
653     fapi_codeword_pdu_t         cwInfo[MAX_NUMBER_OF_CODEWORDS_PER_PDU]; \r
654     uint16_t                    dataScramblingId;          \r
655     uint8_t                     nrOfLayers;\r
656     uint8_t                     transmissionScheme;\r
657     uint8_t                     refPoint;\r
658     uint16_t                    dlDmrsSymbPos;\r
659     uint8_t                     dmrsConfigType;\r
660     uint16_t                    dlDmrsScramblingId;\r
661     uint8_t                     scid;\r
662     uint8_t                     numDmrsCdmGrpsNoData;\r
663     uint16_t                    dmrsPorts;\r
664     uint8_t                     resourceAlloc;\r
665     uint8_t                     rbBitmap;\r
666     uint16_t                    rbStart;\r
667     uint16_t                    rbSize;\r
668     uint8_t                     vrbToPrbMapping;\r
669     uint8_t                     startSymbIndex;\r
670     uint8_t                     nrOfSymbols;\r
671     uint8_t                     ptrsPortIndex;\r
672     uint8_t                     ptrsTimeDensity;\r
673     uint8_t                     ptrsFreqDensity;\r
674     uint8_t                     ptrsReOffset;\r
675     uint8_t                     nEpreRatioOfPdschToPtrs;\r
676     fapi_precoding_bmform_t     preCodingAndBeamforming;\r
677     uint8_t                     powerControlOffset;             \r
678     uint8_t                     powerControlOffsetSS;\r
679     uint8_t                     isLastCbPresent;\r
680     uint8_t                     isInlineTbCrc;\r
681     uint32_t                    dlTbCrc;\r
682  } fapi_dl_pdsch_pdu_t;\r
683  \r
684  // Updated per 5G FAPI\r
685  typedef struct {\r
686     uint16_t                    bwpSize;\r
687     uint16_t                    bwpStart;\r
688     uint8_t                     subCarrierSpacing;\r
689     uint8_t                     cyclicPrefix;\r
690     uint16_t                    startRb;\r
691     uint16_t                    nrOfRbs;\r
692     uint8_t                     csiType;\r
693     uint8_t                     row;\r
694     uint16_t                    freqDomain;\r
695     uint8_t                     symbL0;\r
696     uint8_t                     symbL1;\r
697     uint8_t                     cdmType;               \r
698     uint8_t                     freqDensity;\r
699     uint16_t                    scramId;\r
700     uint8_t                     powerControlOffset;\r
701     uint8_t                     powerControlOffsetSs;\r
702     fapi_precoding_bmform_t     preCodingAndBeamforming;\r
703  } fapi_dl_csi_rs_pdu_t;\r
704 \r
705 // Updated per 5G FAPI \r
706  typedef struct {\r
707     uint8_t                     dmrsTypeAPosition;\r
708     uint8_t                     pdcchConfigSib1;\r
709     uint8_t                     cellBarred;\r
710     uint8_t                     intraFreqReselction;\r
711  } fapi_phy_mib_pdu_t;\r
712 \r
713 // Updated per 5G FAPI \r
714  typedef struct {\r
715     union\r
716     {\r
717         uint32_t                bchPayload;\r
718         fapi_phy_mib_pdu_t      phyMibPdu;\r
719     };\r
720  } fapi_bch_payload_t;\r
721  \r
722  // Updated per 5G FAPI\r
723  typedef struct {\r
724     \r
725     uint16_t                    physCellId;\r
726     uint8_t                     betaPss;\r
727     uint8_t                     ssbBlockIndex;\r
728     uint16_t                    ssbSubCarrierOffset;\r
729     uint8_t                     ssbOffsetPointA;\r
730     uint8_t                     bchPayloadFlag;\r
731     fapi_bch_payload_t          bchPayload;\r
732     fapi_precoding_bmform_t     preCodingAndBeamforming;\r
733  }  fapi_dl_ssb_pdu_t;\r
734  \r
735 // Updated per 5G FAPI\r
736  typedef struct {\r
737     uint16_t                    pduType;\r
738     uint16_t                    pduSize;\r
739     union\r
740     {\r
741      fapi_dl_pddch_pdu_t        pdcch_pdu;\r
742      fapi_dl_pdsch_pdu_t        pdsch_pdu;\r
743      fapi_dl_csi_rs_pdu_t       csi_rs_pdu;\r
744      fapi_dl_ssb_pdu_t          ssb_pdu;\r
745     };\r
746 } fapi_dl_tti_req_pdu_t;\r
747 \r
748 // Updated per 5G FAPI\r
749 typedef struct {\r
750     fapi_msg_t                  header;\r
751     uint16_t                    sfn;\r
752     uint16_t                    slot;\r
753     uint8_t                     nPdus;\r
754     uint8_t                     nGroup;\r
755     fapi_dl_tti_req_pdu_t*      pdus;\r
756 } fapi_dl_tti_req_t;\r
757 \r
758 // Updated per 5G FAPI\r
759 typedef struct {  \r
760     uint8_t                     physCellId;\r
761     uint8_t                     numPrachOcas;\r
762     uint8_t                     prachFormat;\r
763     uint8_t                     numRa;\r
764     uint8_t                     prachStartSymbol;\r
765     uint8_t                     numCs;\r
766     fapi_precoding_bmform_t     beamforming;\r
767 } fapi_ul_prach_pdu_t;\r
768 \r
769 // Updated per 5G FAPI\r
770 typedef struct {\r
771     uint8_t                     nUe;\r
772     uint8_t                     pduIdx[MAX_NUMBER_OF_UES_PER_TTI];\r
773 } fapi_ue_info_t;\r
774 \r
775 // Updated per 5G FAPI\r
776 typedef struct {\r
777     uint8_t                     rvIndex;\r
778     uint8_t                     harqProcessId;\r
779     uint8_t                     newDataIndicator;\r
780     uint32_t                    tbSize;\r
781     uint16_t                    numCb;\r
782     uint8_t                     cbPresentAndPosition[MAX_NUM_CB_PER_TTI_IN_BYTES];\r
783 }fapi_pusch_data_t;\r
784 \r
785 // Updated per 5G FAPI\r
786 typedef struct {\r
787     uint16_t                    harqAckBitLength;\r
788     uint16_t                    csiPart1BitLength;\r
789     uint16_t                    csiPart2BitLength;\r
790     uint8_t                     alphaScaling;\r
791     uint8_t                     betaOffsetHarqAck;\r
792     uint8_t                     betaOffsetCsi1;\r
793     uint8_t                     betaOffsetCsi2;\r
794 } fapi_pusch_uci_t;\r
795 \r
796 // Updated per 5G FAPI\r
797 typedef struct {\r
798     uint16_t                    ptrsPortIndex;\r
799     uint8_t                     ptrsDmrsPort;\r
800     uint8_t                     ptrsReOffset;\r
801 } fapi_ptrs_info_t;\r
802 \r
803 // Updated per 5G FAPI\r
804 typedef struct {\r
805     uint8_t                     numPtrsPorts;\r
806     fapi_ptrs_info_t            ptrsInfo[MAX_NUM_PTRS_PORTS];\r
807     uint8_t                     ptrsTimeDensity;\r
808     uint8_t                     ptrsFreqDensity;\r
809     uint8_t                     ulPtrsPower;\r
810 } fapi_pusch_ptrs_t;\r
811 \r
812 // Updated per 5G FAPI\r
813 typedef struct {\r
814     uint8_t                     lowPaprGroupNumber;\r
815     uint16_t                    lowPaprSequenceNumber;     \r
816     uint8_t                     ulPtrsSampleDensity;\r
817     uint8_t                     ulPtrsTimeDensityTransformPrecoding;\r
818 } fapi_dfts_ofdm_t;\r
819 \r
820 // Updated per 5G FAPI\r
821 typedef struct { \r
822     uint16_t                    pduBitMap;\r
823     uint16_t                    rnti;\r
824     uint32_t                    handle;\r
825     uint16_t                    bwpSize;\r
826     uint16_t                    bwpStart;\r
827     uint8_t                     subCarrierSpacing;\r
828     uint8_t                     cyclicPrefix;\r
829     uint16_t                    targetCodeRate;\r
830     uint8_t                     qamModOrder;\r
831     uint8_t                     mcsIndex;\r
832     uint8_t                     mcsTable;\r
833     uint8_t                     transformPrecoding;\r
834     uint16_t                    dataScramblingId;\r
835     uint8_t                     nrOfLayers;\r
836     uint16_t                    ulDmrsSymbPos;\r
837     uint8_t                     dmrsConfigType;\r
838     uint16_t                    ulDmrsScramblingId;\r
839     uint8_t                     scid;\r
840     uint8_t                     numDmrsCdmGrpsNoData;\r
841     uint16_t                    dmrsPorts;\r
842     uint8_t                     resourceAlloc;\r
843     uint8_t                     rbBitmap[36];\r
844     uint16_t                    rbStart;\r
845     uint16_t                    rbSize;\r
846     uint8_t                     vrbToPrbMapping;\r
847     uint8_t                     frequencyHopping;\r
848     uint16_t                    txDirectCurrentLocation;\r
849     uint8_t                     uplinkFrequencyShift7p5khz;\r
850     uint8_t                     startSymbIndex;\r
851     uint8_t                     nrOfSymbols;\r
852     fapi_pusch_data_t           puschData;\r
853     fapi_pusch_uci_t            puschUci;\r
854     fapi_pusch_ptrs_t           puschPtrs;\r
855     fapi_dfts_ofdm_t            dftsOfdm;\r
856     fapi_precoding_bmform_t     beamforming;\r
857 } fapi_ul_pusch_pdu_t;\r
858 \r
859 // Updated per 5G FAPI\r
860 typedef struct {  \r
861     uint16_t                    rnti;\r
862     uint32_t                    handle;\r
863     uint16_t                    bwpSize;\r
864     uint16_t                    bwpStart;\r
865     uint8_t                     subCarrierSpacing;\r
866     uint8_t                     cyclicPrefix;\r
867     uint8_t                     formatType;\r
868     uint8_t                     multiSlotTxIndicator;\r
869     uint8_t                     pi2Bpsk;\r
870     uint16_t                    prbStart;\r
871     uint16_t                    prbSize;\r
872     uint8_t                     startSymbolIndex;\r
873     uint8_t                     nrOfSymbols;\r
874     uint8_t                     freqHopFlag;\r
875     uint16_t                    secondHopPrb;\r
876     uint8_t                     groupHopFlag;          \r
877     uint8_t                     sequenceHopFlag;\r
878     uint16_t                    hoppingId;\r
879     uint16_t                    initialCyclicShift;\r
880     uint16_t                    dataScramblingId;\r
881     uint8_t                     timeDomainOccIdx;\r
882     uint8_t                     preDftOccIdx;\r
883     uint8_t                     preDftOccLen;\r
884     uint8_t                     addDmrsFlag;\r
885     uint16_t                    dmrsScramblingId;\r
886     uint8_t                     dmrsCyclicShift;\r
887     uint8_t                     srFlag;\r
888     uint8_t                     bitLenHarq;\r
889     uint16_t                    bitLenCsiPart1;\r
890     uint16_t                    bitLenCsiPart2;\r
891     fapi_precoding_bmform_t     beamforming;\r
892 } fapi_ul_pucch_pdu_t;\r
893 \r
894 // Updated per 5G FAPI\r
895 typedef struct {\r
896     uint16_t                    rnti;\r
897     uint32_t                    handle;\r
898     uint16_t                    bwpsize;\r
899     uint16_t                    bwpstart;\r
900     uint8_t                     subCarrierSpacing;\r
901     uint8_t                     cyclicPrefix;\r
902     uint8_t                     numAntPorts;\r
903     uint8_t                     numSymbols;\r
904     uint8_t                     numRepetitions;\r
905     uint8_t                     timeStartPosition;\r
906     uint8_t                     configIndex;\r
907     uint16_t                    sequenceId;\r
908     uint8_t                     bandwidthIndex;\r
909     uint8_t                     combSize;             \r
910     uint8_t                     combOffset;\r
911     uint8_t                     cyclicShift;\r
912     uint8_t                     frequencyPosition;\r
913     uint8_t                     frequencyShift;\r
914     uint8_t                     frequencyHopping;\r
915     uint8_t                     groupOrSequenceHopping;\r
916     uint8_t                     resourceType;\r
917     uint16_t                    tSrs;\r
918     uint16_t                    tOffset;\r
919     fapi_precoding_bmform_t     beamforming;\r
920 } fapi_ul_srs_pdu_t;\r
921 \r
922 // Updated per 5G FAPI\r
923 typedef struct {\r
924     uint16_t                    pduType;\r
925     uint16_t                    pduSize;\r
926     union\r
927     {\r
928      fapi_ul_prach_pdu_t        prach_pdu;\r
929      fapi_ul_pusch_pdu_t        pusch_pdu;\r
930      fapi_ul_pucch_pdu_t        pucch_pdu;\r
931      fapi_ul_srs_pdu_t          srs_pdu;\r
932      //fapi_ul_rx_bmform_pdu_t    rx_beamforming_pdu;    //To be defined\r
933     };\r
934     fapi_ue_info_t              ueGrpInfo[MAX_NUMBER_OF_GROUPS_PER_TTI];\r
935 } fapi_ul_tti_req_pdu_t;\r
936 \r
937 // Updated per 5G FAPI\r
938 typedef struct {\r
939     fapi_msg_t                  header;\r
940     uint16_t                    sfn;\r
941     uint16_t                    slot;\r
942     uint8_t                     nPdus;\r
943     uint8_t                     rachPresent;\r
944     uint8_t                     nUlsch;\r
945     uint8_t                     nUlcch;\r
946     uint8_t                     nGroup;\r
947     fapi_ul_tti_req_pdu_t*      pdus;\r
948 } fapi_ul_tti_req_t;\r
949 \r
950 // Updated per 5G FAPI\r
951 typedef struct {\r
952     uint16_t                    pduType;\r
953     uint16_t                    pduSize;\r
954     //fapi_dl_pdcch_pdu_t         pdcchPduConfig;      //To be defined\r
955  } fapi_dci_pdu_t; \r
956 \r
957  // Updated per 5G FAPI\r
958 typedef struct {\r
959     fapi_msg_t                  header;\r
960     uint16_t                    sfn;\r
961     uint16_t                    slot;\r
962     uint8_t                     numPdus;\r
963     fapi_dci_pdu_t*             pdus;\r
964 } fapi_ul_dci_req_t;\r
965 \r
966 // Updated per 5G FAPI\r
967 typedef struct {\r
968     uint16_t                    pduLength;\r
969     uint16_t                    pduIndex;\r
970     uint32_t                    numTlvs;\r
971     fapi_uint32_tlv_t           tlvs[MAX_NUMBER_OF_TLVS_PER_PDU];\r
972 } fapi_tx_pdu_desc_t;\r
973 \r
974 // Updated per 5G FAPI\r
975 typedef struct {\r
976     fapi_msg_t                  header; \r
977     uint16_t                    sfn;\r
978     uint16_t                    slot;\r
979     uint16_t                    numPdus;\r
980     fapi_tx_pdu_desc_t*         pduDesc;\r
981 } fapi_tx_data_req_t;\r
982 \r
983 // Updated per 5G FAPI\r
984 typedef struct {\r
985     uint32_t                    handle;\r
986     uint16_t                    rnti;\r
987     uint8_t                     harqId;\r
988     uint16_t                    pduLength;\r
989     uint8_t                     ul_cqi;\r
990     uint16_t                    timingAdvance;\r
991     uint16_t                    rssi;\r
992     void*                       pduData;\r
993 } fapi_pdu_ind_info_t;\r
994  \r
995  // Updated per 5G FAPI\r
996 typedef struct {\r
997     fapi_msg_t                  header;\r
998     uint16_t                    sfn;\r
999     uint16_t                    slot;\r
1000     uint16_t                    numPdus;\r
1001     fapi_pdu_ind_info_t         pdus[MAX_NUMBER_OF_ULSCH_PDUS_PER_TTI];\r
1002 } fapi_rx_data_indication_t;\r
1003 \r
1004 // Updated per 5G FAPI\r
1005 typedef struct {\r
1006     uint32_t                    handle;\r
1007     uint16_t                    rnti;\r
1008     uint8_t                     harqId;\r
1009     uint8_t                     tbCrcStatus;\r
1010     uint16_t                    numCb;\r
1011     uint8_t                     cbCrcStatus[MAX_NUM_CB_PER_TTI_IN_BYTES];\r
1012     uint8_t                     ul_cqi;\r
1013     uint16_t                    timingAdvance;\r
1014     uint16_t                    rssi;\r
1015 } fapi_crc_ind_info_t;\r
1016 \r
1017 // Updated per 5G FAPI\r
1018 typedef struct {\r
1019     fapi_msg_t                  header; \r
1020     uint16_t                    sfn;\r
1021     uint16_t                    slot;\r
1022     uint16_t                    numCrcs;\r
1023     fapi_crc_ind_info_t         crc[MAX_NUMBER_OF_CRCS_PER_SLOT];\r
1024 } fapi_crc_ind_t;\r
1025 \r
1026 // Updated per 5G FAPI\r
1027 typedef struct {\r
1028    uint8_t                      harqCrc;\r
1029    uint16_t                     harqBitLen;\r
1030    uint8_t                      harqPayload[MAX_HARQ_INFO_LEN_BYTES];\r
1031 } fapi_harq_info_t;\r
1032 \r
1033 // Updated per 5G FAPI\r
1034 typedef struct {\r
1035     uint8_t                     csiPart1Crc;\r
1036     uint16_t                    csiPart1BitLen;\r
1037     uint8_t                     csiPart1Payload[MAX_CSI_PART1_DATA_BYTES];\r
1038 } fapi_csi_p1_info_t;\r
1039 \r
1040 // Updated per 5G FAPI\r
1041 typedef struct {\r
1042     uint8_t                     csiPart2Crc;\r
1043     uint16_t                    csiPart2BitLen;\r
1044     uint8_t                     csiPart2Payload[MAX_CSI_PART2_DATA_BYTES];\r
1045 } fapi_csi_p2_info_t;\r
1046 \r
1047 // Updated per 5G FAPI\r
1048 typedef struct {\r
1049     uint8_t                     pduBitmap;\r
1050     uint32_t                    handle;\r
1051     uint16_t                    rnti; \r
1052     uint8_t                     ul_cqi;\r
1053     uint16_t                    timingAdvance; \r
1054     uint16_t                    rssi;\r
1055 //    fapi_harq_info_t            harqInfo; // This is included if indicated by the pduBitmap\r
1056 //    fapi_csi_p1_info_t          csiPart1info;  // This is included if indicated by the pduBitmap\r
1057 //    fapi_csi_p2_info_t          csiPart2info;  // This is included if indicated by the pduBitmap\r
1058 } fapi_uci_o_pusch_t;\r
1059 \r
1060 // Updated per 5G FAPI\r
1061 typedef struct {\r
1062     uint8_t                     srIndication;\r
1063     uint8_t                     srConfidenceLevel;\r
1064 } fapi_sr_f0f1_info_t;\r
1065 \r
1066 // Updated per 5G FAPI\r
1067 typedef struct {\r
1068     uint8_t                     numHarq;\r
1069     uint8_t                     harqConfidenceLevel;\r
1070     uint8_t                     harqValue[MAX_NUMBER_OF_HARQS_PER_IND];\r
1071 } fapi_harq_f0f1_info_t;\r
1072 \r
1073 // Updated per 5G FAPI\r
1074 typedef struct {\r
1075     uint16_t                    srBitlen;\r
1076     uint8_t                     srPayload[MAX_SR_PAYLOAD_SIZE];\r
1077 } fapi_sr_f2f3f4_info_t;\r
1078 \r
1079 // Updated per 5G FAPI\r
1080 typedef struct {\r
1081     uint16_t                    harqCrc;\r
1082     uint16_t                    harqBitLen;\r
1083     uint8_t                     harqPayload[MAX_HARQ_PAYLOAD_SIZE];\r
1084 } fapi_harq_f2f3f4_info_t;\r
1085 \r
1086 // Updated per 5G FAPI\r
1087 typedef struct { \r
1088     uint8_t                     pduBitmap;\r
1089     uint32_t                    handle;\r
1090     uint16_t                    rnti;\r
1091     uint8_t                     pucchFormat;\r
1092     uint8_t                     ul_cqi;\r
1093     uint16_t                    timingAdvance;\r
1094     uint16_t                    rssi;\r
1095  //   fapi_sr_f2f3f4_info_t       srInfo; // This is included if indicated by the pduBitmap\r
1096  //   fapi_harq_f2f3f4_info_t     harqInfo; // This is included if indicated by the pduBitmap\r
1097  //   fapi_csi_p1_info_t          csiPart1Info; // This is included if indicated by the pduBitmap\r
1098  //   fapi_csi_p2_info_t          csiPart2Info; // This is included if indicated by the pduBitmap\r
1099 } fapi_uci_o_pucch_f2f3f4_t;\r
1100 \r
1101 // Updated per 5G FAPI\r
1102 typedef struct {\r
1103     uint8_t                     pduBitmap;\r
1104     uint32_t                    handle;\r
1105     uint16_t                    rnti;\r
1106     uint8_t                     pucchFormat;\r
1107     uint8_t                     ul_cqi;\r
1108     uint16_t                    timingAdvance;\r
1109     uint16_t                    rssi;\r
1110  //   fapi_sr_f0f1_info_t         srInfo;  // This is included if indicated by the pduBitmap\r
1111  //   fapi_harq_f0f1_info_t       harqInfo;  // This is included if indicated by the pduBitmap\r
1112 } fapi_uci_o_pucch_f0f1_t;\r
1113 \r
1114 // Updated per 5G FAPI\r
1115 typedef struct {\r
1116     uint16_t                    pduType;\r
1117     uint16_t                    pduSize;\r
1118     union \r
1119     {\r
1120      fapi_uci_o_pusch_t         uciPusch;\r
1121      fapi_uci_o_pucch_f0f1_t    uciPucchF0F1;\r
1122      fapi_uci_o_pucch_f2f3f4_t  uciPucchF2F3F4;\r
1123     };\r
1124 } fapi_uci_pdu_info_t;\r
1125 \r
1126 // Updated per 5G FAPI\r
1127 typedef struct {\r
1128     fapi_msg_t                  header;\r
1129     uint16_t                    sfn;\r
1130     uint16_t                    slot;\r
1131     uint16_t                    numUcis;\r
1132     fapi_uci_pdu_info_t         uciPdu[MAX_NUMBER_UCI_PDUS_PER_SLOT];\r
1133 } fapi_uci_indication_t;\r
1134 \r
1135 // Updated per 5G FAPI\r
1136 typedef struct {\r
1137     uint16_t                    numRbs;\r
1138     uint8_t                     rbSNR[MAX_NUMBER_RBS];\r
1139 } fapi_symb_snr_t;\r
1140 \r
1141 // Updated per 5G FAPI\r
1142 typedef struct {\r
1143     uint32_t                    handle;\r
1144     uint16_t                    rnti;\r
1145     uint16_t                    timingAdvance;\r
1146     uint8_t                     numSymbols;\r
1147     uint8_t                     wideBandSnr;\r
1148     uint8_t                     numReportedSymbols;\r
1149     fapi_symb_snr_t             symbSnr[MAX_NUMBER_OF_REP_SYMBOLS];\r
1150 } fapi_srs_pdu_t;\r
1151 \r
1152 // Updated per 5G FAPI\r
1153 typedef struct {\r
1154     fapi_msg_t                  header;\r
1155     uint16_t                    sfn;\r
1156     uint16_t                    slot;\r
1157     uint8_t                     numPdus;\r
1158     fapi_srs_pdu_t              srsPdus[MAX_NUMBER_SRS_PDUS_PER_SLOT];\r
1159 } fapi_srs_indication_t;\r
1160 \r
1161 // Updated per 5G FAPI\r
1162 typedef struct {\r
1163     uint8_t                     preambleIndex;\r
1164     uint16_t                    timingAdvance;\r
1165     uint32_t                    premblePwr;\r
1166 } fapi_preamble_info_t;\r
1167 \r
1168 // Updated per 5G FAPI\r
1169 typedef struct { \r
1170     uint16_t                    physCellId;\r
1171     uint8_t                     symbolIndex;\r
1172     uint8_t                     slotIndex;\r
1173     uint8_t                     freqIndex;\r
1174     uint8_t                     avgRssi;\r
1175     uint8_t                     avgSnr;\r
1176     uint8_t                     numPreamble;\r
1177     fapi_preamble_info_t        preambleInfo[MAX_NUM_PREAMBLES_PER_SLOT];  \r
1178 } fapi_rach_pdu_t;\r
1179 \r
1180 // Updated per 5G FAPI\r
1181 typedef struct {\r
1182     fapi_msg_t                  header;\r
1183     uint16_t                    sfn;\r
1184     uint16_t                    slot;\r
1185     uint8_t                     numPdus;\r
1186     fapi_rach_pdu_t             rachPdu[MAX_NUMBER_RACH_PDUS_PER_SLOT];\r
1187 } fapi_rach_indication_t;\r
1188 \r
1189 \r
1190 //------------------------------------------------------------------------------\r
1191 \r
1192 #if defined(__cplusplus)\r
1193 }\r
1194 #endif\r
1195 \r
1196 #endif\r