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