net/ice/base: implement inactive NVM version get
[dpdk.git] / drivers / net / ice / base / ice_flow.h
index 6e42571..2a9ae66 100644 (file)
@@ -178,6 +178,11 @@ enum ice_flow_seg_hdr {
        ICE_FLOW_SEG_HDR_AH             = 0x00200000,
        ICE_FLOW_SEG_HDR_NAT_T_ESP      = 0x00400000,
        ICE_FLOW_SEG_HDR_ETH_NON_IP     = 0x00800000,
+       ICE_FLOW_SEG_HDR_GTPU_NON_IP    = 0x01000000,
+       /* The following is an additive bit for ICE_FLOW_SEG_HDR_IPV4 and
+        * ICE_FLOW_SEG_HDR_IPV6 which include the IPV4 other PTYPEs
+        */
+       ICE_FLOW_SEG_HDR_IPV_OTHER      = 0x20000000,
 };
 
 /* These segements all have the same PTYPES, but are otherwise distinguished by
@@ -318,6 +323,24 @@ enum ice_flow_avf_hdr_field {
        BIT_ULL(ICE_AVF_FLOW_FIELD_UNICAST_IPV6_UDP) | \
        BIT_ULL(ICE_AVF_FLOW_FIELD_MULTICAST_IPV6_UDP))
 
+enum ice_rss_cfg_hdr_type {
+       ICE_RSS_OUTER_HEADERS, /* take outer headers as inputset. */
+       ICE_RSS_INNER_HEADERS, /* take inner headers as inputset. */
+       /* take inner headers as inputset for packet with outer ipv4. */
+       ICE_RSS_INNER_HEADERS_W_OUTER_IPV4,
+       /* take inner headers as inputset for packet with outer ipv6. */
+       ICE_RSS_INNER_HEADERS_W_OUTER_IPV6,
+       /* take outer headers first then inner headers as inputset */
+       ICE_RSS_ANY_HEADERS
+};
+
+struct ice_rss_hash_cfg {
+       u32 addl_hdrs; /* protocol header fields */
+       u64 hash_flds; /* hash bit field (ICE_FLOW_HASH_*) to configure */
+       enum ice_rss_cfg_hdr_type hdr_type; /* to specify inner or outer */
+       bool symm; /* symmetric or asymmetric hash */
+};
+
 enum ice_flow_dir {
        ICE_FLOW_DIR_UNDEFINED  = 0,
        ICE_FLOW_TX             = 0x01,
@@ -331,6 +354,7 @@ enum ice_flow_priority {
        ICE_FLOW_PRIO_HIGH
 };
 
+#define ICE_FLOW_SEG_SINGLE            1
 #define ICE_FLOW_SEG_MAX               2
 #define ICE_FLOW_SEG_RAW_FLD_MAX       2
 #define ICE_FLOW_PROFILE_MAX           1024
@@ -435,8 +459,7 @@ struct ice_flow_prof {
                struct ice_acl_scen *scen;
                /* struct fd */
                u32 data;
-               /* Symmetric Hash for RSS */
-               bool symm;
+               bool symm; /* Symmetric Hash for RSS */
        } cfg;
 
        /* Default actions */
@@ -447,9 +470,7 @@ struct ice_rss_cfg {
        struct LIST_ENTRY_TYPE l_entry;
        /* bitmap of VSIs added to the RSS entry */
        ice_declare_bitmap(vsis, ICE_MAX_VSI);
-       u64 hashed_flds;
-       u32 packet_hdr;
-       bool symm;
+       struct ice_rss_hash_cfg hash;
 };
 
 enum ice_flow_action_type {
@@ -494,6 +515,9 @@ ice_flow_add_prof(struct ice_hw *hw, enum ice_block blk, enum ice_flow_dir dir,
 enum ice_status
 ice_flow_rem_prof(struct ice_hw *hw, enum ice_block blk, u64 prof_id);
 enum ice_status
+ice_flow_assoc_prof(struct ice_hw *hw, enum ice_block blk,
+                   struct ice_flow_prof *prof, u16 vsi_handle);
+enum ice_status
 ice_flow_assoc_vsig_vsi(struct ice_hw *hw, enum ice_block blk, u16 vsi_handle,
                        u16 vsig);
 enum ice_status
@@ -523,10 +547,10 @@ enum ice_status
 ice_add_avf_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds);
 enum ice_status ice_rem_vsi_rss_cfg(struct ice_hw *hw, u16 vsi_handle);
 enum ice_status
-ice_add_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds,
-               u32 addl_hdrs, bool symm);
+ice_add_rss_cfg(struct ice_hw *hw, u16 vsi_handle,
+               const struct ice_rss_hash_cfg *cfg);
 enum ice_status
-ice_rem_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds,
-               u32 addl_hdrs);
+ice_rem_rss_cfg(struct ice_hw *hw, u16 vsi_handle,
+               const struct ice_rss_hash_cfg *cfg);
 u64 ice_get_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u32 hdrs);
 #endif /* _ICE_FLOW_H_ */