1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015-2020 Beijing WangXun Technology Co., Ltd.
5 #ifndef _TXGBE_PTYPE_H_
6 #define _TXGBE_PTYPE_H_
9 * PTID(Packet Type Identifier, 8bits)
10 * - Bit 3:0 detailed types.
11 * - Bit 5:4 basic types.
12 * - Bit 7:6 tunnel types.
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
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 */
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)
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)
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)
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)
58 /* packet type non-ip values */
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),
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 |
80 TXGBE_PTID_L2_IPV6_TCP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
82 TXGBE_PTID_L2_IPV6_SCTP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 |
85 TXGBE_PTID_L2_FCOE = (TXGBE_PTID_PKT_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 |
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),
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),
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
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 */
131 u32 el2:4; /* inner mac */
132 u32 el3:4; /* inner internet protocol */
133 u32 el4:4; /* inner transport protocol */
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
188 u32 *txgbe_get_supported_ptypes(void);
189 u32 txgbe_decode_ptype(u8 ptid);
190 u8 txgbe_encode_ptype(u32 ptype);
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
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
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
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
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];
291 /* ether type filter list: one static filter per filter consumer. This is
292 * to avoid filter collisions later. Add new filters
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
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
311 #define TXGBE_PTID_ETF_MIN 0x18
312 #define TXGBE_PTID_ETF_MAX 0x1F
313 static inline int txgbe_etflt_id(u8 ptid)
315 if (ptid >= TXGBE_PTID_ETF_MIN && ptid <= TXGBE_PTID_ETF_MAX)
316 return ptid - TXGBE_PTID_ETF_MIN;
321 struct txgbe_udphdr {
328 struct txgbe_vxlanhdr {
333 struct txgbe_genevehdr {
345 struct txgbe_nvgrehdr {
351 #endif /* _TXGBE_PTYPE_H_ */