net/ice/base: update copyright
[dpdk.git] / drivers / net / ice / base / ice_flex_type.h
index 837e1e8..b58007f 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2019
+ * Copyright(c) 2001-2020 Intel Corporation
  */
 
 #ifndef _ICE_FLEX_TYPE_H_
@@ -16,6 +16,8 @@ struct ice_fv_word {
 };
 #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];
@@ -23,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];
 };
@@ -33,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 */
@@ -78,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];
 };
 
@@ -276,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
@@ -466,6 +531,7 @@ struct ice_tunnel_entry {
        enum ice_tunnel_type type;
        u16 boost_addr;
        u16 port;
+       u16 ref;
        struct ice_boost_tcam_entry *boost_entry;
        u8 valid;
        u8 in_use;
@@ -490,6 +556,7 @@ struct ice_es {
        u16 count;
        u16 fvw;
        u16 *ref_count;
+       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 */
@@ -517,22 +584,24 @@ struct ice_ptg_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;
-       u16 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;
        u8 in_use;
@@ -574,9 +643,9 @@ struct ice_xlt1 {
 #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
@@ -645,7 +714,7 @@ struct ice_prof_tcam {
        u16 count;
        u16 max_prof_id;
        struct ice_prof_tcam_entry *t;
-       u8 cdid_bits; /* # cdid bits to use in key, 0, 2, 4, or 8 */
+       u8 cdid_bits; /* # CDID bits to use in key, 0, 2, 4, or 8 */
 };
 
 struct ice_prof_redir {
@@ -654,6 +723,21 @@ struct ice_prof_redir {
        u16 count;
 };
 
+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_blk_info {
        struct ice_xlt1 xlt1;
@@ -661,6 +745,7 @@ 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;
 };
@@ -689,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_ */