xref: /dpdk/drivers/net/octeontx/base/octeontx_pkivf.h (revision eb6d5a0af9a05bf940ba19ec1ddbe575b5e7540b)
1 /*
2  *   BSD LICENSE
3  *
4  *   Copyright (C) Cavium Inc. 2017. All rights reserved.
5  *
6  *   Redistribution and use in source and binary forms, with or without
7  *   modification, are permitted provided that the following conditions
8  *   are met:
9  *
10  *     * Redistributions of source code must retain the above copyright
11  *       notice, this list of conditions and the following disclaimer.
12  *     * Redistributions in binary form must reproduce the above copyright
13  *       notice, this list of conditions and the following disclaimer in
14  *       the documentation and/or other materials provided with the
15  *       distribution.
16  *     * Neither the name of Cavium networks nor the names of its
17  *       contributors may be used to endorse or promote products derived
18  *       from this software without specific prior written permission.
19  *
20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef	__OCTEONTX_PKI_H__
34 #define	__OCTEONTX_PKI_H__
35 
36 #include <stdint.h>
37 
38 #include <rte_pmd_octeontx_ssovf.h>
39 
40 #define OCTEONTX_PKI_COPROC                     5
41 
42 /* PKI messages */
43 
44 #define MBOX_PKI_PORT_OPEN			1
45 #define MBOX_PKI_PORT_START			2
46 #define MBOX_PKI_PORT_STOP			3
47 #define MBOX_PKI_PORT_CLOSE			4
48 #define MBOX_PKI_PORT_CONFIG			5
49 #define MBOX_PKI_PORT_OPT_PARSER_CONFIG		6
50 #define MBOX_PKI_PORT_CUSTOM_PARSER_CONFIG	7
51 #define MBOX_PKI_PORT_PKTBUF_CONFIG		8
52 #define MBOX_PKI_PORT_HASH_CONFIG		9
53 #define MBOX_PKI_PORT_ERRCHK_CONFIG		10
54 #define MBOX_PKI_PORT_CREATE_QOS		11
55 #define MBOX_PKI_PORT_MODIFY_QOS		12
56 #define MBOX_PKI_PORT_DELETE_QOS		13
57 #define MBOX_PKI_PORT_PKTDROP_CONFIG		14
58 #define MBOX_PKI_PORT_WQE_GEN_CONFIG		15
59 #define MBOX_PKI_BACKPRESSURE_CONFIG		16
60 #define MBOX_PKI_PORT_GET_STATS			17
61 #define MBOX_PKI_PORT_RESET_STATS		18
62 #define MBOX_PKI_GET_PORT_CONFIG		19
63 #define MBOX_PKI_GET_PORT_QOS_CONFIG		20
64 
65 #define MBOX_PKI_MAX_QOS_ENTRY 64
66 
67 /* pki pkind parse mode */
68 enum  {
69 	MBOX_PKI_PARSE_LA_TO_LG = 0,
70 	MBOX_PKI_PARSE_LB_TO_LG = 1,
71 	MBOX_PKI_PARSE_LC_TO_LG = 3,
72 	MBOX_PKI_PARSE_LG = 0x3f,
73 	MBOX_PKI_PARSE_NOTHING = 0x7f
74 };
75 
76 /* Interface types: */
77 enum {
78 	OCTTX_PORT_TYPE_NET, /* Network interface ports */
79 	OCTTX_PORT_TYPE_INT, /* CPU internal interface ports */
80 	OCTTX_PORT_TYPE_PCI, /* DPI/PCIe interface ports */
81 	OCTTX_PORT_TYPE_MAX
82 };
83 
84 /* pki port config */
85 typedef struct mbox_pki_port_type {
86 	uint8_t port_type;
87 } mbox_pki_port_t;
88 
89 /* pki port config */
90 typedef struct mbox_pki_port_cfg {
91 	uint8_t port_type;
92 	struct {
93 		uint8_t fcs_pres:1;
94 		uint8_t fcs_skip:1;
95 		uint8_t parse_mode:1;
96 		uint8_t mpls_parse:1;
97 		uint8_t inst_hdr_parse:1;
98 		uint8_t fulc_parse:1;
99 		uint8_t dsa_parse:1;
100 		uint8_t hg2_parse:1;
101 		uint8_t hg_parse:1;
102 	} mmask;
103 	uint8_t fcs_pres;
104 	uint8_t fcs_skip;
105 	uint8_t parse_mode;
106 	uint8_t mpls_parse;
107 	uint8_t inst_hdr_parse;
108 	uint8_t fulc_parse;
109 	uint8_t dsa_parse;
110 	uint8_t hg2_parse;
111 	uint8_t hg_parse;
112 } mbox_pki_prt_cfg_t;
113 
114 /* pki Flow/style packet buffer config */
115 typedef struct mbox_pki_port_pktbuf_cfg {
116 	uint8_t port_type;
117 	struct {
118 		uint16_t f_mbuff_size:1;
119 		uint16_t f_wqe_skip:1;
120 		uint16_t f_first_skip:1;
121 		uint16_t f_later_skip:1;
122 		uint16_t f_pkt_outside_wqe:1;
123 		uint16_t f_wqe_endian:1;
124 		uint16_t f_cache_mode:1;
125 	} mmask;
126 	uint16_t mbuff_size;
127 	uint16_t wqe_skip;
128 	uint16_t first_skip;
129 	uint16_t later_skip;
130 	uint8_t pkt_outside_wqe;
131 	uint8_t wqe_endian;
132 	uint8_t cache_mode;
133 } mbox_pki_pktbuf_cfg_t;
134 
135 /* pki flow/style tag config */
136 typedef struct mbox_pki_port_hash_cfg {
137 	uint8_t port_type;
138 	uint32_t tag_slf:1;
139 	uint32_t tag_sle:1;
140 	uint32_t tag_sld:1;
141 	uint32_t tag_slc:1;
142 	uint32_t tag_dlf:1;
143 	uint32_t tag_dle:1;
144 	uint32_t tag_dld:1;
145 	uint32_t tag_dlc:1;
146 	uint32_t tag_prt:1;
147 	uint32_t tag_vlan0:1;
148 	uint32_t tag_vlan1:1;
149 	uint32_t tag_ip_pctl:1;
150 	uint32_t tag_sync:1;
151 	uint32_t tag_spi:1;
152 	uint32_t tag_gtp:1;
153 	uint32_t tag_vni:1;
154 } mbox_pki_hash_cfg_t;
155 
156 /* pki flow/style errcheck config */
157 typedef struct mbox_pki_port_errcheck_cfg {
158 	uint8_t port_type;
159 	struct {
160 		uint32_t f_ip6_udp_opt:1;
161 		uint32_t f_lenerr_en:1;
162 		uint32_t f_maxerr_en:1;
163 		uint32_t f_minerr_en:1;
164 		uint32_t f_fcs_chk:1;
165 		uint32_t f_fcs_strip:1;
166 		uint32_t f_len_lf:1;
167 		uint32_t f_len_le:1;
168 		uint32_t f_len_ld:1;
169 		uint32_t f_len_lc:1;
170 		uint32_t f_csum_lf:1;
171 		uint32_t f_csum_le:1;
172 		uint32_t f_csum_ld:1;
173 		uint32_t f_csum_lc:1;
174 		uint32_t f_min_frame_len;
175 		uint32_t f_max_frame_len;
176 	} mmask;
177 	uint64_t ip6_udp_opt:1;
178 	uint64_t lenerr_en:1;
179 	uint64_t maxerr_en:1;
180 	uint64_t minerr_en:1;
181 	uint64_t fcs_chk:1;
182 	uint64_t fcs_strip:1;
183 	uint64_t len_lf:1;
184 	uint64_t len_le:1;
185 	uint64_t len_ld:1;
186 	uint64_t len_lc:1;
187 	uint64_t csum_lf:1;
188 	uint64_t csum_le:1;
189 	uint64_t csum_ld:1;
190 	uint64_t csum_lc:1;
191 	uint64_t min_frame_len;
192 	uint64_t max_frame_len;
193 } mbox_pki_errcheck_cfg_t;
194 
195 /* CACHE MODE*/
196 enum {
197 	MBOX_PKI_OPC_MODE_STT = 0LL,
198 	MBOX_PKI_OPC_MODE_STF = 1LL,
199 	MBOX_PKI_OPC_MODE_STF1_STT = 2LL,
200 	MBOX_PKI_OPC_MODE_STF2_STT = 3LL
201 };
202 
203 /* PKI QPG QOS*/
204 enum {
205 	MBOX_PKI_QPG_QOS_NONE = 0,
206 	MBOX_PKI_QPG_QOS_VLAN,
207 	MBOX_PKI_QPG_QOS_MPLS,
208 	MBOX_PKI_QPG_QOS_DSA_SRC,
209 	MBOX_PKI_QPG_QOS_DIFFSERV,
210 	MBOX_PKI_QPG_QOS_HIGIG,
211 };
212 
213 struct mbox_pki_qos_entry {
214 	uint16_t port_add;
215 	uint16_t ggrp_ok;
216 	uint16_t ggrp_bad;
217 	uint16_t gaura;
218 	uint8_t grptag_ok;
219 	uint8_t grptag_bad;
220 };
221 
222 /* pki flow/style enable qos */
223 typedef struct mbox_pki_port_create_qos {
224 	uint8_t port_type;
225 	uint8_t qpg_qos;
226 	uint8_t num_entry;
227 	uint8_t tag_type;
228 	uint8_t drop_policy;
229 	struct mbox_pki_qos_entry qos_entry[MBOX_PKI_MAX_QOS_ENTRY];
230 } mbox_pki_qos_cfg_t;
231 
232 /* pki flow/style enable qos */
233 typedef struct mbox_pki_port_modify_qos_entry {
234 	uint8_t port_type;
235 	uint16_t index;
236 	struct {
237 		uint8_t f_port_add:1;
238 		uint8_t f_grp_ok:1;
239 		uint8_t f_grp_bad:1;
240 		uint8_t f_gaura:1;
241 		uint8_t f_grptag_ok:1;
242 		uint8_t f_grptag_bad:1;
243 	} mmask;
244 	struct mbox_pki_qos_entry qos_entry;
245 } mbox_pki_mod_qos_t;
246 
247 /* PKI maximum constants */
248 #define PKI_VF_MAX			(1)
249 #define PKI_MAX_PKTLEN			(32768)
250 
251 /* pki pkind parse mode */
252 enum  {
253 	PKI_PARSE_LA_TO_LG = 0,
254 	PKI_PARSE_LB_TO_LG = 1,
255 	PKI_PARSE_LC_TO_LG = 3,
256 	PKI_PARSE_LG = 0x3f,
257 	PKI_PARSE_NOTHING = 0x7f
258 };
259 
260 /* pki port config */
261 typedef struct pki_port_cfg {
262 	uint8_t port_type;
263 	struct {
264 		uint8_t fcs_pres:1;
265 		uint8_t fcs_skip:1;
266 		uint8_t parse_mode:1;
267 		uint8_t mpls_parse:1;
268 		uint8_t inst_hdr_parse:1;
269 		uint8_t fulc_parse:1;
270 		uint8_t dsa_parse:1;
271 		uint8_t hg2_parse:1;
272 		uint8_t hg_parse:1;
273 	} mmask;
274 	uint8_t fcs_pres;
275 	uint8_t fcs_skip;
276 	uint8_t parse_mode;
277 	uint8_t mpls_parse;
278 	uint8_t inst_hdr_parse;
279 	uint8_t fulc_parse;
280 	uint8_t dsa_parse;
281 	uint8_t hg2_parse;
282 	uint8_t hg_parse;
283 } pki_prt_cfg_t;
284 
285 
286 /* pki Flow/style packet buffer config */
287 typedef struct pki_port_pktbuf_cfg {
288 	uint8_t port_type;
289 	struct {
290 		uint16_t f_mbuff_size:1;
291 		uint16_t f_wqe_skip:1;
292 		uint16_t f_first_skip:1;
293 		uint16_t f_later_skip:1;
294 		uint16_t f_pkt_outside_wqe:1;
295 		uint16_t f_wqe_endian:1;
296 		uint16_t f_cache_mode:1;
297 	} mmask;
298 	uint16_t mbuff_size;
299 	uint16_t wqe_skip;
300 	uint16_t first_skip;
301 	uint16_t later_skip;
302 	uint8_t pkt_outside_wqe;
303 	uint8_t wqe_endian;
304 	uint8_t cache_mode;
305 } pki_pktbuf_cfg_t;
306 
307 /* pki flow/style tag config */
308 typedef struct pki_port_hash_cfg {
309 	uint8_t port_type;
310 	uint32_t tag_slf:1;
311 	uint32_t tag_sle:1;
312 	uint32_t tag_sld:1;
313 	uint32_t tag_slc:1;
314 	uint32_t tag_dlf:1;
315 	uint32_t tag_dle:1;
316 	uint32_t tag_dld:1;
317 	uint32_t tag_dlc:1;
318 	uint32_t tag_prt:1;
319 	uint32_t tag_vlan0:1;
320 	uint32_t tag_vlan1:1;
321 	uint32_t tag_ip_pctl:1;
322 	uint32_t tag_sync:1;
323 	uint32_t tag_spi:1;
324 	uint32_t tag_gtp:1;
325 	uint32_t tag_vni:1;
326 } pki_hash_cfg_t;
327 
328 /* pki flow/style errcheck config */
329 typedef struct pki_port_errcheck_cfg {
330 	uint8_t port_type;
331 	struct {
332 		uint32_t f_ip6_udp_opt:1;
333 		uint32_t f_lenerr_en:1;
334 		uint32_t f_maxerr_en:1;
335 		uint32_t f_minerr_en:1;
336 		uint32_t f_fcs_chk:1;
337 		uint32_t f_fcs_strip:1;
338 		uint32_t f_len_lf:1;
339 		uint32_t f_len_le:1;
340 		uint32_t f_len_ld:1;
341 		uint32_t f_len_lc:1;
342 		uint32_t f_csum_lf:1;
343 		uint32_t f_csum_le:1;
344 		uint32_t f_csum_ld:1;
345 		uint32_t f_csum_lc:1;
346 		uint32_t f_min_frame_len;
347 		uint32_t f_max_frame_len;
348 	} mmask;
349 	uint64_t ip6_udp_opt:1;
350 	uint64_t lenerr_en:1;
351 	uint64_t maxerr_en:1;
352 	uint64_t minerr_en:1;
353 	uint64_t fcs_chk:1;
354 	uint64_t fcs_strip:1;
355 	uint64_t len_lf:1;
356 	uint64_t len_le:1;
357 	uint64_t len_ld:1;
358 	uint64_t len_lc:1;
359 	uint64_t csum_lf:1;
360 	uint64_t csum_le:1;
361 	uint64_t csum_ld:1;
362 	uint64_t csum_lc:1;
363 	uint64_t min_frame_len;
364 	uint64_t max_frame_len;
365 } pki_errchk_cfg_t;
366 
367 
368 /* CACHE MODE*/
369 enum {
370 	PKI_OPC_MODE_STT = 0LL,
371 	PKI_OPC_MODE_STF = 1LL,
372 	PKI_OPC_MODE_STF1_STT = 2LL,
373 	PKI_OPC_MODE_STF2_STT = 3LL
374 };
375 
376 /* PKI QPG QOS*/
377 enum {
378 	PKI_QPG_QOS_NONE = 0,
379 	PKI_QPG_QOS_VLAN,
380 	PKI_QPG_QOS_MPLS,
381 	PKI_QPG_QOS_DSA_SRC,
382 	PKI_QPG_QOS_DIFFSERV,
383 	PKI_QPG_QOS_HIGIG,
384 };
385 
386 struct pki_qos_entry {
387 	uint16_t port_add;
388 	uint16_t ggrp_ok;
389 	uint16_t ggrp_bad;
390 	uint16_t gaura;
391 	uint8_t grptag_ok;
392 	uint8_t grptag_bad;
393 	uint8_t ena_red;
394 	uint8_t ena_drop;
395 };
396 
397 #define PKO_MAX_QOS_ENTRY 64
398 
399 /* pki flow/style enable qos */
400 typedef struct pki_port_create_qos {
401 	uint8_t port_type;
402 	uint8_t qpg_qos;
403 	uint8_t num_entry;
404 	uint8_t tag_type;
405 	uint8_t drop_policy;
406 	struct pki_qos_entry qos_entry[PKO_MAX_QOS_ENTRY];
407 } pki_qos_cfg_t;
408 
409 /* pki flow/style enable qos */
410 typedef struct pki_port_modify_qos_entry {
411 	uint8_t port_type;
412 	uint16_t index;
413 	struct {
414 		uint8_t f_port_add:1;
415 		uint8_t f_grp_ok:1;
416 		uint8_t f_grp_bad:1;
417 		uint8_t f_gaura:1;
418 	} mmask;
419 	struct pki_qos_entry qos_entry;
420 } pki_mod_qos_t;
421 
422 int octeontx_pki_port_open(int port);
423 int octeontx_pki_port_hash_config(int port, pki_hash_cfg_t *hash_cfg);
424 int octeontx_pki_port_pktbuf_config(int port, pki_pktbuf_cfg_t *buf_cfg);
425 int octeontx_pki_port_create_qos(int port, pki_qos_cfg_t *qos_cfg);
426 int octeontx_pki_port_close(int port);
427 int octeontx_pki_port_start(int port);
428 int octeontx_pki_port_stop(int port);
429 int octeontx_pki_port_errchk_config(int port, pki_errchk_cfg_t *cfg);
430 
431 #endif /* __OCTEONTX_PKI_H__ */
432