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