Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright (c) 2021, Intel Corporation. */
0003 
0004 #ifndef _IAVF_ADV_RSS_H_
0005 #define _IAVF_ADV_RSS_H_
0006 
0007 struct iavf_adapter;
0008 
0009 /* State of advanced RSS configuration */
0010 enum iavf_adv_rss_state_t {
0011     IAVF_ADV_RSS_ADD_REQUEST,   /* User requests to add RSS */
0012     IAVF_ADV_RSS_ADD_PENDING,   /* RSS pending add by the PF */
0013     IAVF_ADV_RSS_DEL_REQUEST,   /* Driver requests to delete RSS */
0014     IAVF_ADV_RSS_DEL_PENDING,   /* RSS pending delete by the PF */
0015     IAVF_ADV_RSS_ACTIVE,        /* RSS configuration is active */
0016 };
0017 
0018 enum iavf_adv_rss_flow_seg_hdr {
0019     IAVF_ADV_RSS_FLOW_SEG_HDR_NONE  = 0x00000000,
0020     IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4  = 0x00000001,
0021     IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6  = 0x00000002,
0022     IAVF_ADV_RSS_FLOW_SEG_HDR_TCP   = 0x00000004,
0023     IAVF_ADV_RSS_FLOW_SEG_HDR_UDP   = 0x00000008,
0024     IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP  = 0x00000010,
0025 };
0026 
0027 #define IAVF_ADV_RSS_FLOW_SEG_HDR_L3        \
0028     (IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4 |   \
0029      IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6)
0030 
0031 #define IAVF_ADV_RSS_FLOW_SEG_HDR_L4        \
0032     (IAVF_ADV_RSS_FLOW_SEG_HDR_TCP |    \
0033      IAVF_ADV_RSS_FLOW_SEG_HDR_UDP |    \
0034      IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP)
0035 
0036 enum iavf_adv_rss_flow_field {
0037     /* L3 */
0038     IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA,
0039     IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA,
0040     IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA,
0041     IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA,
0042     /* L4 */
0043     IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT,
0044     IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT,
0045     IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT,
0046     IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT,
0047     IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT,
0048     IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT,
0049 
0050     /* The total number of enums must not exceed 64 */
0051     IAVF_ADV_RSS_FLOW_FIELD_IDX_MAX
0052 };
0053 
0054 #define IAVF_ADV_RSS_HASH_INVALID   0
0055 #define IAVF_ADV_RSS_HASH_FLD_IPV4_SA   \
0056     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA)
0057 #define IAVF_ADV_RSS_HASH_FLD_IPV6_SA   \
0058     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA)
0059 #define IAVF_ADV_RSS_HASH_FLD_IPV4_DA   \
0060     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA)
0061 #define IAVF_ADV_RSS_HASH_FLD_IPV6_DA   \
0062     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA)
0063 #define IAVF_ADV_RSS_HASH_FLD_TCP_SRC_PORT  \
0064     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT)
0065 #define IAVF_ADV_RSS_HASH_FLD_TCP_DST_PORT  \
0066     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT)
0067 #define IAVF_ADV_RSS_HASH_FLD_UDP_SRC_PORT  \
0068     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT)
0069 #define IAVF_ADV_RSS_HASH_FLD_UDP_DST_PORT  \
0070     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT)
0071 #define IAVF_ADV_RSS_HASH_FLD_SCTP_SRC_PORT \
0072     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT)
0073 #define IAVF_ADV_RSS_HASH_FLD_SCTP_DST_PORT \
0074     BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT)
0075 
0076 /* bookkeeping of advanced RSS configuration */
0077 struct iavf_adv_rss {
0078     enum iavf_adv_rss_state_t state;
0079     struct list_head list;
0080 
0081     u32 packet_hdrs;
0082     u64 hash_flds;
0083 
0084     struct virtchnl_rss_cfg cfg_msg;
0085 };
0086 
0087 int
0088 iavf_fill_adv_rss_cfg_msg(struct virtchnl_rss_cfg *rss_cfg,
0089               u32 packet_hdrs, u64 hash_flds);
0090 struct iavf_adv_rss *
0091 iavf_find_adv_rss_cfg_by_hdrs(struct iavf_adapter *adapter, u32 packet_hdrs);
0092 void
0093 iavf_print_adv_rss_cfg(struct iavf_adapter *adapter, struct iavf_adv_rss *rss,
0094                const char *action, const char *result);
0095 #endif /* _IAVF_ADV_RSS_H_ */