162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* Copyright (C) 2018-2020, Intel Corporation. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _ICE_ARFS_H_ 562306a36Sopenharmony_ci#define _ICE_ARFS_H_ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include "ice_fdir.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_cienum ice_arfs_fltr_state { 1062306a36Sopenharmony_ci ICE_ARFS_INACTIVE, 1162306a36Sopenharmony_ci ICE_ARFS_ACTIVE, 1262306a36Sopenharmony_ci ICE_ARFS_TODEL, 1362306a36Sopenharmony_ci}; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct ice_arfs_entry { 1662306a36Sopenharmony_ci struct ice_fdir_fltr fltr_info; 1762306a36Sopenharmony_ci struct hlist_node list_entry; 1862306a36Sopenharmony_ci u64 time_activated; /* only valid for UDP flows */ 1962306a36Sopenharmony_ci u32 flow_id; 2062306a36Sopenharmony_ci /* fltr_state = 0 - ICE_ARFS_INACTIVE: 2162306a36Sopenharmony_ci * filter needs to be updated or programmed in HW. 2262306a36Sopenharmony_ci * fltr_state = 1 - ICE_ARFS_ACTIVE: 2362306a36Sopenharmony_ci * filter is active and programmed in HW. 2462306a36Sopenharmony_ci * fltr_state = 2 - ICE_ARFS_TODEL: 2562306a36Sopenharmony_ci * filter has been deleted from HW and needs to be removed from 2662306a36Sopenharmony_ci * the aRFS hash table. 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ci u8 fltr_state; 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct ice_arfs_entry_ptr { 3262306a36Sopenharmony_ci struct ice_arfs_entry *arfs_entry; 3362306a36Sopenharmony_ci struct hlist_node list_entry; 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistruct ice_arfs_active_fltr_cntrs { 3762306a36Sopenharmony_ci atomic_t active_tcpv4_cnt; 3862306a36Sopenharmony_ci atomic_t active_tcpv6_cnt; 3962306a36Sopenharmony_ci atomic_t active_udpv4_cnt; 4062306a36Sopenharmony_ci atomic_t active_udpv6_cnt; 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#ifdef CONFIG_RFS_ACCEL 4462306a36Sopenharmony_ciint 4562306a36Sopenharmony_ciice_rx_flow_steer(struct net_device *netdev, const struct sk_buff *skb, 4662306a36Sopenharmony_ci u16 rxq_idx, u32 flow_id); 4762306a36Sopenharmony_civoid ice_clear_arfs(struct ice_vsi *vsi); 4862306a36Sopenharmony_civoid ice_free_cpu_rx_rmap(struct ice_vsi *vsi); 4962306a36Sopenharmony_civoid ice_init_arfs(struct ice_vsi *vsi); 5062306a36Sopenharmony_civoid ice_sync_arfs_fltrs(struct ice_pf *pf); 5162306a36Sopenharmony_ciint ice_set_cpu_rx_rmap(struct ice_vsi *vsi); 5262306a36Sopenharmony_civoid ice_remove_arfs(struct ice_pf *pf); 5362306a36Sopenharmony_civoid ice_rebuild_arfs(struct ice_pf *pf); 5462306a36Sopenharmony_cibool 5562306a36Sopenharmony_ciice_is_arfs_using_perfect_flow(struct ice_hw *hw, 5662306a36Sopenharmony_ci enum ice_fltr_ptype flow_type); 5762306a36Sopenharmony_ci#else 5862306a36Sopenharmony_cistatic inline void ice_clear_arfs(struct ice_vsi *vsi) { } 5962306a36Sopenharmony_cistatic inline void ice_free_cpu_rx_rmap(struct ice_vsi *vsi) { } 6062306a36Sopenharmony_cistatic inline void ice_init_arfs(struct ice_vsi *vsi) { } 6162306a36Sopenharmony_cistatic inline void ice_sync_arfs_fltrs(struct ice_pf *pf) { } 6262306a36Sopenharmony_cistatic inline void ice_remove_arfs(struct ice_pf *pf) { } 6362306a36Sopenharmony_cistatic inline void ice_rebuild_arfs(struct ice_pf *pf) { } 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistatic inline int ice_set_cpu_rx_rmap(struct ice_vsi __always_unused *vsi) 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci return 0; 6862306a36Sopenharmony_ci} 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cistatic inline int 7162306a36Sopenharmony_ciice_rx_flow_steer(struct net_device __always_unused *netdev, 7262306a36Sopenharmony_ci const struct sk_buff __always_unused *skb, 7362306a36Sopenharmony_ci u16 __always_unused rxq_idx, u32 __always_unused flow_id) 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci return -EOPNOTSUPP; 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistatic inline bool 7962306a36Sopenharmony_ciice_is_arfs_using_perfect_flow(struct ice_hw __always_unused *hw, 8062306a36Sopenharmony_ci enum ice_fltr_ptype __always_unused flow_type) 8162306a36Sopenharmony_ci{ 8262306a36Sopenharmony_ci return false; 8362306a36Sopenharmony_ci} 8462306a36Sopenharmony_ci#endif /* CONFIG_RFS_ACCEL */ 8562306a36Sopenharmony_ci#endif /* _ICE_ARFS_H_ */ 86