96 lines
3.1 KiB
C
96 lines
3.1 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/* Copyright (c) 2021, Intel Corporation. */
|
||
|
|
||
|
#ifndef _IAVF_ADV_RSS_H_
|
||
|
#define _IAVF_ADV_RSS_H_
|
||
|
|
||
|
struct iavf_adapter;
|
||
|
|
||
|
/* State of advanced RSS configuration */
|
||
|
enum iavf_adv_rss_state_t {
|
||
|
IAVF_ADV_RSS_ADD_REQUEST, /* User requests to add RSS */
|
||
|
IAVF_ADV_RSS_ADD_PENDING, /* RSS pending add by the PF */
|
||
|
IAVF_ADV_RSS_DEL_REQUEST, /* Driver requests to delete RSS */
|
||
|
IAVF_ADV_RSS_DEL_PENDING, /* RSS pending delete by the PF */
|
||
|
IAVF_ADV_RSS_ACTIVE, /* RSS configuration is active */
|
||
|
};
|
||
|
|
||
|
enum iavf_adv_rss_flow_seg_hdr {
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_NONE = 0x00000000,
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4 = 0x00000001,
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6 = 0x00000002,
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_TCP = 0x00000004,
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_UDP = 0x00000008,
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP = 0x00000010,
|
||
|
};
|
||
|
|
||
|
#define IAVF_ADV_RSS_FLOW_SEG_HDR_L3 \
|
||
|
(IAVF_ADV_RSS_FLOW_SEG_HDR_IPV4 | \
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_IPV6)
|
||
|
|
||
|
#define IAVF_ADV_RSS_FLOW_SEG_HDR_L4 \
|
||
|
(IAVF_ADV_RSS_FLOW_SEG_HDR_TCP | \
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_UDP | \
|
||
|
IAVF_ADV_RSS_FLOW_SEG_HDR_SCTP)
|
||
|
|
||
|
enum iavf_adv_rss_flow_field {
|
||
|
/* L3 */
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA,
|
||
|
/* L4 */
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT,
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT,
|
||
|
|
||
|
/* The total number of enums must not exceed 64 */
|
||
|
IAVF_ADV_RSS_FLOW_FIELD_IDX_MAX
|
||
|
};
|
||
|
|
||
|
#define IAVF_ADV_RSS_HASH_INVALID 0
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_IPV4_SA \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_SA)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_IPV6_SA \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_SA)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_IPV4_DA \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV4_DA)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_IPV6_DA \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_IPV6_DA)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_TCP_SRC_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_SRC_PORT)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_TCP_DST_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_TCP_DST_PORT)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_UDP_SRC_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_SRC_PORT)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_UDP_DST_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_UDP_DST_PORT)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_SCTP_SRC_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_SRC_PORT)
|
||
|
#define IAVF_ADV_RSS_HASH_FLD_SCTP_DST_PORT \
|
||
|
BIT_ULL(IAVF_ADV_RSS_FLOW_FIELD_IDX_SCTP_DST_PORT)
|
||
|
|
||
|
/* bookkeeping of advanced RSS configuration */
|
||
|
struct iavf_adv_rss {
|
||
|
enum iavf_adv_rss_state_t state;
|
||
|
struct list_head list;
|
||
|
|
||
|
u32 packet_hdrs;
|
||
|
u64 hash_flds;
|
||
|
|
||
|
struct virtchnl_rss_cfg cfg_msg;
|
||
|
};
|
||
|
|
||
|
int
|
||
|
iavf_fill_adv_rss_cfg_msg(struct virtchnl_rss_cfg *rss_cfg,
|
||
|
u32 packet_hdrs, u64 hash_flds);
|
||
|
struct iavf_adv_rss *
|
||
|
iavf_find_adv_rss_cfg_by_hdrs(struct iavf_adapter *adapter, u32 packet_hdrs);
|
||
|
void
|
||
|
iavf_print_adv_rss_cfg(struct iavf_adapter *adapter, struct iavf_adv_rss *rss,
|
||
|
const char *action, const char *result);
|
||
|
#endif /* _IAVF_ADV_RSS_H_ */
|