1
2
3
4
5
6#ifndef _SFC_FLOW_RSS_H
7#define _SFC_FLOW_RSS_H
8
9#include <stdbool.h>
10#include <stdint.h>
11
12#include <rte_flow.h>
13#include <rte_tailq.h>
14
15#include "efx.h"
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21struct 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;
27};
28
29struct sfc_flow_rss_ctx {
30 TAILQ_ENTRY(sfc_flow_rss_ctx) entries;
31
32 unsigned int refcnt;
33 bool dummy;
34
35 unsigned int nic_handle_refcnt;
36 uint32_t nic_handle;
37
38 struct sfc_flow_rss_conf conf;
39
40 uint16_t *qid_offsets;
41};
42
43TAILQ_HEAD(sfc_flow_rss_ctx_list, sfc_flow_rss_ctx);
44
45struct sfc_flow_rss {
46 unsigned int nb_tbl_entries_min;
47 unsigned int nb_tbl_entries_max;
48 unsigned int qid_span_max;
49
50 unsigned int *bounce_tbl;
51
52 struct sfc_flow_rss_ctx_list ctx_list;
53};
54
55struct sfc_adapter;
56
57int sfc_flow_rss_attach(struct sfc_adapter *sa);
58
59void sfc_flow_rss_detach(struct sfc_adapter *sa);
60
61int 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);
65
66struct 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);
69
70int 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);
74
75void sfc_flow_rss_ctx_del(struct sfc_adapter *sa, struct sfc_flow_rss_ctx *ctx);
76
77int sfc_flow_rss_ctx_program(struct sfc_adapter *sa,
78 struct sfc_flow_rss_ctx *ctx);
79
80void sfc_flow_rss_ctx_terminate(struct sfc_adapter *sa,
81 struct sfc_flow_rss_ctx *ctx);
82
83#ifdef __cplusplus
84}
85#endif
86#endif
87