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