0001
0002
0003
0004 #ifndef _IAVF_ADV_RSS_H_
0005 #define _IAVF_ADV_RSS_H_
0006
0007 struct iavf_adapter;
0008
0009
0010 enum iavf_adv_rss_state_t {
0011 IAVF_ADV_RSS_ADD_REQUEST,
0012 IAVF_ADV_RSS_ADD_PENDING,
0013 IAVF_ADV_RSS_DEL_REQUEST,
0014 IAVF_ADV_RSS_DEL_PENDING,
0015 IAVF_ADV_RSS_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
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
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
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
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