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