File Index
Files and directories
Sign in
FILE

iavf_adv_rss.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/intel/iavf/iavf_adv_rss.h 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	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPC		= 0x00000400,
 26	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPC_TEID	= 0x00000800,
 27	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_IP	= 0x00001000,
 28	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_EH	= 0x00002000,
 29	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_DWN	= 0x00004000,
 30	IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_UP	= 0x00008000,
 31};
 32
 33#define IAVF_ADV_RSS_FLOW_SEG_HDR_L3		\
 34	(IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4	|	\
 35	 IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6)
 36
 37#define IAVF_ADV_RSS_FLOW_SEG_HDR_L4		\
 38	(IAVF_ADV_RSS_FLOW_SEG_HDR_TCP |	\
 39	 IAVF_ADV_RSS_FLOW_SEG_HDR_UDP |	\
 40	 IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP)
 41
 42#define IAVF_ADV_RSS_FLOW_SEG_HDR_GTP		\
 43	(IAVF_ADV_RSS_FLOW_SEG_HDR_GTPC |	\
 44	 IAVF_ADV_RSS_FLOW_SEG_HDR_GTPC_TEID |	\
 45	 IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_IP |	\
 46	 IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_EH |	\
 47	 IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_DWN |	\
 48	 IAVF_ADV_RSS_FLOW_SEG_HDR_GTPU_UP)
 49
 50enum iavf_adv_rss_flow_field {
 51	/* L3 */
 52	IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA,
 53	IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA,
 54	IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA,
 55	IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA,
 56	/* L4 */
 57	IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT,
 58	IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT,
 59	IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT,
 60	IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT,
 61	IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT,
 62	IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT,
 63	/* GTPC_TEID */
 64	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPC_TEID,
 65	/* GTPU_IP */
 66	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_IP_TEID,
 67	/* GTPU_EH */
 68	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_EH_TEID,
 69	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_EH_QFI,
 70	/* GTPU_UP */
 71	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_UP_TEID,
 72	/* GTPU_DWN */
 73	IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_DWN_TEID,
 74
 75	/* The total number of enums must not exceed 64 */
 76	IAVF_ADV_RSS_FLOW_FIELD_IDX_MAX
 77};
 78
 79#define IAVF_ADV_RSS_HASH_INVALID	0
 80#define IAVF_ADV_RSS_HASH_FLD_IPV4_SA	\
 81	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA)
 82#define IAVF_ADV_RSS_HASH_FLD_IPV6_SA	\
 83	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA)
 84#define IAVF_ADV_RSS_HASH_FLD_IPV4_DA	\
 85	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA)
 86#define IAVF_ADV_RSS_HASH_FLD_IPV6_DA	\
 87	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA)
 88#define IAVF_ADV_RSS_HASH_FLD_TCP_SRC_PORT	\
 89	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT)
 90#define IAVF_ADV_RSS_HASH_FLD_TCP_DST_PORT	\
 91	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT)
 92#define IAVF_ADV_RSS_HASH_FLD_UDP_SRC_PORT	\
 93	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT)
 94#define IAVF_ADV_RSS_HASH_FLD_UDP_DST_PORT	\
 95	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT)
 96#define IAVF_ADV_RSS_HASH_FLD_SCTP_SRC_PORT	\
 97	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT)
 98#define IAVF_ADV_RSS_HASH_FLD_SCTP_DST_PORT	\
 99	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT)
100#define IAVF_ADV_RSS_HASH_FLD_GTPC_TEID	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPC_TEID)
101#define IAVF_ADV_RSS_HASH_FLD_GTPU_IP_TEID BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_IP_TEID)
102#define IAVF_ADV_RSS_HASH_FLD_GTPU_EH_TEID BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_EH_TEID)
103#define IAVF_ADV_RSS_HASH_FLD_GTPU_UP_TEID BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_UP_TEID)
104#define IAVF_ADV_RSS_HASH_FLD_GTPU_DWN_TEID \
105	BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_GTPU_DWN_TEID)
106
107/* bookkeeping of advanced RSS configuration */
108struct iavf_adv_rss {
109	enum iavf_adv_rss_state_t state;
110	struct list_head list;
111
112	u32 packet_hdrs;
113	u64 hash_flds;
114	bool symm;
115
116	struct virtchnl_rss_cfg cfg_msg;
117};
118
119int
120iavf_fill_adv_rss_cfg_msg(struct virtchnl_rss_cfg *rss_cfg,
121			  u32 packet_hdrs, u64 hash_flds, bool symm);
122struct iavf_adv_rss *
123iavf_find_adv_rss_cfg_by_hdrs(struct iavf_adapter *adapter, u32 packet_hdrs);
124void
125iavf_print_adv_rss_cfg(struct iavf_adapter *adapter, struct iavf_adv_rss *rss,
126		       const char *action, const char *result);
127#endif /* _IAVF_ADV_RSS_H_ */
~/ Read-only file preview.