19d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok/*******************************************************************************
29d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
39d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  Intel(R) Gigabit Ethernet Linux driver
46e861326b1d78bb439c0724864a6ca83ec23d289Carolyn Wyborny  Copyright(c) 2007-2012 Intel Corporation.
59d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
69d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  This program is free software; you can redistribute it and/or modify it
79d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  under the terms and conditions of the GNU General Public License,
89d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  version 2, as published by the Free Software Foundation.
99d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
109d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  This program is distributed in the hope it will be useful, but WITHOUT
119d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  more details.
149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  You should have received a copy of the GNU General Public License along with
169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  this program; if not, write to the Free Software Foundation, Inc.,
179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
199d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  The full GNU General Public License is included in this distribution in
209d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  the file called "COPYING".
219d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
229d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  Contact Information:
239d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
249d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
259d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
269d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok*******************************************************************************/
279d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
289d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#ifndef _E1000_HW_H_
299d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define _E1000_HW_H_
309d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
319d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include <linux/types.h>
329d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include <linux/delay.h>
339d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include <linux/io.h>
34c041076a9f79a7cf28e808f73cc76f24cbf97093Alexander Duyck#include <linux/netdevice.h>
359d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
369d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include "e1000_regs.h"
379d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include "e1000_defines.h"
389d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
399d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_hw;
409d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
412d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck#define E1000_DEV_ID_82576                    0x10C9
422d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck#define E1000_DEV_ID_82576_FIBER              0x10E6
432d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck#define E1000_DEV_ID_82576_SERDES             0x10E7
44c8ea5ea9da338d6af015148105f07fc35eda8a92Alexander Duyck#define E1000_DEV_ID_82576_QUAD_COPPER        0x10E8
45b894fa2627e28c078740dc7041cd08c7e2c353abCarolyn Wyborny#define E1000_DEV_ID_82576_QUAD_COPPER_ET2    0x1526
469eb2341d0df6e5d33508008879987bf5bb146804Alexander Duyck#define E1000_DEV_ID_82576_NS                 0x150A
47747d49baaf4e3f4ad5ae77477830da026eeef69dAlexander Duyck#define E1000_DEV_ID_82576_NS_SERDES          0x1518
484703bf73bd5b0d43c3eb5b547398d4f62dc5d4e1Alexander Duyck#define E1000_DEV_ID_82576_SERDES_QUAD        0x150D
499d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_DEV_ID_82575EB_COPPER           0x10A7
509d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_DEV_ID_82575EB_FIBER_SERDES     0x10A9
519d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_DEV_ID_82575GB_QUAD_COPPER      0x10D6
52bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_DEV_ID_82580_COPPER             0x150E
53bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_DEV_ID_82580_FIBER              0x150F
54bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_DEV_ID_82580_SERDES             0x1510
55bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_DEV_ID_82580_SGMII              0x1511
56bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_DEV_ID_82580_COPPER_DUAL        0x1516
576493d24f77d8e4fe94913eb504ed9ffebb433402Carolyn Wyborny#define E1000_DEV_ID_82580_QUAD_FIBER         0x1527
581b5dda331ff8646a70d247cace45a60035937a9bGasparakis, Joseph#define E1000_DEV_ID_DH89XXCC_SGMII           0x0438
591b5dda331ff8646a70d247cace45a60035937a9bGasparakis, Joseph#define E1000_DEV_ID_DH89XXCC_SERDES          0x043A
601b5dda331ff8646a70d247cace45a60035937a9bGasparakis, Joseph#define E1000_DEV_ID_DH89XXCC_BACKPLANE       0x043C
611b5dda331ff8646a70d247cace45a60035937a9bGasparakis, Joseph#define E1000_DEV_ID_DH89XXCC_SFP             0x0440
62d2ba2ed8fe3aa796a671a6922119d7171bb49515Alexander Duyck#define E1000_DEV_ID_I350_COPPER              0x1521
63d2ba2ed8fe3aa796a671a6922119d7171bb49515Alexander Duyck#define E1000_DEV_ID_I350_FIBER               0x1522
64d2ba2ed8fe3aa796a671a6922119d7171bb49515Alexander Duyck#define E1000_DEV_ID_I350_SERDES              0x1523
65d2ba2ed8fe3aa796a671a6922119d7171bb49515Alexander Duyck#define E1000_DEV_ID_I350_SGMII               0x1524
669d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
679d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_REVISION_2 2
689d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_REVISION_4 4
699d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
7070d92f86dc162fc24e13cd79fd3481ae39b66f72Alexander Duyck#define E1000_FUNC_0     0
719d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_FUNC_1     1
72bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_FUNC_2     2
73bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_FUNC_3     3
749d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
75bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0   0
7622896639af98ebc721a94ed71fc3acf2fb4a24dcAlexander Duyck#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1   3
77bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2   6
78bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3   9
7922896639af98ebc721a94ed71fc3acf2fb4a24dcAlexander Duyck
809d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_mac_type {
819d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_undefined = 0,
829d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_82575,
832d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck	e1000_82576,
84bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck	e1000_82580,
85d2ba2ed8fe3aa796a671a6922119d7171bb49515Alexander Duyck	e1000_i350,
869d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_num_macs  /* List is 1-based, so subtract 1 for true count. */
879d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
889d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
899d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_media_type {
909d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_media_type_unknown = 0,
919d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_media_type_copper = 1,
92dcc3ae9a5252ea4ffe65b43cdc09ec2654b48000Alexander Duyck	e1000_media_type_internal_serdes = 2,
939d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_num_media_types
949d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
959d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
969d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_nvm_type {
979d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_unknown = 0,
989d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_none,
999d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_eeprom_spi,
1009d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_flash_hw,
1019d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_flash_sw
1029d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1039d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1049d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_nvm_override {
1059d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_override_none = 0,
1069d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_override_spi_small,
1079d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_nvm_override_spi_large,
1089d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1099d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1109d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_phy_type {
1119d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_unknown = 0,
1129d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_none,
1139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_m88,
1149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_igp,
1159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_igp_2,
1169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_gg82563,
1179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_igp_3,
1189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_phy_ife,
1192909c3f79d933b55bf2485addb1dca762210b6afAlexander Duyck	e1000_phy_82580,
1209d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1219d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1229d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_bus_type {
1239d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_type_unknown = 0,
1249d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_type_pci,
1259d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_type_pcix,
1269d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_type_pci_express,
1279d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_type_reserved
1289d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1299d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1309d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_bus_speed {
1319d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_unknown = 0,
1329d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_33,
1339d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_66,
1349d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_100,
1359d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_120,
1369d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_133,
1379d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_2500,
1389d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_5000,
1399d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_speed_reserved
1409d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1419d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1429d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_bus_width {
1439d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_unknown = 0,
1449d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_pcie_x1,
1459d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_pcie_x2,
1469d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_pcie_x4 = 4,
1479d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_pcie_x8 = 8,
1489d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_32,
1499d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_64,
1509d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_bus_width_reserved
1519d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1529d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1539d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_1000t_rx_status {
1549d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_1000t_rx_status_not_ok = 0,
1559d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_1000t_rx_status_ok,
1569d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_1000t_rx_status_undefined = 0xFF
1579d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1589d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1599d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokenum e1000_rev_polarity {
1609d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_rev_polarity_normal = 0,
1619d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_rev_polarity_reversed,
1629d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_rev_polarity_undefined = 0xFF
1639d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1649d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1650cce119aa977dba00467985c0ae93fe43d28740aAlexander Duyckenum e1000_fc_mode {
1669d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_fc_none = 0,
1679d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_fc_rx_pause,
1689d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_fc_tx_pause,
1699d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_fc_full,
1709d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	e1000_fc_default = 0xFF
1719d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
1729d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
1739d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok/* Statistics counters collected by the MAC */
1749d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_hw_stats {
1759d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 crcerrs;
1769d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 algnerrc;
1779d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 symerrs;
1789d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rxerrc;
1799d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mpc;
1809d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 scc;
1819d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ecol;
1829d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mcc;
1839d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 latecol;
1849d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 colc;
1859d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 dc;
1869d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tncrs;
1879d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 sec;
1889d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 cexterr;
1899d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rlec;
1909d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 xonrxc;
1919d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 xontxc;
1929d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 xoffrxc;
1939d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 xofftxc;
1949d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 fcruc;
1959d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc64;
1969d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc127;
1979d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc255;
1989d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc511;
1999d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc1023;
2009d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 prc1522;
2019d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 gprc;
2029d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 bprc;
2039d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mprc;
2049d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 gptc;
2059d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 gorc;
2069d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 gotc;
2079d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rnbc;
2089d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ruc;
2099d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rfc;
2109d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 roc;
2119d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rjc;
2129d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mgprc;
2139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mgpdc;
2149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mgptc;
2159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tor;
2169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tot;
2179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tpr;
2189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tpt;
2199d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc64;
2209d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc127;
2219d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc255;
2229d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc511;
2239d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc1023;
2249d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ptc1522;
2259d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 mptc;
2269d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 bptc;
2279d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tsctc;
2289d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 tsctfc;
2299d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 iac;
2309d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 icrxptc;
2319d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 icrxatc;
2329d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ictxptc;
2339d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ictxatc;
2349d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ictxqec;
2359d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 ictxqmtc;
2369d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 icrxdmtc;
2379d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 icrxoc;
2389d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 cbtmpc;
2399d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 htdpmc;
2409d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 cbrdpc;
2419d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 cbrmpc;
2429d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 rpthc;
2439d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 hgptc;
2449d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 htcbdpc;
2459d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 hgorc;
2469d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 hgotc;
2479d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 lenerrs;
2489d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 scvpc;
2499d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u64 hrmpc;
250dda0e0834c839c0e4b1717cbe9c22c35ca935809Alexander Duyck	u64 doosync;
2510a915b95d67f3bf63121c04aeb4eaebb183feb58Carolyn Wyborny	u64 o2bgptc;
2520a915b95d67f3bf63121c04aeb4eaebb183feb58Carolyn Wyborny	u64 o2bspc;
2530a915b95d67f3bf63121c04aeb4eaebb183feb58Carolyn Wyborny	u64 b2ospc;
2540a915b95d67f3bf63121c04aeb4eaebb183feb58Carolyn Wyborny	u64 b2ogprc;
2559d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2569d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2579d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_phy_stats {
2589d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 idle_errors;
2599d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 receive_errors;
2609d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2619d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2629d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_host_mng_dhcp_cookie {
2639d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 signature;
2649d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  status;
2659d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  reserved0;
2669d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 vlan_id;
2679d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 reserved1;
2689d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 reserved2;
2699d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  reserved3;
2709d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  checksum;
2719d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2729d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2739d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok/* Host Interface "Rev 1" */
2749d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_host_command_header {
2759d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 command_id;
2769d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 command_length;
2779d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 command_options;
2789d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 checksum;
2799d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2809d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2819d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_HI_MAX_DATA_LENGTH     252
2829d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_host_command_info {
2839d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_host_command_header command_header;
2849d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 command_data[E1000_HI_MAX_DATA_LENGTH];
2859d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2869d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2879d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok/* Host Interface "Rev 2" */
2889d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_host_mng_command_header {
2899d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  command_id;
2909d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  checksum;
2919d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 reserved1;
2929d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 reserved2;
2939d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 command_length;
2949d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
2959d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
2969d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8
2979d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_host_mng_command_info {
2989d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_host_mng_command_header command_header;
2999d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH];
3009d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3019d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3029d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include "e1000_mac.h"
3039d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include "e1000_phy.h"
3049d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok#include "e1000_nvm.h"
3054ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck#include "e1000_mbx.h"
3069d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3079d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_mac_operations {
3089d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*check_for_link)(struct e1000_hw *);
3099d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*reset_hw)(struct e1000_hw *);
3109d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*init_hw)(struct e1000_hw *);
3112d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck	bool (*check_mng_mode)(struct e1000_hw *);
3129d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*setup_physical_interface)(struct e1000_hw *);
3139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	void (*rar_set)(struct e1000_hw *, u8 *, u32);
3149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*read_mac_addr)(struct e1000_hw *);
3159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*get_speed_and_duplex)(struct e1000_hw *, u16 *, u16 *);
3169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_phy_operations {
319a8d2a0c27f84bdbf54b7e1c1a52ef7b8b7196dbcAlexander Duyck	s32  (*acquire)(struct e1000_hw *);
320bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck	s32  (*check_polarity)(struct e1000_hw *);
3212d064c06fecadadcb81a452acd373af00dfb1fecAlexander Duyck	s32  (*check_reset_block)(struct e1000_hw *);
3229d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*force_speed_duplex)(struct e1000_hw *);
3239d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*get_cfg_done)(struct e1000_hw *hw);
3249d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*get_cable_length)(struct e1000_hw *);
3259d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*get_phy_info)(struct e1000_hw *);
326a8d2a0c27f84bdbf54b7e1c1a52ef7b8b7196dbcAlexander Duyck	s32  (*read_reg)(struct e1000_hw *, u32, u16 *);
327a8d2a0c27f84bdbf54b7e1c1a52ef7b8b7196dbcAlexander Duyck	void (*release)(struct e1000_hw *);
328a8d2a0c27f84bdbf54b7e1c1a52ef7b8b7196dbcAlexander Duyck	s32  (*reset)(struct e1000_hw *);
3299d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*set_d0_lplu_state)(struct e1000_hw *, bool);
3309d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32  (*set_d3_lplu_state)(struct e1000_hw *, bool);
331a8d2a0c27f84bdbf54b7e1c1a52ef7b8b7196dbcAlexander Duyck	s32  (*write_reg)(struct e1000_hw *, u32, u16);
3329d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3339d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3349d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_nvm_operations {
335312c75aee7606e886d91c810bc491c9f40ff5837Alexander Duyck	s32  (*acquire)(struct e1000_hw *);
336312c75aee7606e886d91c810bc491c9f40ff5837Alexander Duyck	s32  (*read)(struct e1000_hw *, u16, u16, u16 *);
337312c75aee7606e886d91c810bc491c9f40ff5837Alexander Duyck	void (*release)(struct e1000_hw *);
338312c75aee7606e886d91c810bc491c9f40ff5837Alexander Duyck	s32  (*write)(struct e1000_hw *, u16, u16, u16 *);
3394322e561a93ec7ee034b603a6c610e7be90d4e8aCarolyn Wyborny	s32  (*update)(struct e1000_hw *);
3404322e561a93ec7ee034b603a6c610e7be90d4e8aCarolyn Wyborny	s32  (*validate)(struct e1000_hw *);
3419d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3429d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3439d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_info {
3449d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	s32 (*get_invariants)(struct e1000_hw *);
3459d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_mac_operations *mac_ops;
3469d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_phy_operations *phy_ops;
3479d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_nvm_operations *nvm_ops;
3489d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3499d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3509d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokextern const struct e1000_info e1000_82575_info;
3519d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3529d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_mac_info {
3539d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_mac_operations ops;
3549d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3559d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 addr[6];
3569d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 perm_addr[6];
3579d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3589d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_mac_type type;
3599d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3609d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 ledctl_default;
3619d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 ledctl_mode1;
3629d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 ledctl_mode2;
3639d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 mc_filter_type;
3649d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 txcw;
3659d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3669d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 mta_reg_count;
36768d480c4defb69d834e75fd0be9069a8447afe36Alexander Duyck	u16 uta_reg_count;
36828fc06f58b1fe567bb86c7d0e3d93137e5c0126eAlexander Duyck
36928fc06f58b1fe567bb86c7d0e3d93137e5c0126eAlexander Duyck	/* Maximum size of the MTA register table in all supported adapters */
37028fc06f58b1fe567bb86c7d0e3d93137e5c0126eAlexander Duyck	#define MAX_MTA_REG 128
37128fc06f58b1fe567bb86c7d0e3d93137e5c0126eAlexander Duyck	u32 mta_shadow[MAX_MTA_REG];
3729d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 rar_entry_count;
3739d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3749d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  forced_speed_duplex;
3759d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3769d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool adaptive_ifs;
3779d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool arc_subsystem_valid;
3789d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool asf_firmware_present;
3799d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool autoneg;
3809d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool autoneg_failed;
3819d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool disable_hw_init_bits;
3829d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool get_link_status;
3839d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool ifs_params_forced;
3849d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool in_ifs_mode;
3859d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool report_tx_early;
3869d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool serdes_has_link;
3879d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool tx_pkt_filtering;
3889d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
3899d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3909d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_phy_info {
3919d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_phy_operations ops;
3929d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3939d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_phy_type type;
3949d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
3959d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_1000t_rx_status local_rx;
3969d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_1000t_rx_status remote_rx;
3979d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_ms_type ms_type;
3989d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_ms_type original_ms_type;
3999d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_rev_polarity cable_polarity;
4009d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_smart_speed smart_speed;
4019d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4029d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 addr;
4039d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 id;
4049d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 reset_delay_us; /* in usec */
4059d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 revision;
4069d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4079d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_media_type media_type;
4089d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4099d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 autoneg_advertised;
4109d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 autoneg_mask;
4119d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 cable_length;
4129d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 max_cable_length;
4139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 min_cable_length;
4149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 mdix;
4169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool disable_polarity_correction;
4189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool is_mdix;
4199d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool polarity_correction;
4209d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool reset_disable;
4219d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool speed_downgraded;
4229d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool autoneg_wait_to_complete;
4239d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
4249d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4259d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_nvm_info {
4269d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_nvm_operations ops;
4279d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_nvm_type type;
4289d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_nvm_override override;
4299d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4309d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 flash_bank_size;
4319d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 flash_base_addr;
4329d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4339d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 word_size;
4349d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 delay_usec;
4359d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 address_bits;
4369d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 opcode_bits;
4379d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 page_size;
4389d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
4399d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4409d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_bus_info {
4419d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_bus_type type;
4429d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_bus_speed speed;
4439d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	enum e1000_bus_width width;
4449d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4459d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 snoop;
4469d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4479d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 func;
4489d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 pci_cmd_word;
4499d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
4509d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4519d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_fc_info {
4529d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 high_water;     /* Flow control high-water mark */
4539d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u32 low_water;      /* Flow control low-water mark */
4549d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 pause_time;     /* Flow control pause timer */
4559d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool send_xon;      /* Flow control send XON */
4569d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	bool strict_ieee;   /* Strict IEEE mode */
4570cce119aa977dba00467985c0ae93fe43d28740aAlexander Duyck	enum e1000_fc_mode current_mode; /* Type of flow control */
4580cce119aa977dba00467985c0ae93fe43d28740aAlexander Duyck	enum e1000_fc_mode requested_mode;
4599d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
4609d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4614ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyckstruct e1000_mbx_operations {
4624ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*init_params)(struct e1000_hw *hw);
4634ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*read)(struct e1000_hw *, u32 *, u16,  u16);
4644ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*write)(struct e1000_hw *, u32 *, u16, u16);
4654ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*read_posted)(struct e1000_hw *, u32 *, u16,  u16);
4664ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*write_posted)(struct e1000_hw *, u32 *, u16, u16);
4674ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*check_for_msg)(struct e1000_hw *, u16);
4684ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*check_for_ack)(struct e1000_hw *, u16);
4694ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	s32 (*check_for_rst)(struct e1000_hw *, u16);
4704ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck};
4714ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck
4724ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyckstruct e1000_mbx_stats {
4734ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 msgs_tx;
4744ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 msgs_rx;
4754ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck
4764ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 acks;
4774ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 reqs;
4784ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 rsts;
4794ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck};
4804ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck
4814ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyckstruct e1000_mbx_info {
4824ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	struct e1000_mbx_operations ops;
4834ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	struct e1000_mbx_stats stats;
4844ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 timeout;
4854ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u32 usec_delay;
4864ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	u16 size;
4874ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck};
4884ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck
489c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyckstruct e1000_dev_spec_82575 {
490c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck	bool sgmii_active;
491bb2ac47bcfd47ed9431ff1676ec8d79250c941c9Alexander Duyck	bool global_device_reset;
49209b068d45737abb49320ab25cb4ed2916017ace7Carolyn Wyborny	bool eee_disable;
493c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck};
494c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck
4959d5c824399dea881779d78a6c147288bf2dccb6bAuke Kokstruct e1000_hw {
4969d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	void *back;
4979d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
4989d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 __iomem *hw_addr;
4999d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8 __iomem *flash_address;
5009d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	unsigned long io_base;
5019d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
5029d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_mac_info  mac;
5039d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_fc_info   fc;
5049d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_phy_info  phy;
5059d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_nvm_info  nvm;
5069d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_bus_info  bus;
5074ae196dfd61d06b061c069edcdd7c73121e60a21Alexander Duyck	struct e1000_mbx_info mbx;
5089d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	struct e1000_host_mng_dhcp_cookie mng_cookie;
5099d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
510c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck	union {
511c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck		struct e1000_dev_spec_82575	_82575;
512c1889bfe687c22f74d1333913ffe8f8da173d601Alexander Duyck	} dev_spec;
5139d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
5149d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 device_id;
5159d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 subsystem_vendor_id;
5169d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 subsystem_device_id;
5179d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u16 vendor_id;
5189d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
5199d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok	u8  revision_id;
5209d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok};
5219d5c824399dea881779d78a6c147288bf2dccb6bAuke Kok
522c041076a9f79a7cf28e808f73cc76f24cbf97093Alexander Duyckextern struct net_device *igb_get_hw_dev(struct e1000_hw *hw);
523652fff321490fc3fcc8e8d302826a9c2379f03d2Auke Kok#define hw_dbg(format, arg...) \
524c041076a9f79a7cf28e808f73cc76f24cbf97093Alexander Duyck	netdev_dbg(igb_get_hw_dev(hw), format, ##arg)
525c041076a9f79a7cf28e808f73cc76f24cbf97093Alexander Duyck
526009bc06e5311b48c77b7708d9e226ae0f110373aAlexander Duyck/* These functions must be implemented by drivers */
527009bc06e5311b48c77b7708d9e226ae0f110373aAlexander Duycks32  igb_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value);
528009bc06e5311b48c77b7708d9e226ae0f110373aAlexander Duycks32  igb_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value);
529c041076a9f79a7cf28e808f73cc76f24cbf97093Alexander Duyck#endif /* _E1000_HW_H_ */
530