xref: /dpdk/drivers/net/octeontx/base/octeontx_pki_var.h (revision e77506397fc8005c5129e22e9e2d15d5876790fd)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4 
5 #ifndef __OCTEONTX_PKI_VAR_H__
6 #define __OCTEONTX_PKI_VAR_H__
7 
8 #include <rte_byteorder.h>
9 
10 #define OCTTX_PACKET_WQE_SKIP			128
11 #define OCTTX_PACKET_FIRST_SKIP_MAXREGVAL	496
12 #define OCTTX_PACKET_FIRST_SKIP_MAXLEN		512
13 #define OCTTX_PACKET_FIRST_SKIP_ADJUST(x)				\
14 		(RTE_MIN(x, OCTTX_PACKET_FIRST_SKIP_MAXREGVAL))
15 #define OCTTX_PACKET_FIRST_SKIP_SUM(p)					\
16 				(OCTTX_PACKET_WQE_SKIP			\
17 				+ rte_pktmbuf_priv_size(p)		\
18 				+ RTE_PKTMBUF_HEADROOM)
19 #define OCTTX_PACKET_FIRST_SKIP(p)					\
20 	OCTTX_PACKET_FIRST_SKIP_ADJUST(OCTTX_PACKET_FIRST_SKIP_SUM(p))
21 #define OCTTX_PACKET_LATER_SKIP		128
22 
23 /* WQE descriptor */
24 typedef union __rte_packed_begin octtx_wqe_s {
25 	uint64_t	w[6];
26 
27 	struct {
28 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
29 		struct {
30 			uint64_t	pknd : 6;
31 			uint64_t	rsvd0 : 10;
32 			uint64_t	style : 8;
33 			uint64_t	bufs : 8;
34 			uint64_t	chan : 12;
35 			uint64_t	apad : 3;
36 			uint64_t	rsvd1 : 1;
37 			uint64_t	aura : 12;
38 			uint64_t	rsvd2 : 4;
39 		} w0;
40 
41 		struct {
42 			uint64_t	tag :	32;
43 			uint64_t	tt :	2;
44 			uint64_t	grp :	10;
45 			uint64_t	rsvd0 : 2;
46 			uint64_t	rsvd1 : 2;
47 			uint64_t	len :	16;
48 		} w1;
49 
50 		struct {
51 			uint64_t	op_code : 8;
52 			uint64_t	err_lev : 3;
53 			uint64_t	raw	: 1;
54 			uint64_t	l2m	: 1;
55 			uint64_t	l2b	: 1;
56 			uint64_t	l3m	: 1;
57 			uint64_t	l3b	: 1;
58 			uint64_t	l3fr	: 1;
59 			uint64_t	pf1	: 1;
60 			uint64_t	pf2	: 1;
61 			uint64_t	pf3	: 1;
62 			uint64_t	pf4	: 1;
63 			uint64_t	sh	: 1;
64 			uint64_t	vs	: 1;
65 			uint64_t	vv	: 1;
66 			uint64_t	rsvd0	: 8;
67 			uint64_t	lae	: 1;
68 			uint64_t	lbty	: 5;
69 			uint64_t	lcty	: 5;
70 			uint64_t	ldty	: 5;
71 			uint64_t	lety	: 5;
72 			uint64_t	lfty	: 5;
73 			uint64_t	lgty	: 5;
74 			uint64_t	sw	: 1;
75 		} w2;
76 
77 		struct {
78 			uint64_t	addr;	/* Byte addr of start-of-pkt */
79 		} w3;
80 
81 		struct {
82 			uint64_t	laptr : 8;
83 			uint64_t	lbptr : 8;
84 			uint64_t	lcptr : 8;
85 			uint64_t	ldprt : 8;
86 			uint64_t	leptr : 8;
87 			uint64_t	lfptr : 8;
88 			uint64_t	lgptr : 8;
89 			uint64_t	vlptr : 8;
90 		} w4;
91 
92 		struct {
93 			uint64_t	rsvd0 : 47;
94 			uint64_t	dwd : 1;
95 			uint64_t	size : 16;
96 		} w5;
97 #else
98 		struct {
99 			uint64_t	rsvd2 : 4;
100 			uint64_t	aura : 12;
101 			uint64_t	rsvd1 : 1;
102 			uint64_t	apad : 3;
103 			uint64_t	chan : 12;
104 			uint64_t	bufs : 8;
105 			uint64_t	style : 8;
106 			uint64_t	rsvd0 : 10;
107 			uint64_t	pknd : 6;
108 		} w0;
109 
110 		struct {
111 			uint64_t	len :   16;
112 			uint64_t	rsvd1 : 2;
113 			uint64_t	rsvd0 : 2;
114 			uint64_t	grp :   10;
115 			uint64_t	tt :    2;
116 			uint64_t	tag :   32;
117 		} w1;
118 
119 		struct {
120 			uint64_t	sw	: 1;
121 			uint64_t	lgty	: 5;
122 			uint64_t	lfty	: 5;
123 			uint64_t	lety	: 5;
124 			uint64_t	ldty	: 5;
125 			uint64_t	lcty	: 5;
126 			uint64_t	lbty	: 5;
127 			uint64_t	lae	: 1;
128 			uint64_t	rsvd0	: 8;
129 			uint64_t	vv	: 1;
130 			uint64_t	vs	: 1;
131 			uint64_t	sh	: 1;
132 			uint64_t	pf4	: 1;
133 			uint64_t	pf3	: 1;
134 			uint64_t	pf2	: 1;
135 			uint64_t	pf1	: 1;
136 			uint64_t	l3fr	: 1;
137 			uint64_t	l3b	: 1;
138 			uint64_t	l3m	: 1;
139 			uint64_t	l2b	: 1;
140 			uint64_t	l2m	: 1;
141 			uint64_t	raw	: 1;
142 	uint64_t	err_lev : 3;
143 			uint64_t	op_code : 8;
144 		} w2;
145 
146 		struct {
147 			uint64_t	addr;	/* Byte addr of start-of-pkt */
148 		} w3;
149 
150 		struct {
151 			uint64_t	vlptr : 8;
152 			uint64_t	lgptr : 8;
153 			uint64_t	lfptr : 8;
154 			uint64_t	leptr : 8;
155 			uint64_t	ldprt : 8;
156 			uint64_t	lcptr : 8;
157 			uint64_t	lbptr : 8;
158 			uint64_t	laptr : 8;
159 		} w4;
160 #endif
161 	} s;
162 
163 } __rte_packed_end octtx_wqe_t;
164 
165 enum occtx_pki_ltype_e {
166 	OCCTX_PKI_LTYPE_NONE		= 0,
167 	OCCTX_PKI_LTYPE_ENET		= 1,
168 	OCCTX_PKI_LTYPE_VLAN		= 2,
169 	OCCTX_PKI_LTYPE_SNAP_PAYLD	= 5,
170 	OCCTX_PKI_LTYPE_ARP		= 6,
171 	OCCTX_PKI_LTYPE_RARP		= 7,
172 	OCCTX_PKI_LTYPE_IP4		= 8,
173 	OCCTX_PKI_LTYPE_IP4_OPT		= 9,
174 	OCCTX_PKI_LTYPE_IP6		= 0xa,
175 	OCCTX_PKI_LTYPE_IP6_OPT		= 0xb,
176 	OCCTX_PKI_LTYPE_IPSEC_ESP	= 0xc,
177 	OCCTX_PKI_LTYPE_IPFRAG		= 0xd,
178 	OCCTX_PKI_LTYPE_IPCOMP		= 0xe,
179 	OCCTX_PKI_LTYPE_TCP		= 0x10,
180 	OCCTX_PKI_LTYPE_UDP		= 0x11,
181 	OCCTX_PKI_LTYPE_SCTP		= 0x12,
182 	OCCTX_PKI_LTYPE_UDP_VXLAN	= 0x13,
183 	OCCTX_PKI_LTYPE_GRE		= 0x14,
184 	OCCTX_PKI_LTYPE_NVGRE		= 0x15,
185 	OCCTX_PKI_LTYPE_GTP		= 0x16,
186 	OCCTX_PKI_LTYPE_UDP_GENEVE	= 0x17,
187 	OCCTX_PKI_LTYPE_SW28		= 0x1c,
188 	OCCTX_PKI_LTYPE_SW29		= 0x1d,
189 	OCCTX_PKI_LTYPE_SW30		= 0x1e,
190 	OCCTX_PKI_LTYPE_SW31		= 0x1f,
191 	OCCTX_PKI_LTYPE_LAST
192 };
193 
194 enum lc_type_e {
195 	LC_NONE		= OCCTX_PKI_LTYPE_NONE,
196 	LC_IPV4		= OCCTX_PKI_LTYPE_IP4,
197 	LC_IPV4_OPT	= OCCTX_PKI_LTYPE_IP4_OPT,
198 	LC_IPV6		= OCCTX_PKI_LTYPE_IP6,
199 	LC_IPV6_OPT	= OCCTX_PKI_LTYPE_IP6_OPT,
200 };
201 
202 enum le_type_e {
203 	LE_NONE		= OCCTX_PKI_LTYPE_NONE,
204 };
205 
206 enum lf_type_e {
207 	LF_NONE		= OCCTX_PKI_LTYPE_NONE,
208 	LF_IPSEC_ESP	= OCCTX_PKI_LTYPE_IPSEC_ESP,
209 	LF_IPFRAG	= OCCTX_PKI_LTYPE_IPFRAG,
210 	LF_IPCOMP	= OCCTX_PKI_LTYPE_IPCOMP,
211 	LF_TCP		= OCCTX_PKI_LTYPE_TCP,
212 	LF_UDP		= OCCTX_PKI_LTYPE_UDP,
213 	LF_GRE		= OCCTX_PKI_LTYPE_GRE,
214 	LF_UDP_GENEVE	= OCCTX_PKI_LTYPE_UDP_GENEVE,
215 	LF_UDP_VXLAN	= OCCTX_PKI_LTYPE_UDP_VXLAN,
216 	LF_NVGRE	= OCCTX_PKI_LTYPE_NVGRE,
217 };
218 
219 /* Word 0 of HW segment buflink structure */
220 typedef union octtx_pki_buflink_w0_u {
221 	uint64_t v;
222 	struct {
223 		uint64_t        size:16;
224 		uint64_t        rsvd1:15;
225 		uint64_t        invfree:1;
226 		/** Aura number of the next segment */
227 		uint64_t        aura:16;
228 		uint64_t        sw:9;
229 		uint64_t        later_invfree:1;
230 		uint64_t        rsvd2:5;
231 		/** 1 if aura number is set */
232 		uint64_t        has_aura:1;
233 	} s;
234 } octtx_pki_buflink_w0_t;
235 
236 /* Word 1 of HW segment buflink structure */
237 typedef union octtx_pki_buflink_w1_u {
238 	uint64_t v;
239 	struct {
240 		uint64_t        addr;
241 	} s;
242 } octtx_pki_buflink_w1_t;
243 
244 /* HW structure linking packet segments into singly linked list */
245 typedef struct octtx_pki_buflink_s {
246 	octtx_pki_buflink_w0_t    w0; /* Word 0 of the buflink */
247 	octtx_pki_buflink_w1_t    w1; /* Word 1 of the buflink */
248 } octtx_pki_buflink_t;
249 
250 #endif /* __OCTEONTX_PKI_VAR_H__ */
251