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