1 /* SPDX-License-Identifier: BSD-3-Clause
3 * Copyright(c) 2022 Xilinx, Inc.
6 #ifndef _SFC_FLOW_RSS_H
7 #define _SFC_FLOW_RSS_H
13 #include <rte_tailq.h>
21 struct sfc_flow_rss_conf {
22 uint8_t key[EFX_RSS_KEY_SIZE];
23 enum rte_eth_hash_function rte_hash_function;
24 efx_rx_hash_type_t efx_hash_types;
25 unsigned int nb_qid_offsets;
26 unsigned int qid_span;
29 struct sfc_flow_rss_ctx {
30 TAILQ_ENTRY(sfc_flow_rss_ctx) entries;
35 unsigned int nic_handle_refcnt;
38 struct sfc_flow_rss_conf conf;
40 uint16_t *qid_offsets;
43 TAILQ_HEAD(sfc_flow_rss_ctx_list, sfc_flow_rss_ctx);
46 unsigned int nb_tbl_entries_min;
47 unsigned int nb_tbl_entries_max;
48 unsigned int qid_span_max;
50 unsigned int *bounce_tbl; /* MAX */
52 struct sfc_flow_rss_ctx_list ctx_list;
57 int sfc_flow_rss_attach(struct sfc_adapter *sa);
59 void sfc_flow_rss_detach(struct sfc_adapter *sa);
61 int sfc_flow_rss_parse_conf(struct sfc_adapter *sa,
62 const struct rte_flow_action_rss *in,
63 struct sfc_flow_rss_conf *out,
64 uint16_t *sw_qid_minp);
66 struct sfc_flow_rss_ctx *sfc_flow_rss_ctx_reuse(struct sfc_adapter *sa,
67 const struct sfc_flow_rss_conf *conf,
68 uint16_t sw_qid_min, const uint16_t *sw_qids);
70 int sfc_flow_rss_ctx_add(struct sfc_adapter *sa,
71 const struct sfc_flow_rss_conf *conf,
72 uint16_t sw_qid_min, const uint16_t *sw_qids,
73 struct sfc_flow_rss_ctx **ctxp);
75 void sfc_flow_rss_ctx_del(struct sfc_adapter *sa, struct sfc_flow_rss_ctx *ctx);
77 int sfc_flow_rss_ctx_program(struct sfc_adapter *sa,
78 struct sfc_flow_rss_ctx *ctx);
80 void sfc_flow_rss_ctx_terminate(struct sfc_adapter *sa,
81 struct sfc_flow_rss_ctx *ctx);
86 #endif /* _SFC_FLOW_RSS_H */