xref: /openbmc/linux/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h (revision e33bbe69149b802c0c77bfb822685772f85388ca)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*******************************************************************************
3 
4   Intel 10 Gigabit PCI Express Linux driver
5   Copyright(c) 1999 - 2013 Intel Corporation.
6 
7   This program is free software; you can redistribute it and/or modify it
8   under the terms and conditions of the GNU General Public License,
9   version 2, as published by the Free Software Foundation.
10 
11   This program is distributed in the hope it will be useful, but WITHOUT
12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14   more details.
15 
16   You should have received a copy of the GNU General Public License along with
17   this program; if not, write to the Free Software Foundation, Inc.,
18   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 
20   The full GNU General Public License is included in this distribution in
21   the file called "COPYING".
22 
23   Contact Information:
24   Linux NICS <linux.nics@intel.com>
25   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
26   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 
28 *******************************************************************************/
29 
30 #ifndef _IXGBE_SRIOV_H_
31 #define _IXGBE_SRIOV_H_
32 
33 /*  ixgbe driver limit the max number of VFs could be enabled to
34  *  63 (IXGBE_MAX_VF_FUNCTIONS - 1)
35  */
36 #define IXGBE_MAX_VFS_DRV_LIMIT  (IXGBE_MAX_VF_FUNCTIONS - 1)
37 #define IXGBE_MAX_VFS_1TC		IXGBE_MAX_VF_FUNCTIONS
38 #define IXGBE_MAX_VFS_4TC		32
39 #define IXGBE_MAX_VFS_8TC		16
40 
41 #ifdef CONFIG_PCI_IOV
42 void ixgbe_restore_vf_multicasts(struct ixgbe_adapter *adapter);
43 #endif
44 void ixgbe_msg_task(struct ixgbe_adapter *adapter);
45 int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask);
46 void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter);
47 void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter);
48 int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int queue, u8 *mac);
49 int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int queue, u16 vlan,
50 			   u8 qos, __be16 vlan_proto);
51 int ixgbe_link_mbps(struct ixgbe_adapter *adapter);
52 int ixgbe_ndo_set_vf_bw(struct net_device *netdev, int vf, int min_tx_rate,
53 			int max_tx_rate);
54 int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting);
55 int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf,
56 				  bool setting);
57 int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting);
58 int ixgbe_ndo_get_vf_config(struct net_device *netdev,
59 			    int vf, struct ifla_vf_info *ivi);
60 void ixgbe_check_vf_rate_limit(struct ixgbe_adapter *adapter);
61 int ixgbe_disable_sriov(struct ixgbe_adapter *adapter);
62 #ifdef CONFIG_PCI_IOV
63 void ixgbe_enable_sriov(struct ixgbe_adapter *adapter, unsigned int max_vfs);
64 #endif
65 int ixgbe_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
66 
67 static inline void ixgbe_set_vmvir(struct ixgbe_adapter *adapter,
68 				   u16 vid, u16 qos, u32 vf)
69 {
70 	struct ixgbe_hw *hw = &adapter->hw;
71 	u32 vmvir = vid | (qos << VLAN_PRIO_SHIFT) | IXGBE_VMVIR_VLANA_DEFAULT;
72 
73 	IXGBE_WRITE_REG(hw, IXGBE_VMVIR(vf), vmvir);
74 }
75 
76 #endif /* _IXGBE_SRIOV_H_ */
77 
78