O-RAN E Maintenance Release contribution for ODULOW
[o-du/phy.git] / fhi_lib / lib / api / xran_pkt.h
index 560feca..edf4352 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
 *
-*   Copyright (c) 2019 Intel.
+*   Copyright (c) 2020 Intel.
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
@@ -64,6 +64,19 @@ extern "C" {
 #define VLAN_ID  0 /**< Default Tag protocol identifier (TPID)*/
 #define VLAN_PCP 7 /**< U-Plane and C-Plane only see Table 3 5 : Quality of service classes */
 
+#define        XRAN_MTU_DEFAULT        RTE_ETHER_MTU
+#define XRAN_APP_LAYER_MAX_SIZE_L2_DEFAUT    (XRAN_MTU_DEFAULT - 8) /**< In case of L2 only solution, application layer maximum transmission unit size
+                                                                         is standard IEEE 802.3 Ethernet frame payload
+                                                                         size (1500 bytes) \96 transport overhead (8 bytes) = 1492 bytes (or larger for Jumbo frames) */
+
+#ifndef OK
+#define OK 0    /* Function executed correctly */
+#endif
+#ifndef FAIL
+#define FAIL 1  /* Function failed to execute */
+#endif
+#define NS_PER_SEC 1000000000LL
+
 /**
  ******************************************************************************
  * @ingroup xran_common_pkt
@@ -87,6 +100,41 @@ enum ecpri_msg_type
      ECPRI_MSG_TYPE_MAX
 };
 
+/**
+ ******************************************************************************
+ * @ingroup xran_common_pkt
+ *
+ * @description
+ *       eCPRI Timestamp for one-way delay measurements format per IEEE-1588
+ *       clause 5.3.3.
+ *****************************************************************************/
+
+typedef struct  {
+    uint16_t    secs_msb;    // 6 bytes for seconds
+    uint32_t    secs_lsb;
+    uint32_t    ns;          // 4 bytes for nanoseconds
+    } TimeStamp;
+
+
+/**
+ ******************************************************************************
+ * @ingroup xran_common_pkt
+ *
+ * @description
+ *       eCPRI action types
+ *       as per eCPRI spec Table 8 action Types
+ *****************************************************************************/
+enum ecpri_action_type
+{
+    ECPRI_REQUEST             = 0x00, /* Uses Time Stamp T1 and Comp Delay 1 */
+    ECPRI_REQUEST_W_FUP       = 0x01, /* Uses 0 for Time Stamp and Comp Delay 1 */
+    ECPRI_RESPONSE            = 0x02, /* Uses Time Stamp T2 and Comp Delay 2 */
+    ECPRI_REMOTE_REQ          = 0x03, /* Uses 0 for Time Stamp and Comp Delay */
+    ECPRI_REMOTE_REQ_W_FUP    = 0x04, /* Uses 0 for Time Stamp and Comp Delay */
+    ECPRI_FOLLOW_UP           = 0x05, /* Uses Time Info and Comp Delay Info */
+    ECPRI_ACTION_TYPE_MAX
+};
+
 /**
  ******************************************************************************
  * @ingroup xran_common_pkt
@@ -94,13 +142,23 @@ enum ecpri_msg_type
  * @description
  *       see 3.1.3.1.7 ecpriSeqid (message identifier)
  *****************************************************************************/
-struct ecpri_seq_id
+union ecpri_seq_id
+{
+    struct
 {
     uint8_t seq_id:8;       /**< Sequence ID */
     uint8_t sub_seq_id:7;   /**< Subsequence ID */
     uint8_t e_bit:1;        /**< E bit */
+    } bits;
+    struct 
+    {
+        uint16_t data_num_1;
+    } data;
 } __rte_packed;
 
+#define ecpri_seq_id_bitfield_seq_id          0
+#define ecpri_seq_id_bitfield_sub_seq_id      8
+#define ecpri_seq_id_bitfield_e_bit           15
 
 /**
  ******************************************************************************
@@ -110,13 +168,53 @@ struct ecpri_seq_id
  *       Structure holds common eCPRI header as per
  *       Table 3 1 : eCPRI Transport Header Field Definitions
  *****************************************************************************/
-struct xran_ecpri_cmn_hdr
+union xran_ecpri_cmn_hdr
+{
+    struct
 {
     uint8_t     ecpri_concat:1;     /**< 3.1.3.1.3 eCPRI concatenation indicator */
     uint8_t     ecpri_resv:3;       /**< 3.1.3.1.2 eCPRI reserved */
     uint8_t     ecpri_ver:4;        /**< 3.1.3.1.1 eCPRI protocol revision, defined in XRAN_ECPRI_VER */
     uint8_t     ecpri_mesg_type;    /**< 3.1.3.1.4 eCPRI message type, defined in ecpri_msg_type */
     uint16_t    ecpri_payl_size;    /**< 3.1.3.1.5 eCPRI payload size, without common header and any padding bytes */
+    } bits;
+    struct
+    {
+        uint32_t    data_num_1;
+    } data;
+} __rte_packed;
+
+#define xran_ecpri_cmn_hdr_bitfield_EcpriVer        4
+#define xran_ecpri_cmn_hdr_bitfield_EcpriMsgType    8
+/**
+ ******************************************************************************
+ * @ingroup xran_common_pkt
+ *
+ * @description
+ *       Structure holds common eCPRI delay measuurement header as per
+ *       Table 2.17 : eCPRI One-Way delay measurement message
+ *****************************************************************************/
+struct xran_ecpri_delay_meas_pl
+{
+    uint8_t             MeasurementID;        /**< Table 2-17 Octet 5     */
+    uint8_t             ActionType;           /**< Table 2-17 Octet 6     */
+    TimeStamp           ts;                   /**< Table 2-17 Octet 7-16  */
+    int64_t             CompensationValue;    /**< Table 2-17 Octet 17    */
+    uint8_t             DummyBytes[1400];       /**< Table 2-17 Octet 25    */
+} __rte_packed;
+
+/**
+ ******************************************************************************
+ * @ingroup xran_common_pkt
+ *
+ * @description
+ *       Structure holds common eCPRI cmn header per eCPRI figure 8 and the measurement delay header and pl per
+ *       eCPRI Figure 23  : eCPRI One-Way delay measurement message
+ *****************************************************************************/
+ struct xran_ecpri_del_meas_pkt
+ {
+    union xran_ecpri_cmn_hdr cmnhdr;
+    struct xran_ecpri_delay_meas_pl  deMeasPl;
 } __rte_packed;
 
 /**
@@ -129,9 +227,9 @@ struct xran_ecpri_cmn_hdr
  *****************************************************************************/
 struct xran_ecpri_hdr
 {
-    struct xran_ecpri_cmn_hdr cmnhdr;
+    union xran_ecpri_cmn_hdr cmnhdr;
     rte_be16_t ecpri_xtc_id;            /**< 3.1.3.1.6 real time control data / IQ data transfer message series identifier */
-    struct ecpri_seq_id ecpri_seq_id;   /**< 3.1.3.1.7 message identifier */
+    union ecpri_seq_id ecpri_seq_id;   /**< 3.1.3.1.7 message identifier */
 } __rte_packed;
 
 
@@ -162,6 +260,9 @@ enum xran_pkt_dir
 struct radio_app_common_hdr
 {
    /* Octet 9 */
+    union {
+        uint8_t value;
+        struct {
    uint8_t filter_id:4; /**< This parameter defines an index to the channel filter to be
                               used between IQ data and air interface, both in DL and UL.
                               For most physical channels filterIndex =0000b is used which
@@ -171,6 +272,8 @@ struct radio_app_common_hdr
                             for the following IEs in the application layer. In this version of
                             the specification payloadVersion=001b shall be used. */
    uint8_t data_direction:1; /**< This parameter indicates the gNB data direction. */
+        };
+    }data_feature;
 
    /* Octet 10 */
    uint8_t frame_id:8;    /**< This parameter is a counter for 10 ms frames (wrapping period 2.56 seconds) */