18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright (C) 2018-2020, Intel Corporation. */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef _ICE_ARFS_H_ 58c2ecf20Sopenharmony_ci#define _ICE_ARFS_H_ 68c2ecf20Sopenharmony_cienum ice_arfs_fltr_state { 78c2ecf20Sopenharmony_ci ICE_ARFS_INACTIVE, 88c2ecf20Sopenharmony_ci ICE_ARFS_ACTIVE, 98c2ecf20Sopenharmony_ci ICE_ARFS_TODEL, 108c2ecf20Sopenharmony_ci}; 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistruct ice_arfs_entry { 138c2ecf20Sopenharmony_ci struct ice_fdir_fltr fltr_info; 148c2ecf20Sopenharmony_ci struct hlist_node list_entry; 158c2ecf20Sopenharmony_ci u64 time_activated; /* only valid for UDP flows */ 168c2ecf20Sopenharmony_ci u32 flow_id; 178c2ecf20Sopenharmony_ci /* fltr_state = 0 - ICE_ARFS_INACTIVE: 188c2ecf20Sopenharmony_ci * filter needs to be updated or programmed in HW. 198c2ecf20Sopenharmony_ci * fltr_state = 1 - ICE_ARFS_ACTIVE: 208c2ecf20Sopenharmony_ci * filter is active and programmed in HW. 218c2ecf20Sopenharmony_ci * fltr_state = 2 - ICE_ARFS_TODEL: 228c2ecf20Sopenharmony_ci * filter has been deleted from HW and needs to be removed from 238c2ecf20Sopenharmony_ci * the aRFS hash table. 248c2ecf20Sopenharmony_ci */ 258c2ecf20Sopenharmony_ci u8 fltr_state; 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct ice_arfs_entry_ptr { 298c2ecf20Sopenharmony_ci struct ice_arfs_entry *arfs_entry; 308c2ecf20Sopenharmony_ci struct hlist_node list_entry; 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistruct ice_arfs_active_fltr_cntrs { 348c2ecf20Sopenharmony_ci atomic_t active_tcpv4_cnt; 358c2ecf20Sopenharmony_ci atomic_t active_tcpv6_cnt; 368c2ecf20Sopenharmony_ci atomic_t active_udpv4_cnt; 378c2ecf20Sopenharmony_ci atomic_t active_udpv6_cnt; 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#ifdef CONFIG_RFS_ACCEL 418c2ecf20Sopenharmony_ciint 428c2ecf20Sopenharmony_ciice_rx_flow_steer(struct net_device *netdev, const struct sk_buff *skb, 438c2ecf20Sopenharmony_ci u16 rxq_idx, u32 flow_id); 448c2ecf20Sopenharmony_civoid ice_clear_arfs(struct ice_vsi *vsi); 458c2ecf20Sopenharmony_civoid ice_free_cpu_rx_rmap(struct ice_vsi *vsi); 468c2ecf20Sopenharmony_civoid ice_init_arfs(struct ice_vsi *vsi); 478c2ecf20Sopenharmony_civoid ice_sync_arfs_fltrs(struct ice_pf *pf); 488c2ecf20Sopenharmony_ciint ice_set_cpu_rx_rmap(struct ice_vsi *vsi); 498c2ecf20Sopenharmony_civoid ice_remove_arfs(struct ice_pf *pf); 508c2ecf20Sopenharmony_civoid ice_rebuild_arfs(struct ice_pf *pf); 518c2ecf20Sopenharmony_cibool 528c2ecf20Sopenharmony_ciice_is_arfs_using_perfect_flow(struct ice_hw *hw, 538c2ecf20Sopenharmony_ci enum ice_fltr_ptype flow_type); 548c2ecf20Sopenharmony_ci#else 558c2ecf20Sopenharmony_ci#define ice_sync_arfs_fltrs(pf) do {} while (0) 568c2ecf20Sopenharmony_ci#define ice_init_arfs(vsi) do {} while (0) 578c2ecf20Sopenharmony_ci#define ice_clear_arfs(vsi) do {} while (0) 588c2ecf20Sopenharmony_ci#define ice_remove_arfs(pf) do {} while (0) 598c2ecf20Sopenharmony_ci#define ice_free_cpu_rx_rmap(vsi) do {} while (0) 608c2ecf20Sopenharmony_ci#define ice_rebuild_arfs(pf) do {} while (0) 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cistatic inline int ice_set_cpu_rx_rmap(struct ice_vsi __always_unused *vsi) 638c2ecf20Sopenharmony_ci{ 648c2ecf20Sopenharmony_ci return 0; 658c2ecf20Sopenharmony_ci} 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_cistatic inline int 688c2ecf20Sopenharmony_ciice_rx_flow_steer(struct net_device __always_unused *netdev, 698c2ecf20Sopenharmony_ci const struct sk_buff __always_unused *skb, 708c2ecf20Sopenharmony_ci u16 __always_unused rxq_idx, u32 __always_unused flow_id) 718c2ecf20Sopenharmony_ci{ 728c2ecf20Sopenharmony_ci return -EOPNOTSUPP; 738c2ecf20Sopenharmony_ci} 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_cistatic inline bool 768c2ecf20Sopenharmony_ciice_is_arfs_using_perfect_flow(struct ice_hw __always_unused *hw, 778c2ecf20Sopenharmony_ci enum ice_fltr_ptype __always_unused flow_type) 788c2ecf20Sopenharmony_ci{ 798c2ecf20Sopenharmony_ci return false; 808c2ecf20Sopenharmony_ci} 818c2ecf20Sopenharmony_ci#endif /* CONFIG_RFS_ACCEL */ 828c2ecf20Sopenharmony_ci#endif /* _ICE_ARFS_H_ */ 83