Convergence Layer for ODU-High and UE simulator communication
[o-du/l2.git] / src / fapi_cl / fapi_interface_ue_sim.h
1 // This file has been modified by Radisys in order to support 5G FAPI:PHY API Specification
2 // Document 222.10.01 dated June 2019
3 // Changes made by luis.farias@intel.com
4 // Document 222.10.03 dated May 2021
5
6 #include <stdint.h>
7
8 #ifndef _FAPI_INTERFACE_UE_SIM_H_
9 #define _FAPI_INTERFACE_UE_SIM_H_
10
11 #ifndef PACK_STRUCT
12 #define PACK_STRUCT                 __attribute__((packed)) // Packed compiler instruction.
13 #endif //PACK_STRUCT
14
15 #if defined(__cplusplus)
16 extern "C" {
17 #endif
18
19 typedef signed char     int8_t;
20 typedef unsigned char   uint8_t;
21 typedef int16_t int16_t;
22 typedef uint16_t    uint16_t;
23 typedef int32_t     int32_t;
24 typedef uint32_t    uint32_t;
25 #ifdef VZ_VERIPHY_INTEG
26 typedef uint64_t    uint64_t;
27 #endif
28
29 // Update for 5G FAPI
30 #define FAPI_PARAM_REQUEST                                  0x00
31 #define FAPI_PARAM_RESPONSE                                 0x01
32 #define FAPI_CONFIG_REQUEST                                 0x02
33 #define FAPI_CONFIG_RESPONSE                                0x03
34 #define FAPI_START_REQUEST                                  0x04
35 #ifdef FAPI_222_10_03
36 #define FAPI_START_RESPONSE                                 0x0108   //Ref: SCF-225
37 #endif
38 #define FAPI_STOP_REQUEST                                   0x05
39 #define FAPI_STOP_INDICATION                                0x06
40 #define FAPI_ERROR_INDICATION                               0x07
41 // Reserved 0x08 - 0x7f
42 #define FAPI_DL_TTI_REQUEST                                 0x80
43 #define FAPI_UL_TTI_REQUEST                                 0x81
44 #define FAPI_SLOT_INDICATION                                0x82
45 #define FAPI_UL_DCI_REQUEST                                 0x83
46 #define FAPI_TX_DATA_REQUEST                                0x84
47 #define FAPI_RX_DATA_INDICATION                             0x85
48 #define FAPI_CRC_INDICATION                                 0x86
49 #define FAPI_UCI_INDICATION                                 0x87
50 #define FAPI_SRS_INDICATION                                 0x88
51 #define FAPI_RACH_INDICATION                                0x89
52 // Reserved 0x8a -0xff
53 #ifdef FAPI_222_10_03
54 #define FAPI_DL_NODE_SYNC                                   0x0180   //Ref: SCF-225
55 #define FAPI_UL_NODE_SYNC                                   0x0181   //Ref: SCF-225
56 #define FAPI_TIMING_INFO                                    0x0182   //Ref: SCF-225
57 #endif
58 // Tags per 5G FAPI
59 // Cell Parameters
60 #define FAPI_RELEASE_CAPABILITY_TAG                         0x0001
61 #define FAPI_PHY_STATE_TAG                                  0x0002
62 #define FAPI_SKIP_BLANK_DL_CONFIG_TAG                       0x0003
63 #define FAPI_SKIP_BLANK_UL_CONFIG_TAG                       0x0004
64 #define FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG             0x0005
65 #define FAPI_CYCLIC_PREFIX_TAG                              0x0006
66 // PDCCH Parameters
67 #define FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG            0x0007
68 #define FAPI_SUPPORTED_BANDWIDTH_DL_TAG                     0x0008
69 #define FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG            0x0009
70 #define FAPI_SUPPORTED_BANDWIDTH_UL_TAG                     0x000A
71 #define FAPI_CCE_MAPPING_TYPE_TAG                           0x000B
72 #define FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG  0x000c
73 #define FAPI_PRECODER_GRANULARITY_CORESET_TAG               0x000d
74 #define FAPI_PDCCH_MU_MIMO_TAG                              0x000e
75 #define FAPI_PDCCH_PRECODER_CYCLING_TAG                     0x000f
76 #define FAPI_MAX_PDCCHS_PER_SLOT_TAG                        0x0010
77 // PUCCH Parameters
78 #define FAPI_PUCCH_FORMATS_TAG                              0x0011
79 #define FAPI_MAX_PUCCHS_PER_SLOT_TAG                        0x0012
80 // PDSCH Parameters
81 #define FAPI_PDSCH_MAPPING_TYPE_TAG                         0x0013
82 #define FAPI_PDSCH_ALLOCATION_TYPES_TAG                     0x0014
83 #define FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG                   0x0015
84 #define FAPI_PDSCH_CBG_TAG                                  0x0016
85 #define FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG                    0x0017
86 #define FAPI_PDSCH_DMRS_MAX_LENGTH_TAG                      0x0018
87 #define FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG                  0x0019
88 #define FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG                    0x001a
89 #define FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG               0x001b
90 #define FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG          0x001c
91 #define FAPI_MAX_MU_MIMO_USERS_DL_TAG                       0x001d
92 #define FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG                 0x001e
93 #define FAPI_PREMPTIONSUPPORT_TAG                           0x001f
94 #define FAPI_PDSCH_NON_SLOT_SUPPORT_TAG                     0x0020
95 // PUSCH Parameters
96 #define FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG                     0x0021
97 #define FAPI_UCI_ONLY_PUSCH_TAG                             0x0022
98 #define FAPI_PUSCH_FREQUENCY_HOPPING_TAG                    0x0023
99 #define FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG                    0x0024
100 #define FAPI_PUSCH_DMRS_MAX_LEN_TAG                         0x0025
101 #define FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG                  0x0026
102 #define FAPI_PUSCH_CBG_TAG                                  0x0027
103 #define FAPI_PUSCH_MAPPING_TYPE_TAG                         0x0028
104 #define FAPI_PUSCH_ALLOCATION_TYPES_TAG                     0x0029
105 #define FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG                   0x002a
106 #define FAPI_PUSCH_MAX_PTRS_PORTS_TAG                       0x002b
107 #define FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG                   0x002c
108 #define FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG        0x002d
109 #define FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG              0x002e
110 #define FAPI_MAX_MU_MIMO_USERS_UL_TAG                       0x002f
111 #define FAPI_DFTS_OFDM_SUPPORT_TAG                          0x0030
112 #define FAPI_PUSCH_AGGREGATION_FACTOR_TAG                   0x0031
113 // PRACH Parameters
114 #define FAPI_PRACH_LONG_FORMATS_TAG                         0x0032
115 #define FAPI_PRACH_SHORT_FORMATS_TAG                        0x0033
116 #define FAPI_PRACH_RESTRICTED_SETS_TAG                      0x0034
117 #define FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG           0x0035
118 // Measurement Parameters
119 #define FAPI_RSSI_MEASUREMENT_SUPPORT_TAG                   0x0036
120
121 // CONFIG TLV TAGS per 5G FAPI
122 #ifdef FAPI_222_10_03
123 // PHY Configuration
124 #define FAPI_PHY_PROFILE_ID_TAG                             0x102a
125 #define FAPI_INDICATION_INSTANCES_PER_SLOT_TAG              0x102b
126 #define FAPI_REQUEST_INSTANCES_PER_SLOT_TAG                 0x102c
127 // Carrier Configuration
128 #define FAPI_CARRIER_CONFIGURATION_TAG                      0x102d
129 #else
130 #define FAPI_DL_BANDWIDTH_TAG                               0x1001
131 #define FAPI_DL_FREQUENCY_TAG                               0x1002
132 #define FAPI_DL_K0_TAG                                      0x1003
133 #define FAPI_DL_GRIDSIZE_TAG                                0x1004
134 #define FAPI_NUM_TX_ANT_TAG                                 0x1005
135 #define FAPI_UPLINK_BANDWIDTH_TAG                           0x1006
136 #define FAPI_UPLINK_FREQUENCY_TAG                           0x1007
137 #define FAPI_UL_K0_TAG                                      0x1008
138 #define FAPI_UL_GRID_SIZE_TAG                               0x1009
139 #define FAPI_NUM_RX_ANT_TAG                                 0x100a
140 #define FAPI_FREQUENCY_SHIFT_7P5_KHZ_TAG                    0x100b
141 #endif
142 // Cell Configuration
143 #define FAPI_PHY_CELL_ID_TAG                                0x100c
144 #define FAPI_FRAME_DUPLEX_TYPE_TAG                          0x100d
145 #ifdef FAPI_222_10_03
146 #define FAPI_PDSCH_TRANS_TYPE_VALIDITY_TAG                  0x102e
147 #define FAPI_PUSCH_TRANS_TYPE_VALIDITY_TAG                  0x102f
148 #endif
149 // SSB Configuration
150 #define FAPI_SS_PBCH_POWER_TAG                              0x100e
151 #ifdef FAPI_222_10_03
152 #define FAPI_SS_PBCH_BLOCK_POWER_SCALING_TAG                0x1030
153 #define FAPI_BCH_PAYLOAD_FLAG_TAG                           0x100f
154 #else
155 #define FAPI_BCH_PAYLOAD_TAG                                0x100f
156 #define FAPI_SCS_COMMON_TAG                                 0x1010
157 #endif
158 // PRACH Configuration
159 #ifdef FAPI_222_10_03
160 #define FAPI_PRACH_CONFIGURATION_TAG                        0x1031
161 #else
162 #define FAPI_PRACH_SEQUENCE_LENGTH_TAG                      0x1011
163 #define FAPI_PRACH_SUBC_SPACING_TAG                         0x1012
164 #define FAPI_RESTRICTED_SET_CONFIG_TAG                      0x1013
165 #define FAPI_NUM_PRACH_FD_OCCASIONS_TAG                     0x1014
166 #define FAPI_PRACH_ROOT_SEQUENCE_INDEX_TAG                  0x1015
167 #define FAPI_NUM_ROOT_SEQUENCES_TAG                         0x1016
168 #define FAPI_K1_TAG                                         0x1017
169 #define FAPI_PRACH_ZERO_CORR_CONF_TAG                       0x1018
170 #define FAPI_NUM_UNUSED_ROOT_SEQUENCES_TAG                  0x1019
171 #define FAPI_UNUSED_ROOT_SEQUENCES_TAG                      0x101a
172 #define FAPI_SSB_PER_RACH_TAG                               0x101b
173 #define FAPI_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG          0x101c
174 #endif
175 #ifdef FAPI_222_10_03
176 //Multi PRACH Configurations
177 #define FAPI_MULTI_PRACH_CONFIGURATION_TAG                  0x1032
178 // SSB Table
179 #define FAPI_SSB_RESOURCE_CONFIGURATION_TAG                 0x1033
180 #else
181 #define FAPI_SSB_OFFSET_POINT_A_TAG                         0x101d
182 #define FAPI_BETA_PSS_TAG                                   0x101e
183 #define FAPI_SSB_PERIOD_TAG                                 0x101f
184 #define FAPI_SSB_SUBCARRIER_OFFSET_TAG                      0x1020
185 #define FAPI_MIB_TAG                                        0x1021
186 #define FAPI_SSB_MASK_TAG                                   0x1022
187 #define FAPI_BEAM_ID_TAG                                    0x1023
188 #define FAPI_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG        0x1024
189 #define FAPI_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG        0x1025
190 #endif
191
192 #ifdef FAPI_222_10_03
193 //Multi SSB Resource Configurations
194 #define FAPI_MULTI_SSB_RESOURCE_CONFIGURATION_TAG           0x1034
195
196 // TDD Table
197 #define FAPI_TDD_PERIOD_TAG                                 0x1035
198 #else
199 #define FAPI_TDD_PERIOD_TAG                                 0x1026
200 #define FAPI_SLOT_CONFIG_TAG                                0x1027
201 #endif
202 // Measurement Configuration
203 #define FAPI_RSSI_MESUREMENT_TAG                            0x1028
204 #define FAPI_PRACH_CONFIG_INDEX_TAG                         0x1029
205 #ifdef FAPI_222_10_03
206 // UCI Configuration
207 #define FAPI_UCI_CONFIGURATION_TAG                          0x1036
208 // PRB-Symbol Rate Match Patterns
209 #define FAPI_PRB_SYMBOL_RATE_MATCH_PATTERN_TAG              0x0137
210 // LTE-CRS Rate Match Pattern
211 #define FAPI_LTE_CRS_RATE_MATCH_PATTERN_TAG                 0x0138
212 // PUCCH semi-static configuration
213 #define FAPI_PUCCH_SEMI_STATIC_CONFIG_TAG                   0x1039
214 // PDSCH Semi-Static Configuration
215 #define FAPI_PDSCH_CBG_SCHEME                               0x103a
216 // Delay Management Configuration
217 #define FAPI_TIMING_WINDOW_TAG                              0x011e
218 #define FAPI_TIMING_INFO_MODE_TAG                           0x011f
219 #define FAPI_TIMING_INFO_PERIOD_TAG                         0x0120
220 // reserve 0x0f00
221 //Rel-16 mTRP Configurations
222 #define FAPI_NUM_TX_PORTS_TRP1_TAG                          0x103b
223 #define FAPI_NUM_RX_PORTS_TRP1_TAG                          0x103c
224 #endif
225 //Vendor Specific Tags
226 #define FAPI_NUM_DIG_BEAMS                                  0xA000
227 #define FAPI_NUM_TX_RUS                                     0xA001
228 #define FAPI_BEAM_IDX                                       0xA002
229 #define FAPI_DIG_BEAM_WEIGHT_RE                             0xA003
230 #define FAPI_DIG_BEAM_WEIGHT_IM                             0xA004
231 #define FAPI_PM_IDX                                         0xA005
232 #define FAPI_NUM_LAYERS                                     0xA006
233 #define FAPI_NUM_ANT_PORTS                                  0xA007
234 #define FAPI_PRECODER_WEIGHT_RE                             0xA008
235 #define FAPI_PRECODER_WEIGHT_IM                             0xA009
236 // Error Codes updated per 5G FAPI Table 3-31
237 #define FAPI_MSG_OK                                         0x0
238 #define FAPI_MSG_INVALID_STATE                              0x1
239 #define FAPI_MSG_INVALID_CONFIG                             0x2
240 #define FAPI_MSG_SFN_OUT_OF_SYNC                            0x3
241 #define FAPI_MSG_SLOT_ERR                                   0x4
242 #define FAPI_MSG_BCH_MISSING                                0x5
243 #define FAPI_MSG_INVALID_SFN                                0x6
244 #define FAPI_MSG_UL_DCI_ERR                                 0x7
245 #define FAPI_MSG_TX_ERR                                     0x8
246 #ifdef FAPI_222_10_03
247 #define MSG_INVALID_PHY_ID                                  0x9
248 #define MSG_UNINSTANTIATED_PHY                              0xA
249 #define MSG_INVALID_DFE_Profile                             0xB
250 #define PHY_Profile_Selection_incompatible                  0xC
251 #endif
252 #define FAPI_MAX_NUM_CW                                     1
253 #define FAPI_MAX_FREQ_DOMAIN_RES                            6
254
255 #ifdef FAPI_222_10_03
256 #define FAPI_PROTOCOLVERSION_TAG                            0X0037
257 #define FAPI_POWER_PROFILES_SUPPORTED_TAG                   0X0038
258 #define FAPI_MAXNUMPDUS_INDL_TTI_TAG                        0X0039
259 #define FAPI_MAXNUMPDUS_INUL_TTI_TAG                        0X003A
260 #define FAPI_MAXNUMPDUS_INUL_DCI_TAG                        0X003B
261 #define FAPI_SSPBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG         0x003C 
262 #define FAPI_MULTIPLE_CELLS_SSPBCH_IN_A_CARRIER_TAG         0x003D
263 #define FAPI_PUCCHGROUP_AND_SEQUENCE_HOPPING_TAG            0x003E
264 #define FAPI_MAXNUM_UlBWPIDS_TAG                            0x003F
265 #define FAPI_PUCCH_AGGREGATION_TAG                          0x0040 
266 #define FAPI_SSB_RATE_MATCH_TAG                             0x0041
267 #define FAPI_SUPPORTED_RATE_MATCH_PATTERN_TYPE_TAG          0x0042
268 #define FAPI_PDCCH_RATE_MATCH_TAG                           0x0043
269 #define FAPI_NUM_OF_RATE_MATCH_PATTERNLTECRCPERSLOT_TAG     0x0044
270 #define FAPI_NUMOFRATE_MATCH_PATTERN_LTECRC_INPHY_TAG       0x0045
271 #define FAPI_CSI_RS_RATE_MATCH_TAG                          0x0046
272 #define FAPI_PDSCH_TRANS_TYPE_SUPPORT_TAG                   0x0047
273 #define FAPI_PDSCH_MAC_PDU_BIT_ALIGNMENT_TAG                0x0048
274 #define FAPI_MAX_NUMBER_MIMO_LAYERS_CB_PUSCH_TAG            0x0049
275 #define FAPI_PUSCH_LBRM_SUPPORT_TAG                         0x004A
276 #define FAPI_PUSCH_TRANS_TYPE_SUPPORT_TAG                   0x004B
277 #define FAPI_PUSCH_MAC_PDU_BIT_ALIGNMENT_TAG                0x004C
278 #define FAPI_MAXNUM_PRACH_CONFIGURATIONS_TAG                0x004D
279 #define FAPI_PRACH_MULTIPLE_CARRIERS_IN_A_Band_TAG          0x004E
280 #define FAPI_MAX_NUM_UCIMAPS_TAG                            0x004F
281 #define FAPI_CAPABILITY_VALIDITY_TAG                        0x0050
282 #define FAPI_PHY_PARAMS_TAG                                 0x0051
283 #define FAPI_TIME_MANAGEMENT_TAG                            0x0052
284 #define FAPI_PHY_PROTOCOL_VERSION_TAG                       0x0053
285 #define FAPI_DFE_PROFILE_TAG                                0x0054
286 #define FAPI_MORE_THAN_ONE_INDICATION_PER_SLOT_TAG          0x0055
287 #define FAPI_MORE_THAN_ONE_REQUEST_PER_SLOT_TAG             0x0056
288 #define FAPI_MTRP_SUPPORT_TAG                               0x0057
289 #define FAPI_DL_TTI_TIMING_OFFSET_TAG                       0X0106
290 #define FAPI_UL_TTI_TIMING_OFFSET_TAG                       0X0107
291 #define FAPI_UL_DCI_TIMING_OFFSET_TAG                       0X0108
292 #define FAPI_TX_DATA_TIMING_OFFSET_TAG                      0X0109
293 #endif
294 // TODO : Work out what the correct maximums should be// Needs Review for 5G
295 #if 0
296 // Number of UL/DL configurations, I, as defined by 36.212 section 5.3.3.1.4
297 // todo : work out what the max is
298 #define FAPI_MAX_UL_DL_CONFIGURATIONS                       4
299 #define FAPI_MAX_NUM_PHYSICAL_ANTENNAS                      4
300 #define FAPI_MAX_NUM_SCHEDULED_UES                          8
301 #define FAPI_MAX_NUM_SUBBANDS                               8
302 #define FAPI_MAX_ANTENNA_PORT_COUNT                         2
303 #endif
304
305 // 5G FAPI Definitions
306 #define NUMEROLOGIES                                        5
307 #define MAX_NUM_UNUSED_ROOT_SEQUENCES                       63 // 38.331 page 383
308 #define MAX_NUM_PRACH_FD_OCCASIONS                          64 // 38.331 page 383
309 #define MAX_NUM_OF_SYMBOLS_PER_SLOT                         14
310 #define MAX_TDD_PERIODICITY                                 160// 38.212 11.1 for u = 4 and P=10 ms
311 #define MAX_NUMBER_TX_RUS                                   4  // m = p*q with p number of panels and q number of TxRU/RxRU per panel, depends on
312 // the RF configuration, currently n = m = 4, q = 1, p = 4 and k = 21 (number of beams per pannel). n number of antenna ports
313 #define MAX_NUMBER_OF_BEAMS                                 64 // Intel API Page 27
314 #define MAX_NUM_ANT_PORTS                                   8  // Based on current RF
315 #define MAX_NUM_LAYERS                                      8  // 38.211 Table 7.3.1.3-1
316 #ifdef VZ_VERIPHY_INTEG
317 #define MAX_NUM_TLVS_CELL_CONFIG                            46  // 5G FAPI Table 3-9  (A)
318 #else
319 #define MAX_NUM_TLVS_CELL_CONFIG                            2  // 5G FAPI Table 3-9  (A)
320 #endif
321 #define MAX_NUM_TLVS_CARRIER_CONFIG                         27 // 5G FAPI Table 3-10 (B)
322 #define MAX_NUM_TLVS_PDCCH_CONFIG                           6  // 5G FAPI Table 3-11 (C)
323 #define MAX_NUM_TLVS_PUCCH_CONFIG                           2  // 5G FAPI Table 3-12 (D)
324 #define MAX_NUM_TLVS_PDSCH_CONFIG                           14 // 5G FAPI Table 3-13 (E)
325 #define MAX_NUM_TLVS_PUSCH_CONFIG                           17 // 5G FAPI Table 3-14 (F)
326 #define MAX_NUM_TLVS_PRACH_CONFIG                           4  // 5G FAPI Table 3-15 (G)
327 #define MAX_NUM_TLVS_MEAS_CONFIG                            1  // 5G FAPI Table 3-16 (H)
328 #ifdef VZ_VERIPHY_INTEG
329 #define MAX_NUM_TLVS_CONFIG                                 117 //  A+B+C+D+E+F+G+H + Padding
330 #else
331 #define MAX_NUM_TLVS_CONFIG                                 74 //  A+B+C+D+E+F+G+H + Padding
332 #endif
333 #define MAX_NUMBER_UNSUPPORTED_TLVS                         74
334 #define MAX_NUMBER_OF_INVALID_IDLE_ONLY_TLVS                74
335 #define MAX_NUMBER_OF_INVALID_RUNNING_ONLY_TLVS             74
336 #define MAX_NUMBER_OF_MISSING_TLVS                          74
337 #define MAX_NUM_DIGBFINTERFACES                             4 // Based on RF, 5G FAPI says {0, 255}
338 #define MAX_NUM_PRGS_PER_TTI                                4 // Based on 38.214 5.1.2.3
339 #define DCI_PAYLOAD_BYTE_LEN                                32 // Based on Intel API MAX_DCI_BIT_BYTE_LEN
340 #define MAX_NUMBER_DL_DCI                                   32 // Based on Intel API MAX_NUM_PDCCH
341 #define MAX_NUMBER_OF_CODEWORDS_PER_PDU                     2 // Based on MAX_DL_CODEWORD
342 #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)
343 #define MAX_NUMBER_OF_UES_PER_TTI                           16  // Per common_ran_parameters.h
344 #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
345 #define MAX_NUM_PTRS_PORTS                                  12  // Per 3GPP 38.212 Table 7.3.1.1.2-21
346 #define MAX_NUMBER_OF_GROUPS_PER_TTI                        8  // FlexRAN API Table 33
347 #define MAX_NUMBER_UL_PDUS_PER_TTI                          328 // (MAX_NUM_PUSCH+MAX_NUM_PUCCH+MAX_NUM_SRS+MAX_NUM_PRACH_DET)
348 #define MAX_NUMBER_DCI_PDUS_PER_TTI                         32 // Based on MAX_NUM_PDCCH
349 #define MAX_NUMBER_OF_TLVS_PER_PDU                          32 // Based on FAPI/nFAPI implementation
350 #define MAX_NUMBER_TX_PDUS_PER_TTI                          129 // Same as MAX_NUMBER_DL_PDUS_PER_TTI
351 #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
352 #define MAX_NUMBER_OF_PDUS_PER_TTI                          129 // Same as MAX_NUMBER_DL_PDUS_PER_TTI
353 #define MAX_NUMBER_OF_ULSCH_PDUS_PER_TTI                    64  // NUM_PUSCH_CHAN*MAX_NUMBER_OF_CODEWORDS_PER_PDU
354 #define MAX_NUMBER_OF_CRCS_PER_SLOT                         32  // Based on MAX_NUM_UL_CHAN
355 #define MAX_HARQ_INFO_LEN_BYTES                             214  // Based on 5G FAPI Table 3-70
356 #define MAX_CSI_PART1_DATA_BYTES                            214  // Based on 5G FAPI Table 3-71
357 #define MAX_CSI_PART2_DATA_BYTES                            214  // Based on 5G FAPI Table 3-72
358 #define MAX_NUMBER_OF_HARQS_PER_IND                         2    // Based on 5G FAPI Table 3-68
359 #define MAX_SR_PAYLOAD_SIZE                                 1    // Based on 5G FAPI Table 3-69
360 #define MAX_HARQ_PAYLOAD_SIZE                               214  // Based on 5G FAPI Table 3-70
361 #define MAX_NUMBER_UCI_PDUS_PER_SLOT                        200  // Based on MAX_NUM_PUCCH
362 #define MAX_NUMBER_RBS                                      273  // Based on MAX_NUM_OF_PRB_IN_FULL_BAND
363 #define MAX_NUMBER_OF_REP_SYMBOLS                           4    // Based on 5g FAPI Table 3-73
364 #define MAX_NUMBER_SRS_PDUS_PER_SLOT                        32   // Based on MAX_NUM_SRS
365 #define MAX_NUM_PREAMBLES_PER_SLOT                          64   // Based on MAX_NUM_PRACH_DET
366 #define MAX_NUMBER_RACH_PDUS_PER_SLOT                       64   // Based on MAX_NUM_PRACH_DET
367 #define TA_AVG_TIME                                         32
368 #define TA_AVG_TIMElog2                                     5
369 #ifdef FAPI_222_10_03
370 #define MAX_NDLTYPES_DL_TTI_REQ                             5
371 #define MAX_NDLTYPES_UL_DCI_REQ                             2
372 #define MAX_SIGNAL_INDEX                                    7
373 #define MAX_NUM_UL_TYPES                                    5
374 #endif
375
376 typedef enum nr_ssb_periodicity
377 {
378     FAPI_NR_SSB_PERIODICITY_5MS,
379     FAPI_NR_SSB_PERIODICITY_10MS,
380     FAPI_NR_SSB_PERIODICITY_20MS,
381     FAPI_NR_SSB_PERIODICITY_40MS,
382     FAPI_NR_SSB_PERIODICITY_80MS,
383     FAPI_NR_SSB_PERIODICITY_160MS
384
385 } nr_ssb_periodicity_t;
386
387 // Updated per 5G FAPI
388 typedef struct PACK_STRUCT fapi_msg
389 {
390     uint16_t                     message_type_id;
391     uint32_t                    length; // Length of the message body in bytes
392 } fapi_msg_t_ue_sim;
393 // Updated per 5G FAPI
394 typedef struct PACK_STRUCT fapi_msg_header
395 {
396     uint8_t                     numberOfMessagesIncluded;
397     uint8_t                     handle;   // Can be used for Phy Id or Carrier Id
398     fapi_msg_t_ue_sim           msg_details;
399 } fapi_msg_header_t_ue_sim;
400 // Updated per 5G FAPI
401 typedef struct PACK_STRUCT fapi_tl
402 {
403     uint16_t                    tag;
404     uint16_t                    length;
405 } fapi_tl_t_ue_sim;
406 // Updated per 5G FAPI
407 typedef struct PACK_STRUCT fapi_uint8_tlv
408 {
409     fapi_tl_t_ue_sim            tl;
410     uint8_t                     value;
411 #ifdef VZ_VERIPHY_INTEG
412     uint8_t                     rsv[3];
413 #endif
414 } fapi_uint8_tlv_t_ue_sim;
415 // Updated per 5G FAPI
416 typedef struct PACK_STRUCT fapi_uint16_tlv
417 {
418     fapi_tl_t_ue_sim            tl;
419     uint16_t                    value;
420 #ifdef VZ_VERIPHY_INTEG
421     uint8_t rsv[2];
422 #endif
423 } fapi_uint16_tlv_t_ue_sim;
424 // Updated per 5G FAPI
425 typedef struct PACK_STRUCT fapi_int16_tlv
426 {
427     fapi_tl_t_ue_sim            tl;
428     int16_t                     value;
429 #ifdef VZ_VERIPHY_INTEG
430     uint8_t rsv[2];
431 #endif
432 } fapi_int16_tlv_t_ue_sim;
433 // Updated per 5G FAPI
434 typedef struct PACK_STRUCT fapi_uint32_tlv
435 {
436     fapi_tl_t_ue_sim            tl;
437     uint32_t                    value;
438 } fapi_uint32_tlv_t_ue_sim;
439 // Updated per 5G FAPI
440 typedef struct PACK_STRUCT fapi_tx_dat_tlv
441 {
442     uint16_t                    tag;
443     //Currently DU is not supporting more than 1 TLVs. So length type changed to uint32_t as per DU team. To be modified once it is resolved.
444     uint32_t                    length;
445 #ifdef VZ_VERIPHY_INTEG 
446     uint64_t                    valueOrOffset;         // TLV with unsigned 32 bit value
447 #else
448     uint32_t                    value[];
449 #endif
450
451 } fapi_tx_dat_tlv_t;
452
453 // Updated per 5G FAPI
454 typedef struct PACK_STRUCT fapi_config_tlv
455 {
456     uint16_t                    tag;                // In 5G FAPI for Cell Params
457     uint8_t                     length;
458     uint8_t                     value;
459 } fapi_config_tlv_t_ue_sim;
460
461 #ifdef VZ_VERIPHY_INTEG
462 // Updated per 5G FAPI
463 typedef struct {
464         fapi_tl_t_ue_sim            tl;
465         uint16_t                    value[NUMEROLOGIES];
466         uint16_t                    rsv;                        // To be 32-bit aligned, if FAPI_NUMEROLOGIES changes to some other value than 5 please ensure 32 bit alignment
467 } fapi_config_num_tlv_t;
468 #endif
469
470 // Updated per 5G FAPI
471 typedef struct PACK_STRUCT fapi_param_req
472 {
473     fapi_msg_header_t_ue_sim    header;  // For PARAM.req message length in fapi_msg_t_ue_sim is zero
474 #ifdef FAPI_222_10_03
475     fapi_uint8_tlv_t_ue_sim            protocolVersion;
476 #endif
477 } fapi_param_req_t_ue_sim;
478
479 #ifdef FAPI_222_10_03
480 typedef struct PACK_STRUCT fapi_signal_index
481 {
482     uint8_t                     referenceRS;
483     int16_t                     powerOffsetMin;
484     int16_t                     powerOffsetMax;
485 } fapi_signal_index_t;
486 #endif
487 // Updated per 5G FAPI
488 typedef struct PACK_STRUCT fapi_cell_params
489 {
490     fapi_uint16_tlv_t_ue_sim           releaseCapability;
491     fapi_uint16_tlv_t_ue_sim           phyState;
492     fapi_uint8_tlv_t_ue_sim            skipBlankDlConfig;
493     fapi_uint8_tlv_t_ue_sim            skipBlankUlConfig;
494     fapi_uint16_tlv_t_ue_sim           numTlvsToReport;
495     //fapi_param_tlv_t            tlvStatus[MAX_NUMBER_OF_CONFIG_PARMS];          // Need to define this value based on 5G FAPI
496 #ifdef FAPI_222_10_03
497     fapi_uint8_tlv_t_ue_sim            powerProfilesSupported;
498     fapi_signal_index_t         signalIndex[MAX_SIGNAL_INDEX];
499     fapi_uint16_tlv_t_ue_sim           maxNumPDUsInDL_TTI;
500     fapi_uint16_tlv_t_ue_sim           maxNumPDUsInUL_TTI;
501     fapi_uint16_tlv_t_ue_sim           maxNumPDUsInUL_DCI; 
502 #endif
503 } fapi_cell_parms_t_ue_sim;
504
505 // Updated per 5G FAPI
506 typedef struct PACK_STRUCT fapi_carrier_parms
507 {
508     fapi_uint8_tlv_t_ue_sim            cyclicPrefix;
509     fapi_uint8_tlv_t_ue_sim            supportedSubcarrierSpacingDl;
510     fapi_uint16_tlv_t_ue_sim           supportedBandwidthDl;
511     fapi_uint8_tlv_t_ue_sim            supportedSubcarrierSpecingsUl;
512     fapi_uint16_tlv_t_ue_sim           supportedBandwidthUl;
513 #ifdef FAPI_222_10_03
514     fapi_uint8_tlv_t_ue_sim            ssPbchMultipleCarriersInABand;
515     fapi_uint8_tlv_t_ue_sim            multipleCellsSsPbchInACarrier;
516 #endif
517 }   fapi_carrier_parms_t_ue_sim;
518
519 // Updated per 5G FAPI
520 typedef struct PACK_STRUCT fapi_pdcch_parms
521 {
522     fapi_uint8_tlv_t_ue_sim            cceMappingType;
523     fapi_uint8_tlv_t_ue_sim            coresetOutsideFirst3OfdmSymsOfSlot;
524     fapi_uint8_tlv_t_ue_sim            precoderGranularityCoreset;
525     fapi_uint8_tlv_t_ue_sim            pdcchMuMimo;
526     fapi_uint8_tlv_t_ue_sim            pdcchPrecoderCycling;
527     fapi_uint8_tlv_t_ue_sim            maxPdcchsPerSlot;
528 }   fapi_pdcch_parms_t_ue_sim;
529
530 // Updated per 5G FAPI
531 typedef struct PACK_STRUCT fapi_pucch_parms
532 {
533     fapi_uint8_tlv_t_ue_sim            pucchFormats;
534     fapi_uint8_tlv_t_ue_sim            maxPucchsPerSlot;
535 #ifdef FAPI_222_10_03
536     fapi_uint8_tlv_t_ue_sim            pucchGroupAndSequenceHopping;
537     fapi_uint8_tlv_t_ue_sim            maxNumUlBwpIds;
538     fapi_uint8_tlv_t_ue_sim            pucchAggregation;
539 #endif
540 }   fapi_pucch_parms_t_ue_sim;
541
542 // Updated per 5G FAPI
543 typedef struct PACK_STRUCT fapi_pdsch_parms
544 {
545     fapi_uint8_tlv_t_ue_sim            pdschMappingType;
546     fapi_uint8_tlv_t_ue_sim            pdschAllocationTypes;
547     fapi_uint8_tlv_t_ue_sim            pdschVrbToPrbMapping;
548     fapi_uint8_tlv_t_ue_sim            pdschCbg;
549     fapi_uint8_tlv_t_ue_sim            pdschDmrsConfigTypes;
550     fapi_uint8_tlv_t_ue_sim            pdschDmrsMaxLength;
551     fapi_uint8_tlv_t_ue_sim            pdschDmrsAdditionalPos;
552     fapi_uint8_tlv_t_ue_sim            maxPdschsTBsPerSlot;
553     fapi_uint8_tlv_t_ue_sim            maxNumberMimoLayersPdsch;
554     fapi_uint8_tlv_t_ue_sim            supportedMaxModulationOrderDl;
555     fapi_uint8_tlv_t_ue_sim            maxMuMimoUsersDl;
556     fapi_uint8_tlv_t_ue_sim            pdschDataInDmrsSymbols;
557     fapi_uint8_tlv_t_ue_sim            premptionSupport;
558     fapi_uint8_tlv_t_ue_sim            pdschNonSlotSupport;
559 #ifdef FAPI_222_10_03
560     fapi_uint8_tlv_t_ue_sim             ssbRateMatch;
561     fapi_uint8_tlv_t_ue_sim             supportedRateMatchPatternType;
562     fapi_uint8_tlv_t_ue_sim             pdcchRateMatch; 
563     fapi_uint8_tlv_t_ue_sim             numOfRateMatchPatternLTECrsPerSlot;
564     fapi_uint8_tlv_t_ue_sim             numOfRateMatchPatternLTECrsInPhy;
565     fapi_uint8_tlv_t_ue_sim             csiRsRateMatch;
566     fapi_uint8_tlv_t_ue_sim             pdschTransTypeSupport;
567     fapi_uint8_tlv_t_ue_sim             pdschMacPduBitAlignment;
568 #endif
569 }   fapi_pdsch_parms_t_ue_sim;
570
571 // Updated per 5G FAPI
572 typedef struct PACK_STRUCT fapi_pusch_parms
573 {
574     fapi_uint8_tlv_t_ue_sim            uciMuxUlschInPusch;
575     fapi_uint8_tlv_t_ue_sim            uciOnlyPusch;
576     fapi_uint8_tlv_t_ue_sim            puschFrequencyHopping;
577     fapi_uint8_tlv_t_ue_sim            puschDmrsConfigTypes;
578     fapi_uint8_tlv_t_ue_sim            puschDmrsMaxLen;
579     fapi_uint8_tlv_t_ue_sim            puschDmrsAditionalPos;
580     fapi_uint8_tlv_t_ue_sim            puschCbg;
581     fapi_uint8_tlv_t_ue_sim            puschMappingType;
582     fapi_uint8_tlv_t_ue_sim            puschAllocationTypes;
583     fapi_uint8_tlv_t_ue_sim            puschVrbToPrbMapping;
584     fapi_uint8_tlv_t_ue_sim            puschMaxPtrsPorts;
585     fapi_uint8_tlv_t_ue_sim            maxPduschsTBsPerSlot;
586     fapi_uint8_tlv_t_ue_sim            maxNumberMimoLayersnonCbPusch;
587 #ifdef FAPI_222_10_03
588     fapi_uint8_tlv_t_ue_sim             maxNumberMimoLayersCbPusch;
589 #endif
590     fapi_uint8_tlv_t_ue_sim            supportedModulationOrderUl;
591     fapi_uint8_tlv_t_ue_sim            maxMuMimoUsersUl;
592     fapi_uint8_tlv_t_ue_sim            dftsOfdmSupport;
593     fapi_uint8_tlv_t_ue_sim            puschAggregationFactor;
594 #ifdef FAPI_222_10_03
595     fapi_uint8_tlv_t_ue_sim            puschLbrmSupport;
596     fapi_uint8_tlv_t_ue_sim            puschTransTypeSupport;
597     fapi_uint8_tlv_t_ue_sim            puschMacPduBitAlignment;
598 #endif   
599 }fapi_pusch_parms_t_ue_sim;
600
601 // Updated per 5G FAPI
602 typedef struct PACK_STRUCT fapi_prach_parms
603 {
604     fapi_uint8_tlv_t_ue_sim            prachLongFormats;
605     fapi_uint8_tlv_t_ue_sim            prachShortFormats;
606     fapi_uint8_tlv_t_ue_sim            prachRestrictedSets;
607     fapi_uint8_tlv_t_ue_sim            maxPrachFdOccasionsInASlot;
608 #ifdef FAPI_222_10_03
609     fapi_uint16_tlv_t_ue_sim           maxNumPrachConfigurations;
610     fapi_uint8_tlv_t_ue_sim            prachMultipleCarriersInABand;
611 #endif
612 }fapi_prach_parms_t_ue_sim;
613
614 // Updated per 5G FAPI
615 typedef struct PACK_STRUCT fapi_meas_parms
616 {
617     fapi_uint8_tlv_t_ue_sim            rssiMeasurementSupport;
618 }   fapi_meas_parms_t_ue_sim;
619 #ifdef FAPI_222_10_03
620 typedef struct PACK_STRUCT fapi_uci_parms
621 {
622     fapi_uint16_tlv_t_ue_sim           maxNumUciMaps;
623 }   fapi_uci_parms_t;
624 typedef struct PACK_STRUCT fapi_capability
625 {
626     uint16_t                    capabilityTag;
627     uint8_t                     validityScope;
628 }   fapi_capability_t;
629 typedef struct PACK_STRUCT fapi_capability_validity
630 {
631     fapi_tl_t_ue_sim            fapi_capability_validity;
632     uint16_t                    numCapabilities;
633     fapi_capability_t           capability[];
634 }   fapi_capability_validity_t;
635 typedef struct PACK_STRUCT fapi_phy_port
636 {
637     uint8_t                     numDlPortRanges; /* Number of DL port ranges for this PHYs */
638     uint16_t                    dlPortRangeStart[0];  /* Start of each range of DL ports, depends on Number of DL port ranges for this PHYs*/
639     uint16_t                    dlPortRangeLen[0];
640     uint8_t                     numUlPortRanges;
641     uint16_t                    ulPortRangeStart[0];
642     uint16_t                    ulPortRangeLen[0]; 
643 }fapi_phy_port_t;
644 typedef struct PACK_STRUCT fapi_phy_profile
645 {
646     uint8_t                     maxNumPhys;
647     fapi_phy_port_t             phy_port[0];
648 }fapi_phy_profile_t;
649 typedef struct PACK_STRUCT fapi_phy_parms
650 {
651     fapi_tl_t_ue_sim      phySupport;
652     uint16_t                    numPhyProfiles;
653     uint16_t                    numDlBbPorts;
654     uint16_t               numUlBbPorts;
655     fapi_phy_profile_t    phyProfiles[0];
656     fapi_uint8_tlv_t_ue_sim          timeManagement;
657     fapi_tl_t_ue_sim              protocolVersion;
658     uint8_t                        phyFapiProtocolVersion;
659     uint8_t                        phyFapiNegotiatedProtocolVersion;
660     fapi_uint8_tlv_t_ue_sim          moreThanOneIndicationPerSlot[6];
661     fapi_uint8_tlv_t_ue_sim          moreThanOneRequestPerSlot[4];         
662 }fapi_phy_support_t;
663 typedef struct PACK_STRUCT fapi_dfe_profile
664 {
665     fapi_tl_t_ue_sim           dfe_profile;
666     uint16_t                 numPhyProfiles;
667     uint16_t                 numDfeProfiles;
668     uint8_t                     profileValidityMap;
669 }fapi_dfe_profile_t;
670 typedef struct PACK_STRUCT fapi_delay_management_parms
671 {
672     fapi_uint32_tlv_t_ue_sim            dl_tti_timing_offset;
673     fapi_uint32_tlv_t_ue_sim           ul_tti_timing_offset;
674     fapi_uint32_tlv_t_ue_sim           ul_dci_timing_offset;
675     fapi_uint32_tlv_t_ue_sim           tx_data_timing_offset;
676     fapi_uint16_tlv_t_ue_sim           timing_window;
677     fapi_uint8_tlv_t_ue_sim            timing_info_period;
678 }fapi_delay_management_parms_t;
679 typedef struct PACK_STRUCT fapi_rel16_mTRP_parameters
680 {
681     fapi_uint32_tlv_t_ue_sim            mTRP_Support;   
682 }fapi_rel16_mTRP_parameters_t;
683 #endif
684 // Updated per 5G FAPI
685 typedef struct PACK_STRUCT fapi_params
686 {
687     fapi_cell_parms_t_ue_sim            cellParms;
688     fapi_carrier_parms_t_ue_sim         carrParms;
689     fapi_pdcch_parms_t_ue_sim           pdcchParms;
690     fapi_pucch_parms_t_ue_sim           pucchParms;
691     fapi_pdsch_parms_t_ue_sim           pdschParms;
692     fapi_pusch_parms_t_ue_sim           puschParms;
693     fapi_prach_parms_t_ue_sim           prachParms;
694     fapi_meas_parms_t_ue_sim            measParms;
695 #ifdef FAPI_222_10_03
696     fapi_uci_parms_t                    uciParms;
697     fapi_capability_validity_t          capabilityValidity;
698     fapi_phy_support_t                  phySupport;
699     fapi_dfe_profile_t                  dfeProfile;
700     fapi_delay_management_parms_t       delayManagementParms;
701     fapi_rel16_mTRP_parameters_t        rel16mTRPParameters;
702 #endif
703 } fapi_params_t_ue_sim;
704
705 // Updated per 5G FAPI
706 typedef struct PACK_STRUCT fapi_param_resp
707 {
708     fapi_msg_header_t_ue_sim    header;
709     uint8_t                     error_code;
710     uint8_t                     number_of_tlvs;
711     fapi_uint16_tlv_t_ue_sim           tlvs[MAX_NUM_TLVS_CONFIG];
712 } fapi_param_resp_t_ue_sim;
713
714 // Updated per 5G FAPI
715 #ifdef FAPI_222_10_03
716 typedef struct PACK_STRUCT fapi_phy_config
717 {
718     fapi_uint16_tlv_t_ue_sim           phyProfileId;
719     fapi_uint8_tlv_t_ue_sim            indicationInstancePerSlot[6];
720     fapi_uint8_tlv_t_ue_sim            requestInstancePerSlot[4];
721 }fapi_phy_config_t;
722 #endif
723 // Updated per 5G FAPI
724 #ifdef FAPI_222_10_03
725 typedef struct PACK_STRUCT fapi_carrier_config
726 {
727     fapi_tl_t_ue_sim            carrierConfig;
728     uint16_t                    dlBandwidth;
729     uint32_t                    dlFrequency;
730 #ifdef VZ_VERIPHY_INTEG
731     fapi_config_num_tlv_t       dlk0;
732     fapi_config_num_tlv_t       dlGridSize;
733 #else
734     uint16_t                    dlk0[NUMEROLOGIES];
735     uint16_t                    dlGridSize[NUMEROLOGIES];
736 #endif
737     uint16_t                    numTxAnt;
738     uint16_t                    uplinkBandwidth;
739     uint32_t                    uplinkFrequency;
740 #ifdef VZ_VERIPHY_INTEG
741     fapi_config_num_tlv_t       ulk0;
742     fapi_config_num_tlv_t       ulGridSize;
743 #else
744     uint16_t                    ulk0[NUMEROLOGIES];
745     uint16_t                    ulGridSize[NUMEROLOGIES];
746 #endif  
747     uint16_t                    numRxAnt;
748     uint8_t                     frequencyShift7p5KHz;
749     uint8_t                     powerProfile;
750     uint8_t                     powerOffsetRsIndex;
751 } fapi_carrier_config_t_ue_sim;
752 #else
753 typedef struct PACK_STRUCT fapi_carrier_config
754 {
755     fapi_uint16_tlv_t_ue_sim           dlBandwidth;
756     fapi_uint32_tlv_t_ue_sim           dlFrequency;
757 #ifdef VZ_VERIPHY_INTEG
758     fapi_config_num_tlv_t       dlk0;
759     fapi_config_num_tlv_t       dlGridSize;
760 #else
761     fapi_uint16_tlv_t_ue_sim           dlk0[NUMEROLOGIES];
762     fapi_uint16_tlv_t_ue_sim           dlGridSize[NUMEROLOGIES];
763 #endif
764     fapi_uint16_tlv_t_ue_sim           numTxAnt;
765     fapi_uint16_tlv_t_ue_sim           uplinkBandwidth;
766     fapi_uint32_tlv_t_ue_sim           uplinkFrequency;
767 #ifdef VZ_VERIPHY_INTEG
768     fapi_config_num_tlv_t       ulk0;
769     fapi_config_num_tlv_t       ulGridSize;
770 #else
771     fapi_uint16_tlv_t_ue_sim           ulk0[NUMEROLOGIES];
772     fapi_uint16_tlv_t_ue_sim           ulGridSize[NUMEROLOGIES];
773 #endif  
774     fapi_uint16_tlv_t_ue_sim           numRxAnt;
775     fapi_uint8_tlv_t_ue_sim            frequencyShift7p5KHz;
776 } fapi_carrier_config_t_ue_sim;
777 #endif
778
779 // Updated per 5G FAPI
780 typedef struct PACK_STRUCT fapi_cell_config
781 {
782     fapi_uint16_tlv_t_ue_sim           phyCellId;      //in legacy data type mentioned was uint8_t, though in spec it was uint16_t
783     fapi_uint8_tlv_t_ue_sim            frameDuplexType;
784 #ifdef FAPI_222_10_03
785     fapi_uint8_tlv_t_ue_sim            pdschTransTypeValidity;
786     fapi_uint8_tlv_t_ue_sim            puschTransTypeValidity;
787 #endif
788 } fapi_cell_config_t_ue_sim;
789
790 // Updated per 5G FAPI
791 #ifdef FAPI_222_10_03
792 typedef struct PACK_STRUCT fapi_ssb_pwr_pbch_config
793 {
794     fapi_uint32_tlv_t_ue_sim           ssPbchPower;
795     fapi_int16_tlv_t_ue_sim            ssPbchBlockPowerScaling;
796     fapi_uint8_tlv_t_ue_sim            bchPayloadFlag;
797 }fapi_ssb_pwr_pbch_config_t;
798 #else
799 typedef struct PACK_STRUCT fapi_ssb_config
800 {
801     fapi_uint32_tlv_t_ue_sim           ssPbchPower;
802     fapi_uint8_tlv_t_ue_sim            bchPayload;
803     fapi_uint8_tlv_t_ue_sim            scsCommon;
804 } fapi_ssb_config_t_ue_sim;
805 #endif
806
807 // Updated per 5G FAPI
808 #ifdef FAPI_222_10_03
809 typedef struct PACK_STRUCT fapi_prachFdOccasion
810 {
811     uint16_t                    prachRootSequenceIndex;
812     uint8_t                     numRootSequences;
813     int16_t                     k1;
814     uint8_t                     prachZeroCorrConf;
815     uint16_t                    numUnusedRootSequences;   // 5G FAPI Table 3-24 Subset
816     uint16_t                    unusedRootSequences[MAX_NUM_UNUSED_ROOT_SEQUENCES];
817 } fapi_prachFdOccasion_t_ue_sim;
818 #else
819 typedef struct PACK_STRUCT fapi_prachFdOccasion
820 {
821     fapi_uint16_tlv_t_ue_sim           prachRootSequenceIndex;
822     fapi_uint8_tlv_t_ue_sim            numRootSequences;
823     fapi_uint16_tlv_t_ue_sim           k1;
824     fapi_uint8_tlv_t_ue_sim            prachZeroCorrConf;
825     fapi_uint16_tlv_t_ue_sim           numUnusedRootSequences;   // 5G FAPI Table 3-24 Subset
826     fapi_uint8_tlv_t_ue_sim            unusedRootSequences[MAX_NUM_UNUSED_ROOT_SEQUENCES];
827 } fapi_prachFdOccasion_t_ue_sim;
828 #endif
829 // Updated per 5G FAPI
830 #ifdef FAPI_222_10_03
831 typedef struct PACK_STRUCT fapi_prach_configuration
832 {
833     fapi_tl_t_ue_sim            prachConfig;
834     uint16_t                    prachResConfigIndex;
835     uint8_t                     prachSequenceLength;
836     uint8_t                     prachSubCSpacing;
837     uint8_t                     ulBwpPuschScs;
838     uint8_t                     restrictedSetConfig;
839     uint8_t                     numPrachFdOccasions;
840     uint8_t                     prachConfigIndex;
841     fapi_prachFdOccasion_t_ue_sim      prachFdOccasion[MAX_NUM_PRACH_FD_OCCASIONS];
842     uint8_t                     ssbPerRach;
843 } fapi_prach_configuration_t_ue_sim;
844 #else
845 typedef struct PACK_STRUCT fapi_prach_configuration
846 {
847     fapi_uint8_tlv_t_ue_sim            prachSequenceLength;
848     fapi_uint8_tlv_t_ue_sim            prachSubCSpacing;
849     fapi_uint8_tlv_t_ue_sim            restrictedSetConfig;
850     fapi_uint8_tlv_t_ue_sim            numPrachFdOccasions;
851     fapi_uint8_tlv_t_ue_sim            prachConfigIndex;
852     fapi_prachFdOccasion_t_ue_sim      prachFdOccasion[MAX_NUM_PRACH_FD_OCCASIONS];
853     fapi_uint8_tlv_t_ue_sim            ssbPerRach;
854     fapi_uint8_tlv_t_ue_sim            prachMultipleCarriersInABand;
855 } fapi_prach_configuration_t_ue_sim;
856 #endif
857
858 #ifdef FAPI_222_10_03
859 // Updated per 5G FAPI
860 typedef struct PACK_STRUCT fapi_multi_prach_config
861 {
862     fapi_tl_t_ue_sim            multiPrachConfig;
863     uint16_t                    numPrachConfigurations;
864     fapi_prach_configuration_t_ue_sim  numPrachConfigurationsTlv[]; 
865 }fapi_multi_prach_config_t;
866 #endif
867
868 //Updated per 5G FAPI
869 #ifdef FAPI_222_10_03
870 typedef struct PACK_STRUCT fapi_ssb_res_config_table
871 {
872     fapi_tl_t_ue_sim            ssbTableConfig;
873     uint16_t                    ssbConfigIndex;
874     uint16_t                    ssbOffsetPointA;
875     uint8_t                     betaPssProfileNR;
876     int16_t                     betaPssProfileSSS;
877     uint8_t                     ssbPeriod;
878     uint8_t                     ssbSubcarrierOffset;
879     uint8_t                     cases;
880     uint8_t                     subCarrierSpacing;
881     uint8_t                     subCarrierSpacingCommon;
882     uint32_t                    ssbMask[2];
883     uint8_t                     beamId[64];
884     uint8_t                     imax;
885     uint8_t                     rmsiPresence;
886 }fapi_ssb_res_config_table_t;
887 #else
888 typedef struct PACK_STRUCT fapi_ssb_table
889 {
890     fapi_uint16_tlv_t_ue_sim           ssbOffsetPointA;
891     fapi_uint8_tlv_t_ue_sim            betaPss;
892     fapi_uint8_tlv_t_ue_sim            ssbPeriod;
893     fapi_uint8_tlv_t_ue_sim            ssbSubCarrierOffset;
894     fapi_uint32_tlv_t_ue_sim           mib;
895     fapi_uint32_tlv_t_ue_sim           ssbMask[2];
896     fapi_uint8_tlv_t_ue_sim            beamId[64];
897     fapi_uint8_tlv_t_ue_sim            ssPbchMultipleCarriersInABand;
898     fapi_uint8_tlv_t_ue_sim            multipleCellsSsPbchInACarrier;
899 } fapi_ssb_table_t_ue_sim;
900 #endif
901
902 #ifdef FAPI_222_10_03
903 //Updated per 5G FAPI
904 typedef struct PACK_STRUCT fapi_multi_ssb_resource_config_table
905 {
906     fapi_tl_t_ue_sim            multiSsbResourceConfig;
907     uint8_t                     numSsbConfigurations;
908     fapi_ssb_res_config_table_t ssbConfigurationsTLVs[];
909 }fapi_multi_ssb_resource_config_table_t;
910 #endif
911
912 // Updated per 5G FAPI
913 #ifdef FAPI_222_10_03
914 typedef struct PACK_STRUCT fapi_slotconfig
915 {
916     uint8_t                     slotConfig[MAX_NUM_OF_SYMBOLS_PER_SLOT];
917 } fapi_slotconfig_t_ue_sim;
918 #else
919 typedef struct PACK_STRUCT fapi_slotconfig
920 {
921     fapi_uint8_tlv_t_ue_sim            slotConfig[MAX_NUM_OF_SYMBOLS_PER_SLOT];
922 } fapi_slotconfig_t_ue_sim;
923 #endif
924
925 // Updated per 5G FAPI
926 #ifdef FAPI_222_10_03
927 typedef struct PACK_STRUCT fapi_tdd_table
928 {
929     fapi_tl_t_ue_sim            tddTableConfig;
930     uint8_t                     tddPeriod;
931     fapi_slotconfig_t_ue_sim           slotConfig[MAX_TDD_PERIODICITY];
932 } fapi_tdd_table_t_ue_sim;
933 #else
934 typedef struct PACK_STRUCT fapi_tdd_table
935 {
936     fapi_uint8_tlv_t_ue_sim            tddPeriod;
937     fapi_slotconfig_t_ue_sim           slotConfig[MAX_TDD_PERIODICITY];
938 } fapi_tdd_table_t_ue_sim;
939 #endif
940
941 // Updated per 5G FAPI
942 typedef struct PACK_STRUCT fapi_meas_config
943 {
944     fapi_uint8_tlv_t_ue_sim            rssiMeasurement;
945 } fapi_meas_config_t_ue_sim;
946
947 // Updated per 5G FAPI
948 typedef struct PACK_STRUCT fapi_dig_beam_weight
949 {
950     int16_t                     digBeamWeightRe;
951     int16_t                     digBeamWeightIm;
952 } fapi_dig_beam_weight_t_ue_sim;
953
954 // Updated per 5G FAPI
955 typedef struct PACK_STRUCT fapi_dig_beam_config
956 {
957     uint16_t                    beamIdx;
958     fapi_dig_beam_weight_t_ue_sim      digBeamWeight[MAX_NUMBER_TX_RUS];
959 } fapi_dig_beam_config_t_ue_sim;
960
961 // Updated per 5G FAPI
962 typedef struct PACK_STRUCT fapi_beamforming_table
963 {
964     uint16_t                    numDigBeams;
965 #ifndef FAPI_222_10_03
966     uint16_t                    numTxRus;
967 #else
968     uint16_t                    numBasebandPorts;
969 #endif
970     fapi_dig_beam_config_t_ue_sim      digBeam[MAX_NUMBER_OF_BEAMS];
971 } fapi_beamforming_table_t_ue_sim;
972
973 // Updated per 5G FAPI
974 typedef struct PACK_STRUCT fapi_precoderWeight
975 {
976     int16_t                     preCoderWeightRe;
977     int16_t                     preCoderWeightIm;
978 } fapi_precoderWeight_t_ue_sim;
979
980 // Updated per 5G FAPI
981 typedef struct PACK_STRUCT fapi_precoder_weight
982 {
983     fapi_precoderWeight_t_ue_sim       precoder_weight[MAX_NUM_ANT_PORTS];
984 } fapi_precoder_weight_t_ue_sim;
985
986 #ifdef FAPI_222_10_03
987 typedef struct PACK_STRUCT fapi_map_index
988 {
989     uint8_t                     numPart1Params;
990     uint8_t                     sizePart1Params[0]; /* Shall Not exced 12 */
991     uint16_t                    map[0];
992 }fapi_map_index_t;
993 // Updated per 5G FAPI
994 typedef struct PACK_STRUCT fapi_uci_config
995 {
996     fapi_tl_t_ue_sim            uciConfig;
997     uint16_t                    numUci2Maps;    
998     fapi_map_index_t            mapIndex[];
999 }fapi_uci_config_t;
1000
1001 // Updated per 5G FAPI
1002
1003 typedef struct PACK_STRUCT fapi_prb_sym_rate_match_pattern
1004 {
1005     uint8_t                     prbSymbRateMatchPatternID;
1006     uint8_t                     freqDomainRB[35];
1007     uint8_t                     oneOrTwoSlots;
1008     uint32_t                    symbolsInRB;
1009     uint8_t                     timeDomainPeriodicity;
1010     uint8_t                     timeDomainPattern[5];
1011     uint8_t                     subCarrierSpacing;
1012 }fapi_prb_sym_rate_match_pattern_t;
1013
1014 typedef struct PACK_STRUCT fapi_prb_symbol_rate_match_pattern
1015 {
1016     fapi_tl_t_ue_sim                    prbSymRateMatchPattern;
1017     uint8_t                             numPrbSymbRatePattern;
1018     fapi_prb_sym_rate_match_pattern_t   prbSymbRateMatchPatterns[];
1019 }fapi_prb_symbol_rate_match_pattern_t;
1020
1021 // Updated per 5G FAPI
1022 typedef struct PACK_STRUCT fapi_mbsfn_sf_config_list
1023 {
1024     uint8_t                     radioframeAllocationPeriod;
1025     uint8_t                     radioframeAllocationOffset;
1026     uint8_t                     lteFrameStructureType;
1027     uint8_t                     subframeAllocLength;
1028     uint32_t                    subframeAllocationBitmap; /* Ref: Table 3-42 LTE-CRS rate match patterns configuration*/
1029 }fapi_mbsfn_sf_config_list_t;
1030
1031 typedef struct PACK_STRUCT fapi_lte_crs_rm_ptrn    
1032 {
1033     uint8_t                     crsRateMatchPatternID;
1034     uint16_t                    carrierFreqDL;
1035     uint8_t                     carrierBandwidthDL;
1036     uint8_t                     nrCrsPorts;
1037     uint8_t                     vShift;
1038     uint8_t                     sizeMbsfnSubframeConfigList;
1039     fapi_mbsfn_sf_config_list_t mbsfnSFConfigList[0];
1040 }fapi_lte_crs_rm_ptrn_t;   
1041
1042 typedef struct PACK_STRUCT fapi_lte_crs_rm_pattern
1043 {
1044     fapi_tl_t_ue_sim            lteCrsRmPattern;
1045     uint8_t                     numLteCrsRmPattern;
1046     fapi_lte_crs_rm_ptrn_t      lteCrsRmPtrn[0];
1047 }fapi_lte_crs_rm_pattern_t;
1048
1049 // Updated per 5G Fapi
1050 typedef struct PACK_STRUCT fapi_ul_bwp_id
1051 {
1052     uint8_t                     pucchGroupHopping;
1053     uint16_t                    nIdPucchHopping;
1054 }fapi_ul_bwp_id_t;
1055
1056 typedef struct PACK_STRUCT fapi_pucch_semi_static_config
1057 {
1058     fapi_uint8_tlv_t_ue_sim            numUlBwpIds;
1059     fapi_ul_bwp_id_t            ulBwpId[0];
1060 }fapi_pucch_semi_static_config_t;
1061
1062 // Updated per 5G Fapi
1063 typedef struct PACK_STRUCT fapi_pdsch_config
1064 {
1065     fapi_uint8_tlv_t_ue_sim            pdschCbgScheme;
1066 }fapi_pdsch_config_t;
1067
1068 // Updated per 5G Fapi
1069 typedef struct PACK_STRUCT fapi_delay_mgmt_config
1070 {
1071     fapi_uint16_tlv_t_ue_sim           timingWindow;
1072     fapi_uint8_tlv_t_ue_sim            timingInfoMode;
1073     fapi_uint8_tlv_t_ue_sim            timingInfoPeriod;
1074 }fapi_delay_mgmt_config_t;
1075
1076 // Updated per 5G Fapi
1077 typedef struct PACK_STRUCT fapi_rel16_mtrp_config
1078 {
1079     fapi_uint8_tlv_t_ue_sim            numTxPortsTRP1;
1080     fapi_uint8_tlv_t_ue_sim            numRxPortsTRP1;
1081 }fapi_rel16_mtrp_config_t;
1082 #endif
1083 // Updated per 5G FAPI
1084 typedef struct PACK_STRUCT
1085 {
1086     uint16_t                    pmIdx;
1087     uint16_t                    numLayers;
1088     uint16_t                    numAntPorts;
1089     fapi_precoder_weight_t_ue_sim      precoderWeight[MAX_NUM_LAYERS];
1090 } fapi_precoding_table_t_ue_sim;
1091
1092 // Updated per 5G FAPI
1093 #ifdef FAPI_222_10_03
1094 typedef struct PACK_STRUCT fapi_config
1095 {
1096     fapi_phy_config_t                      phyConfig;
1097     fapi_carrier_config_t_ue_sim                  carrierConfig;
1098     fapi_cell_config_t_ue_sim                     cellConfig;
1099     fapi_ssb_pwr_pbch_config_t             ssbPowerPbchConfig;
1100     fapi_prach_configuration_t_ue_sim             prachConfig;
1101     fapi_multi_prach_config_t              multiPrachConfig;
1102     fapi_ssb_res_config_table_t            ssbResConfigTable;
1103     fapi_multi_ssb_resource_config_table_t multiSsbResourceConfigTable;
1104     fapi_tdd_table_t_ue_sim                       tddTable;
1105     fapi_meas_config_t_ue_sim                     measConfig;
1106     fapi_beamforming_table_t_ue_sim               beamformingTable;
1107     fapi_precoding_table_t_ue_sim                 precodingTable;
1108     fapi_uci_config_t                      uciConfig;
1109     fapi_prb_symbol_rate_match_pattern_t   prbSymRmPtrn;
1110     fapi_lte_crs_rm_pattern_t              lteCrsRmPtrn;
1111     fapi_pucch_semi_static_config_t        pucchSemiStaticConfig;
1112     fapi_pdsch_config_t                    pdschConfig;
1113     fapi_delay_mgmt_config_t               delayMgmtConfig;
1114     fapi_rel16_mtrp_config_t               rel16MtrpConfig;
1115 }fapi_config_t_ue_sim;
1116 #else
1117 typedef struct PACK_STRUCT fapi_config
1118 {
1119     fapi_carrier_config_t_ue_sim       carrierConfig;
1120     fapi_cell_config_t_ue_sim          cellConfig;
1121     fapi_ssb_config_t_ue_sim           ssbConfig;
1122     //fapi_prach_config_t         prachConfig;
1123     fapi_prach_configuration_t_ue_sim  prachConfig;
1124     fapi_ssb_table_t_ue_sim            ssbTable;
1125     fapi_tdd_table_t_ue_sim            tddTable;
1126     fapi_meas_config_t_ue_sim          measConfig;
1127     fapi_beamforming_table_t_ue_sim    beamformingTable;
1128     fapi_precoding_table_t_ue_sim      precodingTable;
1129 }fapi_config_t_ue_sim;
1130 #endif
1131 // Updated per 5G FAPI
1132 typedef struct PACK_STRUCT fapi_config_req
1133 {
1134     fapi_msg_header_t_ue_sim    header;
1135     uint8_t                     number_of_tlvs;
1136     fapi_uint16_tlv_t_ue_sim           tlvs[MAX_NUM_TLVS_CONFIG];
1137 } fapi_config_req_t_ue_sim;
1138
1139 // Updated per 5G FAPI
1140 typedef struct PACK_STRUCT fapi_config_resp
1141 {
1142     fapi_msg_header_t_ue_sim    header;
1143     uint8_t                     error_code;
1144     uint8_t                     number_of_invalid_tlvs;
1145     uint8_t                     number_of_inv_tlvs_idle_only;
1146     uint8_t                     number_of_inv_tlvs_running_only;        
1147     uint8_t                     number_of_missing_tlvs;
1148     fapi_uint16_tlv_t_ue_sim           tlvs[4 * MAX_NUM_TLVS_CONFIG];
1149 //   fapi_uint16_tlv_t_ue_sim           unsupported_or_invalid_tlvs[MAX_NUMBER_UNSUPPORTED_TLVS];
1150 //   fapi_uint16_tlv_t_ue_sim           invalid_idle_only_tlvs[MAX_NUMBER_OF_INVALID_IDLE_ONLY_TLVS];
1151 //   fapi_uint16_tlv_t_ue_sim           invalid_running_only_tlvs[MAX_NUMBER_OF_INVALID_RUNNING_ONLY_TLVS];
1152 //   fapi_uint16_tlv_t_ue_sim           missing_tlvs[MAX_NUMBER_OF_MISSING_TLVS];
1153 } fapi_config_resp_t_ue_sim;
1154
1155 // Updated per 5G FAPI
1156 typedef struct PACK_STRUCT fapi_start_req
1157 {
1158     fapi_msg_header_t_ue_sim           header;  // Message Length is zero for START.request
1159 } fapi_start_req_t_ue_sim;
1160
1161 // Updated per 5G FAPI
1162 typedef struct PACK_STRUCT fapi_stop_req
1163 {
1164     fapi_msg_header_t_ue_sim           header;  // Message Length is zero for STOP.request
1165 } fapi_stop_req_t_ue_sim;
1166
1167 // Updated per 5G FAPI
1168 typedef struct PACK_STRUCT fapi_stop_ind
1169 {
1170     fapi_msg_header_t_ue_sim           header; // Message Length is zero for STOP.indication
1171 } fapi_stop_ind_t_ue_sim;
1172
1173 // Updated per 5G FAPI
1174 typedef struct PACK_STRUCT fapi_error_ind
1175 {
1176     fapi_msg_header_t_ue_sim    header;
1177     uint16_t                    sfn;
1178     uint16_t                    slot;
1179     uint8_t                     message_id;
1180     uint8_t                     error_code;
1181 #ifdef FAPI_222_10_03
1182     uint16_t                    expectedSFN;
1183     uint16_t                    expectedSlot;
1184 #endif
1185 } fapi_error_ind_t_ue_sim;
1186
1187 // Updated per 5G FAPI
1188 typedef struct PACK_STRUCT fapi_slot_ind
1189 {
1190     fapi_msg_header_t_ue_sim    header;
1191     uint16_t                    sfn;
1192     uint16_t                    slot;
1193 } fapi_slot_ind_t_ue_sim;
1194
1195 #ifdef FAPI_222_10_03
1196 /* Ref: section 3.1.9 of* SCF-225 */
1197 typedef struct PACK_STRUCT fapi_start_resp
1198 {
1199   fapi_msg_header_t_ue_sim    header;
1200   uint8_t                     errorCode;
1201 }fapi_start_resp_t;
1202 #endif
1203 // Updated per 5G FAPI
1204 typedef struct PACK_STRUCT fapi_bmi
1205 {
1206     uint16_t                    beamidx;
1207 } fapi_bmi_t_ue_sim;
1208
1209 // Updated per 5G FAPI
1210 typedef struct PACK_STRUCT fapi_pmi_bfi
1211 {
1212     uint16_t                    pm_idx;
1213     fapi_bmi_t_ue_sim                  beam_idx[];
1214 } fapi_pmi_bfi_t_ue_sim;
1215
1216 // Updated per 5G FAPI
1217 typedef struct PACK_STRUCT fapi_bmform
1218 {
1219 #ifndef FAPI_222_10_03
1220     uint8_t                     trpScheme;
1221 #endif
1222     uint16_t                    num_prgs;
1223     uint16_t                    prg_size;
1224     uint8_t                     dig_bf_interfaces;
1225     uint16_t                    beam_idx[][1];
1226 } fapi_bmform_t;
1227
1228 // Updated per 5G FAPI
1229 typedef struct PACK_STRUCT fapi_precoding_bmform
1230 {
1231 #ifndef FAPI_222_10_03
1232     uint8_t                     trpScheme;
1233 #endif
1234     uint16_t                    num_prgs;
1235     uint16_t                    prg_size;
1236     uint8_t                     dig_bf_interfaces;
1237     fapi_pmi_bfi_t_ue_sim              pmi_bfi[1];
1238 } fapi_precoding_bmform_t_ue_sim;
1239
1240 // Updated per 5G FAPI
1241 typedef struct PACK_STRUCT fapi_tx_power_info
1242 {
1243     uint8_t                     beta_pdcch_1_0;
1244 #ifndef FAPI_222_10_03
1245     uint8_t                     power_control_ofsset_ss;
1246 #else
1247     int8_t                      powerControlOffsetSSProfileNR;
1248 #endif
1249 } fapi_tx_power_info_t;
1250
1251 // Updated per 5G FAPI
1252 typedef struct PACK_STRUCT fapi_bwp
1253 {
1254     uint16_t                    bwp_size;   /* BWP configuration Start */
1255     uint16_t                    bwp_start;
1256     uint8_t                     sub_carrier_spacing;
1257     uint8_t                     cyclic_prefix;    /* BWP Configuration End*/
1258 }fapi_bwp_t;
1259
1260 // Updated per 5G FAPI
1261 typedef struct PACK_STRUCT fapi_coreset
1262 {
1263     uint8_t                     start_symbol_index;  /* Coreset Configuration Start */
1264     uint8_t                     duration_symbols;
1265     uint8_t                     freq_domain_resource[FAPI_MAX_FREQ_DOMAIN_RES];
1266     uint8_t                     cce_reg_mapping_type;
1267     uint8_t                     reg_bundle_size;
1268     uint8_t                     interleaver_size;
1269     uint8_t                     core_set_type;
1270     uint16_t                    shift_index;
1271     uint8_t                     precoder_granularity;   /* Coreset Configuration End */
1272 }fapi_coreset_t;
1273
1274 // Updated per 5G FAPI
1275 typedef struct PACK_STRUCT fapi_dl_dci
1276 {
1277     uint16_t                    rnti;
1278 #ifdef FAPI_222_10_03
1279     uint16_t                    nIdPdcchData;
1280     uint16_t                    nRntiPdcchData;
1281 #else
1282     uint16_t                    scrambling_id;
1283     uint16_t                    scrambling_rnti;
1284 #endif
1285     uint8_t                     cce_index;
1286     uint8_t                     aggregation_level;
1287     fapi_precoding_bmform_t_ue_sim     pc_and_bform;
1288     fapi_tx_power_info_t        tx_power_info;
1289     uint16_t                    payload_size_bits;
1290     uint8_t                     payload[];
1291 } fapi_dl_dci_t_ue_sim;
1292 #ifdef FAPI_222_10_03
1293 typedef struct PACK_STRUCT fapi_coreset_parms
1294 {
1295     uint16_t                    pdcchPduIndex;  
1296     uint16_t                    nIdPdcchDmrs;  
1297 } fapi_coreset_parms_t;
1298
1299 typedef struct PACK_STRUCT fapi_dci_specific_parms
1300 {
1301     uint16_t                     dciIndex;
1302     uint8_t                      collocatedAl16Candidate;
1303     int16_t                      pdcchDmrsPowerOffsetProfileSSS;
1304     int16_t                      pdcchDataPowerOffsetProfileSSS;  
1305 } fapi_dci_specific_parms_t;
1306
1307 typedef struct PACK_STRUCT fapi_pdcch_mnt_parms 
1308 {
1309     fapi_coreset_parms_t       coresetParms;
1310     fapi_dci_specific_parms_t  dciSpecificParms;
1311 } fapi_pdcch_mnt_parms_t;
1312 #endif
1313 // Updated per 5G FAPI
1314 typedef struct PACK_STRUCT fapi_dl_pdcch_pdu
1315 {
1316    fapi_bwp_t                  bwp;
1317    fapi_coreset_t              coreset;
1318    uint16_t                    num_dl_dci; /*Number of DCIs in this CORESET */      
1319    fapi_dl_dci_t_ue_sim               dl_dci[0];
1320 #ifdef FAPI_222_10_03
1321    fapi_pdcch_mnt_parms_t      pdcchMntParms;
1322 #endif
1323 } fapi_dl_pdcch_pdu_t_ue_sim;
1324 // Updated per 5G FAPI
1325 typedef struct PACK_STRUCT fapi_codeword_pdu
1326 {
1327     uint16_t                    target_code_rate;
1328     uint8_t                     qam_mod_order;
1329     uint8_t                     mcs_index;
1330     uint8_t                     mcs_table;
1331     uint8_t                     rv_index;
1332     uint32_t                    tb_size;
1333 } fapi_codeword_pdu_t_ue_sim;
1334
1335 // Updated per 5G FAPI
1336 typedef struct PACK_STRUCT fapi_dmrs
1337 {
1338     uint16_t                    dl_dmrs_symb_pos; /*SCF: DMRS Config Start */
1339     uint8_t                     dmrs_config_type;
1340     uint16_t                    dl_dmrs_scrambling_id;
1341     uint8_t                     scid;
1342     uint8_t                     num_dmrs_cdm_grps_no_data;
1343     uint16_t                    dmrs_ports;   /*SCF: DMRS Config End */
1344 }  fapi_dmrs_t;
1345
1346 // Updated per 5G FAPI
1347 typedef struct PACK_STRUCT fapi_pdsch_freq_dom_alloc
1348 {
1349     uint8_t                     resource_alloc; /*SCF: PDSCH Allocation in Frequency Domain Start */
1350     uint8_t                     rb_bitmap[36];
1351     uint16_t                    rb_start;
1352     uint16_t                    rb_size;    
1353     uint8_t                     vrb_to_prb_mapping;/*SCF : PDSCH Allocation in Frequency Domain End */
1354 }  fapi_pdsch_freq_dom_alloc_t;
1355
1356 // Updated per 5G FAPI
1357 typedef struct PACK_STRUCT fapi_pdsch_time_dom_alloc
1358 {
1359     uint8_t                     start_symb_index;/*SCF : PDSCH Allocation in Time Domain Start */
1360     uint8_t                     nr_of_symbols;  /*SCF : PDSCH Allocation in Time Domain End */
1361 }  fapi_pdsch_time_dom_alloc_t;
1362
1363 typedef struct PACK_STRUCT  fapi_dl_pdsch_ptrs_info
1364 {
1365     uint8_t                     ptrs_port_index;
1366     uint8_t                     ptrs_time_density;
1367     uint8_t                     ptrs_freq_density;
1368     uint8_t                     ptrs_re_offset;
1369     uint8_t                     n_epre_ratio_of_pdsch_to_ptrs;
1370
1371 } fapi_dl_pdsch_ptrs_info_t;
1372
1373 // Updated per 5G FAPI
1374 typedef struct PACK_STRUCT fapi_tx_pwr_info
1375 {
1376 #ifndef FAPI_222_10_03
1377     uint8_t                     power_control_offset; /*SCF : TX Power Info Start */
1378     uint8_t                     power_control_offset_ss; /*SCF : Tx Power Info End */
1379 #else
1380     uint8_t                     powerControlOffsetProfileNR; /*SCF : TX Power Info Start */
1381     uint8_t                     powerControlOffsetSSProfileNR; /*SCF : Tx Power Info End */
1382 #endif
1383 }  fapi_tx_pwr_info_t;
1384
1385 typedef struct PACK_STRUCT fapi_dl_pdsch_cbg_info
1386 {
1387    uint8_t                     is_last_cb_present;
1388    uint8_t                     is_inline_tb_crc;
1389 #ifndef FAPI_222_10_03
1390    uint32_t                    dl_tb_crc;
1391 #else
1392    uint32_t                    dlTbCrc[2];
1393 #endif
1394
1395 }  fapi_dl_pdsch_cbg_info_t;
1396
1397 #ifdef FAPI_222_10_03
1398 typedef struct PACK_STRUCT fapi_dl_prb_sym_rm_patrn_by_val
1399 {
1400     uint8_t                    freqDomainRB[35];
1401     uint16_t                   symbolsInRB;  
1402 } fapi_dl_prb_sym_rm_patrn_by_val_t;
1403
1404 typedef struct PACK_STRUCT fapi_dl_coreset_rm_patrn
1405 {
1406     uint8_t                    freqDomainResources[6];
1407     uint16_t                   symbolsPatrn;
1408 } fapi_dl_coreset_rm_patrn_t;
1409
1410
1411 typedef struct PACK_STRUCT fapi_dl_rate_match_ref
1412 {
1413     uint8_t                            ssbPdusForRateMatching[2];
1414     uint8_t                            ssbConfigForRateMatching;
1415     uint8_t                            prbSymRmPatrnBitmapSizeByRef;
1416     uint8_t                            prbSymRmPatrnBitmapByRef[0];  // side depends on ceil(prbSymRmPatrnBitmapSizeByRef / 8) 
1417     uint8_t                            numPrbSymRmPatrnByVal; 
1418     fapi_dl_prb_sym_rm_patrn_by_val_t  prbSymRmPatrnByValue[0];
1419     uint8_t                            numCoresetRmPatrn;
1420     fapi_dl_coreset_rm_patrn_t         coresetRmPatrn[0];
1421     uint16_t                           pdcchPduIndex;
1422     uint16_t                           dciIndex;
1423     uint8_t                            lteCrsRaMaPatrnBitmapSize;
1424     uint8_t                            lteCrsRaMaPatrn[0]; // side depends on ceil(lteCrsRaMaPatrnBitmapSize / 8)
1425     uint8_t                            numCsiRsForRaMa;
1426     uint16_t                           csiRsForRaMa[0];  // side depends on numCsiRsForRaMa   
1427     
1428 } fapi_dl_rate_match_ref_t;
1429
1430 typedef struct PACK_STRUCT fapi_dl_code_word
1431 {
1432     uint8_t                    cbgTxInfo;
1433 } fapi_dl_code_word_t;
1434
1435 typedef struct PACK_STRUCT fapi_dl_tx_pwr_info
1436 {
1437     uint16_t                   pdschDmrsPwrOffsetPrfSSS;
1438     uint16_t                   pdschDataPwrOffsetPrfSSS;
1439     uint8_t                    maxNumCbgPerTb;
1440     fapi_dl_code_word_t        codeWord[0];
1441 } fapi_dl_tx_pwr_info_t;
1442
1443 typedef struct PACK_STRUCT fapi_dl_codeword_info
1444 {
1445     uint8_t                    ldpcBaseGraph;
1446     uint32_t                   tbSizeLbrmBytes;
1447     uint8_t                    tbCrcRequired;
1448
1449 } fapi_dl_codeword_info_t;
1450
1451 typedef struct PACK_STRUCT fapi_dl_pdsch_mnt_parms
1452 {
1453     uint8_t                    pdschTransType;
1454     uint16_t                   coresetStartPoint;
1455     uint16_t                   initialDlBwpSize;
1456     fapi_dl_codeword_info_t    codewordInfo;
1457     fapi_dl_rate_match_ref_t   rateMatchRef;
1458     fapi_dl_tx_pwr_info_t      txPwrInfo;
1459 } fapi_dl_pdsch_mnt_parms_t;
1460
1461 typedef struct PACK_STRUCT fapi_dl_ptrs_tx_pwr_info
1462
1463     uint16_t                    pdschPtrsPwrOffsetPrfSSS;  
1464 }fapi_dl_ptrs_tx_pwr_info_t; 
1465
1466 typedef struct PACK_STRUCT  fapi_dl_pdsch_ptrs_mnt_parms
1467 {
1468     fapi_dl_ptrs_tx_pwr_info_t  txPwrInfo;  
1469 } fapi_dl_pdsch_ptrs_mnt_parms_t;
1470
1471 typedef struct PACK_STRUCT fapi_dl_pdsch_ptrs2
1472 {
1473     uint8_t                      ptrsPortIndex;
1474     uint8_t                      ptrsTimeDensity;
1475     uint8_t                      ptrsFreqDensity; 
1476     uint8_t                      ptrsReOffset; 
1477     uint8_t                      nEpreRatOfPdschToPtrsProfNR; 
1478 } fapi_dl_pdsch_ptrs2_t;
1479
1480 typedef struct PACK_STRUCT fapi_dl_pdsch_ptrsv3
1481 {
1482     fapi_dl_ptrs_tx_pwr_info_t  txPwrInfo;  
1483 }fapi_dl_pdsch_ptrsv3_t;
1484
1485 typedef struct PACK_STRUCT fapi_dl_rel16_pdsch_parms_t
1486 {
1487     uint8_t                     repetitionScheme;
1488     fapi_dl_pdsch_ptrs2_t       pdschPtrs2;
1489     fapi_dl_pdsch_ptrsv3_t      pdschPtrsV3;
1490 } fapi_dl_rel16_pdsch_parms_t;
1491 #endif
1492 // Updated per 5G FAPI
1493 typedef struct PACK_STRUCT fapi_dl_pdsch_pdu
1494 {
1495     uint16_t                         pdu_bit_map; /* Bit 0: pdschPtrs - Indicates PTRS included (FR2)
1496                                                 Bit 1:cbgRetxCtrl (Present when CBG based retransmit is used) */
1497     uint16_t                         rnti;
1498     uint16_t                         pdu_index;
1499     fapi_bwp_t                       bwp;
1500     uint8_t                          nr_of_code_words; /* SCF : Code Word Info Start */
1501     fapi_codeword_pdu_t_ue_sim              cw_info[FAPI_MAX_NUM_CW];       /* SCF : Code Word Info End */
1502 #ifdef FAPI_222_10_03
1503     uint16_t                         nIdPdsch;
1504 #else 
1505     uint16_t                         data_scrambling_id;
1506 #endif
1507     uint8_t                          nr_of_layers;
1508     uint8_t                          transmission_scheme;
1509     uint8_t                          ref_point;
1510     fapi_dmrs_t                      dmrs;
1511     fapi_pdsch_freq_dom_alloc_t      pdsch_freq_dom_alloc;
1512     fapi_pdsch_time_dom_alloc_t      pdsch_time_dom_alloc; 
1513     fapi_dl_pdsch_ptrs_info_t        pdsch_ptrs_info;
1514     fapi_precoding_bmform_t_ue_sim          pre_coding_and_beamforming;
1515     fapi_tx_pwr_info_t               tx_pwr_info;
1516     fapi_dl_pdsch_cbg_info_t         cbg_info;
1517 #ifdef FAPI_222_10_03
1518     fapi_dl_pdsch_mnt_parms_t        dlPdschMntparms;
1519     fapi_dl_pdsch_ptrs_mnt_parms_t   dlPdschPtrsMntParms;
1520     fapi_dl_rel16_pdsch_parms_t      rel16PdschParms;
1521 #endif
1522 } fapi_dl_pdsch_pdu_t_ue_sim;
1523
1524 #ifdef FAPI_222_10_03
1525 typedef struct PACK_STRUCT fapi_basic_parms
1526 {
1527     uint16_t         csiRsPduIndex;            
1528 } fapi_basic_parms_t;
1529
1530 typedef struct PACK_STRUCT ifapi_csi_rs_tx_pwr_info
1531 {
1532     uint16_t         csiRsPowerOffsetProfileSSS; 
1533 } fapi_csi_rs_tx_pwr_info_t;
1534
1535
1536 typedef struct PACK_STRUCT fapi_dl_csi_rs_mnt_parms
1537 {
1538     fapi_basic_parms_t          basic;
1539     fapi_csi_rs_tx_pwr_info_t   txPwrInfo;
1540 }fapi_dl_csi_rs_mnt_parms_t;
1541 #endif
1542
1543 // Updated per 5G FAPI
1544 typedef struct PACK_STRUCT fapi_dl_csi_rs_pdu
1545 {
1546 #ifdef FAPI_222_10_03
1547     uint8_t                     subCarrierSpacing;
1548     uint8_t                     cyclicPrefix;    /* BWP Configuration End*/
1549 #else
1550     fapi_bwp_t                  bwp;
1551 #endif
1552     uint16_t                    start_rb;
1553     uint16_t                    nr_of_rbs;
1554     uint8_t                     csi_type;
1555     uint8_t                     row;
1556     uint16_t                    freq_domain;
1557     uint8_t                     symb_l0;
1558     uint8_t                     symb_l1;
1559     uint8_t                     cdm_type;
1560     uint8_t                     freq_density;
1561     uint16_t                    scram_id;
1562     fapi_tx_pwr_info_t          tx_pwr_info;
1563     fapi_precoding_bmform_t_ue_sim     pre_coding_and_beamforming;
1564 #ifdef FAPI_222_10_03
1565     fapi_dl_csi_rs_mnt_parms_t  csiRsMntParms;
1566 #endif
1567 } fapi_dl_csi_rs_pdu_t_ue_sim;
1568
1569 // Updated per 5G FAPI
1570 typedef struct PACK_STRUCT fapi_phy_mib_pdu
1571 {
1572     uint8_t                     dmrs_type_a_position;
1573     uint8_t                     pdcch_config_sib1;
1574     uint8_t                     cell_barred;
1575     uint8_t                     intra_freq_reselction;
1576 } fapi_phy_mib_pdu_t_ue_sim;
1577
1578 // Updated per 5G FAPI
1579 typedef struct PACK_STRUCT fapi_bch_payload
1580 {
1581     union
1582     {
1583         uint32_t                bch_payload;
1584         fapi_phy_mib_pdu_t_ue_sim      phy_mib_pdu;
1585     } u;
1586 } fapi_bch_payload_t_ue_sim;
1587
1588 #ifdef FAPI_222_10_03
1589 typedef struct PACK_STRUCT fapi_ssb_basic_parms
1590 {
1591     uint8_t                     ssbPduIndex;
1592     uint8_t                     cases;
1593     uint8_t                     subcarrierSpacing;
1594     uint8_t                     lMax;
1595 } fapi_ssb_basic_parms_t;
1596
1597 typedef struct PACK_STRUCT fapi_ssb_tx_pwr_info
1598 {
1599     uint16_t                    ssPbchBlockPowerScaling;
1600     uint16_t                    betaPSSProfileSSS;
1601 } fapi_ssb_tx_pwr_info_t;
1602
1603 typedef struct PACK_STRUCT fapi_dl_ssb_pbch_mnt_parms
1604 {
1605     fapi_ssb_basic_parms_t            basicParams;
1606     fapi_ssb_tx_pwr_info_t            tx_pwr_info;
1607 }fapi_dl_ssb_pbch_mnt_parms_t;
1608
1609 #endif
1610
1611 // Updated per 5G FAPI
1612 typedef struct PACK_STRUCT fapi_dl_ssb_pdu
1613 {
1614
1615     uint16_t                      phys_cell_id;
1616 #ifdef FAPI_222_10_03
1617     uint8_t                       betaPssProfileNR;
1618 #else
1619     uint8_t                       beta_pss;
1620 #endif
1621     uint8_t                       ssb_block_index;
1622     uint8_t                       ssb_sub_carrier_offset;
1623     uint16_t                      ssb_offset_point_a;
1624     uint8_t                       bch_payload_flag;
1625     fapi_bch_payload_t_ue_sim            bch_payload;
1626     fapi_precoding_bmform_t_ue_sim       pre_coding_and_beamforming;
1627 #ifdef FAPI_222_10_03
1628     fapi_dl_ssb_pbch_mnt_parms_t  ssbPbchMntParms;
1629 #endif 
1630 }  fapi_dl_ssb_pdu_t_ue_sim;
1631
1632 // Updated per 5G FAPI
1633 typedef struct PACK_STRUCT fapi_dl_tti_req_pdu
1634 {
1635     uint16_t                    pdu_type;
1636     uint16_t                    pdu_size;
1637     union
1638     {
1639         fapi_dl_pdcch_pdu_t_ue_sim        pdcch_pdu;
1640         fapi_dl_pdsch_pdu_t_ue_sim        pdsch_pdu;
1641         fapi_dl_csi_rs_pdu_t_ue_sim       csi_rs_pdu;
1642         fapi_dl_ssb_pdu_t_ue_sim          ssb_pdu;
1643     }u;
1644 } fapi_dl_tti_req_pdu_t_ue_sim;
1645
1646 // Updated per 5G FAPI
1647 typedef struct PACK_STRUCT fapi_ue_info
1648 {
1649     uint8_t                     n_ue;
1650     uint8_t                     pdu_idx[];
1651 } fapi_ue_info_t_ue_sim;        
1652
1653 // Updated per 5G FAPI
1654 typedef struct PACK_STRUCT fapi_dl_tti_req
1655 {
1656     fapi_msg_header_t_ue_sim    header;
1657     uint16_t                    sfn;
1658     uint16_t                    slot;
1659 #ifdef FAPI_222_10_03
1660     uint16_t                    n_pdus;
1661     uint8_t                     nDlTypes;
1662     uint16_t                    nPDUsOfEachType[MAX_NDLTYPES_DL_TTI_REQ]; 
1663 #else
1664     uint8_t                     n_pdus;
1665 #endif
1666     uint8_t                     n_group;
1667     fapi_dl_tti_req_pdu_t_ue_sim       pdus[0];
1668     fapi_ue_info_t_ue_sim              ueGrpInfo[0];
1669 } fapi_dl_tti_req_t_ue_sim;
1670 #ifdef FAPI_222_10_03
1671 typedef struct PACK_STRUCT fapi_pRACH_Mntnc_param
1672 {
1673    uint32_t                     handle;   
1674    uint8_t                      prachConfigScope;
1675    uint16_t                     prachResConfigIndex;
1676    uint8_t                      numFdRa;
1677    uint8_t                      startPreambleIndex;
1678    uint8_t                      numPreambleIndices;
1679 }fapi_pRACH_Mntnc_param_t;
1680 #endif
1681 // Updated per 5G FAPI
1682 typedef struct PACK_STRUCT fapi_ul_prach_pdu
1683 {
1684     uint16_t                    phys_cell_id;
1685     uint8_t                     num_prach_ocas;
1686     uint8_t                     prach_format;
1687 #ifdef FAPI_222_10_03
1688     uint8_t                     indexFdRa;
1689 #else
1690     uint8_t                     num_ra;
1691 #endif
1692     uint8_t                     prach_start_symbol;
1693     uint16_t                    num_cs;
1694     fapi_bmform_t               beamforming;
1695 #ifdef FAPI_222_10_03
1696     fapi_pRACH_Mntnc_param_t    pRACH_Mntnc;       
1697 #endif        
1698 } fapi_ul_prach_pdu_t_ue_sim;
1699
1700
1701 // Updated per 5G FAPI
1702 typedef struct PACK_STRUCT fapi_pusch_data
1703 {
1704     uint8_t                     rv_index;
1705     uint8_t                     harq_process_id;
1706     uint8_t                     new_data_indicator;
1707     uint32_t                    tb_size;
1708     uint16_t                    num_cb;
1709     uint8_t                     cb_present_and_position[1];
1710 } fapi_pusch_data_t_ue_sim;
1711
1712 // Updated per 5G FAPI
1713 typedef struct PACK_STRUCT fapi_pusch_uci
1714 {
1715     uint16_t                    harq_ack_bit_length;
1716     uint16_t                    csi_part1_bit_length;
1717 #ifdef FAPI_222_10_03
1718     uint16_t                    flagCsiPart2;
1719 #else
1720     uint16_t                    csi_part2_bit_length;
1721 #endif
1722     uint8_t                     alpha_scaling;
1723     uint8_t                     beta_offset_harq_ack;
1724     uint8_t                     beta_offset_csi1;
1725     uint8_t                     beta_offset_csi2;
1726 } fapi_pusch_uci_t_ue_sim;
1727
1728 // Updated per 5G FAPI
1729 typedef struct PACK_STRUCT fapi_ptrs_info
1730 {
1731     uint16_t                    ptrs_port_index;
1732     uint8_t                     ptrs_dmrs_port;
1733     uint8_t                     ptrs_re_offset;
1734 } fapi_ptrs_info_t_ue_sim;
1735
1736 // Updated per 5G FAPI
1737 typedef struct PACK_STRUCT fapi_pusch_ptrs
1738 {
1739     uint8_t                     num_ptrs_ports;
1740     fapi_ptrs_info_t_ue_sim            ptrs_info[MAX_NUM_PTRS_PORTS];
1741     uint8_t                     ptrs_time_density;
1742     uint8_t                     ptrs_freq_density;
1743     uint8_t                     ul_ptrs_power;
1744 } fapi_pusch_ptrs_t_ue_sim;
1745
1746 // Updated per 5G FAPI
1747 typedef struct PACK_STRUCT fapi_dfts_ofdm
1748 {
1749     uint8_t                     low_papr_group_number;
1750     uint16_t                    low_papr_sequence_number;
1751     uint8_t                     ul_ptrs_sample_density;
1752     uint8_t                     ul_ptrs_time_density_transform_precoding;
1753 } fapi_dfts_ofdm_t_ue_sim;
1754
1755 #ifdef FAPI_222_10_03
1756 typedef struct PACK_STRUCT fapi_pusch_mnt_parms
1757 {
1758     uint8_t                     puschTransType;
1759     uint16_t                    deltaBwp0StartFromActiveBwp;
1760     uint16_t                    initialUlBwpSize;
1761     uint8_t                     groupOrSequenceHopping;
1762     uint16_t                    puschSecondHopPRB;
1763     uint8_t                     ldpcBaseGraph;
1764     uint32_t                    tbSizeLbrmBytes; 
1765 } fapi_pusch_mnt_parms_t;
1766
1767 typedef struct PACK_STRUCT fapi_part2_parms
1768 {
1769     uint16_t                    priority;
1770     uint8_t                     numPart1Params;
1771     uint16_t                    paramOffsets[0];
1772     uint8_t                     paramSizes[0];
1773     uint16_t                    part2SizeMapIndex;      
1774 } fapi_part2_parms_t;
1775
1776 typedef struct PACK_STRUCT fapi_optional_pusch_uci
1777 {
1778     uint16_t                    numPart2s;
1779     fapi_part2_parms_t          part2_parms[0]; 
1780 } fapi_optional_pusch_uci_t;
1781 #endif
1782
1783 // Updated per 5G FAPI
1784 typedef struct PACK_STRUCT fapi_ul_pusch_pdu
1785 {
1786     uint16_t                    pdu_bitmap;
1787     uint16_t                    rnti;
1788     uint32_t                    handle;
1789 #ifdef  VZ_VERIPHY_INTEG
1790     fapi_bwp_t                  bwp;
1791 #else
1792     uint16_t                    bwp_size;
1793     uint16_t                    bwp_start;
1794     uint8_t                     sub_carrier_spacing;
1795     uint8_t                     cyclic_prefix;
1796 #endif  
1797     uint16_t                    target_code_rate;
1798     uint8_t                     qam_mod_order;
1799     uint8_t                     mcs_index;
1800     uint8_t                     mcs_table;
1801     uint8_t                     transform_precoding;
1802 #ifdef FAPI_222_10_03
1803     uint16_t                    nIdPusch;
1804 #else
1805     uint16_t                    data_scrambling_id;
1806 #endif
1807     uint8_t                     nr_of_layers;
1808     uint16_t                    ul_dmrs_symb_pos;
1809     uint8_t                     dmrs_config_type;
1810     uint16_t                    ul_dmrs_scrambling_id;
1811     uint16_t                    pusch_identity;
1812 #ifdef FAPI_222_10_03
1813     uint8_t                     nScid;
1814 #else
1815     uint8_t                     scid;
1816 #endif
1817     uint8_t                     num_dmrs_cdm_grps_no_data;
1818     uint16_t                    dmrs_ports;
1819     uint8_t                     resource_alloc;
1820     uint8_t                     rb_bitmap[36];
1821     uint16_t                    rb_start;
1822     uint16_t                    rb_size;
1823     uint8_t                     vrb_to_prb_mapping;
1824 #ifdef FAPI_222_10_03
1825     uint8_t                     IntraSlotFrequencyHopping;
1826 #else
1827     uint8_t                     frequency_hopping;
1828 #endif
1829     uint16_t                    tx_direct_current_location;
1830     uint8_t                     uplink_frequency_shift7p5khz;
1831     uint8_t                     start_symb_index;
1832     uint8_t                     nr_of_symbols;
1833     fapi_pusch_data_t_ue_sim           pusch_data;
1834     fapi_pusch_uci_t_ue_sim            pusch_uci;
1835     fapi_pusch_ptrs_t_ue_sim           pusch_ptrs;
1836     fapi_dfts_ofdm_t_ue_sim            dfts_ofdm;
1837     fapi_bmform_t               beamforming;
1838 #ifdef FAPI_222_10_03
1839     fapi_pusch_mnt_parms_t      puschMntParms;
1840     fapi_optional_pusch_uci_t   optionalPuschUci; 
1841 #endif
1842 } fapi_ul_pusch_pdu_t_ue_sim;
1843 #ifdef FAPI_222_10_03
1844 typedef struct PACK_STRUCT fapi_pUCCH_Mntnnc_params
1845 {
1846     uint8_t                     maxCodeRate;
1847     uint8_t                     ulBwpId;
1848 } fapi_pucch_mntnnc_params_t;
1849 typedef struct PACK_STRUCT fapi_uci_part2
1850 {
1851     uint16_t                    priority;
1852     uint8_t                     numPart1Params;
1853     uint16_t                    paramOffsets[0];
1854     uint8_t                     paramSizes[0];
1855     uint8_t                     part2SizeMapIndex;
1856 }fapi_uci_part2_t;
1857 typedef struct PACK_STRUCT fapi_uci_part1_part2
1858 {
1859     uint16_t                    numPart2s;
1860     fapi_uci_part2_t            uci_part2[0];
1861 } fapi_uci_part1_part2_t;
1862 #endif
1863 // Updated per 5G FAPI
1864 typedef struct PACK_STRUCT fapi_ul_pucch_pdu
1865 {
1866     uint16_t                    rnti;
1867     uint32_t                    handle;
1868 #ifdef VZ_VERIPHY_INTEG
1869     fapi_bwp_t                  bwp;
1870 #else
1871     uint16_t                    bwp_size;
1872     uint16_t                    bwp_start;
1873     uint8_t                     sub_carrier_spacing;
1874     uint8_t                     cyclic_prefix;
1875 #endif  
1876     uint8_t                     format_type;
1877     uint8_t                     multi_slot_tx_indicator;
1878     uint8_t                     pi2_bpsk;
1879     uint16_t                    prb_start;
1880     uint16_t                    prb_size;
1881     uint8_t                     start_symbol_index;
1882     uint8_t                     nr_of_symbols;
1883 #ifdef FAPI_222_10_03
1884     uint8_t                     intraSlotFrequencyHopping;
1885 #else
1886     uint8_t                     freq_hop_flag;
1887 #endif
1888     uint16_t                    second_hop_prb;
1889 #ifdef FAPI_222_10_03
1890     uint8_t                     pucchGroupHopping;
1891     uint8_t                     obsolete8bit;
1892     uint8_t                     nIdPucchHopping;
1893 #else
1894     uint8_t                     group_hop_flag;
1895     uint8_t                     sequence_hop_flag;
1896     uint16_t                    hopping_id;
1897 #endif
1898     uint16_t                    initial_cyclic_shift;
1899 #ifdef FAPI_222_10_03
1900     uint16_t                    nIdPucchScrambling;
1901 #else
1902     uint16_t                    data_scrambling_id;
1903 #endif
1904     uint8_t                     time_domain_occ_idx;
1905     uint8_t                     pre_dft_occ_idx;
1906     uint8_t                     pre_dft_occ_len;
1907     uint8_t                     add_dmrs_flag;
1908     uint16_t                    dmrs_scrambling_id;
1909     uint8_t                     dmrs_cyclic_shift;
1910     uint8_t                     sr_flag;
1911     uint16_t                    bit_len_harq;
1912 #ifdef FAPI_222_10_03
1913     uint16_t                    csiPart1BitLength;
1914 #else
1915     uint16_t                    bit_len_csi_part1;
1916     uint16_t                    bit_len_csi_part2;
1917 #endif
1918     fapi_bmform_t               beamforming;
1919 #ifdef FAPI_222_10_03
1920     fapi_pucch_mntnnc_params_t  pucch_basicextension;
1921     fapi_uci_part1_part2_t      uci_part1_part2;
1922 #endif
1923 } fapi_ul_pucch_pdu_t_ue_sim;
1924
1925 // Updated per 5G FAPI
1926 typedef struct PACK_STRUCT fapi_ul_srs_pdu
1927 {
1928     uint16_t                    rnti;
1929     uint32_t                    handle;
1930 #ifdef VZ_VERIPHY_INTEG 
1931     fapi_bwp_t                  bwp;
1932 #else
1933     uint16_t                    bwp_size;
1934     uint16_t                    bwp_start;
1935     uint8_t                     sub_carrier_spacing;
1936     uint8_t                     cyclic_prefix;
1937 #endif  
1938     uint8_t                     num_ant_ports;
1939     uint8_t                     num_symbols;
1940     uint8_t                     num_repetitions;
1941     uint8_t                     time_start_position;
1942     uint8_t                     config_index;
1943     uint16_t                    sequence_id;
1944     uint8_t                     bandwidth_index;
1945     uint8_t                     comb_size;
1946     uint8_t                     comb_offset;
1947     uint8_t                     cyclic_shift;
1948     uint8_t                     frequency_position;
1949     uint16_t                    frequency_shift;
1950     uint8_t                     frequency_hopping;
1951     uint8_t                     group_or_sequence_hopping;
1952     uint8_t                     resource_type;
1953     uint16_t                    t_srs;
1954     uint16_t                    t_offset;
1955     fapi_bmform_t               beamforming;
1956 } fapi_ul_srs_pdu_t_ue_sim;
1957
1958 // Updated per 5G FAPI
1959 typedef struct PACK_STRUCT fapi_ul_tti_req_pdu
1960 {
1961     uint16_t                    pdu_type;
1962     uint16_t                    pdu_size;
1963     union
1964     {
1965         fapi_ul_prach_pdu_t_ue_sim        prach_pdu;
1966         fapi_ul_pusch_pdu_t_ue_sim        pusch_pdu;
1967         fapi_ul_pucch_pdu_t_ue_sim        pucch_pdu;
1968         fapi_ul_srs_pdu_t_ue_sim          srs_pdu;
1969         //fapi_ul_rx_bmform_pdu_t    rx_beamforming_pdu;
1970     }u;
1971 } fapi_ul_tti_req_pdu_t_ue_sim;
1972
1973 // Updated per 5G FAPI
1974 typedef struct PACK_STRUCT fapi_ul_tti_req
1975 {
1976     fapi_msg_header_t_ue_sim    header;
1977     uint16_t                    sfn;
1978     uint16_t                    slot;
1979 #ifdef FAPI_222_10_03
1980     uint16_t                    n_pdus;
1981     uint8_t                     nUlTypes;
1982 /* [0]: number of PRACH PDUs [1]: number of PUSCH PDUs [2]: number of Format 0/1 PUCCH PDUs [3]: number of Format 2/3/4 PUCCH PDUs [4]: number of SRS PDUs */  
1983     uint16_t                    nPDUsOfEachType[MAX_NUM_UL_TYPES];   
1984 #else
1985     /* Indicates if a RACH PDU will be included in this message.
1986      * 0: no RACH in this slot
1987      * 1: RACH in this slot */
1988     uint8_t                     rach_present;
1989     uint8_t                     n_ulsch; /* Number of ULSCH PDUs that are included in this message.*/
1990     uint8_t                     n_ulcch; /* Number of ULCCH PDUs that are included in this message.*/
1991     uint8_t                     n_pdus;
1992 #endif
1993     uint8_t                     n_group; /* Number of UE Groups included in this message.*/
1994     fapi_ul_tti_req_pdu_t_ue_sim       pdus[0];
1995     fapi_ue_info_t_ue_sim              ueGrpInfo[0];
1996 } fapi_ul_tti_req_t_ue_sim;
1997
1998 // Updated per 5G FAPI
1999 typedef struct PACK_STRUCT fapi_dci_pdu
2000 {
2001     uint16_t                    pdu_type;
2002     uint16_t                    pdu_size;
2003     fapi_dl_pdcch_pdu_t_ue_sim         pdcch_pdu;
2004 } fapi_dci_pdu_t_ue_sim;
2005
2006 // Updated per 5G FAPI
2007 typedef struct PACK_STRUCT fapi_ul_dci_req
2008 {
2009     fapi_msg_header_t_ue_sim    header;
2010     uint16_t                    sfn;
2011     uint16_t                    slot;
2012     uint8_t                     num_pdus;
2013 #ifdef FAPI_222_10_03
2014     uint8_t                     nDlTypes;
2015     uint16_t                    nPDUsOfEachType[MAX_NDLTYPES_UL_DCI_REQ];
2016 #endif
2017     fapi_dci_pdu_t_ue_sim              pdus[];
2018 } fapi_ul_dci_req_t_ue_sim;
2019
2020 // Updated per 5G FAPI
2021 typedef struct PACK_STRUCT fapi_tx_pdu_desc
2022 {
2023     uint32_t                    pduLength;
2024     uint16_t                    pduIndex;
2025 #ifdef FAPI_222_10_03
2026     uint8_t                     cwIndex; /* Ref: Table 3-90 Tx_Data.request message */
2027 #endif
2028     uint32_t                    numTlvs;
2029     fapi_tx_dat_tlv_t           tlvs[];
2030 } fapi_tx_pdu_desc_t_ue_sim;
2031
2032 // Updated per 5G FAPI
2033 typedef struct PACK_STRUCT fapi_tx_data_req
2034 {
2035     fapi_msg_header_t_ue_sim    header;
2036     uint16_t                    sfn;
2037     uint16_t                    slot;
2038     uint16_t                    numPdus;
2039 #ifdef VZ_VERIPHY_INTEG
2040     fapi_tx_pdu_desc_t_ue_sim          pduDesc[];
2041 #else
2042     fapi_tx_pdu_desc_t_ue_sim          pduDesc[];
2043 #endif
2044 } fapi_tx_data_req_t_ue_sim;
2045
2046 // Updated per 5G FAPI
2047 typedef struct PACK_STRUCT fapi_pdu_ind_info
2048 {
2049     uint32_t                    handle;
2050     uint16_t                    rnti;
2051     uint8_t                     harq_id;
2052 #ifndef VZ_VERIPHY_INTEG        
2053     uint16_t                    pdu_length;
2054 #endif
2055     uint8_t                     ul_cqi;
2056     uint16_t                    timing_advance;
2057     uint16_t                    rssi;
2058 #ifdef VZ_VERIPHY_INTEG
2059     uint16_t                    pduTag;
2060         uint32_t                                        pdu_length;
2061         uint64_t                    pduDataOrOffset; //Shared memory offset  // 5G FAPI Table 3-61 Subset
2062 #else
2063     void*                       pdu_data;
2064 #endif
2065 } fapi_pdu_ind_info_t_ue_sim;
2066
2067 // Updated per 5G FAPI
2068 typedef struct PACK_STRUCT fapi_rx_data_indication
2069 {
2070     fapi_msg_header_t_ue_sim    header;
2071     uint16_t                    sfn;
2072     uint16_t                    slot;
2073     uint16_t                    num_pdus;
2074     fapi_pdu_ind_info_t_ue_sim         pdus[MAX_NUMBER_OF_ULSCH_PDUS_PER_TTI];
2075 } fapi_rx_data_indication_t_ue_sim;
2076
2077 // Updated per 5G FAPI
2078 typedef struct PACK_STRUCT fapi_crc_ind_info
2079 {
2080     uint32_t                    handle;
2081     uint16_t                    rnti;
2082     uint8_t                     harq_id;
2083     uint8_t                     tb_crc_status;
2084     uint16_t                    num_cb;
2085     uint8_t                     cb_crc_status[MAX_NUM_CB_PER_TTI_IN_BYTES];
2086     uint8_t                     ul_cqi;
2087     uint16_t                    timing_advance;
2088     uint16_t                    rssi;
2089 } fapi_crc_ind_info_t_ue_sim;
2090
2091 // Updated per 5G FAPI
2092 typedef struct PACK_STRUCT fapi_crc_ind
2093 {
2094     fapi_msg_header_t_ue_sim    header;
2095     uint16_t                    sfn;
2096     uint16_t                    slot;
2097     uint16_t                    num_crcs;
2098     fapi_crc_ind_info_t_ue_sim         crc[MAX_NUMBER_OF_CRCS_PER_SLOT];
2099 } fapi_crc_ind_t_ue_sim;
2100
2101 typedef enum PACK_STRUCT fapi_uci_mux_typ
2102 {
2103    FAPI_UCI_SR      = 1,
2104    FAPI_UCI_HQ      = 2,
2105    FAPI_UCI_CSI_P1   = 4,
2106    FAPI_UCI_CSI_P2   = 8,
2107    FAPI_UCI_MUX_TYP_SR_HQ       = 3, 
2108    FAPI_UCI_MUX_TYP_SR_CSI_1    = 5, 
2109    FAPI_UCI_MUX_TYP_HQ_CSI_1    = 6,
2110    FAPI_UCI_MUX_TYP_SR_HQ_CSI_1 = 7
2111 }fapi_uci_mux_typ_t;
2112
2113 // Updated per 5G FAPI
2114 typedef struct PACK_STRUCT fapi_harq_info
2115 {
2116     uint8_t                      harq_crc;
2117     uint16_t                     harq_bit_len;
2118     uint8_t                      harq_payload[MAX_HARQ_INFO_LEN_BYTES];
2119 } fapi_harq_info_t_ue_sim;
2120
2121 // Updated per 5G FAPI
2122 typedef struct PACK_STRUCT fapi_csi_p1_info
2123 {
2124     uint8_t                     csi_part1_crc;
2125     uint16_t                    csi_part1_bit_len;
2126     uint8_t                     csi_part1_payload[MAX_CSI_PART1_DATA_BYTES];
2127 } fapi_csi_p1_info_t_ue_sim;
2128
2129 // Updated per 5G FAPI
2130 typedef struct PACK_STRUCT fapi_csi_p2_info
2131 {
2132     uint8_t                     csi_part2_crc;
2133     uint16_t                    csi_part2_bit_len;
2134     uint8_t                     csi_part2_payload[MAX_CSI_PART2_DATA_BYTES];
2135 } fapi_csi_p2_info_t_ue_sim;
2136
2137 // Updated per 5G FAPI
2138 typedef struct PACK_STRUCT fapi_uci_o_pusch
2139 {
2140     uint8_t                     pdu_bitmap;
2141     uint32_t                    handle;
2142     uint16_t                    rnti;
2143     uint8_t                     ul_cqi;
2144     uint16_t                    timing_advance;
2145     uint16_t                    rssi;
2146     fapi_harq_info_t_ue_sim            harqInfo; // This is included if indicated by the pduBitmap
2147     fapi_csi_p1_info_t_ue_sim          csiPart1info;  // This is included if indicated by the pduBitmap
2148     fapi_csi_p2_info_t_ue_sim          csiPart2info;  // This is included if indicated by the pduBitmap
2149 } fapi_uci_o_pusch_t_ue_sim;
2150
2151 // Updated per 5G FAPI
2152 typedef struct PACK_STRUCT fapi_sr_f0f1_info
2153 {
2154     uint8_t                     sr_indication;
2155     uint8_t                     sr_confidence_level;
2156 } fapi_sr_f0f1_info_t_ue_sim;
2157
2158 // Updated per 5G FAPI
2159 typedef struct PACK_STRUCT fapi_harq_f0f1_info
2160 {
2161     uint8_t                     num_harq;
2162     uint8_t                     harq_confidence_level;
2163     uint8_t                     harq_value[MAX_NUMBER_OF_HARQS_PER_IND];
2164 } fapi_harq_f0f1_info_t_ue_sim;
2165
2166 // Updated per 5G FAPI
2167 typedef struct PACK_STRUCT fapi_sr_f2f3f4_info
2168 {
2169     uint16_t                    sr_bitlen;
2170     uint8_t                     sr_payload[MAX_SR_PAYLOAD_SIZE];
2171 } fapi_sr_f2f3f4_info_t_ue_sim;
2172
2173 // Updated per 5G FAPI
2174 typedef struct PACK_STRUCT fapi_harq_f2f3f4_info
2175 {
2176     uint8_t                     harq_crc;
2177     uint16_t                    harq_bit_len;
2178     uint8_t                     harq_payload[MAX_HARQ_PAYLOAD_SIZE];
2179 } fapi_harq_f2f3f4_info_t_ue_sim;
2180
2181 // Updated per 5G FAPI
2182 typedef struct PACK_STRUCT fapi_uci_o_pucch_f2f3f4
2183 {
2184     uint8_t                     pdu_bitmap;
2185     uint32_t                    handle;
2186     uint16_t                    rnti;
2187     uint8_t                     pucch_format;
2188     uint8_t                     ul_cqi;
2189     uint16_t                    timing_advance;
2190     uint16_t                    rssi;
2191     fapi_sr_f2f3f4_info_t_ue_sim       srInfo; // This is included if indicated by the pduBitmap
2192     fapi_harq_f2f3f4_info_t_ue_sim     harqInfo; // This is included if indicated by the pduBitmap
2193     fapi_csi_p1_info_t_ue_sim          csiPart1Info; // This is included if indicated by the pduBitmap
2194     fapi_csi_p2_info_t_ue_sim          csiPart2Info; // This is included if indicated by the pduBitmap
2195 } fapi_uci_o_pucch_f2f3f4_t_ue_sim;
2196
2197 // Updated per 5G FAPI
2198 typedef struct PACK_STRUCT fapi_uci_o_pucch_f0f1
2199 {
2200     uint8_t                     pdu_bitmap;
2201     uint32_t                    handle;
2202     uint16_t                    rnti;
2203     uint8_t                     pucch_format;
2204     uint8_t                     ul_cqi;
2205     uint16_t                    timing_advance;
2206     uint16_t                    rssi;
2207     fapi_sr_f0f1_info_t_ue_sim         srInfo;  // This is included if indicated by the pduBitmap
2208     fapi_harq_f0f1_info_t_ue_sim       harqInfo;  // This is included if indicated by the pduBitmap
2209 } fapi_uci_o_pucch_f0f1_t_ue_sim;
2210
2211 // Updated per 5G FAPI
2212 typedef struct PACK_STRUCT fapi_uci_pdu_info
2213 {
2214     uint16_t                    pdu_type;
2215     uint16_t                    pdu_size;
2216     union
2217     {
2218         fapi_uci_o_pusch_t_ue_sim         uci_pusch;
2219         fapi_uci_o_pucch_f0f1_t_ue_sim    uci_pucch_f0f1;
2220         fapi_uci_o_pucch_f2f3f4_t_ue_sim  uci_pucch_f2f3f4;
2221     }u;
2222 } fapi_uci_pdu_info_t_ue_sim;
2223
2224 // Updated per 5G FAPI
2225 typedef struct PACK_STRUCT fapi_uci_indication
2226 {
2227     fapi_msg_header_t_ue_sim    header;
2228     uint16_t                    sfn;
2229     uint16_t                    slot;
2230     uint16_t                    num_ucis;
2231     fapi_uci_pdu_info_t_ue_sim         uci_pdu[] ;//max length of the array MAX_NUMBER_UCI_PDUS_PER_SLOT;
2232 } fapi_uci_indication_t_ue_sim;
2233
2234 // Updated per 5G FAPI
2235 typedef struct PACK_STRUCT fapi_symb_snr
2236 {
2237     uint16_t                    numRbs;
2238     uint8_t                     rbSNR[MAX_NUMBER_RBS];
2239 } fapi_symb_snr_t_ue_sim;
2240
2241 // Updated per 5G FAPI
2242 typedef struct PACK_STRUCT fapi_srs_pdu
2243 {
2244     uint32_t                    handle;
2245     uint16_t                    rnti;
2246     uint16_t                    timingAdvance;
2247     uint8_t                     numSymbols;
2248     uint8_t                     wideBandSnr;
2249     uint8_t                     numReportedSymbols;
2250     fapi_symb_snr_t_ue_sim             symbSnr[MAX_NUMBER_OF_REP_SYMBOLS];
2251 } fapi_srs_pdu_t_ue_sim;
2252
2253 // Updated per 5G FAPI
2254 typedef struct PACK_STRUCT fapi_srs_indication
2255 {
2256     fapi_msg_header_t_ue_sim    header;
2257     uint16_t                    sfn;
2258     uint16_t                    slot;
2259     uint8_t                     numPdus;
2260     fapi_srs_pdu_t_ue_sim              srsPdus[MAX_NUMBER_SRS_PDUS_PER_SLOT];
2261 } fapi_srs_indication_t_ue_sim;
2262
2263 // Updated per 5G FAPI
2264 typedef struct PACK_STRUCT fapi_preamble_info
2265 {
2266     uint8_t                     preambleIndex;
2267     uint16_t                    timingAdvance;
2268     uint32_t                    premblePwr;
2269 #ifdef FAPI_222_10_03
2270     uint8_t                     preambleSnr;
2271 #endif
2272 } fapi_preamble_info_t_ue_sim;
2273
2274 // Updated per 5G FAPI
2275 typedef struct PACK_STRUCT fapi_rach_pdu
2276 {
2277 #ifdef FAPI_222_10_03
2278     uint16_t                    handle;
2279 #else
2280     uint16_t                    physCellId;
2281 #endif
2282     uint8_t                     symbolIndex;
2283     uint8_t                     slotIndex;
2284 #ifdef FAPI_222_10_03
2285     uint8_t                     raIndex;
2286 #else
2287     uint8_t                     freqIndex;
2288 #endif
2289 #ifdef VZ_VERIPHY_INTEG
2290     uint8_t                     ulCarrierId;
2291 #endif
2292 #ifdef FAPI_222_10_03
2293    uint16_t                     avgRssi;
2294 #else
2295    uint8_t                      avgRssi;
2296 #endif
2297    uint8_t                      avgSnr;       
2298    uint8_t                      numPreamble;
2299    fapi_preamble_info_t_ue_sim         preambleInfo[MAX_NUM_PREAMBLES_PER_SLOT];
2300 } fapi_rach_pdu_t_ue_sim;
2301
2302 // Updated per 5G FAPI
2303 typedef struct PACK_STRUCT fapi_rach_indication
2304 {
2305     fapi_msg_header_t_ue_sim    header;
2306     uint16_t                    sfn;
2307     uint16_t                    slot;
2308     uint8_t                     numPdus;
2309     fapi_rach_pdu_t_ue_sim             rachPdu[MAX_NUMBER_RACH_PDUS_PER_SLOT];
2310 } fapi_rach_indication_t_ue_sim;
2311
2312 /*!
2313  ** \struct      pkd_fapi_l1api_msg_frmt
2314  ** \brief       This structure is FAPI L1API message format towards L1.
2315  **/
2316 typedef struct PACK_STRUCT  pkd_fapi_l1api_msg_frmt
2317 {
2318     /*!
2319      *         Message Type ID
2320      **/
2321     uint8_t    msg_id;
2322     /**
2323      *         Length of vendor-specific message body (bytes)
2324      **/
2325     uint8_t    vendor_spec_msg_len;
2326     /**
2327      *         Length of message body (bytes)
2328      **/
2329     uint16_t   msg_len;
2330     /**
2331      *         Message Body.(Dummy Field)
2332      **/
2333     uint8_t*   msg_body;
2334     /**
2335      *         Vendor message Body.(Dummy Field)
2336      **/
2337     uint8_t*   vendor_spec_msg_body;
2338
2339 } pkd_fapi_l1api_msg_frmt_t;
2340
2341
2342
2343
2344 //------------------------------------------------------------------------------
2345
2346 #if defined(__cplusplus)
2347 }
2348 #endif
2349 #endif