#ifndef _ICE_FLEX_TYPE_H_
#define _ICE_FLEX_TYPE_H_
+#define ICE_FV_OFFSET_INVAL 0x1FF
+
+#pragma pack(1)
/* Extraction Sequence (Field Vector) Table */
struct ice_fv_word {
u8 prot_id;
- u8 off; /* Offset within the protocol header */
+ u16 off; /* Offset within the protocol header */
+ u8 resvrd;
};
+#pragma pack()
+
+#define ICE_MAX_NUM_PROFILES 256
#define ICE_MAX_FV_WORDS 48
struct ice_fv {
__le16 hv_src_port_key;
u8 tcam_search_key;
};
-
#pragma pack()
struct ice_boost_key {
__le16 offset;
u8 value[1];
};
-
#pragma pack()
#define ICE_XLT1_SIZE(n) (sizeof(struct ice_xlt1_section) + \
enum ice_tunnel_type {
TNL_VXLAN = 0,
- TNL_GTPC,
- TNL_GTPC_TEID,
- TNL_GTPU,
- TNL_GTPU_TEID,
- TNL_VXLAN_GPE,
TNL_GENEVE,
- TNL_NAT,
- TNL_ROCE_V2,
- TNL_MPLSO_UDP,
- TNL_UDP2_END,
- TNL_UPD_END,
TNL_LAST = 0xFF,
TNL_ALL = 0xFF,
};
struct ice_tunnel_entry {
enum ice_tunnel_type type;
- u8 valid;
- u8 in_use;
- u8 marked;
u16 boost_addr;
u16 port;
struct ice_boost_tcam_entry *boost_entry;
+ u8 valid;
+ u8 in_use;
+ u8 marked;
};
#define ICE_TUNNEL_MAX_ENTRIES 16
struct ice_tunnel_table {
- u16 count;
struct ice_tunnel_entry tbl[ICE_TUNNEL_MAX_ENTRIES];
+ u16 count;
};
struct ice_pkg_es {
u16 count;
u16 fvw;
u16 *ref_count;
- u8 *written;
- u8 reverse; /* set to true to reverse FV order */
+ u32 *mask_ena;
struct LIST_HEAD_TYPE prof_map;
struct ice_fv_word *t;
- u8 *resource_used_hack; /* hack for testing */
+ struct ice_lock prof_map_lock; /* protect access to profiles list */
+ u8 *written;
+ u8 reverse; /* set to true to reverse FV order */
};
/* PTYPE Group management */
#define ICE_DEFAULT_PTG 0
struct ice_ptg_entry {
- u8 in_use;
struct ice_ptg_ptype *first_ptype;
+ u8 in_use;
};
struct ice_ptg_ptype {
- u8 ptg;
struct ice_ptg_ptype *next_ptype;
+ u8 ptg;
};
-#define ICE_MAX_TCAM_PER_PROFILE 8
-#define ICE_MAX_PTYPE_PER_PROFILE 8
+#define ICE_MAX_TCAM_PER_PROFILE 32
+#define ICE_MAX_PTG_PER_PROFILE 32
struct ice_prof_map {
struct LIST_ENTRY_TYPE list;
u64 profile_cookie;
u64 context;
u8 prof_id;
- u8 ptype_count;
- u8 ptype[ICE_MAX_PTYPE_PER_PROFILE];
+ u8 ptg_cnt;
+ u8 ptg[ICE_MAX_PTG_PER_PROFILE];
};
#define ICE_INVALID_TCAM 0xFFFF
struct ice_tcam_inf {
+ u16 tcam_idx;
u8 ptg;
u8 prof_id;
- u16 tcam_idx;
u8 in_use;
};
};
struct ice_vsig_entry {
- u8 in_use;
struct LIST_HEAD_TYPE prop_lst;
struct ice_vsig_vsi *first_vsi;
+ u8 in_use;
};
struct ice_vsig_vsi {
+ struct ice_vsig_vsi *next_vsi;
+ u32 prop_mask;
u16 changed;
u16 vsig;
- u32 prop_mask;
- struct ice_vsig_vsi *next_vsi;
};
#define ICE_XLT1_CNT 1024
/* XLT1 Table */
struct ice_xlt1 {
- u32 sid;
- u16 count;
struct ice_ptg_entry *ptg_tbl;
struct ice_ptg_ptype *ptypes;
u8 *t;
+ u32 sid;
+ u16 count;
};
#define ICE_XLT2_CNT 768
/* Vsig bit layout:
* [0:12]: incremental vsig index 1 to ICE_MAX_VSIGS
- * [13:15]: pf number of device
+ * [13:15]: PF number of device
*/
#define ICE_VSIG_IDX_M (0x1FFF)
#define ICE_PF_NUM_S 13
/* XLT2 Table */
struct ice_xlt2 {
- u32 sid;
- u16 count;
struct ice_vsig_entry *vsig_tbl;
struct ice_vsig_vsi *vsis;
u16 *t;
+ u32 sid;
+ u16 count;
};
/* Extraction sequence - list of match fields:
__le16 count;
struct ice_prof_tcam_entry entry[1];
};
-
#pragma pack()
struct ice_prof_tcam {
u32 sid;
u16 count;
u16 max_prof_id;
- u8 cdid_bits; /* # cdid bits to use in key, 0, 2, 4, or 8 */
struct ice_prof_tcam_entry *t;
- u8 *resource_used_hack;
+ u8 cdid_bits; /* # cdid bits to use in key, 0, 2, 4, or 8 */
};
struct ice_prof_redir {
+ u8 *t;
u32 sid;
u16 count;
- u8 *t;
+};
+
+struct ice_mask {
+ u16 mask; /* 16-bit mask */
+ u16 idx; /* index */
+ u16 ref; /* reference count */
+ u8 in_use; /* non-zero if used */
+};
+
+struct ice_masks {
+ struct ice_lock lock; /* lock to protect this structure */
+ u16 first; /* first mask owned by the PF */
+ u16 count; /* number of masks owned by the PF */
+#define ICE_PROF_MASK_COUNT 32
+ struct ice_mask masks[ICE_PROF_MASK_COUNT];
};
/* Tables per block */
struct ice_prof_tcam prof;
struct ice_prof_redir prof_redir;
struct ice_es es;
+ struct ice_masks masks;
u8 overwrite; /* set to true to allow overwrite of table entries */
+ u8 is_list_init;
};
enum ice_chg_type {
#define ICE_FLOW_PTYPE_MAX ICE_XLT1_CNT
+enum ice_prof_type {
+ ICE_PROF_NON_TUN = 0x1,
+ ICE_PROF_TUN_UDP = 0x2,
+ ICE_PROF_TUN_GRE = 0x4,
+ ICE_PROF_TUN_PPPOE = 0x8,
+ ICE_PROF_TUN_ALL = 0xE,
+ ICE_PROF_ALL = 0xFF,
+};
#endif /* _ICE_FLEX_TYPE_H_ */