net/ice: support L4 for QinQ switch filter
[dpdk.git] / drivers / net / txgbe / txgbe_ptypes.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015-2020 Beijing WangXun Technology Co., Ltd.
3  */
4
5 #ifndef _TXGBE_PTYPE_H_
6 #define _TXGBE_PTYPE_H_
7
8 /**
9  * PTID(Packet Type Identifier, 8bits)
10  * - Bit 3:0 detailed types.
11  * - Bit 5:4 basic types.
12  * - Bit 7:6 tunnel types.
13  **/
14 #define TXGBE_PTID_NULL                 0
15 #define TXGBE_PTID_MAX                  256
16 #define TXGBE_PTID_MASK                 0xFF
17 #define TXGBE_PTID_MASK_TUNNEL          0x7F
18
19 /* TUN */
20 #define TXGBE_PTID_TUN_IPV6             0x40
21 #define TXGBE_PTID_TUN_EI               0x00 /* IP */
22 #define TXGBE_PTID_TUN_EIG              0x10 /* IP+GRE */
23 #define TXGBE_PTID_TUN_EIGM             0x20 /* IP+GRE+MAC */
24 #define TXGBE_PTID_TUN_EIGMV            0x30 /* IP+GRE+MAC+VLAN */
25
26 /* PKT for !TUN */
27 #define TXGBE_PTID_PKT_TUN             (0x80)
28 #define TXGBE_PTID_PKT_MAC             (0x10)
29 #define TXGBE_PTID_PKT_IP              (0x20)
30 #define TXGBE_PTID_PKT_FCOE            (0x30)
31
32 /* TYP for PKT=mac */
33 #define TXGBE_PTID_TYP_MAC             (0x01)
34 #define TXGBE_PTID_TYP_TS              (0x02) /* time sync */
35 #define TXGBE_PTID_TYP_FIP             (0x03)
36 #define TXGBE_PTID_TYP_LLDP            (0x04)
37 #define TXGBE_PTID_TYP_CNM             (0x05)
38 #define TXGBE_PTID_TYP_EAPOL           (0x06)
39 #define TXGBE_PTID_TYP_ARP             (0x07)
40 #define TXGBE_PTID_TYP_ETF             (0x08)
41
42 /* TYP for PKT=ip */
43 #define TXGBE_PTID_PKT_IPV6            (0x08)
44 #define TXGBE_PTID_TYP_IPFRAG          (0x01)
45 #define TXGBE_PTID_TYP_IPDATA          (0x02)
46 #define TXGBE_PTID_TYP_UDP             (0x03)
47 #define TXGBE_PTID_TYP_TCP             (0x04)
48 #define TXGBE_PTID_TYP_SCTP            (0x05)
49
50 /* TYP for PKT=fcoe */
51 #define TXGBE_PTID_PKT_VFT             (0x08)
52 #define TXGBE_PTID_TYP_FCOE            (0x00)
53 #define TXGBE_PTID_TYP_FCDATA          (0x01)
54 #define TXGBE_PTID_TYP_FCRDY           (0x02)
55 #define TXGBE_PTID_TYP_FCRSP           (0x03)
56 #define TXGBE_PTID_TYP_FCOTHER         (0x04)
57
58 /* packet type non-ip values */
59 enum txgbe_l2_ptids {
60         TXGBE_PTID_L2_ABORTED = (TXGBE_PTID_PKT_MAC),
61         TXGBE_PTID_L2_MAC = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_MAC),
62         TXGBE_PTID_L2_TMST = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_TS),
63         TXGBE_PTID_L2_FIP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_FIP),
64         TXGBE_PTID_L2_LLDP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_LLDP),
65         TXGBE_PTID_L2_CNM = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_CNM),
66         TXGBE_PTID_L2_EAPOL = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_EAPOL),
67         TXGBE_PTID_L2_ARP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_ARP),
68
69         TXGBE_PTID_L2_IPV4_FRAG = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_IPFRAG),
70         TXGBE_PTID_L2_IPV4 = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_IPDATA),
71         TXGBE_PTID_L2_IPV4_UDP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_UDP),
72         TXGBE_PTID_L2_IPV4_TCP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_TCP),
73         TXGBE_PTID_L2_IPV4_SCTP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_SCTP),
74         TXGBE_PTID_L2_IPV6_FRAG = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
75                         TXGBE_PTID_TYP_IPFRAG),
76         TXGBE_PTID_L2_IPV6 = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
77                         TXGBE_PTID_TYP_IPDATA),
78         TXGBE_PTID_L2_IPV6_UDP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
79                         TXGBE_PTID_TYP_UDP),
80         TXGBE_PTID_L2_IPV6_TCP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
81                         TXGBE_PTID_TYP_TCP),
82         TXGBE_PTID_L2_IPV6_SCTP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
83                         TXGBE_PTID_TYP_SCTP),
84
85         TXGBE_PTID_L2_FCOE = (TXGBE_PTID_PKT_FCOE |
86                         TXGBE_PTID_TYP_FCOE),
87         TXGBE_PTID_L2_FCOE_FCDATA = (TXGBE_PTID_PKT_FCOE |
88                         TXGBE_PTID_TYP_FCDATA),
89         TXGBE_PTID_L2_FCOE_FCRDY = (TXGBE_PTID_PKT_FCOE |
90                         TXGBE_PTID_TYP_FCRDY),
91         TXGBE_PTID_L2_FCOE_FCRSP = (TXGBE_PTID_PKT_FCOE |
92                         TXGBE_PTID_TYP_FCRSP),
93         TXGBE_PTID_L2_FCOE_FCOTHER = (TXGBE_PTID_PKT_FCOE |
94                         TXGBE_PTID_TYP_FCOTHER),
95         TXGBE_PTID_L2_FCOE_VFT = (TXGBE_PTID_PKT_FCOE |
96                         TXGBE_PTID_PKT_VFT),
97         TXGBE_PTID_L2_FCOE_VFT_FCDATA = (TXGBE_PTID_PKT_FCOE |
98                         TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCDATA),
99         TXGBE_PTID_L2_FCOE_VFT_FCRDY = (TXGBE_PTID_PKT_FCOE |
100                         TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCRDY),
101         TXGBE_PTID_L2_FCOE_VFT_FCRSP = (TXGBE_PTID_PKT_FCOE |
102                         TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCRSP),
103         TXGBE_PTID_L2_FCOE_VFT_FCOTHER = (TXGBE_PTID_PKT_FCOE |
104                         TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCOTHER),
105
106         TXGBE_PTID_L2_TUN4_MAC = (TXGBE_PTID_PKT_TUN |
107                         TXGBE_PTID_TUN_EIGM),
108         TXGBE_PTID_L2_TUN6_MAC = (TXGBE_PTID_PKT_TUN |
109                         TXGBE_PTID_TUN_IPV6 | TXGBE_PTID_TUN_EIGM),
110 };
111
112
113 /*
114  * PTYPE(Packet Type, 32bits)
115  * - Bit 3:0 is for L2 types.
116  * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types.
117  * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types.
118  * - Bit 15:12 is for tunnel types.
119  * - Bit 19:16 is for inner L2 types.
120  * - Bit 23:20 is for inner L3 types.
121  * - Bit 27:24 is for inner L4 types.
122  * - Bit 31:28 is reserved.
123  * please ref to rte_mbuf.h: rte_mbuf.packet_type
124  */
125 struct rte_txgbe_ptype {
126         u32 l2:4;  /* outer mac */
127         u32 l3:4;  /* outer internet protocol */
128         u32 l4:4;  /* outer transport protocol */
129         u32 tun:4; /* tunnel protocol */
130
131         u32 el2:4; /* inner mac */
132         u32 el3:4; /* inner internet protocol */
133         u32 el4:4; /* inner transport protocol */
134         u32 rsv:3;
135         u32 known:1;
136 };
137
138 #ifndef RTE_PTYPE_UNKNOWN
139 #define RTE_PTYPE_UNKNOWN                   0x00000000
140 #define RTE_PTYPE_L2_ETHER                  0x00000001
141 #define RTE_PTYPE_L2_ETHER_TIMESYNC         0x00000002
142 #define RTE_PTYPE_L2_ETHER_ARP              0x00000003
143 #define RTE_PTYPE_L2_ETHER_LLDP             0x00000004
144 #define RTE_PTYPE_L2_ETHER_NSH              0x00000005
145 #define RTE_PTYPE_L2_ETHER_FCOE             0x00000009
146 #define RTE_PTYPE_L3_IPV4                   0x00000010
147 #define RTE_PTYPE_L3_IPV4_EXT               0x00000030
148 #define RTE_PTYPE_L3_IPV6                   0x00000040
149 #define RTE_PTYPE_L3_IPV4_EXT_UNKNOWN       0x00000090
150 #define RTE_PTYPE_L3_IPV6_EXT               0x000000c0
151 #define RTE_PTYPE_L3_IPV6_EXT_UNKNOWN       0x000000e0
152 #define RTE_PTYPE_L4_TCP                    0x00000100
153 #define RTE_PTYPE_L4_UDP                    0x00000200
154 #define RTE_PTYPE_L4_FRAG                   0x00000300
155 #define RTE_PTYPE_L4_SCTP                   0x00000400
156 #define RTE_PTYPE_L4_ICMP                   0x00000500
157 #define RTE_PTYPE_L4_NONFRAG                0x00000600
158 #define RTE_PTYPE_TUNNEL_IP                 0x00001000
159 #define RTE_PTYPE_TUNNEL_GRE                0x00002000
160 #define RTE_PTYPE_TUNNEL_VXLAN              0x00003000
161 #define RTE_PTYPE_TUNNEL_NVGRE              0x00004000
162 #define RTE_PTYPE_TUNNEL_GENEVE             0x00005000
163 #define RTE_PTYPE_TUNNEL_GRENAT             0x00006000
164 #define RTE_PTYPE_INNER_L2_ETHER            0x00010000
165 #define RTE_PTYPE_INNER_L2_ETHER_VLAN       0x00020000
166 #define RTE_PTYPE_INNER_L3_IPV4             0x00100000
167 #define RTE_PTYPE_INNER_L3_IPV4_EXT         0x00200000
168 #define RTE_PTYPE_INNER_L3_IPV6             0x00300000
169 #define RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN 0x00400000
170 #define RTE_PTYPE_INNER_L3_IPV6_EXT         0x00500000
171 #define RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN 0x00600000
172 #define RTE_PTYPE_INNER_L4_TCP              0x01000000
173 #define RTE_PTYPE_INNER_L4_UDP              0x02000000
174 #define RTE_PTYPE_INNER_L4_FRAG             0x03000000
175 #define RTE_PTYPE_INNER_L4_SCTP             0x04000000
176 #define RTE_PTYPE_INNER_L4_ICMP             0x05000000
177 #define RTE_PTYPE_INNER_L4_NONFRAG          0x06000000
178 #endif /* !RTE_PTYPE_UNKNOWN */
179 #define RTE_PTYPE_L3_IPV4u                  RTE_PTYPE_L3_IPV4_EXT_UNKNOWN
180 #define RTE_PTYPE_L3_IPV6u                  RTE_PTYPE_L3_IPV6_EXT_UNKNOWN
181 #define RTE_PTYPE_INNER_L3_IPV4u            RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN
182 #define RTE_PTYPE_INNER_L3_IPV6u            RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN
183 #define RTE_PTYPE_L2_ETHER_FIP              RTE_PTYPE_L2_ETHER
184 #define RTE_PTYPE_L2_ETHER_CNM              RTE_PTYPE_L2_ETHER
185 #define RTE_PTYPE_L2_ETHER_EAPOL            RTE_PTYPE_L2_ETHER
186 #define RTE_PTYPE_L2_ETHER_FILTER           RTE_PTYPE_L2_ETHER
187
188 u32 *txgbe_get_supported_ptypes(void);
189 u32 txgbe_decode_ptype(u8 ptid);
190 u8 txgbe_encode_ptype(u32 ptype);
191
192 /**
193  * PT(Packet Type, 32bits)
194  * - Bit 3:0 is for L2 types.
195  * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types.
196  * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types.
197  * - Bit 15:12 is for tunnel types.
198  * - Bit 19:16 is for inner L2 types.
199  * - Bit 23:20 is for inner L3 types.
200  * - Bit 27:24 is for inner L4 types.
201  * - Bit 31:28 is reserved.
202  * PT is a more accurate version of PTYPE
203  **/
204 #define TXGBE_PT_ETHER                   0x00
205 #define TXGBE_PT_IPV4                    0x01
206 #define TXGBE_PT_IPV4_TCP                0x11
207 #define TXGBE_PT_IPV4_UDP                0x21
208 #define TXGBE_PT_IPV4_SCTP               0x41
209 #define TXGBE_PT_IPV4_EXT                0x03
210 #define TXGBE_PT_IPV4_EXT_TCP            0x13
211 #define TXGBE_PT_IPV4_EXT_UDP            0x23
212 #define TXGBE_PT_IPV4_EXT_SCTP           0x43
213 #define TXGBE_PT_IPV6                    0x04
214 #define TXGBE_PT_IPV6_TCP                0x14
215 #define TXGBE_PT_IPV6_UDP                0x24
216 #define TXGBE_PT_IPV6_SCTP               0x44
217 #define TXGBE_PT_IPV6_EXT                0x0C
218 #define TXGBE_PT_IPV6_EXT_TCP            0x1C
219 #define TXGBE_PT_IPV6_EXT_UDP            0x2C
220 #define TXGBE_PT_IPV6_EXT_SCTP           0x4C
221 #define TXGBE_PT_IPV4_IPV6               0x05
222 #define TXGBE_PT_IPV4_IPV6_TCP           0x15
223 #define TXGBE_PT_IPV4_IPV6_UDP           0x25
224 #define TXGBE_PT_IPV4_IPV6_SCTP          0x45
225 #define TXGBE_PT_IPV4_EXT_IPV6           0x07
226 #define TXGBE_PT_IPV4_EXT_IPV6_TCP       0x17
227 #define TXGBE_PT_IPV4_EXT_IPV6_UDP       0x27
228 #define TXGBE_PT_IPV4_EXT_IPV6_SCTP      0x47
229 #define TXGBE_PT_IPV4_IPV6_EXT           0x0D
230 #define TXGBE_PT_IPV4_IPV6_EXT_TCP       0x1D
231 #define TXGBE_PT_IPV4_IPV6_EXT_UDP       0x2D
232 #define TXGBE_PT_IPV4_IPV6_EXT_SCTP      0x4D
233 #define TXGBE_PT_IPV4_EXT_IPV6_EXT       0x0F
234 #define TXGBE_PT_IPV4_EXT_IPV6_EXT_TCP   0x1F
235 #define TXGBE_PT_IPV4_EXT_IPV6_EXT_UDP   0x2F
236 #define TXGBE_PT_IPV4_EXT_IPV6_EXT_SCTP  0x4F
237
238 #define TXGBE_PT_NVGRE                   0x00
239 #define TXGBE_PT_NVGRE_IPV4              0x01
240 #define TXGBE_PT_NVGRE_IPV4_TCP          0x11
241 #define TXGBE_PT_NVGRE_IPV4_UDP          0x21
242 #define TXGBE_PT_NVGRE_IPV4_SCTP         0x41
243 #define TXGBE_PT_NVGRE_IPV4_EXT          0x03
244 #define TXGBE_PT_NVGRE_IPV4_EXT_TCP      0x13
245 #define TXGBE_PT_NVGRE_IPV4_EXT_UDP      0x23
246 #define TXGBE_PT_NVGRE_IPV4_EXT_SCTP     0x43
247 #define TXGBE_PT_NVGRE_IPV6              0x04
248 #define TXGBE_PT_NVGRE_IPV6_TCP          0x14
249 #define TXGBE_PT_NVGRE_IPV6_UDP          0x24
250 #define TXGBE_PT_NVGRE_IPV6_SCTP         0x44
251 #define TXGBE_PT_NVGRE_IPV6_EXT          0x0C
252 #define TXGBE_PT_NVGRE_IPV6_EXT_TCP      0x1C
253 #define TXGBE_PT_NVGRE_IPV6_EXT_UDP      0x2C
254 #define TXGBE_PT_NVGRE_IPV6_EXT_SCTP     0x4C
255 #define TXGBE_PT_NVGRE_IPV4_IPV6         0x05
256 #define TXGBE_PT_NVGRE_IPV4_IPV6_TCP     0x15
257 #define TXGBE_PT_NVGRE_IPV4_IPV6_UDP     0x25
258 #define TXGBE_PT_NVGRE_IPV4_IPV6_EXT     0x0D
259 #define TXGBE_PT_NVGRE_IPV4_IPV6_EXT_TCP 0x1D
260 #define TXGBE_PT_NVGRE_IPV4_IPV6_EXT_UDP 0x2D
261
262 #define TXGBE_PT_VXLAN                   0x80
263 #define TXGBE_PT_VXLAN_IPV4              0x81
264 #define TXGBE_PT_VXLAN_IPV4_TCP          0x91
265 #define TXGBE_PT_VXLAN_IPV4_UDP          0xA1
266 #define TXGBE_PT_VXLAN_IPV4_SCTP         0xC1
267 #define TXGBE_PT_VXLAN_IPV4_EXT          0x83
268 #define TXGBE_PT_VXLAN_IPV4_EXT_TCP      0x93
269 #define TXGBE_PT_VXLAN_IPV4_EXT_UDP      0xA3
270 #define TXGBE_PT_VXLAN_IPV4_EXT_SCTP     0xC3
271 #define TXGBE_PT_VXLAN_IPV6              0x84
272 #define TXGBE_PT_VXLAN_IPV6_TCP          0x94
273 #define TXGBE_PT_VXLAN_IPV6_UDP          0xA4
274 #define TXGBE_PT_VXLAN_IPV6_SCTP         0xC4
275 #define TXGBE_PT_VXLAN_IPV6_EXT          0x8C
276 #define TXGBE_PT_VXLAN_IPV6_EXT_TCP      0x9C
277 #define TXGBE_PT_VXLAN_IPV6_EXT_UDP      0xAC
278 #define TXGBE_PT_VXLAN_IPV6_EXT_SCTP     0xCC
279 #define TXGBE_PT_VXLAN_IPV4_IPV6         0x85
280 #define TXGBE_PT_VXLAN_IPV4_IPV6_TCP     0x95
281 #define TXGBE_PT_VXLAN_IPV4_IPV6_UDP     0xA5
282 #define TXGBE_PT_VXLAN_IPV4_IPV6_EXT     0x8D
283 #define TXGBE_PT_VXLAN_IPV4_IPV6_EXT_TCP 0x9D
284 #define TXGBE_PT_VXLAN_IPV4_IPV6_EXT_UDP 0xAD
285
286 #define TXGBE_PT_MAX    256
287 extern const u32 txgbe_ptype_table[TXGBE_PT_MAX];
288 extern const u32 txgbe_ptype_table_tn[TXGBE_PT_MAX];
289
290
291 /* ether type filter list: one static filter per filter consumer. This is
292  *                 to avoid filter collisions later. Add new filters
293  *                 here!!
294  *      EAPOL 802.1x (0x888e): Filter 0
295  *      FCoE (0x8906):   Filter 2
296  *      1588 (0x88f7):   Filter 3
297  *      FIP  (0x8914):   Filter 4
298  *      LLDP (0x88CC):   Filter 5
299  *      LACP (0x8809):   Filter 6
300  *      FC   (0x8808):   Filter 7
301  */
302 #define TXGBE_ETF_ID_EAPOL        0
303 #define TXGBE_ETF_ID_FCOE         2
304 #define TXGBE_ETF_ID_1588         3
305 #define TXGBE_ETF_ID_FIP          4
306 #define TXGBE_ETF_ID_LLDP         5
307 #define TXGBE_ETF_ID_LACP         6
308 #define TXGBE_ETF_ID_FC           7
309 #define TXGBE_ETF_ID_MAX          8
310
311 #define TXGBE_PTID_ETF_MIN  0x18
312 #define TXGBE_PTID_ETF_MAX  0x1F
313 static inline int txgbe_etflt_id(u8 ptid)
314 {
315         if (ptid >= TXGBE_PTID_ETF_MIN && ptid <= TXGBE_PTID_ETF_MAX)
316                 return ptid - TXGBE_PTID_ETF_MIN;
317         else
318                 return -1;
319 }
320
321 struct txgbe_udphdr {
322         __be16  source;
323         __be16  dest;
324         __be16  len;
325         __be16  check;
326 };
327
328 struct txgbe_vxlanhdr {
329         __be32 vx_flags;
330         __be32 vx_vni;
331 };
332
333 struct txgbe_genevehdr {
334         u8 opt_len:6;
335         u8 ver:2;
336         u8 rsvd1:6;
337         u8 critical:1;
338         u8 oam:1;
339         __be16 proto_type;
340
341         u8 vni[3];
342         u8 rsvd2;
343 };
344
345 struct txgbe_nvgrehdr {
346         __be16 flags;
347         __be16 proto;
348         __be32 tni;
349 };
350
351 #endif /* _TXGBE_PTYPE_H_ */