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_MAX
52};
53
54#define IAVF_ADV_RSS_HASH_INVALID 0
55#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
84 struct virtchnl_rss_cfg cfg_msg;
85};
86
87int
88iavf_fill_adv_rss_cfg_msg(struct virtchnl_rss_cfg *rss_cfg,
89 u32 packet_hdrs, u64 hash_flds);
90struct iavf_adv_rss *
91iavf_find_adv_rss_cfg_by_hdrs(struct iavf_adapter *adapter, u32 packet_hdrs);
92void
93iavf_print_adv_rss_cfg(struct iavf_adapter *adapter, struct iavf_adv_rss *rss,
94 const char *action, const char *result);
95#endif /* _IAVF_ADV_RSS_H_ */
96

source code of linux/drivers/net/ethernet/intel/iavf/iavf_adv_rss.h