1 /******************************************************************************
\r
3 * Copyright (c) 2019 Intel.
\r
5 * Licensed under the Apache License, Version 2.0 (the "License");
\r
6 * you may not use this file except in compliance with the License.
\r
7 * You may obtain a copy of the License at
\r
9 * http://www.apache.org/licenses/LICENSE-2.0
\r
11 * Unless required by applicable law or agreed to in writing, software
\r
12 * distributed under the License is distributed on an "AS IS" BASIS,
\r
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 * See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
17 *******************************************************************************/
\r
20 * @brief This file provides the definition of Control Plane Messages
\r
21 * for XRAN Front Haul layer as defined in XRAN-FH.CUS.0-v02.01.
\r
23 * @file xran_pkt_cp.h
\r
24 * @ingroup group_lte_source_xran
\r
25 * @author Intel Corporation
\r
29 #ifndef _XRAN_PKT_CP_H_
\r
30 #define _XRAN_PKT_CP_H_
\r
37 /**********************************************************************
\r
38 * Common structures for C/U-plane
\r
39 **********************************************************************/
\r
41 * @ingroup xran_cp_pkt
\r
44 * user data compression header defined in 5.4.4.10 / 6.3.3.13
\r
46 struct xran_radioapp_udComp_header {
\r
47 uint8_t udCompMeth:4; /**< Compression method, XRAN_COMPMETHOD_xxxx */
\r
48 uint8_t udIqWidth:4; /**< IQ bit width, 1 ~ 16 */
\r
49 } __attribute__((__packed__));
\r
52 /**********************************************************************
\r
53 * Definition of C-Plane Protocol 5.4
\r
54 **********************************************************************/
\r
56 * @ingroup xran_cp_pkt
\r
59 * Common Radio Application Header for C-Plane
\r
61 struct xran_cp_radioapp_common_header { /* 6bytes, first 4bytes need the conversion for byte order */
\r
62 uint32_t startSymbolId:6; /**< 5.4.4.7 start symbol identifier */
\r
63 uint32_t slotId:6; /**< 5.4.4.6 slot identifier */
\r
64 uint32_t subframeId:4; /**< 5.4.4.5 subframe identifier */
\r
65 uint32_t frameId:8; /**< 5.4.4.4 frame identifier */
\r
66 uint32_t filterIndex:4; /**< 5.4.4.3 filter index, XRAN_FILTERINDEX_xxxx */
\r
67 uint32_t payloadVer:3; /**< 5.4.4.2 payload version, should be 1 */
\r
68 uint32_t dataDirection:1; /**< 5.4.4.1 data direction (gNB Tx/Rx) */
\r
69 uint8_t numOfSections; /**< 5.4.4.8 number of sections */
\r
70 uint8_t sectionType; /**< 5.4.4.9 section type */
\r
71 } __attribute__((__packed__));
\r
74 * @ingroup xran_cp_pkt
\r
77 * frame structure defined in 5.4.4.13
\r
79 struct xran_cp_radioapp_frameStructure {
\r
80 uint8_t uScs:4; /**< sub-carrier spacing, XRAN_SCS_xxx */
\r
81 uint8_t fftSize:4; /**< FFT size, XRAN_FFTSIZE_xxx */
\r
82 } __attribute__((__packed__));
\r
85 * @ingroup xran_cp_pkt
\r
88 * Section headers definition for C-Plane.
\r
89 * Section type 6 and 7 are not present since those have different fields.
\r
91 struct xran_cp_radioapp_section_header { /* 8bytes, need the conversion for byte order */
\r
94 uint32_t reserved:16;
\r
95 uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
\r
96 uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
\r
99 uint32_t beamId:15; /**< 5.4.5.9 beam identifier */
\r
100 uint32_t ef:1; /**< 5.4.5.8 extension flag */
\r
101 uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
\r
102 uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
\r
105 uint32_t beamId:15; /**< 5.4.5.9 beam identifier */
\r
106 uint32_t ef:1; /**< 5.4.5.8 extension flag */
\r
107 uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
\r
108 uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
\r
111 uint32_t ueId:15; /**< 5.4.5.10 UE identifier */
\r
112 uint32_t ef:1; /**< 5.4.5.8 extension flag */
\r
113 uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */
\r
114 uint32_t reMask:12; /**< 5.4.5.5 resource element mask */
\r
118 uint32_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section 0000 0000b = all PRBs */
\r
119 uint32_t startPrbc:10; /**< 5.4.5.4 starting PRB of control section */
\r
120 uint32_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */
\r
121 uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */
\r
122 uint32_t sectionId:12; /**< 5.4.5.1 section identifier */
\r
123 } __attribute__((__packed__));
\r
126 struct xran_cp_radioapp_section_ext_hdr {
\r
127 /* 12 bytes, need to convert byte order for two parts respectively
\r
128 * - 2 and 8 bytes, reserved1 would be OK if it is zero
\r
130 uint16_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
131 uint16_t extType:7; /**< 5.4.6.1 extension type */
\r
132 uint16_t ef:1; /**< 5.4.6.2 extension flag */
\r
133 } __attribute__((__packed__));
\r
136 * @ingroup xran_cp_pkt
\r
139 * Beamforming Weights Extension Type(ExtType 1) defined in 5.4.7.1
\r
140 * The structure is reordered for byte order conversion.
\r
142 struct xran_cp_radioapp_section_ext1 {
\r
143 /* variable length, need to be careful to convert byte order
\r
144 * - does not need to convert first 3 bytes */
\r
145 uint8_t extType:7; /**< 5.4.6.1 extension type */
\r
146 uint8_t ef:1; /**< 5.4.6.2 extension flag */
\r
147 uint8_t extLen; /**< 5.4.6.3 extension length, in 32bits words */
\r
149 uint8_t bfwCompMeth:4; /**< 5.4.7.1.1 Beamforming weight Compression method */
\r
150 uint8_t bfwIqWidth:4; /**< 5.4.7.1.1 Beamforming weight IQ bit width */
\r
158 * zero padding for 4-byte alignment
\r
160 } __attribute__((__packed__));
\r
163 * @ingroup xran_cp_pkt
\r
166 * Beamforming Attributes Extension Type(ExtType 2) defined in 5.4.7.2
\r
167 * The structure is reordered for byte order conversion.
\r
169 struct xran_cp_radioapp_section_ext2 {
\r
170 /* variable length, need to be careful to convert byte order
\r
171 * - first 4 bytes can be converted at once
\r
173 uint32_t bfZe3ddWidth:3; /**< 5.4.7.2.1 beamforming zenith beamwidth parameter bitwidth, Table 5-21 */
\r
174 uint32_t bfAz3ddWidth:3; /**< 5.4.7.2.1 beamforming azimuth beamwidth parameter bitwidth, Table 5-20 */
\r
175 uint32_t bfaCompResv1:2;
\r
176 uint32_t bfZePtWidth:3; /**< 5.4.7.2.1 beamforming zenith pointing parameter bitwidth, Table 5-19 */
\r
177 uint32_t bfAzPtWidth:3; /**< 5.4.7.2.1 beamforming azimuth pointing parameter bitwidth, Table 5-18 */
\r
178 uint32_t bfaCompResv0:2;
\r
179 uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
180 uint32_t extType:7; /**< 5.4.6.1 extension type */
\r
181 uint32_t ef:1; /**< 5.4.6.2 extension flag */
\r
184 * would be better to use bit manipulation directly to add these parameters
\r
186 * bfAzPt: var by bfAzPtWidth
\r
187 * bfZePt: var by bfZePtWidth
\r
188 * bfAz3dd: var by bfAz3ddWidth
\r
189 * bfZe3dd: var by bfZe3ddWidth
\r
190 * bfAzSI:5 (including zero-padding for unused bits)
\r
192 * padding for 4-byte alignment
\r
195 } __attribute__((__packed__));
\r
198 * @ingroup xran_cp_pkt
\r
201 * DL Precoding Extension Type(ExtType 3) for first data layer.
\r
202 * Defined in 5.4.7.3 Table 5-22.
\r
203 * Only be used for LTE TM2-4 and not for other LTE TMs nor NR.
\r
204 * The structure is reordered for byte order conversion. Not supported.
\r
206 struct xran_cp_radioapp_section_ext3_first {
\r
207 /* 16 bytes, need to convert byte order for two parts
\r
210 uint32_t reserved1:8;
\r
211 uint32_t crsSymNum:4; /**< 5.4.7.3.6 CRS symbol number indication */
\r
212 uint32_t reserved0:3;
\r
213 uint32_t crsShift:1; /**< 5.4.7.3.7 CRS shift used for DL transmission */
\r
214 uint32_t crsReMask:12; /**< 5.4.7.3.5 CRS resource element mask */
\r
215 uint32_t txScheme:4; /**< 5.4.7.3.3 transmission scheme */
\r
216 uint32_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */
\r
217 uint32_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */
\r
218 uint32_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */
\r
219 uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
220 uint32_t extType:7; /**< 5.4.6.1 extension type */
\r
221 uint32_t ef:1; /**< 5.4.6.2 extension flag */
\r
223 uint16_t beamIdAP3; /**< 5.4.7.3.10 beam id to be used for antenna port 3 */
\r
224 uint16_t beamIdAP2; /**< 5.4.7.3.9 beam id to be used for antenna port 2 */
\r
225 uint16_t beamIdAP1; /**< 5.4.7.3.8 beam id to be used for antenna port 1 */
\r
226 uint16_t reserved2;
\r
227 } __attribute__((__packed__));
\r
230 * @ingroup xran_cp_pkt
\r
233 * DL Precoding Extension Type(ExtType 3) for non-first data layer.
\r
234 * Defined in 5.4.7.3 Table 5-23.
\r
235 * Only be used for LTE TM2-4 and not for other LTE TMs nor NR.
\r
236 * The structure is reordered for byte order conversion. Not supported.
\r
238 struct xran_cp_radioapp_section_ext3_non_first {
\r
239 /* 4 bytes, need to convert byte order at once */
\r
240 uint32_t numLayers:4; /**< 5.4.7.3.4 number of layers used for DL transmission */
\r
241 uint32_t layerId:4; /**< 5.4.7.3.2 Layer ID for DL transmission */
\r
242 uint32_t codebookIndex:8; /**< 5.4.7.3.1 precoder codebook used for transmission */
\r
244 uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
245 uint32_t extType:7; /**< 5.4.6.1 extension type */
\r
246 uint32_t ef:1; /**< 5.4.6.2 extension flag */
\r
247 } __attribute__((__packed__));
\r
250 * @ingroup xran_cp_pkt
\r
253 * Modulation Compression Parameter Extension Type(ExtType 4), 5.4.7.4
\r
254 * Only applies to section type 1 and 3.
\r
255 * The structure is reordered for byte order conversion.
\r
257 struct xran_cp_radioapp_section_ext4 {
\r
258 /* 4 bytes, need to convert byte order at once */
\r
259 uint32_t modCompScaler:15; /**< 5.4.7.4.2 modulation compression scaler value */
\r
260 uint32_t csf:1; /**< 5.4.7.4.1 constellation shift flag */
\r
262 uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
263 uint32_t extType:7; /**< 5.4.6.1 extension type */
\r
264 uint32_t ef:1; /**< 5.4.6.2 extension flag */
\r
265 } __attribute__((__packed__));
\r
269 * @ingroup xran_cp_pkt
\r
272 * Modulation Compression Additional Parameter Extension Type(ExtType 5) for one scaler value.
\r
273 * Defined in 5.4.7.5 Table 5-26
\r
274 * Only applies to section type 1 3, and 5.
\r
275 * The structure is reordered for byte order conversion.
\r
277 struct xran_cp_radioapp_section_ext5_1 {
\r
278 /* 8 bytes, need to convert byte order at once */
\r
279 uint32_t reserved:20;
\r
280 uint32_t mcScaleOffset:15; /**< 5.4.7.5.3 scaling value for modulation compression */
\r
281 uint32_t csf:1; /**< 5.4.7.5.2 constellation shift flag */
\r
282 uint32_t mcScaleReMask:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
\r
284 uint32_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
285 uint32_t extType:7; /**< 5.4.6.1 extension type */
\r
286 uint32_t ef:1; /**< 5.4.6.2 extension flag */
\r
287 } __attribute__((__packed__));
\r
290 * @ingroup xran_cp_pkt
\r
293 * Modulation Compression Additional Parameter Extension Type(ExtType 5) for two scaler values.
\r
294 * Defined in 5.4.7.5 Table 5-27
\r
295 * Only applies to section type 1 3, and 5.
\r
296 * The structure is reordered for byte order conversion.
\r
298 struct xran_cp_radioapp_section_ext5_2 {
\r
299 /* 12 bytes, need to convert byte order for two parts respectively
\r
300 * - 2 and 8 bytes, reserved1 would be OK if it is zero
\r
302 uint16_t extLen:8; /**< 5.4.6.3 extension length, in 32bits words */
\r
303 uint16_t extType:7; /**< 5.4.6.1 extension type */
\r
304 uint16_t ef:1; /**< 5.4.6.2 extension flag */
\r
306 uint32_t reserved0:8;
\r
307 uint32_t mcScaleOffset2:15; /**< 5.4.7.5.3 scaling value for modulation compression */
\r
308 uint32_t csf2:1; /**< 5.4.7.5.2 constellation shift flag */
\r
309 uint32_t mcScaleReMask2:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
\r
310 uint32_t mcScaleOffset1:15; /**< 5.4.7.5.3 scaling value for modulation compression */
\r
311 uint32_t csf1:1; /**< 5.4.7.5.2 constellation shift flag */
\r
312 uint32_t mcScaleReMask1:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
\r
314 uint16_t reserved1;
\r
315 } __attribute__((__packed__));
\r
318 struct xran_cp_radioapp_section_ext5 {
\r
319 uint32_t reserved0:8;
\r
320 uint32_t mcScaleOffset2:15; /**< 5.4.7.5.3 scaling value for modulation compression */
\r
321 uint32_t csf2:1; /**< 5.4.7.5.2 constellation shift flag */
\r
322 uint32_t mcScaleReMask2:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
\r
323 uint32_t mcScaleOffset1:15; /**< 5.4.7.5.3 scaling value for modulation compression */
\r
324 uint32_t csf1:1; /**< 5.4.7.5.2 constellation shift flag */
\r
325 uint32_t mcScaleReMask1:12; /**< 5.4.7.5.1 modulation compression power scale RE mask */
\r
326 } __attribute__((__packed__));
\r
328 /**********************************************************
\r
329 * Scheduling and Beam-forming Commands 5.4.2
\r
330 **********************************************************/
\r
332 * @ingroup xran_cp_pkt
\r
335 * Section header definition for type 0
\r
337 struct xran_cp_radioapp_section0_header { // 12bytes (6+2+1+2+1)
\r
338 struct xran_cp_radioapp_common_header cmnhdr;
\r
339 uint16_t timeOffset; /**< 5.4.4.12 time offset */
\r
341 struct xran_cp_radioapp_frameStructure frameStructure;
\r
342 uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */
\r
344 } __attribute__((__packed__));
\r
347 * @ingroup xran_cp_pkt
\r
350 * Section definition for type 0: Unused RB or Symbols in DL or UL (Table 5-2)
\r
351 * Not supported in this release
\r
353 struct xran_cp_radioapp_section0 { // 8bytes (4+4)
\r
354 struct xran_cp_radioapp_section_header hdr;
\r
355 } __attribute__((__packed__));
\r
358 * @ingroup xran_cp_pkt
\r
361 * Section header definition for type 1
\r
363 struct xran_cp_radioapp_section1_header { // 8bytes (6+1+1)
\r
364 struct xran_cp_radioapp_common_header cmnhdr;
\r
365 struct xran_radioapp_udComp_header udComp;
\r
367 } __attribute__((__packed__));
\r
370 * @ingroup xran_cp_pkt
\r
373 * Section definition for type 1: Most DL/UL Radio Channels (Table 5-3)
\r
375 struct xran_cp_radioapp_section1 { // 8bytes (4+4)
\r
376 struct xran_cp_radioapp_section_header hdr;
\r
378 // section extensions // 5.4.6 & 5.4.7
\r
380 } __attribute__((__packed__));
\r
383 * @ingroup xran_cp_pkt
\r
386 * Section header definition for type 3
\r
388 struct xran_cp_radioapp_section3_header { // 12bytes (6+2+1+2+1)
\r
389 struct xran_cp_radioapp_common_header cmnhdr;
\r
390 uint16_t timeOffset; /**< 5.4.4.12 time offset */
\r
392 struct xran_cp_radioapp_frameStructure frameStructure;
\r
393 uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */
\r
394 struct xran_radioapp_udComp_header udComp;
\r
395 } __attribute__((__packed__));
\r
398 * @ingroup xran_cp_pkt
\r
401 * Section definition for type 3: PRACH and Mixed-numerology Channels (Table 5-4)
\r
403 struct xran_cp_radioapp_section3 { // 12bytes (4+4+4)
\r
404 struct xran_cp_radioapp_section_header hdr;
\r
405 uint32_t freqOffset:24; /**< 5.4.5.11 frequency offset */
\r
406 uint32_t reserved:8;
\r
408 // section extensions // 5.4.6 & 5.4.7
\r
410 } __attribute__((__packed__));
\r
413 * @ingroup xran_cp_pkt
\r
416 * Section header definition for type 5
\r
418 struct xran_cp_radioapp_section5_header { // 8bytes (6+1+1)
\r
419 struct xran_cp_radioapp_common_header cmnhdr;
\r
420 struct xran_radioapp_udComp_header udComp;
\r
422 } __attribute__((__packed__));
\r
425 * @ingroup xran_cp_pkt
\r
428 * Section definition for type 5: UE scheduling information (Table 5-5)
\r
429 * Not supported in this release
\r
431 struct xran_cp_radioapp_section5 {
\r
432 struct xran_cp_radioapp_section_header hdr;
\r
434 // section extensions // 5.4.6 & 5.4.7
\r
436 } __attribute__((__packed__));
\r
439 * @ingroup xran_cp_pkt
\r
442 * Section header definition for type 6
\r
444 struct xran_cp_radioapp_section6_header { // 8bytes (6+1+1)
\r
445 struct xran_cp_radioapp_common_header cmnhdr;
\r
446 uint8_t numberOfUEs; /**< 5.4.4.11 number of UEs */
\r
448 } __attribute__((__packed__));
\r
451 * @ingroup xran_cp_pkt
\r
454 * Section definition for type 5: Channel Information (Table 5-6)
\r
455 * Not supported in this release
\r
457 struct xran_cp_radioapp_section6 {
\r
458 uint32_t regularizationFactor:16;/**< 5.4.5.12 regularization Factor */
\r
459 uint32_t ueId:15; /**< 5.4.5.10 UE identifier */
\r
460 uint32_t ef:1; /**< 5.4.5.8 extension flag */
\r
461 uint8_t startPrbch:2; /**< 5.4.5.4 starting PRB of control section */
\r
462 uint8_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */
\r
463 uint8_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */
\r
464 uint8_t reserved:4;
\r
465 uint8_t startPrbcl:8; /**< 5.4.5.4 starting PRB of control section */
\r
466 uint8_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section */
\r
468 // ciIQsamples start from here // 5.4.5.13 channel information I and Q values
\r
471 // section extensions // 5.4.6 & 5.4.7
\r
473 } __attribute__((__packed__));
\r
476 * @ingroup xran_cp_pkt
\r
479 * Section header definition for type 7: LAA
\r
480 * Not supported in this release
\r
482 struct xran_cp_radioapp_section7_header {
\r
483 struct xran_cp_radioapp_common_header cmnhdr;
\r
485 uint8_t laaMsgLen:4; /**< 5.4.5.15 LAA message length */
\r
486 uint8_t laaMsgType:4; /**< 5.4.5.14 LAA message type */
\r
488 // Payload start from here // 5.4.5.16 ~ 5.4.5.32
\r
489 } __attribute__((__packed__));
\r
495 #endif /* _XRAN_PKT_CP_H_ */
\r