xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright(c) 1999 - 2018 Intel Corporation. */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef _IXGBE_SRIOV_H_
5*4882a593Smuzhiyun #define _IXGBE_SRIOV_H_
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun /*  ixgbe driver limit the max number of VFs could be enabled to
8*4882a593Smuzhiyun  *  63 (IXGBE_MAX_VF_FUNCTIONS - 1)
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun #define IXGBE_MAX_VFS_DRV_LIMIT  (IXGBE_MAX_VF_FUNCTIONS - 1)
11*4882a593Smuzhiyun #define IXGBE_MAX_VFS_1TC		IXGBE_MAX_VF_FUNCTIONS
12*4882a593Smuzhiyun #define IXGBE_MAX_VFS_4TC		32
13*4882a593Smuzhiyun #define IXGBE_MAX_VFS_8TC		16
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifdef CONFIG_PCI_IOV
16*4882a593Smuzhiyun void ixgbe_restore_vf_multicasts(struct ixgbe_adapter *adapter);
17*4882a593Smuzhiyun #endif
18*4882a593Smuzhiyun void ixgbe_msg_task(struct ixgbe_adapter *adapter);
19*4882a593Smuzhiyun int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask);
20*4882a593Smuzhiyun void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter);
21*4882a593Smuzhiyun void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter);
22*4882a593Smuzhiyun int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int queue, u8 *mac);
23*4882a593Smuzhiyun int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int queue, u16 vlan,
24*4882a593Smuzhiyun 			   u8 qos, __be16 vlan_proto);
25*4882a593Smuzhiyun int ixgbe_link_mbps(struct ixgbe_adapter *adapter);
26*4882a593Smuzhiyun int ixgbe_ndo_set_vf_bw(struct net_device *netdev, int vf, int min_tx_rate,
27*4882a593Smuzhiyun 			int max_tx_rate);
28*4882a593Smuzhiyun int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting);
29*4882a593Smuzhiyun int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf,
30*4882a593Smuzhiyun 				  bool setting);
31*4882a593Smuzhiyun int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting);
32*4882a593Smuzhiyun int ixgbe_ndo_get_vf_config(struct net_device *netdev,
33*4882a593Smuzhiyun 			    int vf, struct ifla_vf_info *ivi);
34*4882a593Smuzhiyun void ixgbe_check_vf_rate_limit(struct ixgbe_adapter *adapter);
35*4882a593Smuzhiyun int ixgbe_disable_sriov(struct ixgbe_adapter *adapter);
36*4882a593Smuzhiyun #ifdef CONFIG_PCI_IOV
37*4882a593Smuzhiyun void ixgbe_enable_sriov(struct ixgbe_adapter *adapter, unsigned int max_vfs);
38*4882a593Smuzhiyun #endif
39*4882a593Smuzhiyun int ixgbe_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
40*4882a593Smuzhiyun 
ixgbe_set_vmvir(struct ixgbe_adapter * adapter,u16 vid,u16 qos,u32 vf)41*4882a593Smuzhiyun static inline void ixgbe_set_vmvir(struct ixgbe_adapter *adapter,
42*4882a593Smuzhiyun 				   u16 vid, u16 qos, u32 vf)
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun 	struct ixgbe_hw *hw = &adapter->hw;
45*4882a593Smuzhiyun 	u32 vmvir = vid | (qos << VLAN_PRIO_SHIFT) | IXGBE_VMVIR_VLANA_DEFAULT;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	IXGBE_WRITE_REG(hw, IXGBE_VMVIR(vf), vmvir);
48*4882a593Smuzhiyun }
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #endif /* _IXGBE_SRIOV_H_ */
51*4882a593Smuzhiyun 
52