1c7648810STony Nguyen /* SPDX-License-Identifier: GPL-2.0 */
2c7648810STony Nguyen /* Copyright (c) 2019, Intel Corporation. */
3c7648810STony Nguyen 
4c7648810STony Nguyen #ifndef _ICE_FLEX_TYPE_H_
5c7648810STony Nguyen #define _ICE_FLEX_TYPE_H_
6*2ffd87d3SSergey Temerkhanov #include "ice_ddp.h"
743dbfc7bSTony Nguyen 
860f44fe4SJeff Guo /* Packet Type (PTYPE) values */
960f44fe4SJeff Guo #define ICE_PTYPE_MAC_PAY		1
1060f44fe4SJeff Guo #define ICE_PTYPE_IPV4_PAY		23
1160f44fe4SJeff Guo #define ICE_PTYPE_IPV4_UDP_PAY		24
1260f44fe4SJeff Guo #define ICE_PTYPE_IPV4_TCP_PAY		26
1360f44fe4SJeff Guo #define ICE_PTYPE_IPV4_SCTP_PAY		27
1460f44fe4SJeff Guo #define ICE_PTYPE_IPV6_PAY		89
1560f44fe4SJeff Guo #define ICE_PTYPE_IPV6_UDP_PAY		90
1660f44fe4SJeff Guo #define ICE_PTYPE_IPV6_TCP_PAY		92
1760f44fe4SJeff Guo #define ICE_PTYPE_IPV6_SCTP_PAY		93
1860f44fe4SJeff Guo #define ICE_MAC_IPV4_ESP		160
1960f44fe4SJeff Guo #define ICE_MAC_IPV6_ESP		161
2060f44fe4SJeff Guo #define ICE_MAC_IPV4_AH			162
2160f44fe4SJeff Guo #define ICE_MAC_IPV6_AH			163
2260f44fe4SJeff Guo #define ICE_MAC_IPV4_NAT_T_ESP		164
2360f44fe4SJeff Guo #define ICE_MAC_IPV6_NAT_T_ESP		165
2460f44fe4SJeff Guo #define ICE_MAC_IPV4_GTPU		329
2560f44fe4SJeff Guo #define ICE_MAC_IPV6_GTPU		330
26cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV4_FRAG	331
27cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV4_PAY	332
28cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY	333
29cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV4_TCP	334
30cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV4_ICMP	335
31cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV4_FRAG	336
32cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV4_PAY	337
33cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY	338
34cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV4_TCP	339
35cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV4_ICMP	340
36cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV6_FRAG	341
37cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV6_PAY	342
38cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY	343
39cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV6_TCP	344
40cbad5db8SQi Zhang #define ICE_MAC_IPV4_GTPU_IPV6_ICMPV6	345
41cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV6_FRAG	346
42cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV6_PAY	347
43cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY	348
44cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV6_TCP	349
45cbad5db8SQi Zhang #define ICE_MAC_IPV6_GTPU_IPV6_ICMPV6	350
4660f44fe4SJeff Guo #define ICE_MAC_IPV4_PFCP_SESSION	352
4760f44fe4SJeff Guo #define ICE_MAC_IPV6_PFCP_SESSION	354
4860f44fe4SJeff Guo #define ICE_MAC_IPV4_L2TPV3		360
4960f44fe4SJeff Guo #define ICE_MAC_IPV6_L2TPV3		361
50cbad5db8SQi Zhang 
51cbad5db8SQi Zhang /* Attributes that can modify PTYPE definitions.
52cbad5db8SQi Zhang  *
53cbad5db8SQi Zhang  * These values will represent special attributes for PTYPEs, which will
54cbad5db8SQi Zhang  * resolve into metadata packet flags definitions that can be used in the TCAM
55cbad5db8SQi Zhang  * for identifying a PTYPE with specific characteristics.
56cbad5db8SQi Zhang  */
57cbad5db8SQi Zhang enum ice_ptype_attrib_type {
58cbad5db8SQi Zhang 	/* GTP PTYPEs */
59cbad5db8SQi Zhang 	ICE_PTYPE_ATTR_GTP_PDU_EH,
60cbad5db8SQi Zhang 	ICE_PTYPE_ATTR_GTP_SESSION,
61cbad5db8SQi Zhang 	ICE_PTYPE_ATTR_GTP_DOWNLINK,
62cbad5db8SQi Zhang 	ICE_PTYPE_ATTR_GTP_UPLINK,
63cbad5db8SQi Zhang };
64cbad5db8SQi Zhang 
65cbad5db8SQi Zhang struct ice_ptype_attrib_info {
66cbad5db8SQi Zhang 	u16 flags;
67cbad5db8SQi Zhang 	u16 mask;
68cbad5db8SQi Zhang };
69cbad5db8SQi Zhang 
70cbad5db8SQi Zhang /* TCAM flag definitions */
71cbad5db8SQi Zhang #define ICE_GTP_PDU			BIT(14)
72cbad5db8SQi Zhang #define ICE_GTP_PDU_LINK		BIT(13)
73cbad5db8SQi Zhang 
74cbad5db8SQi Zhang /* GTP attributes */
75cbad5db8SQi Zhang #define ICE_GTP_PDU_FLAG_MASK		(ICE_GTP_PDU)
76cbad5db8SQi Zhang #define ICE_GTP_PDU_EH			ICE_GTP_PDU
77cbad5db8SQi Zhang 
78cbad5db8SQi Zhang #define ICE_GTP_FLAGS_MASK		(ICE_GTP_PDU | ICE_GTP_PDU_LINK)
79cbad5db8SQi Zhang #define ICE_GTP_SESSION			0
80cbad5db8SQi Zhang #define ICE_GTP_DOWNLINK		ICE_GTP_PDU
81cbad5db8SQi Zhang #define ICE_GTP_UPLINK			(ICE_GTP_PDU | ICE_GTP_PDU_LINK)
82cbad5db8SQi Zhang 
83cbad5db8SQi Zhang struct ice_ptype_attributes {
84cbad5db8SQi Zhang 	u16 ptype;
85cbad5db8SQi Zhang 	enum ice_ptype_attrib_type attrib;
86cbad5db8SQi Zhang };
87cbad5db8SQi Zhang 
88a4e82a81STony Nguyen /* Tunnel enabling */
89a4e82a81STony Nguyen 
90a4e82a81STony Nguyen enum ice_tunnel_type {
91a4e82a81STony Nguyen 	TNL_VXLAN = 0,
92a4e82a81STony Nguyen 	TNL_GENEVE,
93f0a35040SMichal Swiatkowski 	TNL_GRETAP,
949a225f81SMarcin Szycik 	TNL_GTPC,
959a225f81SMarcin Szycik 	TNL_GTPU,
96b20e6c17SJakub Kicinski 	__TNL_TYPE_CNT,
97a4e82a81STony Nguyen 	TNL_LAST = 0xFF,
98a4e82a81STony Nguyen 	TNL_ALL = 0xFF,
99a4e82a81STony Nguyen };
100a4e82a81STony Nguyen 
101a4e82a81STony Nguyen struct ice_tunnel_type_scan {
102a4e82a81STony Nguyen 	enum ice_tunnel_type type;
103a4e82a81STony Nguyen 	const char *label_prefix;
104a4e82a81STony Nguyen };
105a4e82a81STony Nguyen 
106a4e82a81STony Nguyen struct ice_tunnel_entry {
107a4e82a81STony Nguyen 	enum ice_tunnel_type type;
108a4e82a81STony Nguyen 	u16 boost_addr;
109a4e82a81STony Nguyen 	u16 port;
110a4e82a81STony Nguyen 	struct ice_boost_tcam_entry *boost_entry;
111a4e82a81STony Nguyen 	u8 valid;
112a4e82a81STony Nguyen };
113a4e82a81STony Nguyen 
114a4e82a81STony Nguyen #define ICE_TUNNEL_MAX_ENTRIES	16
115a4e82a81STony Nguyen 
116a4e82a81STony Nguyen struct ice_tunnel_table {
117a4e82a81STony Nguyen 	struct ice_tunnel_entry tbl[ICE_TUNNEL_MAX_ENTRIES];
118a4e82a81STony Nguyen 	u16 count;
119b20e6c17SJakub Kicinski 	u16 valid_count[__TNL_TYPE_CNT];
120a4e82a81STony Nguyen };
121a4e82a81STony Nguyen 
122a1ffafb0SBrett Creeley struct ice_dvm_entry {
123a1ffafb0SBrett Creeley 	u16 boost_addr;
124a1ffafb0SBrett Creeley 	u16 enable;
125a1ffafb0SBrett Creeley 	struct ice_boost_tcam_entry *boost_entry;
126a1ffafb0SBrett Creeley };
127a1ffafb0SBrett Creeley 
128a1ffafb0SBrett Creeley #define ICE_DVM_MAX_ENTRIES	48
129a1ffafb0SBrett Creeley 
130a1ffafb0SBrett Creeley struct ice_dvm_table {
131a1ffafb0SBrett Creeley 	struct ice_dvm_entry tbl[ICE_DVM_MAX_ENTRIES];
132a1ffafb0SBrett Creeley 	u16 count;
133a1ffafb0SBrett Creeley };
134a1ffafb0SBrett Creeley 
13543dbfc7bSTony Nguyen struct ice_pkg_es {
13643dbfc7bSTony Nguyen 	__le16 count;
13743dbfc7bSTony Nguyen 	__le16 offset;
13866486d89SBruce Allan 	struct ice_fv_word es[];
13943dbfc7bSTony Nguyen };
14043dbfc7bSTony Nguyen 
141c7648810STony Nguyen struct ice_es {
142c7648810STony Nguyen 	u32 sid;
143c7648810STony Nguyen 	u16 count;
144c7648810STony Nguyen 	u16 fvw;
145c7648810STony Nguyen 	u16 *ref_count;
146b199dddbSQi Zhang 	u32 *mask_ena;
147c7648810STony Nguyen 	struct list_head prof_map;
148c7648810STony Nguyen 	struct ice_fv_word *t;
149c7648810STony Nguyen 	struct mutex prof_map_lock;	/* protect access to profiles list */
150c7648810STony Nguyen 	u8 *written;
151c7648810STony Nguyen 	u8 reverse; /* set to true to reverse FV order */
152c7648810STony Nguyen };
153c7648810STony Nguyen 
154c7648810STony Nguyen /* PTYPE Group management */
155c7648810STony Nguyen 
156c7648810STony Nguyen /* Note: XLT1 table takes 13-bit as input, and results in an 8-bit packet type
157c7648810STony Nguyen  * group (PTG) ID as output.
158c7648810STony Nguyen  *
159c7648810STony Nguyen  * Note: PTG 0 is the default packet type group and it is assumed that all PTYPE
160c7648810STony Nguyen  * are a part of this group until moved to a new PTG.
161c7648810STony Nguyen  */
162c7648810STony Nguyen #define ICE_DEFAULT_PTG	0
163c7648810STony Nguyen 
164c7648810STony Nguyen struct ice_ptg_entry {
165c7648810STony Nguyen 	struct ice_ptg_ptype *first_ptype;
166c7648810STony Nguyen 	u8 in_use;
167c7648810STony Nguyen };
168c7648810STony Nguyen 
169c7648810STony Nguyen struct ice_ptg_ptype {
170c7648810STony Nguyen 	struct ice_ptg_ptype *next_ptype;
171c7648810STony Nguyen 	u8 ptg;
172c7648810STony Nguyen };
173c7648810STony Nguyen 
174451f2c44STony Nguyen #define ICE_MAX_TCAM_PER_PROFILE	32
17531ad4e4eSTony Nguyen #define ICE_MAX_PTG_PER_PROFILE		32
17631ad4e4eSTony Nguyen 
17731ad4e4eSTony Nguyen struct ice_prof_map {
17831ad4e4eSTony Nguyen 	struct list_head list;
17931ad4e4eSTony Nguyen 	u64 profile_cookie;
18031ad4e4eSTony Nguyen 	u64 context;
18131ad4e4eSTony Nguyen 	u8 prof_id;
18231ad4e4eSTony Nguyen 	u8 ptg_cnt;
18331ad4e4eSTony Nguyen 	u8 ptg[ICE_MAX_PTG_PER_PROFILE];
184cbad5db8SQi Zhang 	struct ice_ptype_attrib_info attr[ICE_MAX_PTG_PER_PROFILE];
18531ad4e4eSTony Nguyen };
18631ad4e4eSTony Nguyen 
187451f2c44STony Nguyen #define ICE_INVALID_TCAM	0xFFFF
188451f2c44STony Nguyen 
189451f2c44STony Nguyen struct ice_tcam_inf {
190451f2c44STony Nguyen 	u16 tcam_idx;
191cbad5db8SQi Zhang 	struct ice_ptype_attrib_info attr;
192451f2c44STony Nguyen 	u8 ptg;
193451f2c44STony Nguyen 	u8 prof_id;
194451f2c44STony Nguyen 	u8 in_use;
195451f2c44STony Nguyen };
196451f2c44STony Nguyen 
197451f2c44STony Nguyen struct ice_vsig_prof {
198451f2c44STony Nguyen 	struct list_head list;
199451f2c44STony Nguyen 	u64 profile_cookie;
200451f2c44STony Nguyen 	u8 prof_id;
201451f2c44STony Nguyen 	u8 tcam_count;
202451f2c44STony Nguyen 	struct ice_tcam_inf tcam[ICE_MAX_TCAM_PER_PROFILE];
203451f2c44STony Nguyen };
204451f2c44STony Nguyen 
205c7648810STony Nguyen struct ice_vsig_entry {
206c7648810STony Nguyen 	struct list_head prop_lst;
207c7648810STony Nguyen 	struct ice_vsig_vsi *first_vsi;
208c7648810STony Nguyen 	u8 in_use;
209c7648810STony Nguyen };
210c7648810STony Nguyen 
211c7648810STony Nguyen struct ice_vsig_vsi {
212c7648810STony Nguyen 	struct ice_vsig_vsi *next_vsi;
213c7648810STony Nguyen 	u32 prop_mask;
214c7648810STony Nguyen 	u16 changed;
215c7648810STony Nguyen 	u16 vsig;
216c7648810STony Nguyen };
217c7648810STony Nguyen 
218c7648810STony Nguyen #define ICE_XLT1_CNT	1024
21932d63fa1STony Nguyen #define ICE_MAX_PTGS	256
220c7648810STony Nguyen 
221c7648810STony Nguyen /* XLT1 Table */
222c7648810STony Nguyen struct ice_xlt1 {
223c7648810STony Nguyen 	struct ice_ptg_entry *ptg_tbl;
224c7648810STony Nguyen 	struct ice_ptg_ptype *ptypes;
225c7648810STony Nguyen 	u8 *t;
226c7648810STony Nguyen 	u32 sid;
227c7648810STony Nguyen 	u16 count;
228c7648810STony Nguyen };
229c7648810STony Nguyen 
23032d63fa1STony Nguyen #define ICE_XLT2_CNT	768
231c7648810STony Nguyen #define ICE_MAX_VSIGS	768
232c7648810STony Nguyen 
233c7648810STony Nguyen /* VSIG bit layout:
234c7648810STony Nguyen  * [0:12]: incremental VSIG index 1 to ICE_MAX_VSIGS
235c7648810STony Nguyen  * [13:15]: PF number of device
236c7648810STony Nguyen  */
237c7648810STony Nguyen #define ICE_VSIG_IDX_M	(0x1FFF)
238c7648810STony Nguyen #define ICE_PF_NUM_S	13
239c7648810STony Nguyen #define ICE_PF_NUM_M	(0x07 << ICE_PF_NUM_S)
240c7648810STony Nguyen #define ICE_VSIG_VALUE(vsig, pf_id) \
2410c3e94c2SBruce Allan 	((u16)((((u16)(vsig)) & ICE_VSIG_IDX_M) | \
2420c3e94c2SBruce Allan 	       (((u16)(pf_id) << ICE_PF_NUM_S) & ICE_PF_NUM_M)))
243c7648810STony Nguyen #define ICE_DEFAULT_VSIG	0
244c7648810STony Nguyen 
245c7648810STony Nguyen /* XLT2 Table */
246c7648810STony Nguyen struct ice_xlt2 {
247c7648810STony Nguyen 	struct ice_vsig_entry *vsig_tbl;
248c7648810STony Nguyen 	struct ice_vsig_vsi *vsis;
249c7648810STony Nguyen 	u16 *t;
250c7648810STony Nguyen 	u32 sid;
251c7648810STony Nguyen 	u16 count;
252c7648810STony Nguyen };
253c7648810STony Nguyen 
254451f2c44STony Nguyen /* Profile ID Management */
255451f2c44STony Nguyen struct ice_prof_id_key {
256451f2c44STony Nguyen 	__le16 flags;
257451f2c44STony Nguyen 	u8 xlt1;
258451f2c44STony Nguyen 	__le16 xlt2_cdid;
259451f2c44STony Nguyen } __packed;
260451f2c44STony Nguyen 
261c7648810STony Nguyen /* Keys are made up of two values, each one-half the size of the key.
262c7648810STony Nguyen  * For TCAM, the entire key is 80 bits wide (or 2, 40-bit wide values)
263c7648810STony Nguyen  */
264c7648810STony Nguyen #define ICE_TCAM_KEY_VAL_SZ	5
265c7648810STony Nguyen #define ICE_TCAM_KEY_SZ		(2 * ICE_TCAM_KEY_VAL_SZ)
266c7648810STony Nguyen 
267c7648810STony Nguyen struct ice_prof_tcam_entry {
268c7648810STony Nguyen 	__le16 addr;
269c7648810STony Nguyen 	u8 key[ICE_TCAM_KEY_SZ];
270c7648810STony Nguyen 	u8 prof_id;
271c7648810STony Nguyen } __packed;
272c7648810STony Nguyen 
273c7648810STony Nguyen struct ice_prof_id_section {
274c7648810STony Nguyen 	__le16 count;
27566486d89SBruce Allan 	struct ice_prof_tcam_entry entry[];
27666486d89SBruce Allan };
277c7648810STony Nguyen 
278c7648810STony Nguyen struct ice_prof_tcam {
279c7648810STony Nguyen 	u32 sid;
280c7648810STony Nguyen 	u16 count;
281c7648810STony Nguyen 	u16 max_prof_id;
282c7648810STony Nguyen 	struct ice_prof_tcam_entry *t;
283c7648810STony Nguyen 	u8 cdid_bits; /* # CDID bits to use in key, 0, 2, 4, or 8 */
284c7648810STony Nguyen };
285c7648810STony Nguyen 
286c7648810STony Nguyen struct ice_prof_redir {
287c7648810STony Nguyen 	u8 *t;
288c7648810STony Nguyen 	u32 sid;
289c7648810STony Nguyen 	u16 count;
290c7648810STony Nguyen };
291c7648810STony Nguyen 
292b199dddbSQi Zhang struct ice_mask {
293b199dddbSQi Zhang 	u16 mask;	/* 16-bit mask */
294b199dddbSQi Zhang 	u16 idx;	/* index */
295b199dddbSQi Zhang 	u16 ref;	/* reference count */
296b199dddbSQi Zhang 	u8 in_use;	/* non-zero if used */
297b199dddbSQi Zhang };
298b199dddbSQi Zhang 
299b199dddbSQi Zhang struct ice_masks {
300b199dddbSQi Zhang 	struct mutex lock; /* lock to protect this structure */
301b199dddbSQi Zhang 	u16 first;	/* first mask owned by the PF */
302b199dddbSQi Zhang 	u16 count;	/* number of masks owned by the PF */
303b199dddbSQi Zhang #define ICE_PROF_MASK_COUNT 32
304b199dddbSQi Zhang 	struct ice_mask masks[ICE_PROF_MASK_COUNT];
305b199dddbSQi Zhang };
306b199dddbSQi Zhang 
307c7648810STony Nguyen /* Tables per block */
308c7648810STony Nguyen struct ice_blk_info {
309c7648810STony Nguyen 	struct ice_xlt1 xlt1;
310c7648810STony Nguyen 	struct ice_xlt2 xlt2;
311c7648810STony Nguyen 	struct ice_prof_tcam prof;
312c7648810STony Nguyen 	struct ice_prof_redir prof_redir;
313c7648810STony Nguyen 	struct ice_es es;
314b199dddbSQi Zhang 	struct ice_masks masks;
315c7648810STony Nguyen 	u8 overwrite; /* set to true to allow overwrite of table entries */
316c7648810STony Nguyen 	u8 is_list_init;
317c7648810STony Nguyen };
318c7648810STony Nguyen 
319451f2c44STony Nguyen enum ice_chg_type {
320451f2c44STony Nguyen 	ICE_TCAM_NONE = 0,
321451f2c44STony Nguyen 	ICE_PTG_ES_ADD,
322451f2c44STony Nguyen 	ICE_TCAM_ADD,
323451f2c44STony Nguyen 	ICE_VSIG_ADD,
324451f2c44STony Nguyen 	ICE_VSIG_REM,
325451f2c44STony Nguyen 	ICE_VSI_MOVE,
326451f2c44STony Nguyen };
327451f2c44STony Nguyen 
328451f2c44STony Nguyen struct ice_chs_chg {
329451f2c44STony Nguyen 	struct list_head list_entry;
330451f2c44STony Nguyen 	enum ice_chg_type type;
331451f2c44STony Nguyen 
332451f2c44STony Nguyen 	u8 add_ptg;
333451f2c44STony Nguyen 	u8 add_vsig;
334451f2c44STony Nguyen 	u8 add_tcam_idx;
335451f2c44STony Nguyen 	u8 add_prof;
336451f2c44STony Nguyen 	u16 ptype;
337451f2c44STony Nguyen 	u8 ptg;
338451f2c44STony Nguyen 	u8 prof_id;
339451f2c44STony Nguyen 	u16 vsi;
340451f2c44STony Nguyen 	u16 vsig;
341451f2c44STony Nguyen 	u16 orig_vsig;
342451f2c44STony Nguyen 	u16 tcam_idx;
343cbad5db8SQi Zhang 	struct ice_ptype_attrib_info attr;
344451f2c44STony Nguyen };
345451f2c44STony Nguyen 
34631ad4e4eSTony Nguyen #define ICE_FLOW_PTYPE_MAX		ICE_XLT1_CNT
347450052a4SDan Nowlin 
348450052a4SDan Nowlin enum ice_prof_type {
349450052a4SDan Nowlin 	ICE_PROF_NON_TUN = 0x1,
3508b032a55SMichal Swiatkowski 	ICE_PROF_TUN_UDP = 0x2,
351f0a35040SMichal Swiatkowski 	ICE_PROF_TUN_GRE = 0x4,
3529a225f81SMarcin Szycik 	ICE_PROF_TUN_GTPU = 0x8,
3539a225f81SMarcin Szycik 	ICE_PROF_TUN_GTPC = 0x10,
3549a225f81SMarcin Szycik 	ICE_PROF_TUN_ALL = 0x1E,
355450052a4SDan Nowlin 	ICE_PROF_ALL = 0xFF,
356450052a4SDan Nowlin };
357a1ffafb0SBrett Creeley 
358a1ffafb0SBrett Creeley /* Number of bits/bytes contained in meta init entry. Note, this should be a
359a1ffafb0SBrett Creeley  * multiple of 32 bits.
360a1ffafb0SBrett Creeley  */
361a1ffafb0SBrett Creeley #define ICE_META_INIT_BITS	192
362a1ffafb0SBrett Creeley #define ICE_META_INIT_DW_CNT	(ICE_META_INIT_BITS / (sizeof(__le32) * \
363a1ffafb0SBrett Creeley 				 BITS_PER_BYTE))
364a1ffafb0SBrett Creeley 
365a1ffafb0SBrett Creeley /* The meta init Flag field starts at this bit */
366a1ffafb0SBrett Creeley #define ICE_META_FLAGS_ST		123
367a1ffafb0SBrett Creeley 
368a1ffafb0SBrett Creeley /* The entry and bit to check for Double VLAN Mode (DVM) support */
369a1ffafb0SBrett Creeley #define ICE_META_VLAN_MODE_ENTRY	0
370a1ffafb0SBrett Creeley #define ICE_META_FLAG_VLAN_MODE		60
371a1ffafb0SBrett Creeley #define ICE_META_VLAN_MODE_BIT		(ICE_META_FLAGS_ST + \
372a1ffafb0SBrett Creeley 					 ICE_META_FLAG_VLAN_MODE)
373a1ffafb0SBrett Creeley 
374a1ffafb0SBrett Creeley struct ice_meta_init_entry {
375a1ffafb0SBrett Creeley 	__le32 bm[ICE_META_INIT_DW_CNT];
376a1ffafb0SBrett Creeley };
377a1ffafb0SBrett Creeley 
378a1ffafb0SBrett Creeley struct ice_meta_init_section {
379a1ffafb0SBrett Creeley 	__le16 count;
380a1ffafb0SBrett Creeley 	__le16 offset;
381a1ffafb0SBrett Creeley 	struct ice_meta_init_entry entry;
382a1ffafb0SBrett Creeley };
383c7648810STony Nguyen #endif /* _ICE_FLEX_TYPE_H_ */
384