1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* Copyright (C) 2021, Intel Corporation. */ |
3 | |
4 | #ifndef _ICE_VIRTCHNL_FDIR_H_ |
5 | #define _ICE_VIRTCHNL_FDIR_H_ |
6 | |
7 | struct ice_vf; |
8 | struct ice_pf; |
9 | struct ice_vsi; |
10 | |
11 | enum ice_fdir_ctx_stat { |
12 | ICE_FDIR_CTX_READY, |
13 | ICE_FDIR_CTX_IRQ, |
14 | ICE_FDIR_CTX_TIMEOUT, |
15 | }; |
16 | |
17 | struct ice_vf_fdir_ctx { |
18 | struct timer_list rx_tmr; |
19 | enum virtchnl_ops v_opcode; |
20 | enum ice_fdir_ctx_stat stat; |
21 | union ice_32b_rx_flex_desc rx_desc; |
22 | #define ICE_VF_FDIR_CTX_VALID BIT(0) |
23 | u32 flags; |
24 | |
25 | void *conf; |
26 | }; |
27 | |
28 | /* VF FDIR information structure */ |
29 | struct ice_vf_fdir { |
30 | u16 fdir_fltr_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX]; |
31 | int prof_entry_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX]; |
32 | struct ice_fd_hw_prof **fdir_prof; |
33 | |
34 | struct idr fdir_rule_idr; |
35 | struct list_head fdir_rule_list; |
36 | |
37 | spinlock_t ctx_lock; /* protects FDIR context info */ |
38 | struct ice_vf_fdir_ctx ctx_irq; |
39 | struct ice_vf_fdir_ctx ctx_done; |
40 | }; |
41 | |
42 | #ifdef CONFIG_PCI_IOV |
43 | int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg); |
44 | int ice_vc_del_fdir_fltr(struct ice_vf *vf, u8 *msg); |
45 | void ice_vf_fdir_init(struct ice_vf *vf); |
46 | void ice_vf_fdir_exit(struct ice_vf *vf); |
47 | void |
48 | ice_vc_fdir_irq_handler(struct ice_vsi *ctrl_vsi, |
49 | union ice_32b_rx_flex_desc *rx_desc); |
50 | void ice_flush_fdir_ctx(struct ice_pf *pf); |
51 | #else |
52 | static inline void |
53 | ice_vc_fdir_irq_handler(struct ice_vsi *ctrl_vsi, union ice_32b_rx_flex_desc *rx_desc) { } |
54 | static inline void ice_flush_fdir_ctx(struct ice_pf *pf) { } |
55 | #endif /* CONFIG_PCI_IOV */ |
56 | #endif /* _ICE_VIRTCHNL_FDIR_H_ */ |
57 | |