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