xref: /dpdk/drivers/net/octeontx/base/octeontx_pki_var.h (revision e77506397fc8005c5129e22e9e2d15d5876790fd)
1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2aaf4363eSJerin Jacob  * Copyright(c) 2017 Cavium, Inc
36d28968eSJerin Jacob  */
46d28968eSJerin Jacob 
56d28968eSJerin Jacob #ifndef __OCTEONTX_PKI_VAR_H__
66d28968eSJerin Jacob #define __OCTEONTX_PKI_VAR_H__
76d28968eSJerin Jacob 
86d28968eSJerin Jacob #include <rte_byteorder.h>
96d28968eSJerin Jacob 
106d28968eSJerin Jacob #define OCTTX_PACKET_WQE_SKIP			128
11679dfdc9SNitin Saxena #define OCTTX_PACKET_FIRST_SKIP_MAXREGVAL	496
12679dfdc9SNitin Saxena #define OCTTX_PACKET_FIRST_SKIP_MAXLEN		512
13679dfdc9SNitin Saxena #define OCTTX_PACKET_FIRST_SKIP_ADJUST(x)				\
14679dfdc9SNitin Saxena 		(RTE_MIN(x, OCTTX_PACKET_FIRST_SKIP_MAXREGVAL))
15679dfdc9SNitin Saxena #define OCTTX_PACKET_FIRST_SKIP_SUM(p)					\
16679dfdc9SNitin Saxena 				(OCTTX_PACKET_WQE_SKIP			\
17679dfdc9SNitin Saxena 				+ rte_pktmbuf_priv_size(p)		\
18679dfdc9SNitin Saxena 				+ RTE_PKTMBUF_HEADROOM)
19679dfdc9SNitin Saxena #define OCTTX_PACKET_FIRST_SKIP(p)					\
20679dfdc9SNitin Saxena 	OCTTX_PACKET_FIRST_SKIP_ADJUST(OCTTX_PACKET_FIRST_SKIP_SUM(p))
216d28968eSJerin Jacob #define OCTTX_PACKET_LATER_SKIP		128
226d28968eSJerin Jacob 
236d28968eSJerin Jacob /* WQE descriptor */
24*e7750639SAndre Muezerie typedef union __rte_packed_begin octtx_wqe_s {
256d28968eSJerin Jacob 	uint64_t	w[6];
266d28968eSJerin Jacob 
276d28968eSJerin Jacob 	struct {
286d28968eSJerin Jacob #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
296d28968eSJerin Jacob 		struct {
306d28968eSJerin Jacob 			uint64_t	pknd : 6;
316d28968eSJerin Jacob 			uint64_t	rsvd0 : 10;
326d28968eSJerin Jacob 			uint64_t	style : 8;
336d28968eSJerin Jacob 			uint64_t	bufs : 8;
346d28968eSJerin Jacob 			uint64_t	chan : 12;
356d28968eSJerin Jacob 			uint64_t	apad : 3;
366d28968eSJerin Jacob 			uint64_t	rsvd1 : 1;
376d28968eSJerin Jacob 			uint64_t	aura : 12;
386d28968eSJerin Jacob 			uint64_t	rsvd2 : 4;
396d28968eSJerin Jacob 		} w0;
406d28968eSJerin Jacob 
416d28968eSJerin Jacob 		struct {
426d28968eSJerin Jacob 			uint64_t	tag :	32;
436d28968eSJerin Jacob 			uint64_t	tt :	2;
446d28968eSJerin Jacob 			uint64_t	grp :	10;
456d28968eSJerin Jacob 			uint64_t	rsvd0 : 2;
466d28968eSJerin Jacob 			uint64_t	rsvd1 : 2;
476d28968eSJerin Jacob 			uint64_t	len :	16;
486d28968eSJerin Jacob 		} w1;
496d28968eSJerin Jacob 
506d28968eSJerin Jacob 		struct {
516d28968eSJerin Jacob 			uint64_t	op_code : 8;
526d28968eSJerin Jacob 			uint64_t	err_lev : 3;
536d28968eSJerin Jacob 			uint64_t	raw	: 1;
546d28968eSJerin Jacob 			uint64_t	l2m	: 1;
556d28968eSJerin Jacob 			uint64_t	l2b	: 1;
566d28968eSJerin Jacob 			uint64_t	l3m	: 1;
576d28968eSJerin Jacob 			uint64_t	l3b	: 1;
586d28968eSJerin Jacob 			uint64_t	l3fr	: 1;
596d28968eSJerin Jacob 			uint64_t	pf1	: 1;
606d28968eSJerin Jacob 			uint64_t	pf2	: 1;
616d28968eSJerin Jacob 			uint64_t	pf3	: 1;
626d28968eSJerin Jacob 			uint64_t	pf4	: 1;
636d28968eSJerin Jacob 			uint64_t	sh	: 1;
646d28968eSJerin Jacob 			uint64_t	vs	: 1;
656d28968eSJerin Jacob 			uint64_t	vv	: 1;
666d28968eSJerin Jacob 			uint64_t	rsvd0	: 8;
676d28968eSJerin Jacob 			uint64_t	lae	: 1;
686d28968eSJerin Jacob 			uint64_t	lbty	: 5;
696d28968eSJerin Jacob 			uint64_t	lcty	: 5;
706d28968eSJerin Jacob 			uint64_t	ldty	: 5;
716d28968eSJerin Jacob 			uint64_t	lety	: 5;
726d28968eSJerin Jacob 			uint64_t	lfty	: 5;
736d28968eSJerin Jacob 			uint64_t	lgty	: 5;
746d28968eSJerin Jacob 			uint64_t	sw	: 1;
756d28968eSJerin Jacob 		} w2;
766d28968eSJerin Jacob 
776d28968eSJerin Jacob 		struct {
786d28968eSJerin Jacob 			uint64_t	addr;	/* Byte addr of start-of-pkt */
796d28968eSJerin Jacob 		} w3;
806d28968eSJerin Jacob 
816d28968eSJerin Jacob 		struct {
826d28968eSJerin Jacob 			uint64_t	laptr : 8;
836d28968eSJerin Jacob 			uint64_t	lbptr : 8;
846d28968eSJerin Jacob 			uint64_t	lcptr : 8;
856d28968eSJerin Jacob 			uint64_t	ldprt : 8;
866d28968eSJerin Jacob 			uint64_t	leptr : 8;
876d28968eSJerin Jacob 			uint64_t	lfptr : 8;
886d28968eSJerin Jacob 			uint64_t	lgptr : 8;
896d28968eSJerin Jacob 			uint64_t	vlptr : 8;
906d28968eSJerin Jacob 		} w4;
916d28968eSJerin Jacob 
926d28968eSJerin Jacob 		struct {
936d28968eSJerin Jacob 			uint64_t	rsvd0 : 47;
946d28968eSJerin Jacob 			uint64_t	dwd : 1;
956d28968eSJerin Jacob 			uint64_t	size : 16;
966d28968eSJerin Jacob 		} w5;
976d28968eSJerin Jacob #else
986d28968eSJerin Jacob 		struct {
996d28968eSJerin Jacob 			uint64_t	rsvd2 : 4;
1006d28968eSJerin Jacob 			uint64_t	aura : 12;
1016d28968eSJerin Jacob 			uint64_t	rsvd1 : 1;
1026d28968eSJerin Jacob 			uint64_t	apad : 3;
1036d28968eSJerin Jacob 			uint64_t	chan : 12;
1046d28968eSJerin Jacob 			uint64_t	bufs : 8;
1056d28968eSJerin Jacob 			uint64_t	style : 8;
1066d28968eSJerin Jacob 			uint64_t	rsvd0 : 10;
1076d28968eSJerin Jacob 			uint64_t	pknd : 6;
1086d28968eSJerin Jacob 		} w0;
1096d28968eSJerin Jacob 
1106d28968eSJerin Jacob 		struct {
1116d28968eSJerin Jacob 			uint64_t	len :   16;
1126d28968eSJerin Jacob 			uint64_t	rsvd1 : 2;
1136d28968eSJerin Jacob 			uint64_t	rsvd0 : 2;
1146d28968eSJerin Jacob 			uint64_t	grp :   10;
1156d28968eSJerin Jacob 			uint64_t	tt :    2;
1166d28968eSJerin Jacob 			uint64_t	tag :   32;
1176d28968eSJerin Jacob 		} w1;
1186d28968eSJerin Jacob 
1196d28968eSJerin Jacob 		struct {
1206d28968eSJerin Jacob 			uint64_t	sw	: 1;
1216d28968eSJerin Jacob 			uint64_t	lgty	: 5;
1226d28968eSJerin Jacob 			uint64_t	lfty	: 5;
1236d28968eSJerin Jacob 			uint64_t	lety	: 5;
1246d28968eSJerin Jacob 			uint64_t	ldty	: 5;
1256d28968eSJerin Jacob 			uint64_t	lcty	: 5;
1266d28968eSJerin Jacob 			uint64_t	lbty	: 5;
1276d28968eSJerin Jacob 			uint64_t	lae	: 1;
1286d28968eSJerin Jacob 			uint64_t	rsvd0	: 8;
1296d28968eSJerin Jacob 			uint64_t	vv	: 1;
1306d28968eSJerin Jacob 			uint64_t	vs	: 1;
1316d28968eSJerin Jacob 			uint64_t	sh	: 1;
1326d28968eSJerin Jacob 			uint64_t	pf4	: 1;
1336d28968eSJerin Jacob 			uint64_t	pf3	: 1;
1346d28968eSJerin Jacob 			uint64_t	pf2	: 1;
1356d28968eSJerin Jacob 			uint64_t	pf1	: 1;
1366d28968eSJerin Jacob 			uint64_t	l3fr	: 1;
1376d28968eSJerin Jacob 			uint64_t	l3b	: 1;
1386d28968eSJerin Jacob 			uint64_t	l3m	: 1;
1396d28968eSJerin Jacob 			uint64_t	l2b	: 1;
1406d28968eSJerin Jacob 			uint64_t	l2m	: 1;
1416d28968eSJerin Jacob 			uint64_t	raw	: 1;
1426d28968eSJerin Jacob 	uint64_t	err_lev : 3;
1436d28968eSJerin Jacob 			uint64_t	op_code : 8;
1446d28968eSJerin Jacob 		} w2;
1456d28968eSJerin Jacob 
1466d28968eSJerin Jacob 		struct {
1476d28968eSJerin Jacob 			uint64_t	addr;	/* Byte addr of start-of-pkt */
1486d28968eSJerin Jacob 		} w3;
1496d28968eSJerin Jacob 
1506d28968eSJerin Jacob 		struct {
1516d28968eSJerin Jacob 			uint64_t	vlptr : 8;
1526d28968eSJerin Jacob 			uint64_t	lgptr : 8;
1536d28968eSJerin Jacob 			uint64_t	lfptr : 8;
1546d28968eSJerin Jacob 			uint64_t	leptr : 8;
1556d28968eSJerin Jacob 			uint64_t	ldprt : 8;
1566d28968eSJerin Jacob 			uint64_t	lcptr : 8;
1576d28968eSJerin Jacob 			uint64_t	lbptr : 8;
1586d28968eSJerin Jacob 			uint64_t	laptr : 8;
1596d28968eSJerin Jacob 		} w4;
1606d28968eSJerin Jacob #endif
1616d28968eSJerin Jacob 	} s;
1626d28968eSJerin Jacob 
163*e7750639SAndre Muezerie } __rte_packed_end octtx_wqe_t;
1646d28968eSJerin Jacob 
1656d28968eSJerin Jacob enum occtx_pki_ltype_e {
1666d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_NONE		= 0,
1676d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_ENET		= 1,
1686d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_VLAN		= 2,
1696d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SNAP_PAYLD	= 5,
1706d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_ARP		= 6,
1716d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_RARP		= 7,
1726d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IP4		= 8,
1736d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IP4_OPT		= 9,
1746d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IP6		= 0xa,
1756d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IP6_OPT		= 0xb,
1766d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IPSEC_ESP	= 0xc,
1776d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IPFRAG		= 0xd,
1786d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_IPCOMP		= 0xe,
1796d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_TCP		= 0x10,
1806d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_UDP		= 0x11,
1816d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SCTP		= 0x12,
1826d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_UDP_VXLAN	= 0x13,
1836d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_GRE		= 0x14,
1846d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_NVGRE		= 0x15,
1856d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_GTP		= 0x16,
1866d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_UDP_GENEVE	= 0x17,
1876d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SW28		= 0x1c,
1886d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SW29		= 0x1d,
1896d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SW30		= 0x1e,
1906d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_SW31		= 0x1f,
1916d28968eSJerin Jacob 	OCCTX_PKI_LTYPE_LAST
1926d28968eSJerin Jacob };
1936d28968eSJerin Jacob 
1946d28968eSJerin Jacob enum lc_type_e {
1956d28968eSJerin Jacob 	LC_NONE		= OCCTX_PKI_LTYPE_NONE,
1966d28968eSJerin Jacob 	LC_IPV4		= OCCTX_PKI_LTYPE_IP4,
1976d28968eSJerin Jacob 	LC_IPV4_OPT	= OCCTX_PKI_LTYPE_IP4_OPT,
1986d28968eSJerin Jacob 	LC_IPV6		= OCCTX_PKI_LTYPE_IP6,
1996d28968eSJerin Jacob 	LC_IPV6_OPT	= OCCTX_PKI_LTYPE_IP6_OPT,
2006d28968eSJerin Jacob };
2016d28968eSJerin Jacob 
2026d28968eSJerin Jacob enum le_type_e {
2036d28968eSJerin Jacob 	LE_NONE		= OCCTX_PKI_LTYPE_NONE,
2046d28968eSJerin Jacob };
2056d28968eSJerin Jacob 
2066d28968eSJerin Jacob enum lf_type_e {
2076d28968eSJerin Jacob 	LF_NONE		= OCCTX_PKI_LTYPE_NONE,
2086d28968eSJerin Jacob 	LF_IPSEC_ESP	= OCCTX_PKI_LTYPE_IPSEC_ESP,
2096d28968eSJerin Jacob 	LF_IPFRAG	= OCCTX_PKI_LTYPE_IPFRAG,
2106d28968eSJerin Jacob 	LF_IPCOMP	= OCCTX_PKI_LTYPE_IPCOMP,
2116d28968eSJerin Jacob 	LF_TCP		= OCCTX_PKI_LTYPE_TCP,
2126d28968eSJerin Jacob 	LF_UDP		= OCCTX_PKI_LTYPE_UDP,
2136d28968eSJerin Jacob 	LF_GRE		= OCCTX_PKI_LTYPE_GRE,
2146d28968eSJerin Jacob 	LF_UDP_GENEVE	= OCCTX_PKI_LTYPE_UDP_GENEVE,
2156d28968eSJerin Jacob 	LF_UDP_VXLAN	= OCCTX_PKI_LTYPE_UDP_VXLAN,
2166d28968eSJerin Jacob 	LF_NVGRE	= OCCTX_PKI_LTYPE_NVGRE,
2176d28968eSJerin Jacob };
21885221a0cSHarman Kalra 
21985221a0cSHarman Kalra /* Word 0 of HW segment buflink structure */
22085221a0cSHarman Kalra typedef union octtx_pki_buflink_w0_u {
22185221a0cSHarman Kalra 	uint64_t v;
22285221a0cSHarman Kalra 	struct {
22385221a0cSHarman Kalra 		uint64_t        size:16;
22485221a0cSHarman Kalra 		uint64_t        rsvd1:15;
22585221a0cSHarman Kalra 		uint64_t        invfree:1;
22685221a0cSHarman Kalra 		/** Aura number of the next segment */
22785221a0cSHarman Kalra 		uint64_t        aura:16;
22885221a0cSHarman Kalra 		uint64_t        sw:9;
22985221a0cSHarman Kalra 		uint64_t        later_invfree:1;
23085221a0cSHarman Kalra 		uint64_t        rsvd2:5;
23185221a0cSHarman Kalra 		/** 1 if aura number is set */
23285221a0cSHarman Kalra 		uint64_t        has_aura:1;
23385221a0cSHarman Kalra 	} s;
23485221a0cSHarman Kalra } octtx_pki_buflink_w0_t;
23585221a0cSHarman Kalra 
23685221a0cSHarman Kalra /* Word 1 of HW segment buflink structure */
23785221a0cSHarman Kalra typedef union octtx_pki_buflink_w1_u {
23885221a0cSHarman Kalra 	uint64_t v;
23985221a0cSHarman Kalra 	struct {
24085221a0cSHarman Kalra 		uint64_t        addr;
24185221a0cSHarman Kalra 	} s;
24285221a0cSHarman Kalra } octtx_pki_buflink_w1_t;
24385221a0cSHarman Kalra 
24485221a0cSHarman Kalra /* HW structure linking packet segments into singly linked list */
24585221a0cSHarman Kalra typedef struct octtx_pki_buflink_s {
24685221a0cSHarman Kalra 	octtx_pki_buflink_w0_t    w0; /* Word 0 of the buflink */
24785221a0cSHarman Kalra 	octtx_pki_buflink_w1_t    w1; /* Word 1 of the buflink */
24885221a0cSHarman Kalra } octtx_pki_buflink_t;
24985221a0cSHarman Kalra 
2506d28968eSJerin Jacob #endif /* __OCTEONTX_PKI_VAR_H__ */
251