Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright (c) 2019, Intel Corporation. */
0003 
0004 #ifndef _ICE_FLOW_H_
0005 #define _ICE_FLOW_H_
0006 
0007 #include "ice_flex_type.h"
0008 
0009 #define ICE_FLOW_ENTRY_HANDLE_INVAL 0
0010 #define ICE_FLOW_FLD_OFF_INVAL      0xffff
0011 
0012 /* Generate flow hash field from flow field type(s) */
0013 #define ICE_FLOW_HASH_ETH   \
0014     (BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_DA) | \
0015      BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA))
0016 #define ICE_FLOW_HASH_IPV4  \
0017     (BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | \
0018      BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA))
0019 #define ICE_FLOW_HASH_IPV6  \
0020     (BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | \
0021      BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA))
0022 #define ICE_FLOW_HASH_TCP_PORT  \
0023     (BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT) | \
0024      BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT))
0025 #define ICE_FLOW_HASH_UDP_PORT  \
0026     (BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT) | \
0027      BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT))
0028 #define ICE_FLOW_HASH_SCTP_PORT \
0029     (BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT) | \
0030      BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT))
0031 
0032 #define ICE_HASH_INVALID    0
0033 #define ICE_HASH_TCP_IPV4   (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_TCP_PORT)
0034 #define ICE_HASH_TCP_IPV6   (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_TCP_PORT)
0035 #define ICE_HASH_UDP_IPV4   (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_UDP_PORT)
0036 #define ICE_HASH_UDP_IPV6   (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_UDP_PORT)
0037 
0038 #define ICE_FLOW_HASH_GTP_TEID \
0039     (BIT_ULL(ICE_FLOW_FIELD_IDX_GTPC_TEID))
0040 
0041 #define ICE_FLOW_HASH_GTP_IPV4_TEID \
0042     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_TEID)
0043 #define ICE_FLOW_HASH_GTP_IPV6_TEID \
0044     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_TEID)
0045 
0046 #define ICE_FLOW_HASH_GTP_U_TEID \
0047     (BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_IP_TEID))
0048 
0049 #define ICE_FLOW_HASH_GTP_U_IPV4_TEID \
0050     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_U_TEID)
0051 #define ICE_FLOW_HASH_GTP_U_IPV6_TEID \
0052     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_U_TEID)
0053 
0054 #define ICE_FLOW_HASH_GTP_U_EH_TEID \
0055     (BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_EH_TEID))
0056 
0057 #define ICE_FLOW_HASH_GTP_U_EH_QFI \
0058     (BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_EH_QFI))
0059 
0060 #define ICE_FLOW_HASH_GTP_U_IPV4_EH \
0061     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_GTP_U_EH_TEID | \
0062      ICE_FLOW_HASH_GTP_U_EH_QFI)
0063 #define ICE_FLOW_HASH_GTP_U_IPV6_EH \
0064     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_GTP_U_EH_TEID | \
0065      ICE_FLOW_HASH_GTP_U_EH_QFI)
0066 
0067 #define ICE_FLOW_HASH_PPPOE_SESS_ID \
0068     (BIT_ULL(ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID))
0069 
0070 #define ICE_FLOW_HASH_PPPOE_SESS_ID_ETH \
0071     (ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_PPPOE_SESS_ID)
0072 #define ICE_FLOW_HASH_PPPOE_TCP_ID \
0073     (ICE_FLOW_HASH_TCP_PORT | ICE_FLOW_HASH_PPPOE_SESS_ID)
0074 #define ICE_FLOW_HASH_PPPOE_UDP_ID \
0075     (ICE_FLOW_HASH_UDP_PORT | ICE_FLOW_HASH_PPPOE_SESS_ID)
0076 
0077 #define ICE_FLOW_HASH_PFCP_SEID \
0078     (BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID))
0079 #define ICE_FLOW_HASH_PFCP_IPV4_SEID \
0080     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_PFCP_SEID)
0081 #define ICE_FLOW_HASH_PFCP_IPV6_SEID \
0082     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_PFCP_SEID)
0083 
0084 #define ICE_FLOW_HASH_L2TPV3_SESS_ID \
0085     (BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID))
0086 #define ICE_FLOW_HASH_L2TPV3_IPV4_SESS_ID \
0087     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_L2TPV3_SESS_ID)
0088 #define ICE_FLOW_HASH_L2TPV3_IPV6_SESS_ID \
0089     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_L2TPV3_SESS_ID)
0090 
0091 #define ICE_FLOW_HASH_ESP_SPI \
0092     (BIT_ULL(ICE_FLOW_FIELD_IDX_ESP_SPI))
0093 #define ICE_FLOW_HASH_ESP_IPV4_SPI \
0094     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_ESP_SPI)
0095 #define ICE_FLOW_HASH_ESP_IPV6_SPI \
0096     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_ESP_SPI)
0097 
0098 #define ICE_FLOW_HASH_AH_SPI \
0099     (BIT_ULL(ICE_FLOW_FIELD_IDX_AH_SPI))
0100 #define ICE_FLOW_HASH_AH_IPV4_SPI \
0101     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_AH_SPI)
0102 #define ICE_FLOW_HASH_AH_IPV6_SPI \
0103     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_AH_SPI)
0104 
0105 #define ICE_FLOW_HASH_NAT_T_ESP_SPI \
0106     (BIT_ULL(ICE_FLOW_FIELD_IDX_NAT_T_ESP_SPI))
0107 #define ICE_FLOW_HASH_NAT_T_ESP_IPV4_SPI \
0108     (ICE_FLOW_HASH_IPV4 | ICE_FLOW_HASH_NAT_T_ESP_SPI)
0109 #define ICE_FLOW_HASH_NAT_T_ESP_IPV6_SPI \
0110     (ICE_FLOW_HASH_IPV6 | ICE_FLOW_HASH_NAT_T_ESP_SPI)
0111 
0112 /* Protocol header fields within a packet segment. A segment consists of one or
0113  * more protocol headers that make up a logical group of protocol headers. Each
0114  * logical group of protocol headers encapsulates or is encapsulated using/by
0115  * tunneling or encapsulation protocols for network virtualization such as GRE,
0116  * VxLAN, etc.
0117  */
0118 enum ice_flow_seg_hdr {
0119     ICE_FLOW_SEG_HDR_NONE       = 0x00000000,
0120     ICE_FLOW_SEG_HDR_ETH        = 0x00000001,
0121     ICE_FLOW_SEG_HDR_VLAN       = 0x00000002,
0122     ICE_FLOW_SEG_HDR_IPV4       = 0x00000004,
0123     ICE_FLOW_SEG_HDR_IPV6       = 0x00000008,
0124     ICE_FLOW_SEG_HDR_ARP        = 0x00000010,
0125     ICE_FLOW_SEG_HDR_ICMP       = 0x00000020,
0126     ICE_FLOW_SEG_HDR_TCP        = 0x00000040,
0127     ICE_FLOW_SEG_HDR_UDP        = 0x00000080,
0128     ICE_FLOW_SEG_HDR_SCTP       = 0x00000100,
0129     ICE_FLOW_SEG_HDR_GRE        = 0x00000200,
0130     ICE_FLOW_SEG_HDR_GTPC       = 0x00000400,
0131     ICE_FLOW_SEG_HDR_GTPC_TEID  = 0x00000800,
0132     ICE_FLOW_SEG_HDR_GTPU_IP    = 0x00001000,
0133     ICE_FLOW_SEG_HDR_GTPU_EH    = 0x00002000,
0134     ICE_FLOW_SEG_HDR_GTPU_DWN   = 0x00004000,
0135     ICE_FLOW_SEG_HDR_GTPU_UP    = 0x00008000,
0136     ICE_FLOW_SEG_HDR_PPPOE      = 0x00010000,
0137     ICE_FLOW_SEG_HDR_PFCP_NODE  = 0x00020000,
0138     ICE_FLOW_SEG_HDR_PFCP_SESSION   = 0x00040000,
0139     ICE_FLOW_SEG_HDR_L2TPV3     = 0x00080000,
0140     ICE_FLOW_SEG_HDR_ESP        = 0x00100000,
0141     ICE_FLOW_SEG_HDR_AH     = 0x00200000,
0142     ICE_FLOW_SEG_HDR_NAT_T_ESP  = 0x00400000,
0143     ICE_FLOW_SEG_HDR_ETH_NON_IP = 0x00800000,
0144     /* The following is an additive bit for ICE_FLOW_SEG_HDR_IPV4 and
0145      * ICE_FLOW_SEG_HDR_IPV6 which include the IPV4 other PTYPEs
0146      */
0147     ICE_FLOW_SEG_HDR_IPV_OTHER      = 0x20000000,
0148 };
0149 
0150 /* These segments all have the same PTYPES, but are otherwise distinguished by
0151  * the value of the gtp_eh_pdu and gtp_eh_pdu_link flags:
0152  *
0153  *                                gtp_eh_pdu     gtp_eh_pdu_link
0154  * ICE_FLOW_SEG_HDR_GTPU_IP           0              0
0155  * ICE_FLOW_SEG_HDR_GTPU_EH           1              don't care
0156  * ICE_FLOW_SEG_HDR_GTPU_DWN          1              0
0157  * ICE_FLOW_SEG_HDR_GTPU_UP           1              1
0158  */
0159 #define ICE_FLOW_SEG_HDR_GTPU (ICE_FLOW_SEG_HDR_GTPU_IP | \
0160                    ICE_FLOW_SEG_HDR_GTPU_EH | \
0161                    ICE_FLOW_SEG_HDR_GTPU_DWN | \
0162                    ICE_FLOW_SEG_HDR_GTPU_UP)
0163 #define ICE_FLOW_SEG_HDR_PFCP (ICE_FLOW_SEG_HDR_PFCP_NODE | \
0164                    ICE_FLOW_SEG_HDR_PFCP_SESSION)
0165 
0166 enum ice_flow_field {
0167     /* L2 */
0168     ICE_FLOW_FIELD_IDX_ETH_DA,
0169     ICE_FLOW_FIELD_IDX_ETH_SA,
0170     ICE_FLOW_FIELD_IDX_S_VLAN,
0171     ICE_FLOW_FIELD_IDX_C_VLAN,
0172     ICE_FLOW_FIELD_IDX_ETH_TYPE,
0173     /* L3 */
0174     ICE_FLOW_FIELD_IDX_IPV4_DSCP,
0175     ICE_FLOW_FIELD_IDX_IPV6_DSCP,
0176     ICE_FLOW_FIELD_IDX_IPV4_TTL,
0177     ICE_FLOW_FIELD_IDX_IPV4_PROT,
0178     ICE_FLOW_FIELD_IDX_IPV6_TTL,
0179     ICE_FLOW_FIELD_IDX_IPV6_PROT,
0180     ICE_FLOW_FIELD_IDX_IPV4_SA,
0181     ICE_FLOW_FIELD_IDX_IPV4_DA,
0182     ICE_FLOW_FIELD_IDX_IPV6_SA,
0183     ICE_FLOW_FIELD_IDX_IPV6_DA,
0184     /* L4 */
0185     ICE_FLOW_FIELD_IDX_TCP_SRC_PORT,
0186     ICE_FLOW_FIELD_IDX_TCP_DST_PORT,
0187     ICE_FLOW_FIELD_IDX_UDP_SRC_PORT,
0188     ICE_FLOW_FIELD_IDX_UDP_DST_PORT,
0189     ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT,
0190     ICE_FLOW_FIELD_IDX_SCTP_DST_PORT,
0191     ICE_FLOW_FIELD_IDX_TCP_FLAGS,
0192     /* ARP */
0193     ICE_FLOW_FIELD_IDX_ARP_SIP,
0194     ICE_FLOW_FIELD_IDX_ARP_DIP,
0195     ICE_FLOW_FIELD_IDX_ARP_SHA,
0196     ICE_FLOW_FIELD_IDX_ARP_DHA,
0197     ICE_FLOW_FIELD_IDX_ARP_OP,
0198     /* ICMP */
0199     ICE_FLOW_FIELD_IDX_ICMP_TYPE,
0200     ICE_FLOW_FIELD_IDX_ICMP_CODE,
0201     /* GRE */
0202     ICE_FLOW_FIELD_IDX_GRE_KEYID,
0203     /* GTPC_TEID */
0204     ICE_FLOW_FIELD_IDX_GTPC_TEID,
0205     /* GTPU_IP */
0206     ICE_FLOW_FIELD_IDX_GTPU_IP_TEID,
0207     /* GTPU_EH */
0208     ICE_FLOW_FIELD_IDX_GTPU_EH_TEID,
0209     ICE_FLOW_FIELD_IDX_GTPU_EH_QFI,
0210     /* GTPU_UP */
0211     ICE_FLOW_FIELD_IDX_GTPU_UP_TEID,
0212     /* GTPU_DWN */
0213     ICE_FLOW_FIELD_IDX_GTPU_DWN_TEID,
0214     /* PPPoE */
0215     ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID,
0216     /* PFCP */
0217     ICE_FLOW_FIELD_IDX_PFCP_SEID,
0218     /* L2TPv3 */
0219     ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID,
0220     /* ESP */
0221     ICE_FLOW_FIELD_IDX_ESP_SPI,
0222     /* AH */
0223     ICE_FLOW_FIELD_IDX_AH_SPI,
0224     /* NAT_T ESP */
0225     ICE_FLOW_FIELD_IDX_NAT_T_ESP_SPI,
0226      /* The total number of enums must not exceed 64 */
0227     ICE_FLOW_FIELD_IDX_MAX
0228 };
0229 
0230 /* Flow headers and fields for AVF support */
0231 enum ice_flow_avf_hdr_field {
0232     /* Values 0 - 28 are reserved for future use */
0233     ICE_AVF_FLOW_FIELD_INVALID      = 0,
0234     ICE_AVF_FLOW_FIELD_UNICAST_IPV4_UDP = 29,
0235     ICE_AVF_FLOW_FIELD_MULTICAST_IPV4_UDP,
0236     ICE_AVF_FLOW_FIELD_IPV4_UDP,
0237     ICE_AVF_FLOW_FIELD_IPV4_TCP_SYN_NO_ACK,
0238     ICE_AVF_FLOW_FIELD_IPV4_TCP,
0239     ICE_AVF_FLOW_FIELD_IPV4_SCTP,
0240     ICE_AVF_FLOW_FIELD_IPV4_OTHER,
0241     ICE_AVF_FLOW_FIELD_FRAG_IPV4,
0242     /* Values 37-38 are reserved */
0243     ICE_AVF_FLOW_FIELD_UNICAST_IPV6_UDP = 39,
0244     ICE_AVF_FLOW_FIELD_MULTICAST_IPV6_UDP,
0245     ICE_AVF_FLOW_FIELD_IPV6_UDP,
0246     ICE_AVF_FLOW_FIELD_IPV6_TCP_SYN_NO_ACK,
0247     ICE_AVF_FLOW_FIELD_IPV6_TCP,
0248     ICE_AVF_FLOW_FIELD_IPV6_SCTP,
0249     ICE_AVF_FLOW_FIELD_IPV6_OTHER,
0250     ICE_AVF_FLOW_FIELD_FRAG_IPV6,
0251     ICE_AVF_FLOW_FIELD_RSVD47,
0252     ICE_AVF_FLOW_FIELD_FCOE_OX,
0253     ICE_AVF_FLOW_FIELD_FCOE_RX,
0254     ICE_AVF_FLOW_FIELD_FCOE_OTHER,
0255     /* Values 51-62 are reserved */
0256     ICE_AVF_FLOW_FIELD_L2_PAYLOAD       = 63,
0257     ICE_AVF_FLOW_FIELD_MAX
0258 };
0259 
0260 /* Supported RSS offloads  This macro is defined to support
0261  * VIRTCHNL_OP_GET_RSS_HENA_CAPS ops. PF driver sends the RSS hardware
0262  * capabilities to the caller of this ops.
0263  */
0264 #define ICE_DEFAULT_RSS_HENA ( \
0265     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV4_UDP) | \
0266     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV4_SCTP) | \
0267     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV4_TCP) | \
0268     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV4_OTHER) | \
0269     BIT_ULL(ICE_AVF_FLOW_FIELD_FRAG_IPV4) | \
0270     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV6_UDP) | \
0271     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV6_TCP) | \
0272     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV6_SCTP) | \
0273     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV6_OTHER) | \
0274     BIT_ULL(ICE_AVF_FLOW_FIELD_FRAG_IPV6) | \
0275     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV4_TCP_SYN_NO_ACK) | \
0276     BIT_ULL(ICE_AVF_FLOW_FIELD_UNICAST_IPV4_UDP) | \
0277     BIT_ULL(ICE_AVF_FLOW_FIELD_MULTICAST_IPV4_UDP) | \
0278     BIT_ULL(ICE_AVF_FLOW_FIELD_IPV6_TCP_SYN_NO_ACK) | \
0279     BIT_ULL(ICE_AVF_FLOW_FIELD_UNICAST_IPV6_UDP) | \
0280     BIT_ULL(ICE_AVF_FLOW_FIELD_MULTICAST_IPV6_UDP))
0281 
0282 enum ice_flow_dir {
0283     ICE_FLOW_RX     = 0x02,
0284 };
0285 
0286 enum ice_flow_priority {
0287     ICE_FLOW_PRIO_LOW,
0288     ICE_FLOW_PRIO_NORMAL,
0289     ICE_FLOW_PRIO_HIGH
0290 };
0291 
0292 #define ICE_FLOW_SEG_MAX        2
0293 #define ICE_FLOW_SEG_RAW_FLD_MAX    2
0294 #define ICE_FLOW_FV_EXTRACT_SZ      2
0295 
0296 #define ICE_FLOW_SET_HDRS(seg, val) ((seg)->hdrs |= (u32)(val))
0297 
0298 struct ice_flow_seg_xtrct {
0299     u8 prot_id; /* Protocol ID of extracted header field */
0300     u16 off;    /* Starting offset of the field in header in bytes */
0301     u8 idx;     /* Index of FV entry used */
0302     u8 disp;    /* Displacement of field in bits fr. FV entry's start */
0303     u16 mask;   /* Mask for field */
0304 };
0305 
0306 enum ice_flow_fld_match_type {
0307     ICE_FLOW_FLD_TYPE_REG,      /* Value, mask */
0308     ICE_FLOW_FLD_TYPE_RANGE,    /* Value, mask, last (upper bound) */
0309     ICE_FLOW_FLD_TYPE_PREFIX,   /* IP address, prefix, size of prefix */
0310     ICE_FLOW_FLD_TYPE_SIZE,     /* Value, mask, size of match */
0311 };
0312 
0313 struct ice_flow_fld_loc {
0314     /* Describe offsets of field information relative to the beginning of
0315      * input buffer provided when adding flow entries.
0316      */
0317     u16 val;    /* Offset where the value is located */
0318     u16 mask;   /* Offset where the mask/prefix value is located */
0319     u16 last;   /* Length or offset where the upper value is located */
0320 };
0321 
0322 struct ice_flow_fld_info {
0323     enum ice_flow_fld_match_type type;
0324     /* Location where to retrieve data from an input buffer */
0325     struct ice_flow_fld_loc src;
0326     /* Location where to put the data into the final entry buffer */
0327     struct ice_flow_fld_loc entry;
0328     struct ice_flow_seg_xtrct xtrct;
0329 };
0330 
0331 struct ice_flow_seg_fld_raw {
0332     struct ice_flow_fld_info info;
0333     u16 off;    /* Offset from the start of the segment */
0334 };
0335 
0336 struct ice_flow_seg_info {
0337     u32 hdrs;   /* Bitmask indicating protocol headers present */
0338     u64 match;  /* Bitmask indicating header fields to be matched */
0339     u64 range;  /* Bitmask indicating header fields matched as ranges */
0340 
0341     struct ice_flow_fld_info fields[ICE_FLOW_FIELD_IDX_MAX];
0342 
0343     u8 raws_cnt;    /* Number of raw fields to be matched */
0344     struct ice_flow_seg_fld_raw raws[ICE_FLOW_SEG_RAW_FLD_MAX];
0345 };
0346 
0347 /* This structure describes a flow entry, and is tracked only in this file */
0348 struct ice_flow_entry {
0349     struct list_head l_entry;
0350 
0351     u64 id;
0352     struct ice_flow_prof *prof;
0353     /* Flow entry's content */
0354     void *entry;
0355     enum ice_flow_priority priority;
0356     u16 vsi_handle;
0357     u16 entry_sz;
0358 };
0359 
0360 #define ICE_FLOW_ENTRY_HNDL(e)  ((u64)(uintptr_t)e)
0361 #define ICE_FLOW_ENTRY_PTR(h)   ((struct ice_flow_entry *)(uintptr_t)(h))
0362 
0363 struct ice_flow_prof {
0364     struct list_head l_entry;
0365 
0366     u64 id;
0367     enum ice_flow_dir dir;
0368     u8 segs_cnt;
0369 
0370     /* Keep track of flow entries associated with this flow profile */
0371     struct mutex entries_lock;
0372     struct list_head entries;
0373 
0374     struct ice_flow_seg_info segs[ICE_FLOW_SEG_MAX];
0375 
0376     /* software VSI handles referenced by this flow profile */
0377     DECLARE_BITMAP(vsis, ICE_MAX_VSI);
0378 };
0379 
0380 struct ice_rss_cfg {
0381     struct list_head l_entry;
0382     /* bitmap of VSIs added to the RSS entry */
0383     DECLARE_BITMAP(vsis, ICE_MAX_VSI);
0384     u64 hashed_flds;
0385     u32 packet_hdr;
0386 };
0387 
0388 int
0389 ice_flow_add_prof(struct ice_hw *hw, enum ice_block blk, enum ice_flow_dir dir,
0390           u64 prof_id, struct ice_flow_seg_info *segs, u8 segs_cnt,
0391           struct ice_flow_prof **prof);
0392 int ice_flow_rem_prof(struct ice_hw *hw, enum ice_block blk, u64 prof_id);
0393 int
0394 ice_flow_add_entry(struct ice_hw *hw, enum ice_block blk, u64 prof_id,
0395            u64 entry_id, u16 vsi, enum ice_flow_priority prio,
0396            void *data, u64 *entry_h);
0397 int ice_flow_rem_entry(struct ice_hw *hw, enum ice_block blk, u64 entry_h);
0398 void
0399 ice_flow_set_fld(struct ice_flow_seg_info *seg, enum ice_flow_field fld,
0400          u16 val_loc, u16 mask_loc, u16 last_loc, bool range);
0401 void
0402 ice_flow_add_fld_raw(struct ice_flow_seg_info *seg, u16 off, u8 len,
0403              u16 val_loc, u16 mask_loc);
0404 int ice_flow_rem_vsi_prof(struct ice_hw *hw, u16 vsi_handle, u64 prof_id);
0405 void ice_rem_vsi_rss_list(struct ice_hw *hw, u16 vsi_handle);
0406 int ice_replay_rss_cfg(struct ice_hw *hw, u16 vsi_handle);
0407 int ice_add_avf_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds);
0408 int ice_rem_vsi_rss_cfg(struct ice_hw *hw, u16 vsi_handle);
0409 int
0410 ice_add_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds,
0411         u32 addl_hdrs);
0412 int
0413 ice_rem_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds,
0414         u32 addl_hdrs);
0415 u64 ice_get_rss_cfg(struct ice_hw *hw, u16 vsi_handle, u32 hdrs);
0416 #endif /* _ICE_FLOW_H_ */