X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=blobdiff_plain;f=fhi_lib%2Flib%2Fapi%2Fxran_pkt_cp.h;fp=fhi_lib%2Flib%2Fapi%2Fxran_pkt_cp.h;h=0f0e1bacaed58bd4b6286e64b5dcc034277a910a;hp=0000000000000000000000000000000000000000;hb=4745e5c88ba931c6d71cb6d8c681f76cf364eac5;hpb=59f84608ec15c016958a6e0e0ddd813f376c0925 diff --git a/fhi_lib/lib/api/xran_pkt_cp.h b/fhi_lib/lib/api/xran_pkt_cp.h new file mode 100644 index 0000000..0f0e1ba --- /dev/null +++ b/fhi_lib/lib/api/xran_pkt_cp.h @@ -0,0 +1,287 @@ +/****************************************************************************** +* +* Copyright (c) 2019 Intel. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + + +/** + * @brief This file provides the definition of Control Plane Messages + * for XRAN Front Haul layer as defined in XRAN-FH.CUS.0-v02.01. + * + * @file xran_pkt_cp.h + * @ingroup group_lte_source_xran + * @author Intel Corporation + * + **/ + +#ifndef _XRAN_PKT_CP_H_ +#define _XRAN_PKT_CP_H_ + + +/********************************************************************** + * Common structures for C/U-plane + **********************************************************************/ +/** + * @ingroup xran_cp_pkt + * + * @description + * user data compression header defined in 5.4.4.10 / 6.3.3.13 + */ +struct xran_radioapp_udComp_header { + uint8_t udCompMeth:4; /**< Compression method, XRAN_COMPMETHOD_xxxx */ + uint8_t udIqWidth:4; /**< IQ bit width, 1 ~ 16 */ + } __attribute__((__packed__)); + + +/********************************************************************** + * Definition of C-Plane Protocol 5.4 + **********************************************************************/ +/** + * @ingroup xran_cp_pkt + * + * @description + * Common Radio Application Header for C-Plane + */ +struct xran_cp_radioapp_common_header { /* 6bytes, first 4bytes need the conversion for byte order */ + uint32_t startSymbolId:6; /**< 5.4.4.7 start symbol identifier */ + uint32_t slotId:6; /**< 5.4.4.6 slot identifier */ + uint32_t subframeId:4; /**< 5.4.4.5 subframe identifier */ + uint32_t frameId:8; /**< 5.4.4.4 frame identifier */ + uint32_t filterIndex:4; /**< 5.4.4.3 filter index, XRAN_FILTERINDEX_xxxx */ + uint32_t payloadVer:3; /**< 5.4.4.2 payload version, should be 1 */ + uint32_t dataDirection:1; /**< 5.4.4.1 data direction (gNB Tx/Rx) */ + uint8_t numOfSections; /**< 5.4.4.8 number of sections */ + uint8_t sectionType; /**< 5.4.4.9 section type */ + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * frame structure defined in 5.4.4.13 + */ +struct xran_cp_radioapp_frameStructure { + uint8_t uScs:4; /**< sub-carrier spacing, XRAN_SCS_xxx */ + uint8_t fftSize:4; /**< FFT size, XRAN_FFTSIZE_xxx */ + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section headers definition for C-Plane. + * Section type 6 and 7 are not present since those have different fields. + */ +struct xran_cp_radioapp_section_header { // 8bytes, need the conversion for byte order + union { + struct { + uint32_t reserved:16; + uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */ + uint32_t reMask:12; /**< 5.4.5.5 resource element mask */ + } s0; + struct { + uint32_t beamId:15; /**< 5.4.5.9 beam identifier */ + uint32_t ef:1; /**< 5.4.5.8 extension flag */ + uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */ + uint32_t reMask:12; /**< 5.4.5.5 resource element mask */ + } s1; + struct { + uint32_t beamId:15; /**< 5.4.5.9 beam identifier */ + uint32_t ef:1; /**< 5.4.5.8 extension flag */ + uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */ + uint32_t reMask:12; /**< 5.4.5.5 resource element mask */ + } s3; + struct { + uint32_t ueId:15; /**< 5.4.5.10 UE identifier */ + uint32_t ef:1; /**< 5.4.5.8 extension flag */ + uint32_t numSymbol:4; /**< 5.4.5.7 number of symbols */ + uint32_t reMask:12; /**< 5.4.5.5 resource element mask */ + } s5; + } u; + + uint32_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section */ + uint32_t startPrbc:10; /**< 5.4.5.4 starting PRB of control section */ + uint32_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */ + uint32_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */ + uint32_t sectionId:12; /**< 5.4.5.1 section identifier */ + } __attribute__((__packed__)); + + +/********************************************************** + * Scheduling and Beam-forming Commands 5.4.2 + **********************************************************/ +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 0 + */ +struct xran_cp_radioapp_section0_header { // 12bytes (6+2+1+2+1) + struct xran_cp_radioapp_common_header cmnhdr; + uint16_t timeOffset; /**< 5.4.4.12 time offset */ + + struct xran_cp_radioapp_frameStructure frameStructure; + uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */ + uint8_t reserved; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section definition for type 0: Unused RB or Symbols in DL or UL (Table 5-2) + * Not supported in this release + */ +struct xran_cp_radioapp_section0 { // 8bytes (4+4) + struct xran_cp_radioapp_section_header hdr; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 1 + */ +struct xran_cp_radioapp_section1_header { // 8bytes (6+1+1) + struct xran_cp_radioapp_common_header cmnhdr; + struct xran_radioapp_udComp_header udComp; + uint8_t reserved; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section definition for type 1: Most DL/UL Radio Channels (Table 5-3) + */ +struct xran_cp_radioapp_section1 { // 8bytes (4+4) + struct xran_cp_radioapp_section_header hdr; + + // section extensions // 5.4.6 & 5.4.7 + // ......... + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 3 + */ +struct xran_cp_radioapp_section3_header { // 12bytes (6+2+1+2+1) + struct xran_cp_radioapp_common_header cmnhdr; + uint16_t timeOffset; /**< 5.4.4.12 time offset */ + + struct xran_cp_radioapp_frameStructure frameStructure; + uint16_t cpLength; /**< 5.4.4.14 cyclic prefix length */ + struct xran_radioapp_udComp_header udComp; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section definition for type 3: PRACH and Mixed-numerology Channels (Table 5-4) + */ +struct xran_cp_radioapp_section3 { // 12bytes (4+4+4) + struct xran_cp_radioapp_section_header hdr; + uint32_t freqOffset:24; /**< 5.4.5.11 frequency offset */ + uint32_t reserved:8; + + // section extensions // 5.4.6 & 5.4.7 + // ......... + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 5 + */ +struct xran_cp_radioapp_section5_header { // 8bytes (6+1+1) + struct xran_cp_radioapp_common_header cmnhdr; + struct xran_radioapp_udComp_header udComp; + uint8_t reserved; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section definition for type 5: UE scheduling information (Table 5-5) + * Not supported in this release + */ +struct xran_cp_radioapp_section5 { + struct xran_cp_radioapp_section_header hdr; + + // section extensions // 5.4.6 & 5.4.7 + // ......... + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 6 + */ +struct xran_cp_radioapp_section6_header { // 8bytes (6+1+1) + struct xran_cp_radioapp_common_header cmnhdr; + uint8_t numberOfUEs; /**< 5.4.4.11 number of UEs */ + uint8_t reserved; + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section definition for type 5: Channel Information (Table 5-6) + * Not supported in this release + */ +struct xran_cp_radioapp_section6 { + uint32_t regularizationFactor:16;/**< 5.4.5.12 regularization Factor */ + uint32_t ueId:15; /**< 5.4.5.10 UE identifier */ + uint32_t ef:1; /**< 5.4.5.8 extension flag */ + uint8_t startPrbch:2; /**< 5.4.5.4 starting PRB of control section */ + uint8_t symInc:1; /**< 5.4.5.3 symbol number increment command XRAN_SYMBOLNUMBER_xxxx */ + uint8_t rb:1; /**< 5.4.5.2 resource block indicator, XRAN_RBIND_xxx */ + uint8_t reserved:4; + uint8_t startPrbcl:8; /**< 5.4.5.4 starting PRB of control section */ + uint8_t numPrbc:8; /**< 5.4.5.6 number of contiguous PRBs per control section */ + + // ciIQsamples start from here // 5.4.5.13 channel information I and Q values + // ......... + // + // section extensions // 5.4.6 & 5.4.7 + // ......... + } __attribute__((__packed__)); + +/** + * @ingroup xran_cp_pkt + * + * @description + * Section header definition for type 7: LAA + * Not supported in this release + */ +struct xran_cp_radioapp_section7_header { + struct xran_cp_radioapp_common_header cmnhdr; + uint16_t reserved; + uint8_t laaMsgLen:4; /**< 5.4.5.15 LAA message length */ + uint8_t laaMsgType:4; /**< 5.4.5.14 LAA message type */ + + // Payload start from here // 5.4.5.16 ~ 5.4.5.32 + } __attribute__((__packed__)); + + +#endif /* _XRAN_PKT_CP_H_ */