128bf2672SBrett Creeley /* SPDX-License-Identifier: GPL-2.0 */ 228bf2672SBrett Creeley /* Copyright (C) 2018-2020, Intel Corporation. */ 328bf2672SBrett Creeley 428bf2672SBrett Creeley #ifndef _ICE_ARFS_H_ 528bf2672SBrett Creeley #define _ICE_ARFS_H_ 628bf2672SBrett Creeley enum ice_arfs_fltr_state { 728bf2672SBrett Creeley ICE_ARFS_INACTIVE, 828bf2672SBrett Creeley ICE_ARFS_ACTIVE, 928bf2672SBrett Creeley ICE_ARFS_TODEL, 1028bf2672SBrett Creeley }; 1128bf2672SBrett Creeley 1228bf2672SBrett Creeley struct ice_arfs_entry { 1328bf2672SBrett Creeley struct ice_fdir_fltr fltr_info; 1428bf2672SBrett Creeley struct hlist_node list_entry; 1528bf2672SBrett Creeley u64 time_activated; /* only valid for UDP flows */ 1628bf2672SBrett Creeley u32 flow_id; 1728bf2672SBrett Creeley /* fltr_state = 0 - ICE_ARFS_INACTIVE: 1828bf2672SBrett Creeley * filter needs to be updated or programmed in HW. 1928bf2672SBrett Creeley * fltr_state = 1 - ICE_ARFS_ACTIVE: 2028bf2672SBrett Creeley * filter is active and programmed in HW. 2128bf2672SBrett Creeley * fltr_state = 2 - ICE_ARFS_TODEL: 2228bf2672SBrett Creeley * filter has been deleted from HW and needs to be removed from 2328bf2672SBrett Creeley * the aRFS hash table. 2428bf2672SBrett Creeley */ 2528bf2672SBrett Creeley u8 fltr_state; 2628bf2672SBrett Creeley }; 2728bf2672SBrett Creeley 2828bf2672SBrett Creeley struct ice_arfs_entry_ptr { 2928bf2672SBrett Creeley struct ice_arfs_entry *arfs_entry; 3028bf2672SBrett Creeley struct hlist_node list_entry; 3128bf2672SBrett Creeley }; 3228bf2672SBrett Creeley 3328bf2672SBrett Creeley struct ice_arfs_active_fltr_cntrs { 3428bf2672SBrett Creeley atomic_t active_tcpv4_cnt; 3528bf2672SBrett Creeley atomic_t active_tcpv6_cnt; 3628bf2672SBrett Creeley atomic_t active_udpv4_cnt; 3728bf2672SBrett Creeley atomic_t active_udpv6_cnt; 3828bf2672SBrett Creeley }; 3928bf2672SBrett Creeley 4028bf2672SBrett Creeley #ifdef CONFIG_RFS_ACCEL 4128bf2672SBrett Creeley int 4228bf2672SBrett Creeley ice_rx_flow_steer(struct net_device *netdev, const struct sk_buff *skb, 4328bf2672SBrett Creeley u16 rxq_idx, u32 flow_id); 4428bf2672SBrett Creeley void ice_clear_arfs(struct ice_vsi *vsi); 4528bf2672SBrett Creeley void ice_free_cpu_rx_rmap(struct ice_vsi *vsi); 4628bf2672SBrett Creeley void ice_init_arfs(struct ice_vsi *vsi); 4728bf2672SBrett Creeley void ice_sync_arfs_fltrs(struct ice_pf *pf); 4828bf2672SBrett Creeley int ice_set_cpu_rx_rmap(struct ice_vsi *vsi); 4928bf2672SBrett Creeley void ice_remove_arfs(struct ice_pf *pf); 5028bf2672SBrett Creeley void ice_rebuild_arfs(struct ice_pf *pf); 5128bf2672SBrett Creeley bool 5228bf2672SBrett Creeley ice_is_arfs_using_perfect_flow(struct ice_hw *hw, 5328bf2672SBrett Creeley enum ice_fltr_ptype flow_type); 5428bf2672SBrett Creeley #else 5528bf2672SBrett Creeley #define ice_sync_arfs_fltrs(pf) do {} while (0) 5628bf2672SBrett Creeley #define ice_init_arfs(vsi) do {} while (0) 5728bf2672SBrett Creeley #define ice_clear_arfs(vsi) do {} while (0) 5828bf2672SBrett Creeley #define ice_remove_arfs(pf) do {} while (0) 5928bf2672SBrett Creeley #define ice_free_cpu_rx_rmap(vsi) do {} while (0) 6028bf2672SBrett Creeley #define ice_rebuild_arfs(pf) do {} while (0) 6128bf2672SBrett Creeley 6228bf2672SBrett Creeley static inline int ice_set_cpu_rx_rmap(struct ice_vsi __always_unused *vsi) 6328bf2672SBrett Creeley { 6428bf2672SBrett Creeley return 0; 6528bf2672SBrett Creeley } 6628bf2672SBrett Creeley 6728bf2672SBrett Creeley static inline int 6828bf2672SBrett Creeley ice_rx_flow_steer(struct net_device __always_unused *netdev, 6928bf2672SBrett Creeley const struct sk_buff __always_unused *skb, 7028bf2672SBrett Creeley u16 __always_unused rxq_idx, u32 __always_unused flow_id) 7128bf2672SBrett Creeley { 7228bf2672SBrett Creeley return -EOPNOTSUPP; 7328bf2672SBrett Creeley } 7428bf2672SBrett Creeley 7528bf2672SBrett Creeley static inline bool 7628bf2672SBrett Creeley ice_is_arfs_using_perfect_flow(struct ice_hw __always_unused *hw, 7728bf2672SBrett Creeley enum ice_fltr_ptype __always_unused flow_type) 7828bf2672SBrett Creeley { 7928bf2672SBrett Creeley return false; 8028bf2672SBrett Creeley } 8128bf2672SBrett Creeley #endif /* CONFIG_RFS_ACCEL */ 8228bf2672SBrett Creeley #endif /* _ICE_ARFS_H_ */ 83