1/* SPDX-License-Identifier: GPL-2.0 */ 2/* Copyright (C) 2018-2020, Intel Corporation. */ 3 4#ifndef _ICE_ARFS_H_ 5#define _ICE_ARFS_H_ 6enum ice_arfs_fltr_state { 7 ICE_ARFS_INACTIVE, 8 ICE_ARFS_ACTIVE, 9 ICE_ARFS_TODEL, 10}; 11 12struct ice_arfs_entry { 13 struct ice_fdir_fltr fltr_info; 14 struct hlist_node list_entry; 15 u64 time_activated; /* only valid for UDP flows */ 16 u32 flow_id; 17 /* fltr_state = 0 - ICE_ARFS_INACTIVE: 18 * filter needs to be updated or programmed in HW. 19 * fltr_state = 1 - ICE_ARFS_ACTIVE: 20 * filter is active and programmed in HW. 21 * fltr_state = 2 - ICE_ARFS_TODEL: 22 * filter has been deleted from HW and needs to be removed from 23 * the aRFS hash table. 24 */ 25 u8 fltr_state; 26}; 27 28struct ice_arfs_entry_ptr { 29 struct ice_arfs_entry *arfs_entry; 30 struct hlist_node list_entry; 31}; 32 33struct ice_arfs_active_fltr_cntrs { 34 atomic_t active_tcpv4_cnt; 35 atomic_t active_tcpv6_cnt; 36 atomic_t active_udpv4_cnt; 37 atomic_t active_udpv6_cnt; 38}; 39 40#ifdef CONFIG_RFS_ACCEL 41int 42ice_rx_flow_steer(struct net_device *netdev, const struct sk_buff *skb, 43 u16 rxq_idx, u32 flow_id); 44void ice_clear_arfs(struct ice_vsi *vsi); 45void ice_free_cpu_rx_rmap(struct ice_vsi *vsi); 46void ice_init_arfs(struct ice_vsi *vsi); 47void ice_sync_arfs_fltrs(struct ice_pf *pf); 48int ice_set_cpu_rx_rmap(struct ice_vsi *vsi); 49void ice_remove_arfs(struct ice_pf *pf); 50void ice_rebuild_arfs(struct ice_pf *pf); 51bool 52ice_is_arfs_using_perfect_flow(struct ice_hw *hw, 53 enum ice_fltr_ptype flow_type); 54#else 55#define ice_sync_arfs_fltrs(pf) do {} while (0) 56#define ice_init_arfs(vsi) do {} while (0) 57#define ice_clear_arfs(vsi) do {} while (0) 58#define ice_remove_arfs(pf) do {} while (0) 59#define ice_free_cpu_rx_rmap(vsi) do {} while (0) 60#define ice_rebuild_arfs(pf) do {} while (0) 61 62static inline int ice_set_cpu_rx_rmap(struct ice_vsi __always_unused *vsi) 63{ 64 return 0; 65} 66 67static inline int 68ice_rx_flow_steer(struct net_device __always_unused *netdev, 69 const struct sk_buff __always_unused *skb, 70 u16 __always_unused rxq_idx, u32 __always_unused flow_id) 71{ 72 return -EOPNOTSUPP; 73} 74 75static inline bool 76ice_is_arfs_using_perfect_flow(struct ice_hw __always_unused *hw, 77 enum ice_fltr_ptype __always_unused flow_type) 78{ 79 return false; 80} 81#endif /* CONFIG_RFS_ACCEL */ 82#endif /* _ICE_ARFS_H_ */ 83