169 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright (c) 2018, Intel Corporation. */3 4#ifndef _ICE_SRIOV_H_5#define _ICE_SRIOV_H_6#include "ice_virtchnl_fdir.h"7#include "ice_vf_lib.h"8#include "ice_virtchnl.h"9 10/* Static VF transaction/status register def */11#define VF_DEVICE_STATUS 0xAA12#define VF_TRANS_PENDING_M 0x2013 14/* wait defines for polling PF_PCI_CIAD register status */15#define ICE_PCI_CIAD_WAIT_COUNT 10016#define ICE_PCI_CIAD_WAIT_DELAY_US 117 18/* VF resource constraints */19#define ICE_MIN_QS_PER_VF 120#define ICE_NONQ_VECS_VF 121#define ICE_NUM_VF_MSIX_MED 1722#define ICE_NUM_VF_MSIX_SMALL 523#define ICE_NUM_VF_MSIX_MULTIQ_MIN 324#define ICE_MIN_INTR_PER_VF (ICE_MIN_QS_PER_VF + 1)25#define ICE_MAX_VF_RESET_TRIES 4026#define ICE_MAX_VF_RESET_SLEEP_MS 2027 28#ifdef CONFIG_PCI_IOV29void ice_process_vflr_event(struct ice_pf *pf);30int ice_sriov_configure(struct pci_dev *pdev, int num_vfs);31int __ice_set_vf_mac(struct ice_pf *pf, u16 vf_id, const u8 *mac);32int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac);33int34ice_get_vf_cfg(struct net_device *netdev, int vf_id, struct ifla_vf_info *ivi);35 36void ice_free_vfs(struct ice_pf *pf);37void ice_restore_all_vfs_msi_state(struct ice_pf *pf);38 39int40ice_set_vf_port_vlan(struct net_device *netdev, int vf_id, u16 vlan_id, u8 qos,41 __be16 vlan_proto);42 43int44ice_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,45 int max_tx_rate);46 47int ice_set_vf_trust(struct net_device *netdev, int vf_id, bool trusted);48 49int ice_set_vf_link_state(struct net_device *netdev, int vf_id, int link_state);50 51int ice_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool ena);52 53void ice_calc_vf_reg_idx(struct ice_vf *vf, struct ice_q_vector *q_vector);54 55int56ice_get_vf_stats(struct net_device *netdev, int vf_id,57 struct ifla_vf_stats *vf_stats);58void59ice_vf_lan_overflow_event(struct ice_pf *pf, struct ice_rq_event_info *event);60void ice_print_vfs_mdd_events(struct ice_pf *pf);61void ice_print_vf_rx_mdd_event(struct ice_vf *vf);62void ice_print_vf_tx_mdd_event(struct ice_vf *vf);63bool64ice_vc_validate_pattern(struct ice_vf *vf, struct virtchnl_proto_hdrs *proto);65u32 ice_sriov_get_vf_total_msix(struct pci_dev *pdev);66int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count);67#else /* CONFIG_PCI_IOV */68static inline void ice_process_vflr_event(struct ice_pf *pf) { }69static inline void ice_free_vfs(struct ice_pf *pf) { }70static inline71void ice_vf_lan_overflow_event(struct ice_pf *pf, struct ice_rq_event_info *event) { }72static inline void ice_print_vfs_mdd_events(struct ice_pf *pf) { }73static inline void ice_print_vf_rx_mdd_event(struct ice_vf *vf) { }74static inline void ice_print_vf_tx_mdd_event(struct ice_vf *vf) { }75static inline void ice_restore_all_vfs_msi_state(struct ice_pf *pf) { }76 77static inline int78ice_sriov_configure(struct pci_dev __always_unused *pdev,79 int __always_unused num_vfs)80{81 return -EOPNOTSUPP;82}83 84static inline int85__ice_set_vf_mac(struct ice_pf __always_unused *pf,86 u16 __always_unused vf_id, const u8 __always_unused *mac)87{88 return -EOPNOTSUPP;89}90 91static inline int92ice_set_vf_mac(struct net_device __always_unused *netdev,93 int __always_unused vf_id, u8 __always_unused *mac)94{95 return -EOPNOTSUPP;96}97 98static inline int99ice_get_vf_cfg(struct net_device __always_unused *netdev,100 int __always_unused vf_id,101 struct ifla_vf_info __always_unused *ivi)102{103 return -EOPNOTSUPP;104}105 106static inline int107ice_set_vf_trust(struct net_device __always_unused *netdev,108 int __always_unused vf_id, bool __always_unused trusted)109{110 return -EOPNOTSUPP;111}112 113static inline int114ice_set_vf_port_vlan(struct net_device __always_unused *netdev,115 int __always_unused vf_id, u16 __always_unused vid,116 u8 __always_unused qos, __be16 __always_unused v_proto)117{118 return -EOPNOTSUPP;119}120 121static inline int122ice_set_vf_spoofchk(struct net_device __always_unused *netdev,123 int __always_unused vf_id, bool __always_unused ena)124{125 return -EOPNOTSUPP;126}127 128static inline int129ice_set_vf_link_state(struct net_device __always_unused *netdev,130 int __always_unused vf_id, int __always_unused link_state)131{132 return -EOPNOTSUPP;133}134 135static inline int136ice_set_vf_bw(struct net_device __always_unused *netdev,137 int __always_unused vf_id, int __always_unused min_tx_rate,138 int __always_unused max_tx_rate)139{140 return -EOPNOTSUPP;141}142 143static inline void144ice_calc_vf_reg_idx(struct ice_vf __always_unused *vf,145 struct ice_q_vector __always_unused *q_vector)146{147}148 149static inline int150ice_get_vf_stats(struct net_device __always_unused *netdev,151 int __always_unused vf_id,152 struct ifla_vf_stats __always_unused *vf_stats)153{154 return -EOPNOTSUPP;155}156 157static inline u32 ice_sriov_get_vf_total_msix(struct pci_dev *pdev)158{159 return 0;160}161 162static inline int163ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)164{165 return -EOPNOTSUPP;166}167#endif /* CONFIG_PCI_IOV */168#endif /* _ICE_SRIOV_H_ */169