net/ice: fix flow FDIR/switch memory leak
[dpdk.git] / drivers / net / ice / base / ice_flex_type.h
index dca5cf2..1be98ea 100644 (file)
@@ -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];
@@ -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
@@ -490,6 +555,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 +583,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;
-       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;
        u8 in_use;
@@ -576,7 +644,7 @@ struct ice_xlt1 {
 
 /* 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
@@ -654,6 +722,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 +744,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 +773,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_ */