net/ionic: support Rx filters
[dpdk.git] / drivers / net / ionic / ionic_rx_filter.h
1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
2  * Copyright(c) 2018-2019 Pensando Systems, Inc. All rights reserved.
3  */
4
5 #ifndef _IONIC_RX_FILTER_H_
6 #define _IONIC_RX_FILTER_H_
7
8 #include <rte_spinlock.h>
9
10 #include "ionic_osdep.h"
11 #include "ionic_if.h"
12
13 #define IONIC_RXQ_INDEX_ANY             (0xFFFF)
14 struct ionic_rx_filter {
15         uint32_t flow_id;
16         uint32_t filter_id;
17         uint16_t rxq_index;
18         struct ionic_rx_filter_add_cmd cmd;
19         LIST_ENTRY(ionic_rx_filter) by_hash;
20         LIST_ENTRY(ionic_rx_filter) by_id;
21 };
22
23 #define IONIC_RX_FILTER_HLISTS  (1 << 10)
24 #define IONIC_RX_FILTER_HLISTS_MASK     (IONIC_RX_FILTER_HLISTS - 1)
25 struct ionic_rx_filters {
26         rte_spinlock_t lock;
27         LIST_HEAD(rx_filters_by_hash, ionic_rx_filter)
28                 by_hash[IONIC_RX_FILTER_HLISTS]; /* by pkt hash */
29         LIST_HEAD(rx_filters_by_id,   ionic_rx_filter)
30                 by_id[IONIC_RX_FILTER_HLISTS];   /* by filter_id */
31 };
32
33 struct ionic_admin_ctx;
34 struct ionic_lif;
35
36 void ionic_rx_filter_free(struct ionic_rx_filter *f);
37 int ionic_rx_filter_del(struct ionic_lif *lif, struct ionic_rx_filter *f);
38 int ionic_rx_filters_init(struct ionic_lif *lif);
39 void ionic_rx_filters_deinit(struct ionic_lif *lif);
40 int ionic_rx_filter_save(struct ionic_lif *lif, uint32_t flow_id,
41         uint16_t rxq_index, struct ionic_admin_ctx *ctx);
42 struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif,
43         uint16_t vid);
44 struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif,
45         const uint8_t *addr);
46
47 #endif /* _IONIC_RX_FILTER_H_ */