1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2020 Mellanox Technologies, Ltd 3 */ 4 5 #ifndef _RTE_ECPRI_H_ 6 #define _RTE_ECPRI_H_ 7 8 /** 9 * @file 10 * 11 * eCPRI headers definition. 12 * 13 * eCPRI (Common Public Radio Interface) is used in internal interfaces 14 * of radio base station in a 5G infrastructure. 15 */ 16 17 #include <stdint.h> 18 #include <rte_byteorder.h> 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /* 25 * eCPRI Protocol Revision 1.0, 1.1, 1.2, 2.0: 0001b 26 * Other values are reserved for future 27 */ 28 #define RTE_ECPRI_REV_UP_TO_20 1 29 30 /* 31 * eCPRI message types in specifications 32 * IWF* types will only be supported from rev.2 33 * 12-63: Reserved for future revision 34 * 64-255: Vendor Specific 35 */ 36 #define RTE_ECPRI_MSG_TYPE_IQ_DATA 0 37 #define RTE_ECPRI_MSG_TYPE_BIT_SEQ 1 38 #define RTE_ECPRI_MSG_TYPE_RTC_CTRL 2 39 #define RTE_ECPRI_MSG_TYPE_GEN_DATA 3 40 #define RTE_ECPRI_MSG_TYPE_RM_ACC 4 41 #define RTE_ECPRI_MSG_TYPE_DLY_MSR 5 42 #define RTE_ECPRI_MSG_TYPE_RMT_RST 6 43 #define RTE_ECPRI_MSG_TYPE_EVT_IND 7 44 #define RTE_ECPRI_MSG_TYPE_IWF_UP 8 45 #define RTE_ECPRI_MSG_TYPE_IWF_OPT 9 46 #define RTE_ECPRI_MSG_TYPE_IWF_MAP 10 47 #define RTE_ECPRI_MSG_TYPE_IWF_DCTRL 11 48 49 /* 50 * Event Type of Message Type #7: Event Indication 51 * 0x00: Fault(s) Indication 52 * 0x01: Fault(s) Indication Acknowledge 53 * 0x02: Notification(s) Indication 54 * 0x03: Synchronization Request 55 * 0x04: Synchronization Acknowledge 56 * 0x05: Synchronization End Indication 57 * 0x06...0xFF: Reserved 58 */ 59 #define RTE_ECPRI_EVT_IND_FAULT_IND 0x00 60 #define RTE_ECPRI_EVT_IND_FAULT_ACK 0x01 61 #define RTE_ECPRI_EVT_IND_NTFY_IND 0x02 62 #define RTE_ECPRI_EVT_IND_SYNC_REQ 0x03 63 #define RTE_ECPRI_EVT_IND_SYNC_ACK 0x04 64 #define RTE_ECPRI_EVT_IND_SYNC_END 0x05 65 66 /** 67 * eCPRI Common Header 68 */ 69 RTE_STD_C11 70 struct rte_ecpri_common_hdr { 71 union { 72 rte_be32_t u32; /**< 4B common header in BE */ 73 struct { 74 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 75 uint32_t size:16; /**< Payload Size */ 76 uint32_t type:8; /**< Message Type */ 77 uint32_t c:1; /**< Concatenation Indicator */ 78 uint32_t res:3; /**< Reserved */ 79 uint32_t revision:4; /**< Protocol Revision */ 80 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 81 uint32_t revision:4; /**< Protocol Revision */ 82 uint32_t res:3; /**< Reserved */ 83 uint32_t c:1; /**< Concatenation Indicator */ 84 uint32_t type:8; /**< Message Type */ 85 uint32_t size:16; /**< Payload Size */ 86 #endif 87 }; 88 }; 89 }; 90 91 /** 92 * eCPRI Message Header of Type #0: IQ Data 93 */ 94 struct rte_ecpri_msg_iq_data { 95 rte_be16_t pc_id; /**< Physical channel ID */ 96 rte_be16_t seq_id; /**< Sequence ID */ 97 }; 98 99 /** 100 * eCPRI Message Header of Type #1: Bit Sequence 101 */ 102 struct rte_ecpri_msg_bit_seq { 103 rte_be16_t pc_id; /**< Physical channel ID */ 104 rte_be16_t seq_id; /**< Sequence ID */ 105 }; 106 107 /** 108 * eCPRI Message Header of Type #2: Real-Time Control Data 109 */ 110 struct rte_ecpri_msg_rtc_ctrl { 111 rte_be16_t rtc_id; /**< Real-Time Control Data ID */ 112 rte_be16_t seq_id; /**< Sequence ID */ 113 }; 114 115 /** 116 * eCPRI Message Header of Type #3: Generic Data Transfer 117 */ 118 struct rte_ecpri_msg_gen_data { 119 rte_be32_t pc_id; /**< Physical channel ID */ 120 rte_be32_t seq_id; /**< Sequence ID */ 121 }; 122 123 /** 124 * eCPRI Message Header of Type #4: Remote Memory Access 125 */ 126 RTE_STD_C11 127 struct rte_ecpri_msg_rm_access { 128 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 129 uint32_t ele_id:16; /**< Element ID */ 130 uint32_t rr:4; /**< Req/Resp */ 131 uint32_t rw:4; /**< Read/Write */ 132 uint32_t rma_id:8; /**< Remote Memory Access ID */ 133 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 134 uint32_t rma_id:8; /**< Remote Memory Access ID */ 135 uint32_t rw:4; /**< Read/Write */ 136 uint32_t rr:4; /**< Req/Resp */ 137 uint32_t ele_id:16; /**< Element ID */ 138 #endif 139 uint8_t addr[6]; /**< 48-bits address */ 140 rte_be16_t length; /**< number of bytes */ 141 }; 142 143 /** 144 * eCPRI Message Header of Type #5: One-Way Delay Measurement 145 */ 146 struct rte_ecpri_msg_delay_measure { 147 uint8_t msr_id; /**< Measurement ID */ 148 uint8_t act_type; /**< Action Type */ 149 }; 150 151 /** 152 * eCPRI Message Header of Type #6: Remote Reset 153 */ 154 struct rte_ecpri_msg_remote_reset { 155 rte_be16_t rst_id; /**< Reset ID */ 156 uint8_t rst_op; /**< Reset Code Op */ 157 }; 158 159 /** 160 * eCPRI Message Header of Type #7: Event Indication 161 */ 162 struct rte_ecpri_msg_event_ind { 163 uint8_t evt_id; /**< Event ID */ 164 uint8_t evt_type; /**< Event Type */ 165 uint8_t seq; /**< Sequence Number */ 166 uint8_t number; /**< Number of Faults/Notif */ 167 }; 168 169 /** 170 * eCPRI Combined Message Header Format: Common Header + Message Types 171 */ 172 RTE_STD_C11 173 struct rte_ecpri_combined_msg_hdr { 174 struct rte_ecpri_common_hdr common; 175 union { 176 struct rte_ecpri_msg_iq_data type0; 177 struct rte_ecpri_msg_bit_seq type1; 178 struct rte_ecpri_msg_rtc_ctrl type2; 179 struct rte_ecpri_msg_gen_data type3; 180 struct rte_ecpri_msg_rm_access type4; 181 struct rte_ecpri_msg_delay_measure type5; 182 struct rte_ecpri_msg_remote_reset type6; 183 struct rte_ecpri_msg_event_ind type7; 184 rte_be32_t dummy[3]; 185 }; 186 }; 187 188 #ifdef __cplusplus 189 } 190 #endif 191 192 #endif /* _RTE_ECPRI_H_ */ 193