1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright(c) 2017 - 2019 Pensando Systems, Inc */ 3 4 #ifndef _IONIC_RX_FILTER_H_ 5 #define _IONIC_RX_FILTER_H_ 6 7 #define IONIC_RXQ_INDEX_ANY (0xFFFF) 8 struct ionic_rx_filter { 9 u32 flow_id; 10 u32 filter_id; 11 u16 rxq_index; 12 struct ionic_rx_filter_add_cmd cmd; 13 struct hlist_node by_hash; 14 struct hlist_node by_id; 15 }; 16 17 #define IONIC_RX_FILTER_HASH_BITS 10 18 #define IONIC_RX_FILTER_HLISTS BIT(IONIC_RX_FILTER_HASH_BITS) 19 #define IONIC_RX_FILTER_HLISTS_MASK (IONIC_RX_FILTER_HLISTS - 1) 20 struct ionic_rx_filters { 21 spinlock_t lock; /* filter list lock */ 22 struct hlist_head by_hash[IONIC_RX_FILTER_HLISTS]; /* by skb hash */ 23 struct hlist_head by_id[IONIC_RX_FILTER_HLISTS]; /* by filter_id */ 24 }; 25 26 void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f); 27 void ionic_rx_filter_replay(struct ionic_lif *lif); 28 int ionic_rx_filters_init(struct ionic_lif *lif); 29 void ionic_rx_filters_deinit(struct ionic_lif *lif); 30 int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index, 31 u32 hash, struct ionic_admin_ctx *ctx); 32 struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif, u16 vid); 33 struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif, const u8 *addr); 34 35 #endif /* _IONIC_RX_FILTER_H_ */ 36