xref: /dpdk/drivers/net/sfc/sfc_flow_rss.h (revision 68cde2a3bd106934869205636c4399e0e02fdd38)
16da67e70SIvan Malov /* SPDX-License-Identifier: BSD-3-Clause
26da67e70SIvan Malov  *
36da67e70SIvan Malov  * Copyright(c) 2022 Xilinx, Inc.
46da67e70SIvan Malov  */
56da67e70SIvan Malov 
66da67e70SIvan Malov #ifndef _SFC_FLOW_RSS_H
76da67e70SIvan Malov #define _SFC_FLOW_RSS_H
86da67e70SIvan Malov 
96da67e70SIvan Malov #include <stdbool.h>
106da67e70SIvan Malov #include <stdint.h>
116da67e70SIvan Malov 
126da67e70SIvan Malov #include <rte_flow.h>
136da67e70SIvan Malov #include <rte_tailq.h>
146da67e70SIvan Malov 
156da67e70SIvan Malov #include "efx.h"
166da67e70SIvan Malov 
176da67e70SIvan Malov #ifdef __cplusplus
186da67e70SIvan Malov extern "C" {
196da67e70SIvan Malov #endif
206da67e70SIvan Malov 
216da67e70SIvan Malov struct sfc_flow_rss_conf {
226da67e70SIvan Malov 	uint8_t				key[EFX_RSS_KEY_SIZE];
23*68cde2a3SIvan Malov 	enum rte_eth_hash_function	rte_hash_function;
246da67e70SIvan Malov 	efx_rx_hash_type_t		efx_hash_types;
256da67e70SIvan Malov 	unsigned int			nb_qid_offsets;
266da67e70SIvan Malov 	unsigned int			qid_span;
276da67e70SIvan Malov };
286da67e70SIvan Malov 
296da67e70SIvan Malov struct sfc_flow_rss_ctx {
306da67e70SIvan Malov 	TAILQ_ENTRY(sfc_flow_rss_ctx)	entries;
316da67e70SIvan Malov 
326da67e70SIvan Malov 	unsigned int			refcnt;
336da67e70SIvan Malov 	bool				dummy;
346da67e70SIvan Malov 
356da67e70SIvan Malov 	unsigned int			nic_handle_refcnt;
366da67e70SIvan Malov 	uint32_t			nic_handle;
376da67e70SIvan Malov 
386da67e70SIvan Malov 	struct sfc_flow_rss_conf	conf;
396da67e70SIvan Malov 
406da67e70SIvan Malov 	uint16_t			*qid_offsets;
416da67e70SIvan Malov };
426da67e70SIvan Malov 
436da67e70SIvan Malov TAILQ_HEAD(sfc_flow_rss_ctx_list, sfc_flow_rss_ctx);
446da67e70SIvan Malov 
456da67e70SIvan Malov struct sfc_flow_rss {
46be5cbe47SIvan Malov 	unsigned int			nb_tbl_entries_min;
47be5cbe47SIvan Malov 	unsigned int			nb_tbl_entries_max;
48f6d23053SIvan Malov 	unsigned int			qid_span_max;
49f6d23053SIvan Malov 
50be5cbe47SIvan Malov 	unsigned int			*bounce_tbl; /* MAX */
516da67e70SIvan Malov 
526da67e70SIvan Malov 	struct sfc_flow_rss_ctx_list	ctx_list;
536da67e70SIvan Malov };
546da67e70SIvan Malov 
556da67e70SIvan Malov struct sfc_adapter;
566da67e70SIvan Malov 
576da67e70SIvan Malov int sfc_flow_rss_attach(struct sfc_adapter *sa);
586da67e70SIvan Malov 
596da67e70SIvan Malov void sfc_flow_rss_detach(struct sfc_adapter *sa);
606da67e70SIvan Malov 
616da67e70SIvan Malov int sfc_flow_rss_parse_conf(struct sfc_adapter *sa,
626da67e70SIvan Malov 			    const struct rte_flow_action_rss *in,
636da67e70SIvan Malov 			    struct sfc_flow_rss_conf *out,
646da67e70SIvan Malov 			    uint16_t *sw_qid_minp);
656da67e70SIvan Malov 
666da67e70SIvan Malov struct sfc_flow_rss_ctx *sfc_flow_rss_ctx_reuse(struct sfc_adapter *sa,
676da67e70SIvan Malov 				const struct sfc_flow_rss_conf *conf,
686da67e70SIvan Malov 				uint16_t sw_qid_min, const uint16_t *sw_qids);
696da67e70SIvan Malov 
706da67e70SIvan Malov int sfc_flow_rss_ctx_add(struct sfc_adapter *sa,
716da67e70SIvan Malov 			 const struct sfc_flow_rss_conf *conf,
726da67e70SIvan Malov 			 uint16_t sw_qid_min, const uint16_t *sw_qids,
736da67e70SIvan Malov 			 struct sfc_flow_rss_ctx **ctxp);
746da67e70SIvan Malov 
756da67e70SIvan Malov void sfc_flow_rss_ctx_del(struct sfc_adapter *sa, struct sfc_flow_rss_ctx *ctx);
766da67e70SIvan Malov 
776da67e70SIvan Malov int sfc_flow_rss_ctx_program(struct sfc_adapter *sa,
786da67e70SIvan Malov 			     struct sfc_flow_rss_ctx *ctx);
796da67e70SIvan Malov 
806da67e70SIvan Malov void sfc_flow_rss_ctx_terminate(struct sfc_adapter *sa,
816da67e70SIvan Malov 				struct sfc_flow_rss_ctx *ctx);
826da67e70SIvan Malov 
836da67e70SIvan Malov #ifdef __cplusplus
846da67e70SIvan Malov }
856da67e70SIvan Malov #endif
866da67e70SIvan Malov #endif /* _SFC_FLOW_RSS_H */
87