97 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright (c) 2021, Intel Corporation. */3 4#ifndef _IAVF_ADV_RSS_H_5#define _IAVF_ADV_RSS_H_6 7struct iavf_adapter;8 9/* State of advanced RSS configuration */10enum iavf_adv_rss_state_t {11 IAVF_ADV_RSS_ADD_REQUEST, /* User requests to add RSS */12 IAVF_ADV_RSS_ADD_PENDING, /* RSS pending add by the PF */13 IAVF_ADV_RSS_DEL_REQUEST, /* Driver requests to delete RSS */14 IAVF_ADV_RSS_DEL_PENDING, /* RSS pending delete by the PF */15 IAVF_ADV_RSS_ACTIVE, /* RSS configuration is active */16};17 18enum iavf_adv_rss_flow_seg_hdr {19 IAVF_ADV_RSS_FLOW_SEG_HDR_NONE = 0x00000000,20 IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4 = 0x00000001,21 IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6 = 0x00000002,22 IAVF_ADV_RSS_FLOW_SEG_HDR_TCP = 0x00000004,23 IAVF_ADV_RSS_FLOW_SEG_HDR_UDP = 0x00000008,24 IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP = 0x00000010,25};26 27#define IAVF_ADV_RSS_FLOW_SEG_HDR_L3 \28 (IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4 | \29 IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6)30 31#define IAVF_ADV_RSS_FLOW_SEG_HDR_L4 \32 (IAVF_ADV_RSS_FLOW_SEG_HDR_TCP | \33 IAVF_ADV_RSS_FLOW_SEG_HDR_UDP | \34 IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP)35 36enum iavf_adv_rss_flow_field {37 /* L3 */38 IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA,39 IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA,40 IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA,41 IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA,42 /* L4 */43 IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT,44 IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT,45 IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT,46 IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT,47 IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT,48 IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT,49 50 /* The total number of enums must not exceed 64 */51 IAVF_ADV_RSS_FLOW_FIELD_IDX_MAX52};53 54#define IAVF_ADV_RSS_HASH_INVALID 055#define IAVF_ADV_RSS_HASH_FLD_IPV4_SA \56 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA)57#define IAVF_ADV_RSS_HASH_FLD_IPV6_SA \58 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA)59#define IAVF_ADV_RSS_HASH_FLD_IPV4_DA \60 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA)61#define IAVF_ADV_RSS_HASH_FLD_IPV6_DA \62 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA)63#define IAVF_ADV_RSS_HASH_FLD_TCP_SRC_PORT \64 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT)65#define IAVF_ADV_RSS_HASH_FLD_TCP_DST_PORT \66 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT)67#define IAVF_ADV_RSS_HASH_FLD_UDP_SRC_PORT \68 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT)69#define IAVF_ADV_RSS_HASH_FLD_UDP_DST_PORT \70 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT)71#define IAVF_ADV_RSS_HASH_FLD_SCTP_SRC_PORT \72 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT)73#define IAVF_ADV_RSS_HASH_FLD_SCTP_DST_PORT \74 BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT)75 76/* bookkeeping of advanced RSS configuration */77struct iavf_adv_rss {78 enum iavf_adv_rss_state_t state;79 struct list_head list;80 81 u32 packet_hdrs;82 u64 hash_flds;83 bool symm;84 85 struct virtchnl_rss_cfg cfg_msg;86};87 88int89iavf_fill_adv_rss_cfg_msg(struct virtchnl_rss_cfg *rss_cfg,90 u32 packet_hdrs, u64 hash_flds, bool symm);91struct iavf_adv_rss *92iavf_find_adv_rss_cfg_by_hdrs(struct iavf_adapter *adapter, u32 packet_hdrs);93void94iavf_print_adv_rss_cfg(struct iavf_adapter *adapter, struct iavf_adv_rss *rss,95 const char *action, const char *result);96#endif /* _IAVF_ADV_RSS_H_ */97