| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* Copyright (C) 2021, Intel Corporation. */ | |
| #ifndef _ICE_VIRTCHNL_FDIR_H_ | |
| #define _ICE_VIRTCHNL_FDIR_H_ | |
| struct ice_vf; | |
| struct ice_pf; | |
| struct ice_vsi; | |
| enum ice_fdir_ctx_stat { | |
| ICE_FDIR_CTX_READY, | |
| ICE_FDIR_CTX_IRQ, | |
| ICE_FDIR_CTX_TIMEOUT, | |
| }; | |
| struct ice_vf_fdir_ctx { | |
| struct timer_list rx_tmr; | |
| enum virtchnl_ops v_opcode; | |
| enum ice_fdir_ctx_stat stat; | |
| union ice_32b_rx_flex_desc rx_desc; | |
| #define ICE_VF_FDIR_CTX_VALID BIT(0) | |
| u32 flags; | |
| void *conf; | |
| }; | |
| /* VF FDIR information structure */ | |
| struct ice_vf_fdir { | |
| u16 fdir_fltr_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX]; | |
| int prof_entry_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX]; | |
| u16 fdir_fltr_cnt_total; | |
| struct ice_fd_hw_prof **fdir_prof; | |
| struct idr fdir_rule_idr; | |
| struct list_head fdir_rule_list; | |
| spinlock_t ctx_lock; /* protects FDIR context info */ | |
| struct ice_vf_fdir_ctx ctx_irq; | |
| struct ice_vf_fdir_ctx ctx_done; | |
| }; | |
| #ifdef CONFIG_PCI_IOV | |
| int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg); | |
| int ice_vc_del_fdir_fltr(struct ice_vf *vf, u8 *msg); | |
| void ice_vf_fdir_init(struct ice_vf *vf); | |
| void ice_vf_fdir_exit(struct ice_vf *vf); | |
| void | |
| ice_vc_fdir_irq_handler(struct ice_vsi *ctrl_vsi, | |
| union ice_32b_rx_flex_desc *rx_desc); | |
| void ice_flush_fdir_ctx(struct ice_pf *pf); | |
| #else | |
| static inline void | |
| ice_vc_fdir_irq_handler(struct ice_vsi *ctrl_vsi, union ice_32b_rx_flex_desc *rx_desc) { } | |
| static inline void ice_flush_fdir_ctx(struct ice_pf *pf) { } | |
| #endif /* CONFIG_PCI_IOV */ | |
| #endif /* _ICE_VIRTCHNL_FDIR_H_ */ |