xref: /dpdk/drivers/net/ionic/ionic_rx_filter.h (revision 484027bf9452e784b2680ac4c2af3bb920ff6521)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2018-2022 Advanced Micro Devices, Inc.
3  */
4 
5 #ifndef _IONIC_RX_FILTER_H_
6 #define _IONIC_RX_FILTER_H_
7 
8 #include <rte_spinlock.h>
9 
10 #include "ionic_if.h"
11 
12 #define IONIC_RXQ_INDEX_ANY		(0xFFFF)
13 struct ionic_rx_filter {
14 	uint32_t flow_id;
15 	uint32_t filter_id;
16 	uint16_t rxq_index;
17 	uint16_t match;
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_filters_init(struct ionic_lif *lif);
38 void ionic_rx_filters_deinit(struct ionic_lif *lif);
39 int ionic_rx_filter_save(struct ionic_lif *lif, uint32_t flow_id,
40 	uint16_t rxq_index, struct ionic_admin_ctx *ctx);
41 struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif,
42 	uint16_t vid);
43 struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif,
44 	const uint8_t *addr);
45 
46 #endif /* _IONIC_RX_FILTER_H_ */
47