xref: /dpdk/lib/net/rte_ecpri.h (revision daa02b5cddbb8e11b31d41e2bf7bb1ae64dcae2f)
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