1 /*******************************************************************************
3 Intel 82599 Virtual Function driver
4 Copyright(c) 1999 - 2010 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
24 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26 *******************************************************************************/
28 #ifndef __IXGBE_VF_H__
29 #define __IXGBE_VF_H__
31 #include <linux/pci.h>
32 #include <linux/delay.h>
33 #include <linux/interrupt.h>
34 #include <linux/if_ether.h>
35 #include <linux/netdevice.h>
43 /* iterator type for walking multicast address lists */
44 typedef u8* (*ixgbe_mc_addr_itr) (struct ixgbe_hw *hw, u8 **mc_addr_ptr,
46 struct ixgbe_mac_operations {
47 s32 (*init_hw)(struct ixgbe_hw *);
48 s32 (*reset_hw)(struct ixgbe_hw *);
49 s32 (*start_hw)(struct ixgbe_hw *);
50 s32 (*clear_hw_cntrs)(struct ixgbe_hw *);
51 enum ixgbe_media_type (*get_media_type)(struct ixgbe_hw *);
52 u32 (*get_supported_physical_layer)(struct ixgbe_hw *);
53 s32 (*get_mac_addr)(struct ixgbe_hw *, u8 *);
54 s32 (*stop_adapter)(struct ixgbe_hw *);
55 s32 (*get_bus_info)(struct ixgbe_hw *);
58 s32 (*setup_link)(struct ixgbe_hw *, ixgbe_link_speed, bool, bool);
59 s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *, bool);
60 s32 (*get_link_capabilities)(struct ixgbe_hw *, ixgbe_link_speed *,
63 /* RAR, Multicast, VLAN */
64 s32 (*set_rar)(struct ixgbe_hw *, u32, u8 *, u32);
65 s32 (*set_uc_addr)(struct ixgbe_hw *, u32, u8 *);
66 s32 (*init_rx_addrs)(struct ixgbe_hw *);
67 s32 (*update_mc_addr_list)(struct ixgbe_hw *, struct net_device *);
68 s32 (*enable_mc)(struct ixgbe_hw *);
69 s32 (*disable_mc)(struct ixgbe_hw *);
70 s32 (*clear_vfta)(struct ixgbe_hw *);
71 s32 (*set_vfta)(struct ixgbe_hw *, u32, u32, bool);
75 ixgbe_mac_unknown = 0,
81 struct ixgbe_mac_info {
82 struct ixgbe_mac_operations ops;
86 enum ixgbe_mac_type type;
96 struct ixgbe_mbx_operations {
97 s32 (*init_params)(struct ixgbe_hw *hw);
98 s32 (*read)(struct ixgbe_hw *, u32 *, u16);
99 s32 (*write)(struct ixgbe_hw *, u32 *, u16);
100 s32 (*read_posted)(struct ixgbe_hw *, u32 *, u16);
101 s32 (*write_posted)(struct ixgbe_hw *, u32 *, u16);
102 s32 (*check_for_msg)(struct ixgbe_hw *);
103 s32 (*check_for_ack)(struct ixgbe_hw *);
104 s32 (*check_for_rst)(struct ixgbe_hw *);
107 struct ixgbe_mbx_stats {
116 struct ixgbe_mbx_info {
117 struct ixgbe_mbx_operations ops;
118 struct ixgbe_mbx_stats stats;
130 struct ixgbe_mac_info mac;
131 struct ixgbe_mbx_info mbx;
134 u16 subsystem_vendor_id;
135 u16 subsystem_device_id;
139 bool adapter_stopped;
142 struct ixgbevf_hw_stats {
161 u64 saved_reset_vfgprc;
162 u64 saved_reset_vfgptc;
163 u64 saved_reset_vfgorc;
164 u64 saved_reset_vfgotc;
165 u64 saved_reset_vfmprc;
168 struct ixgbevf_info {
169 enum ixgbe_mac_type mac;
170 struct ixgbe_mac_operations *mac_ops;
173 #endif /* __IXGBE_VF_H__ */