X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fbase%2Fice_flex_type.h;h=b58007fb3fcb61d023f79a91a2b9a8c0aa8a22f9;hb=dc496974cd68e1e02365c2b7e28935ffad02a98e;hp=f2a5f27e7f31cb3484776ebbab69a77be131c0f5;hpb=bcb1f28386937de2574e551406fccec3630e5086;p=dpdk.git diff --git a/drivers/net/ice/base/ice_flex_type.h b/drivers/net/ice/base/ice_flex_type.h index f2a5f27e7f..b58007fb3f 100644 --- a/drivers/net/ice/base/ice_flex_type.h +++ b/drivers/net/ice/base/ice_flex_type.h @@ -1,11 +1,11 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2001-2019 + * Copyright(c) 2001-2020 Intel Corporation */ #ifndef _ICE_FLEX_TYPE_H_ #define _ICE_FLEX_TYPE_H_ -#define ICE_FV_OFFSET_INVAL 0x1FF +#define ICE_FV_OFFSET_INVAL 0x1FF #pragma pack(1) /* Extraction Sequence (Field Vector) Table */ @@ -14,9 +14,10 @@ struct ice_fv_word { 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 { struct ice_fv_word ew[ICE_MAX_FV_WORDS]; @@ -24,7 +25,7 @@ struct ice_fv { /* Package and segment headers and tables */ struct ice_pkg_hdr { - struct ice_pkg_ver format_ver; + struct ice_pkg_ver pkg_format_ver; __le32 seg_count; __le32 seg_offset[1]; }; @@ -34,9 +35,9 @@ struct ice_generic_seg_hdr { #define SEGMENT_TYPE_METADATA 0x00000001 #define SEGMENT_TYPE_ICE 0x00000010 __le32 seg_type; - struct ice_pkg_ver seg_ver; + struct ice_pkg_ver seg_format_ver; __le32 seg_size; - char seg_name[ICE_PKG_NAME_SIZE]; + char seg_id[ICE_PKG_NAME_SIZE]; }; /* ice specific segment */ @@ -79,7 +80,7 @@ struct ice_buf_table { struct ice_global_metadata_seg { struct ice_generic_seg_hdr hdr; struct ice_pkg_ver pkg_ver; - __le32 track_id; + __le32 rsvd; char pkg_name[ICE_PKG_NAME_SIZE]; }; @@ -277,6 +278,69 @@ enum ice_sect { #define ICE_PTYPE_IPV6_TCP_PAY 92 #define ICE_PTYPE_IPV6_SCTP_PAY 93 #define ICE_PTYPE_IPV6_ICMP_PAY 94 +#define ICE_MAC_IPV4_GTPC_TEID 325 +#define ICE_MAC_IPV6_GTPC_TEID 326 +#define ICE_MAC_IPV4_GTPC 327 +#define ICE_MAC_IPV6_GTPC 328 +#define ICE_MAC_IPV4_GTPU 329 +#define ICE_MAC_IPV6_GTPU 330 +#define ICE_MAC_IPV4_GTPU_IPV4_FRAG 331 +#define ICE_MAC_IPV4_GTPU_IPV4_PAY 332 +#define ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY 333 +#define ICE_MAC_IPV4_GTPU_IPV4_TCP 334 +#define ICE_MAC_IPV4_GTPU_IPV4_ICMP 335 +#define ICE_MAC_IPV6_GTPU_IPV4_FRAG 336 +#define ICE_MAC_IPV6_GTPU_IPV4_PAY 337 +#define ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY 338 +#define ICE_MAC_IPV6_GTPU_IPV4_TCP 339 +#define ICE_MAC_IPV6_GTPU_IPV4_ICMP 340 +#define ICE_MAC_IPV4_GTPU_IPV6_FRAG 341 +#define ICE_MAC_IPV4_GTPU_IPV6_PAY 342 +#define ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY 343 +#define ICE_MAC_IPV4_GTPU_IPV6_TCP 344 +#define ICE_MAC_IPV4_GTPU_IPV6_ICMPV6 345 +#define ICE_MAC_IPV6_GTPU_IPV6_FRAG 346 +#define ICE_MAC_IPV6_GTPU_IPV6_PAY 347 +#define ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY 348 +#define ICE_MAC_IPV6_GTPU_IPV6_TCP 349 +#define ICE_MAC_IPV6_GTPU_IPV6_ICMPV6 350 + +/* Attributes that can modify PTYPE definitions. + * + * These values will represent special attributes for PTYPES, which will + * resolve into metadata packet flags definitions that can be used in the TCAM + * for identifying a PTYPE with specific characteristics. + */ +enum ice_ptype_attrib_type { + /* GTP PTYPES */ + ICE_PTYPE_ATTR_GTP_PDU_EH, + ICE_PTYPE_ATTR_GTP_SESSION, + ICE_PTYPE_ATTR_GTP_DOWNLINK, + ICE_PTYPE_ATTR_GTP_UPLINK, +}; + +struct ice_ptype_attrib_info { + u16 flags; + u16 mask; +}; + +/* TCAM flag definitions */ +#define ICE_GTP_PDU BIT(14) +#define ICE_GTP_PDU_LINK BIT(13) + +/* GTP attributes */ +#define ICE_GTP_PDU_FLAG_MASK (ICE_GTP_PDU) +#define ICE_GTP_PDU_EH ICE_GTP_PDU + +#define ICE_GTP_FLAGS_MASK (ICE_GTP_PDU | ICE_GTP_PDU_LINK) +#define ICE_GTP_SESSION 0 +#define ICE_GTP_DOWNLINK ICE_GTP_PDU +#define ICE_GTP_UPLINK (ICE_GTP_PDU | ICE_GTP_PDU_LINK) + +struct ice_ptype_attributes { + u16 ptype; + enum ice_ptype_attrib_type attrib; +}; /* Packet Type Groups (PTG) - Inner Most fields (IM) */ #define ICE_PTG_IM_IPV4_TCP 16 @@ -367,7 +431,6 @@ struct ice_boost_key_value { __le16 hv_src_port_key; u8 tcam_search_key; }; - #pragma pack() struct ice_boost_key { @@ -406,7 +469,6 @@ struct ice_xlt1_section { __le16 offset; u8 value[1]; }; - #pragma pack() #define ICE_XLT1_SIZE(n) (sizeof(struct ice_xlt1_section) + \ @@ -455,17 +517,7 @@ struct ice_pkg_enum { 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, }; @@ -477,19 +529,20 @@ struct ice_tunnel_type_scan { struct ice_tunnel_entry { enum ice_tunnel_type type; - u8 valid; - u8 in_use; - u8 marked; u16 boost_addr; u16 port; + u16 ref; 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 { @@ -503,10 +556,12 @@ struct ice_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; + 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 */ @@ -520,33 +575,35 @@ struct ice_es { #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]; + struct ice_ptype_attrib_info attr[ICE_MAX_PTG_PER_PROFILE]; }; #define ICE_INVALID_TCAM 0xFFFF struct ice_tcam_inf { + u16 tcam_idx; + struct ice_ptype_attrib_info attr; u8 ptg; u8 prof_id; - u16 tcam_idx; u8 in_use; }; @@ -559,16 +616,16 @@ struct ice_vsig_prof { }; 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 @@ -576,19 +633,19 @@ struct ice_vsig_vsi { /* 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 #define ICE_MAX_VSIGS 768 -/* Vsig bit layout: - * [0:12]: incremental vsig index 1 to ICE_MAX_VSIGS - * [13:15]: pf number of device +/* VSIG bit layout: + * [0:12]: incremental VSIG index 1 to ICE_MAX_VSIGS + * [13:15]: PF number of device */ #define ICE_VSIG_IDX_M (0x1FFF) #define ICE_PF_NUM_S 13 @@ -600,11 +657,11 @@ struct ice_xlt1 { /* 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: @@ -650,21 +707,35 @@ struct ice_prof_id_section { __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 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 */ @@ -674,7 +745,9 @@ struct ice_blk_info { 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 { @@ -701,8 +774,17 @@ struct ice_chs_chg { u16 vsig; u16 orig_vsig; u16 tcam_idx; + struct ice_ptype_attrib_info attr; }; #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_ */