Linux Audio

Check our new training course

Loading...
 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	bool symm;
84
85	struct virtchnl_rss_cfg cfg_msg;
86};
87
88int
89iavf_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);
93void
94iavf_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_ */