18cfa0ad2SJack F Vogel /****************************************************************************** 28cfa0ad2SJack F Vogel 37c669ab6SSean Bruno Copyright (c) 2001-2015, Intel Corporation 48cfa0ad2SJack F Vogel All rights reserved. 58cfa0ad2SJack F Vogel 68cfa0ad2SJack F Vogel Redistribution and use in source and binary forms, with or without 78cfa0ad2SJack F Vogel modification, are permitted provided that the following conditions are met: 88cfa0ad2SJack F Vogel 98cfa0ad2SJack F Vogel 1. Redistributions of source code must retain the above copyright notice, 108cfa0ad2SJack F Vogel this list of conditions and the following disclaimer. 118cfa0ad2SJack F Vogel 128cfa0ad2SJack F Vogel 2. Redistributions in binary form must reproduce the above copyright 138cfa0ad2SJack F Vogel notice, this list of conditions and the following disclaimer in the 148cfa0ad2SJack F Vogel documentation and/or other materials provided with the distribution. 158cfa0ad2SJack F Vogel 168cfa0ad2SJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its 178cfa0ad2SJack F Vogel contributors may be used to endorse or promote products derived from 188cfa0ad2SJack F Vogel this software without specific prior written permission. 198cfa0ad2SJack F Vogel 208cfa0ad2SJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 218cfa0ad2SJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 228cfa0ad2SJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 238cfa0ad2SJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 248cfa0ad2SJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 258cfa0ad2SJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 268cfa0ad2SJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 278cfa0ad2SJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 288cfa0ad2SJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 298cfa0ad2SJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 308cfa0ad2SJack F Vogel POSSIBILITY OF SUCH DAMAGE. 318cfa0ad2SJack F Vogel 328cfa0ad2SJack F Vogel ******************************************************************************/ 338cfa0ad2SJack F Vogel /*$FreeBSD$*/ 348cfa0ad2SJack F Vogel 358cfa0ad2SJack F Vogel #ifndef _E1000_HW_H_ 368cfa0ad2SJack F Vogel #define _E1000_HW_H_ 378cfa0ad2SJack F Vogel 388cfa0ad2SJack F Vogel #include "e1000_osdep.h" 398cfa0ad2SJack F Vogel #include "e1000_regs.h" 408cfa0ad2SJack F Vogel #include "e1000_defines.h" 418cfa0ad2SJack F Vogel 428cfa0ad2SJack F Vogel struct e1000_hw; 438cfa0ad2SJack F Vogel 448cfa0ad2SJack F Vogel #define E1000_DEV_ID_82542 0x1000 458cfa0ad2SJack F Vogel #define E1000_DEV_ID_82543GC_FIBER 0x1001 468cfa0ad2SJack F Vogel #define E1000_DEV_ID_82543GC_COPPER 0x1004 478cfa0ad2SJack F Vogel #define E1000_DEV_ID_82544EI_COPPER 0x1008 488cfa0ad2SJack F Vogel #define E1000_DEV_ID_82544EI_FIBER 0x1009 498cfa0ad2SJack F Vogel #define E1000_DEV_ID_82544GC_COPPER 0x100C 508cfa0ad2SJack F Vogel #define E1000_DEV_ID_82544GC_LOM 0x100D 518cfa0ad2SJack F Vogel #define E1000_DEV_ID_82540EM 0x100E 528cfa0ad2SJack F Vogel #define E1000_DEV_ID_82540EM_LOM 0x1015 538cfa0ad2SJack F Vogel #define E1000_DEV_ID_82540EP_LOM 0x1016 548cfa0ad2SJack F Vogel #define E1000_DEV_ID_82540EP 0x1017 558cfa0ad2SJack F Vogel #define E1000_DEV_ID_82540EP_LP 0x101E 568cfa0ad2SJack F Vogel #define E1000_DEV_ID_82545EM_COPPER 0x100F 578cfa0ad2SJack F Vogel #define E1000_DEV_ID_82545EM_FIBER 0x1011 588cfa0ad2SJack F Vogel #define E1000_DEV_ID_82545GM_COPPER 0x1026 598cfa0ad2SJack F Vogel #define E1000_DEV_ID_82545GM_FIBER 0x1027 608cfa0ad2SJack F Vogel #define E1000_DEV_ID_82545GM_SERDES 0x1028 618cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546EB_COPPER 0x1010 628cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546EB_FIBER 0x1012 638cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546EB_QUAD_COPPER 0x101D 648cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_COPPER 0x1079 658cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_FIBER 0x107A 668cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_SERDES 0x107B 678cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_PCIE 0x108A 688cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_QUAD_COPPER 0x1099 698cfa0ad2SJack F Vogel #define E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 0x10B5 708cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541EI 0x1013 718cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541EI_MOBILE 0x1018 728cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541ER_LOM 0x1014 738cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541ER 0x1078 748cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541GI 0x1076 758cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541GI_LF 0x107C 768cfa0ad2SJack F Vogel #define E1000_DEV_ID_82541GI_MOBILE 0x1077 778cfa0ad2SJack F Vogel #define E1000_DEV_ID_82547EI 0x1019 788cfa0ad2SJack F Vogel #define E1000_DEV_ID_82547EI_MOBILE 0x101A 798cfa0ad2SJack F Vogel #define E1000_DEV_ID_82547GI 0x1075 808cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_COPPER 0x105E 818cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_FIBER 0x105F 828cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_SERDES 0x1060 838cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9 848cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_SERDES_QUAD 0x10DA 858cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4 868cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571PT_QUAD_COPPER 0x10D5 878cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5 888cfa0ad2SJack F Vogel #define E1000_DEV_ID_82571EB_QUAD_COPPER_LP 0x10BC 898cfa0ad2SJack F Vogel #define E1000_DEV_ID_82572EI_COPPER 0x107D 908cfa0ad2SJack F Vogel #define E1000_DEV_ID_82572EI_FIBER 0x107E 918cfa0ad2SJack F Vogel #define E1000_DEV_ID_82572EI_SERDES 0x107F 928cfa0ad2SJack F Vogel #define E1000_DEV_ID_82572EI 0x10B9 938cfa0ad2SJack F Vogel #define E1000_DEV_ID_82573E 0x108B 948cfa0ad2SJack F Vogel #define E1000_DEV_ID_82573E_IAMT 0x108C 958cfa0ad2SJack F Vogel #define E1000_DEV_ID_82573L 0x109A 968cfa0ad2SJack F Vogel #define E1000_DEV_ID_82574L 0x10D3 97d035aa2dSJack F Vogel #define E1000_DEV_ID_82574LA 0x10F6 989d81738fSJack F Vogel #define E1000_DEV_ID_82583V 0x150C 998cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_COPPER_DPT 0x1096 1008cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT 0x1098 1018cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_COPPER_SPT 0x10BA 1028cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_SERDES_SPT 0x10BB 1034edd8523SJack F Vogel #define E1000_DEV_ID_ICH8_82567V_3 0x1501 1048cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_M_AMT 0x1049 1058cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_AMT 0x104A 1068cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_C 0x104B 1078cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE 0x104C 1088cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE_GT 0x10C4 1098cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE_G 0x10C5 1108cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_M 0x104D 1118cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M 0x10BF 1128cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M_AMT 0x10F5 1138cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M_V 0x10CB 1148cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_AMT 0x10BD 1158cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_BM 0x10E5 1168cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_C 0x294C 1178cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE 0x10C0 1188cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE_GT 0x10C3 1198cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE_G 0x10C2 1208cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_LM 0x10CC 1218cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_LF 0x10CD 1228cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_V 0x10CE 1238cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_D_BM_LM 0x10DE 1248cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_D_BM_LF 0x10DF 1257d9119bdSJack F Vogel #define E1000_DEV_ID_ICH10_D_BM_V 0x1525 1269d81738fSJack F Vogel #define E1000_DEV_ID_PCH_M_HV_LM 0x10EA 1279d81738fSJack F Vogel #define E1000_DEV_ID_PCH_M_HV_LC 0x10EB 1289d81738fSJack F Vogel #define E1000_DEV_ID_PCH_D_HV_DM 0x10EF 1299d81738fSJack F Vogel #define E1000_DEV_ID_PCH_D_HV_DC 0x10F0 1307d9119bdSJack F Vogel #define E1000_DEV_ID_PCH2_LV_LM 0x1502 1317d9119bdSJack F Vogel #define E1000_DEV_ID_PCH2_LV_V 0x1503 1326ab6bfe3SJack F Vogel #define E1000_DEV_ID_PCH_LPT_I217_LM 0x153A 1336ab6bfe3SJack F Vogel #define E1000_DEV_ID_PCH_LPT_I217_V 0x153B 1346ab6bfe3SJack F Vogel #define E1000_DEV_ID_PCH_LPTLP_I218_LM 0x155A 1356ab6bfe3SJack F Vogel #define E1000_DEV_ID_PCH_LPTLP_I218_V 0x1559 1368cc64f1eSJack F Vogel #define E1000_DEV_ID_PCH_I218_LM2 0x15A0 1378cc64f1eSJack F Vogel #define E1000_DEV_ID_PCH_I218_V2 0x15A1 1388cc64f1eSJack F Vogel #define E1000_DEV_ID_PCH_I218_LM3 0x15A2 /* Wildcat Point PCH */ 1398cc64f1eSJack F Vogel #define E1000_DEV_ID_PCH_I218_V3 0x15A3 /* Wildcat Point PCH */ 140*c80429ceSEric Joyner #define E1000_DEV_ID_PCH_SPT_I219_LM 0x156F /* Sunrise Point PCH */ 141*c80429ceSEric Joyner #define E1000_DEV_ID_PCH_SPT_I219_V 0x1570 /* Sunrise Point PCH */ 142*c80429ceSEric Joyner #define E1000_DEV_ID_PCH_SPT_I219_LM2 0x15B7 /* Sunrise Point-H PCH */ 143*c80429ceSEric Joyner #define E1000_DEV_ID_PCH_SPT_I219_V2 0x15B8 /* Sunrise Point-H PCH */ 144*c80429ceSEric Joyner #define E1000_DEV_ID_PCH_LBG_I219_LM3 0x15B9 /* LEWISBURG PCH */ 1458cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576 0x10C9 1468cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_FIBER 0x10E6 1478cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_SERDES 0x10E7 1488cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 1497d9119bdSJack F Vogel #define E1000_DEV_ID_82576_QUAD_COPPER_ET2 0x1526 150d035aa2dSJack F Vogel #define E1000_DEV_ID_82576_NS 0x150A 1514edd8523SJack F Vogel #define E1000_DEV_ID_82576_NS_SERDES 0x1518 1529d81738fSJack F Vogel #define E1000_DEV_ID_82576_SERDES_QUAD 0x150D 153b8270585SJack F Vogel #define E1000_DEV_ID_82576_VF 0x10CA 1546ab6bfe3SJack F Vogel #define E1000_DEV_ID_82576_VF_HV 0x152D 155f0ecc46dSJack F Vogel #define E1000_DEV_ID_I350_VF 0x1520 1566ab6bfe3SJack F Vogel #define E1000_DEV_ID_I350_VF_HV 0x152F 1578cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575EB_COPPER 0x10A7 1588cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 1598cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 1604edd8523SJack F Vogel #define E1000_DEV_ID_82580_COPPER 0x150E 1614edd8523SJack F Vogel #define E1000_DEV_ID_82580_FIBER 0x150F 1624edd8523SJack F Vogel #define E1000_DEV_ID_82580_SERDES 0x1510 1634edd8523SJack F Vogel #define E1000_DEV_ID_82580_SGMII 0x1511 1644edd8523SJack F Vogel #define E1000_DEV_ID_82580_COPPER_DUAL 0x1516 1657d9119bdSJack F Vogel #define E1000_DEV_ID_82580_QUAD_FIBER 0x1527 166f0ecc46dSJack F Vogel #define E1000_DEV_ID_I350_COPPER 0x1521 167f0ecc46dSJack F Vogel #define E1000_DEV_ID_I350_FIBER 0x1522 168f0ecc46dSJack F Vogel #define E1000_DEV_ID_I350_SERDES 0x1523 169f0ecc46dSJack F Vogel #define E1000_DEV_ID_I350_SGMII 0x1524 1704dab5c37SJack F Vogel #define E1000_DEV_ID_I350_DA4 0x1546 171ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_COPPER 0x1533 172ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_COPPER_OEM1 0x1534 173ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_COPPER_IT 0x1535 174ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_FIBER 0x1536 175ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_SERDES 0x1537 176ab5d0362SJack F Vogel #define E1000_DEV_ID_I210_SGMII 0x1538 1777609433eSJack F Vogel #define E1000_DEV_ID_I210_COPPER_FLASHLESS 0x157B 1787609433eSJack F Vogel #define E1000_DEV_ID_I210_SERDES_FLASHLESS 0x157C 179ab5d0362SJack F Vogel #define E1000_DEV_ID_I211_COPPER 0x1539 1807609433eSJack F Vogel #define E1000_DEV_ID_I354_BACKPLANE_1GBPS 0x1F40 1817609433eSJack F Vogel #define E1000_DEV_ID_I354_SGMII 0x1F41 1827609433eSJack F Vogel #define E1000_DEV_ID_I354_BACKPLANE_2_5GBPS 0x1F45 183f0ecc46dSJack F Vogel #define E1000_DEV_ID_DH89XXCC_SGMII 0x0438 184f0ecc46dSJack F Vogel #define E1000_DEV_ID_DH89XXCC_SERDES 0x043A 185f0ecc46dSJack F Vogel #define E1000_DEV_ID_DH89XXCC_BACKPLANE 0x043C 186f0ecc46dSJack F Vogel #define E1000_DEV_ID_DH89XXCC_SFP 0x0440 1876ab6bfe3SJack F Vogel 1888cfa0ad2SJack F Vogel #define E1000_REVISION_0 0 1898cfa0ad2SJack F Vogel #define E1000_REVISION_1 1 1908cfa0ad2SJack F Vogel #define E1000_REVISION_2 2 1918cfa0ad2SJack F Vogel #define E1000_REVISION_3 3 1928cfa0ad2SJack F Vogel #define E1000_REVISION_4 4 1938cfa0ad2SJack F Vogel 1948cfa0ad2SJack F Vogel #define E1000_FUNC_0 0 1958cfa0ad2SJack F Vogel #define E1000_FUNC_1 1 1964edd8523SJack F Vogel #define E1000_FUNC_2 2 1974edd8523SJack F Vogel #define E1000_FUNC_3 3 1988cfa0ad2SJack F Vogel 199d035aa2dSJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0 0 200d035aa2dSJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1 3 2014edd8523SJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2 6 2024edd8523SJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3 9 203d035aa2dSJack F Vogel 2048cfa0ad2SJack F Vogel enum e1000_mac_type { 2058cfa0ad2SJack F Vogel e1000_undefined = 0, 2068cfa0ad2SJack F Vogel e1000_82542, 2078cfa0ad2SJack F Vogel e1000_82543, 2088cfa0ad2SJack F Vogel e1000_82544, 2098cfa0ad2SJack F Vogel e1000_82540, 2108cfa0ad2SJack F Vogel e1000_82545, 2118cfa0ad2SJack F Vogel e1000_82545_rev_3, 2128cfa0ad2SJack F Vogel e1000_82546, 2138cfa0ad2SJack F Vogel e1000_82546_rev_3, 2148cfa0ad2SJack F Vogel e1000_82541, 2158cfa0ad2SJack F Vogel e1000_82541_rev_2, 2168cfa0ad2SJack F Vogel e1000_82547, 2178cfa0ad2SJack F Vogel e1000_82547_rev_2, 2188cfa0ad2SJack F Vogel e1000_82571, 2198cfa0ad2SJack F Vogel e1000_82572, 2208cfa0ad2SJack F Vogel e1000_82573, 2218cfa0ad2SJack F Vogel e1000_82574, 2229d81738fSJack F Vogel e1000_82583, 2238cfa0ad2SJack F Vogel e1000_80003es2lan, 2248cfa0ad2SJack F Vogel e1000_ich8lan, 2258cfa0ad2SJack F Vogel e1000_ich9lan, 2268cfa0ad2SJack F Vogel e1000_ich10lan, 2279d81738fSJack F Vogel e1000_pchlan, 2287d9119bdSJack F Vogel e1000_pch2lan, 2296ab6bfe3SJack F Vogel e1000_pch_lpt, 230*c80429ceSEric Joyner e1000_pch_spt, 2318cfa0ad2SJack F Vogel e1000_82575, 2328cfa0ad2SJack F Vogel e1000_82576, 2334edd8523SJack F Vogel e1000_82580, 234f0ecc46dSJack F Vogel e1000_i350, 2357609433eSJack F Vogel e1000_i354, 236ab5d0362SJack F Vogel e1000_i210, 237ab5d0362SJack F Vogel e1000_i211, 238b8270585SJack F Vogel e1000_vfadapt, 239f0ecc46dSJack F Vogel e1000_vfadapt_i350, 2408cfa0ad2SJack F Vogel e1000_num_macs /* List is 1-based, so subtract 1 for TRUE count. */ 2418cfa0ad2SJack F Vogel }; 2428cfa0ad2SJack F Vogel 2438cfa0ad2SJack F Vogel enum e1000_media_type { 2448cfa0ad2SJack F Vogel e1000_media_type_unknown = 0, 2458cfa0ad2SJack F Vogel e1000_media_type_copper = 1, 2468cfa0ad2SJack F Vogel e1000_media_type_fiber = 2, 2478cfa0ad2SJack F Vogel e1000_media_type_internal_serdes = 3, 2488cfa0ad2SJack F Vogel e1000_num_media_types 2498cfa0ad2SJack F Vogel }; 2508cfa0ad2SJack F Vogel 2518cfa0ad2SJack F Vogel enum e1000_nvm_type { 2528cfa0ad2SJack F Vogel e1000_nvm_unknown = 0, 2538cfa0ad2SJack F Vogel e1000_nvm_none, 2548cfa0ad2SJack F Vogel e1000_nvm_eeprom_spi, 2558cfa0ad2SJack F Vogel e1000_nvm_eeprom_microwire, 2568cfa0ad2SJack F Vogel e1000_nvm_flash_hw, 2577609433eSJack F Vogel e1000_nvm_invm, 2588cfa0ad2SJack F Vogel e1000_nvm_flash_sw 2598cfa0ad2SJack F Vogel }; 2608cfa0ad2SJack F Vogel 2618cfa0ad2SJack F Vogel enum e1000_nvm_override { 2628cfa0ad2SJack F Vogel e1000_nvm_override_none = 0, 2638cfa0ad2SJack F Vogel e1000_nvm_override_spi_small, 2648cfa0ad2SJack F Vogel e1000_nvm_override_spi_large, 2658cfa0ad2SJack F Vogel e1000_nvm_override_microwire_small, 2668cfa0ad2SJack F Vogel e1000_nvm_override_microwire_large 2678cfa0ad2SJack F Vogel }; 2688cfa0ad2SJack F Vogel 2698cfa0ad2SJack F Vogel enum e1000_phy_type { 2708cfa0ad2SJack F Vogel e1000_phy_unknown = 0, 2718cfa0ad2SJack F Vogel e1000_phy_none, 2728cfa0ad2SJack F Vogel e1000_phy_m88, 2738cfa0ad2SJack F Vogel e1000_phy_igp, 2748cfa0ad2SJack F Vogel e1000_phy_igp_2, 2758cfa0ad2SJack F Vogel e1000_phy_gg82563, 2768cfa0ad2SJack F Vogel e1000_phy_igp_3, 2778cfa0ad2SJack F Vogel e1000_phy_ife, 2788cfa0ad2SJack F Vogel e1000_phy_bm, 2799d81738fSJack F Vogel e1000_phy_82578, 2809d81738fSJack F Vogel e1000_phy_82577, 2817d9119bdSJack F Vogel e1000_phy_82579, 2826ab6bfe3SJack F Vogel e1000_phy_i217, 2834edd8523SJack F Vogel e1000_phy_82580, 2848cfa0ad2SJack F Vogel e1000_phy_vf, 285ab5d0362SJack F Vogel e1000_phy_i210, 2868cfa0ad2SJack F Vogel }; 2878cfa0ad2SJack F Vogel 2888cfa0ad2SJack F Vogel enum e1000_bus_type { 2898cfa0ad2SJack F Vogel e1000_bus_type_unknown = 0, 2908cfa0ad2SJack F Vogel e1000_bus_type_pci, 2918cfa0ad2SJack F Vogel e1000_bus_type_pcix, 2928cfa0ad2SJack F Vogel e1000_bus_type_pci_express, 2938cfa0ad2SJack F Vogel e1000_bus_type_reserved 2948cfa0ad2SJack F Vogel }; 2958cfa0ad2SJack F Vogel 2968cfa0ad2SJack F Vogel enum e1000_bus_speed { 2978cfa0ad2SJack F Vogel e1000_bus_speed_unknown = 0, 2988cfa0ad2SJack F Vogel e1000_bus_speed_33, 2998cfa0ad2SJack F Vogel e1000_bus_speed_66, 3008cfa0ad2SJack F Vogel e1000_bus_speed_100, 3018cfa0ad2SJack F Vogel e1000_bus_speed_120, 3028cfa0ad2SJack F Vogel e1000_bus_speed_133, 3038cfa0ad2SJack F Vogel e1000_bus_speed_2500, 3048cfa0ad2SJack F Vogel e1000_bus_speed_5000, 3058cfa0ad2SJack F Vogel e1000_bus_speed_reserved 3068cfa0ad2SJack F Vogel }; 3078cfa0ad2SJack F Vogel 3088cfa0ad2SJack F Vogel enum e1000_bus_width { 3098cfa0ad2SJack F Vogel e1000_bus_width_unknown = 0, 3108cfa0ad2SJack F Vogel e1000_bus_width_pcie_x1, 3118cfa0ad2SJack F Vogel e1000_bus_width_pcie_x2, 3128cfa0ad2SJack F Vogel e1000_bus_width_pcie_x4 = 4, 3138cfa0ad2SJack F Vogel e1000_bus_width_pcie_x8 = 8, 3148cfa0ad2SJack F Vogel e1000_bus_width_32, 3158cfa0ad2SJack F Vogel e1000_bus_width_64, 3168cfa0ad2SJack F Vogel e1000_bus_width_reserved 3178cfa0ad2SJack F Vogel }; 3188cfa0ad2SJack F Vogel 3198cfa0ad2SJack F Vogel enum e1000_1000t_rx_status { 3208cfa0ad2SJack F Vogel e1000_1000t_rx_status_not_ok = 0, 3218cfa0ad2SJack F Vogel e1000_1000t_rx_status_ok, 3228cfa0ad2SJack F Vogel e1000_1000t_rx_status_undefined = 0xFF 3238cfa0ad2SJack F Vogel }; 3248cfa0ad2SJack F Vogel 3258cfa0ad2SJack F Vogel enum e1000_rev_polarity { 3268cfa0ad2SJack F Vogel e1000_rev_polarity_normal = 0, 3278cfa0ad2SJack F Vogel e1000_rev_polarity_reversed, 3288cfa0ad2SJack F Vogel e1000_rev_polarity_undefined = 0xFF 3298cfa0ad2SJack F Vogel }; 3308cfa0ad2SJack F Vogel 331daf9197cSJack F Vogel enum e1000_fc_mode { 3328cfa0ad2SJack F Vogel e1000_fc_none = 0, 3338cfa0ad2SJack F Vogel e1000_fc_rx_pause, 3348cfa0ad2SJack F Vogel e1000_fc_tx_pause, 3358cfa0ad2SJack F Vogel e1000_fc_full, 3368cfa0ad2SJack F Vogel e1000_fc_default = 0xFF 3378cfa0ad2SJack F Vogel }; 3388cfa0ad2SJack F Vogel 3398cfa0ad2SJack F Vogel enum e1000_ffe_config { 3408cfa0ad2SJack F Vogel e1000_ffe_config_enabled = 0, 3418cfa0ad2SJack F Vogel e1000_ffe_config_active, 3428cfa0ad2SJack F Vogel e1000_ffe_config_blocked 3438cfa0ad2SJack F Vogel }; 3448cfa0ad2SJack F Vogel 3458cfa0ad2SJack F Vogel enum e1000_dsp_config { 3468cfa0ad2SJack F Vogel e1000_dsp_config_disabled = 0, 3478cfa0ad2SJack F Vogel e1000_dsp_config_enabled, 3488cfa0ad2SJack F Vogel e1000_dsp_config_activated, 3498cfa0ad2SJack F Vogel e1000_dsp_config_undefined = 0xFF 3508cfa0ad2SJack F Vogel }; 3518cfa0ad2SJack F Vogel 352daf9197cSJack F Vogel enum e1000_ms_type { 353daf9197cSJack F Vogel e1000_ms_hw_default = 0, 354daf9197cSJack F Vogel e1000_ms_force_master, 355daf9197cSJack F Vogel e1000_ms_force_slave, 356daf9197cSJack F Vogel e1000_ms_auto 357daf9197cSJack F Vogel }; 358daf9197cSJack F Vogel 359daf9197cSJack F Vogel enum e1000_smart_speed { 360daf9197cSJack F Vogel e1000_smart_speed_default = 0, 361daf9197cSJack F Vogel e1000_smart_speed_on, 362daf9197cSJack F Vogel e1000_smart_speed_off 363daf9197cSJack F Vogel }; 364daf9197cSJack F Vogel 365d035aa2dSJack F Vogel enum e1000_serdes_link_state { 366d035aa2dSJack F Vogel e1000_serdes_link_down = 0, 367d035aa2dSJack F Vogel e1000_serdes_link_autoneg_progress, 368d035aa2dSJack F Vogel e1000_serdes_link_autoneg_complete, 369d035aa2dSJack F Vogel e1000_serdes_link_forced_up 370d035aa2dSJack F Vogel }; 371d035aa2dSJack F Vogel 3727d9119bdSJack F Vogel #define __le16 u16 3737d9119bdSJack F Vogel #define __le32 u32 3747d9119bdSJack F Vogel #define __le64 u64 3758cfa0ad2SJack F Vogel /* Receive Descriptor */ 3768cfa0ad2SJack F Vogel struct e1000_rx_desc { 377daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's data buffer */ 378daf9197cSJack F Vogel __le16 length; /* Length of data DMAed into data buffer */ 379daf9197cSJack F Vogel __le16 csum; /* Packet checksum */ 3808cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 3818cfa0ad2SJack F Vogel u8 errors; /* Descriptor Errors */ 382daf9197cSJack F Vogel __le16 special; 3838cfa0ad2SJack F Vogel }; 3848cfa0ad2SJack F Vogel 3858cfa0ad2SJack F Vogel /* Receive Descriptor - Extended */ 3868cfa0ad2SJack F Vogel union e1000_rx_desc_extended { 3878cfa0ad2SJack F Vogel struct { 388daf9197cSJack F Vogel __le64 buffer_addr; 389daf9197cSJack F Vogel __le64 reserved; 3908cfa0ad2SJack F Vogel } read; 3918cfa0ad2SJack F Vogel struct { 3928cfa0ad2SJack F Vogel struct { 393daf9197cSJack F Vogel __le32 mrq; /* Multiple Rx Queues */ 3948cfa0ad2SJack F Vogel union { 395daf9197cSJack F Vogel __le32 rss; /* RSS Hash */ 3968cfa0ad2SJack F Vogel struct { 397daf9197cSJack F Vogel __le16 ip_id; /* IP id */ 398daf9197cSJack F Vogel __le16 csum; /* Packet Checksum */ 3998cfa0ad2SJack F Vogel } csum_ip; 4008cfa0ad2SJack F Vogel } hi_dword; 4018cfa0ad2SJack F Vogel } lower; 4028cfa0ad2SJack F Vogel struct { 403daf9197cSJack F Vogel __le32 status_error; /* ext status/error */ 404daf9197cSJack F Vogel __le16 length; 405daf9197cSJack F Vogel __le16 vlan; /* VLAN tag */ 4068cfa0ad2SJack F Vogel } upper; 4078cfa0ad2SJack F Vogel } wb; /* writeback */ 4088cfa0ad2SJack F Vogel }; 4098cfa0ad2SJack F Vogel 4108cfa0ad2SJack F Vogel #define MAX_PS_BUFFERS 4 4117609433eSJack F Vogel 4127609433eSJack F Vogel /* Number of packet split data buffers (not including the header buffer) */ 4137609433eSJack F Vogel #define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1) 4147609433eSJack F Vogel 4158cfa0ad2SJack F Vogel /* Receive Descriptor - Packet Split */ 4168cfa0ad2SJack F Vogel union e1000_rx_desc_packet_split { 4178cfa0ad2SJack F Vogel struct { 4188cfa0ad2SJack F Vogel /* one buffer for protocol header(s), three data buffers */ 419daf9197cSJack F Vogel __le64 buffer_addr[MAX_PS_BUFFERS]; 4208cfa0ad2SJack F Vogel } read; 4218cfa0ad2SJack F Vogel struct { 4228cfa0ad2SJack F Vogel struct { 423daf9197cSJack F Vogel __le32 mrq; /* Multiple Rx Queues */ 4248cfa0ad2SJack F Vogel union { 425daf9197cSJack F Vogel __le32 rss; /* RSS Hash */ 4268cfa0ad2SJack F Vogel struct { 427daf9197cSJack F Vogel __le16 ip_id; /* IP id */ 428daf9197cSJack F Vogel __le16 csum; /* Packet Checksum */ 4298cfa0ad2SJack F Vogel } csum_ip; 4308cfa0ad2SJack F Vogel } hi_dword; 4318cfa0ad2SJack F Vogel } lower; 4328cfa0ad2SJack F Vogel struct { 433daf9197cSJack F Vogel __le32 status_error; /* ext status/error */ 434daf9197cSJack F Vogel __le16 length0; /* length of buffer 0 */ 435daf9197cSJack F Vogel __le16 vlan; /* VLAN tag */ 4368cfa0ad2SJack F Vogel } middle; 4378cfa0ad2SJack F Vogel struct { 438daf9197cSJack F Vogel __le16 header_status; 4397609433eSJack F Vogel /* length of buffers 1-3 */ 4407609433eSJack F Vogel __le16 length[PS_PAGE_BUFFERS]; 4418cfa0ad2SJack F Vogel } upper; 442daf9197cSJack F Vogel __le64 reserved; 4438cfa0ad2SJack F Vogel } wb; /* writeback */ 4448cfa0ad2SJack F Vogel }; 4458cfa0ad2SJack F Vogel 4468cfa0ad2SJack F Vogel /* Transmit Descriptor */ 4478cfa0ad2SJack F Vogel struct e1000_tx_desc { 448daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's data buffer */ 4498cfa0ad2SJack F Vogel union { 450daf9197cSJack F Vogel __le32 data; 4518cfa0ad2SJack F Vogel struct { 452daf9197cSJack F Vogel __le16 length; /* Data buffer length */ 4538cfa0ad2SJack F Vogel u8 cso; /* Checksum offset */ 4548cfa0ad2SJack F Vogel u8 cmd; /* Descriptor control */ 4558cfa0ad2SJack F Vogel } flags; 4568cfa0ad2SJack F Vogel } lower; 4578cfa0ad2SJack F Vogel union { 458daf9197cSJack F Vogel __le32 data; 4598cfa0ad2SJack F Vogel struct { 4608cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 4618cfa0ad2SJack F Vogel u8 css; /* Checksum start */ 462daf9197cSJack F Vogel __le16 special; 4638cfa0ad2SJack F Vogel } fields; 4648cfa0ad2SJack F Vogel } upper; 4658cfa0ad2SJack F Vogel }; 4668cfa0ad2SJack F Vogel 4678cfa0ad2SJack F Vogel /* Offload Context Descriptor */ 4688cfa0ad2SJack F Vogel struct e1000_context_desc { 4698cfa0ad2SJack F Vogel union { 470daf9197cSJack F Vogel __le32 ip_config; 4718cfa0ad2SJack F Vogel struct { 4728cfa0ad2SJack F Vogel u8 ipcss; /* IP checksum start */ 4738cfa0ad2SJack F Vogel u8 ipcso; /* IP checksum offset */ 474daf9197cSJack F Vogel __le16 ipcse; /* IP checksum end */ 4758cfa0ad2SJack F Vogel } ip_fields; 4768cfa0ad2SJack F Vogel } lower_setup; 4778cfa0ad2SJack F Vogel union { 478daf9197cSJack F Vogel __le32 tcp_config; 4798cfa0ad2SJack F Vogel struct { 4808cfa0ad2SJack F Vogel u8 tucss; /* TCP checksum start */ 4818cfa0ad2SJack F Vogel u8 tucso; /* TCP checksum offset */ 482daf9197cSJack F Vogel __le16 tucse; /* TCP checksum end */ 4838cfa0ad2SJack F Vogel } tcp_fields; 4848cfa0ad2SJack F Vogel } upper_setup; 485daf9197cSJack F Vogel __le32 cmd_and_length; 4868cfa0ad2SJack F Vogel union { 487daf9197cSJack F Vogel __le32 data; 4888cfa0ad2SJack F Vogel struct { 4898cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 4908cfa0ad2SJack F Vogel u8 hdr_len; /* Header length */ 491daf9197cSJack F Vogel __le16 mss; /* Maximum segment size */ 4928cfa0ad2SJack F Vogel } fields; 4938cfa0ad2SJack F Vogel } tcp_seg_setup; 4948cfa0ad2SJack F Vogel }; 4958cfa0ad2SJack F Vogel 4968cfa0ad2SJack F Vogel /* Offload data descriptor */ 4978cfa0ad2SJack F Vogel struct e1000_data_desc { 498daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's buffer address */ 4998cfa0ad2SJack F Vogel union { 500daf9197cSJack F Vogel __le32 data; 5018cfa0ad2SJack F Vogel struct { 502daf9197cSJack F Vogel __le16 length; /* Data buffer length */ 5038cfa0ad2SJack F Vogel u8 typ_len_ext; 5048cfa0ad2SJack F Vogel u8 cmd; 5058cfa0ad2SJack F Vogel } flags; 5068cfa0ad2SJack F Vogel } lower; 5078cfa0ad2SJack F Vogel union { 508daf9197cSJack F Vogel __le32 data; 5098cfa0ad2SJack F Vogel struct { 5108cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 5118cfa0ad2SJack F Vogel u8 popts; /* Packet Options */ 512daf9197cSJack F Vogel __le16 special; 5138cfa0ad2SJack F Vogel } fields; 5148cfa0ad2SJack F Vogel } upper; 5158cfa0ad2SJack F Vogel }; 5168cfa0ad2SJack F Vogel 5178cfa0ad2SJack F Vogel /* Statistics counters collected by the MAC */ 5188cfa0ad2SJack F Vogel struct e1000_hw_stats { 5198cfa0ad2SJack F Vogel u64 crcerrs; 5208cfa0ad2SJack F Vogel u64 algnerrc; 5218cfa0ad2SJack F Vogel u64 symerrs; 5228cfa0ad2SJack F Vogel u64 rxerrc; 5238cfa0ad2SJack F Vogel u64 mpc; 5248cfa0ad2SJack F Vogel u64 scc; 5258cfa0ad2SJack F Vogel u64 ecol; 5268cfa0ad2SJack F Vogel u64 mcc; 5278cfa0ad2SJack F Vogel u64 latecol; 5288cfa0ad2SJack F Vogel u64 colc; 5298cfa0ad2SJack F Vogel u64 dc; 5308cfa0ad2SJack F Vogel u64 tncrs; 5318cfa0ad2SJack F Vogel u64 sec; 5328cfa0ad2SJack F Vogel u64 cexterr; 5338cfa0ad2SJack F Vogel u64 rlec; 5348cfa0ad2SJack F Vogel u64 xonrxc; 5358cfa0ad2SJack F Vogel u64 xontxc; 5368cfa0ad2SJack F Vogel u64 xoffrxc; 5378cfa0ad2SJack F Vogel u64 xofftxc; 5388cfa0ad2SJack F Vogel u64 fcruc; 5398cfa0ad2SJack F Vogel u64 prc64; 5408cfa0ad2SJack F Vogel u64 prc127; 5418cfa0ad2SJack F Vogel u64 prc255; 5428cfa0ad2SJack F Vogel u64 prc511; 5438cfa0ad2SJack F Vogel u64 prc1023; 5448cfa0ad2SJack F Vogel u64 prc1522; 5458cfa0ad2SJack F Vogel u64 gprc; 5468cfa0ad2SJack F Vogel u64 bprc; 5478cfa0ad2SJack F Vogel u64 mprc; 5488cfa0ad2SJack F Vogel u64 gptc; 5498cfa0ad2SJack F Vogel u64 gorc; 5508cfa0ad2SJack F Vogel u64 gotc; 5518cfa0ad2SJack F Vogel u64 rnbc; 5528cfa0ad2SJack F Vogel u64 ruc; 5538cfa0ad2SJack F Vogel u64 rfc; 5548cfa0ad2SJack F Vogel u64 roc; 5558cfa0ad2SJack F Vogel u64 rjc; 5568cfa0ad2SJack F Vogel u64 mgprc; 5578cfa0ad2SJack F Vogel u64 mgpdc; 5588cfa0ad2SJack F Vogel u64 mgptc; 5598cfa0ad2SJack F Vogel u64 tor; 5608cfa0ad2SJack F Vogel u64 tot; 5618cfa0ad2SJack F Vogel u64 tpr; 5628cfa0ad2SJack F Vogel u64 tpt; 5638cfa0ad2SJack F Vogel u64 ptc64; 5648cfa0ad2SJack F Vogel u64 ptc127; 5658cfa0ad2SJack F Vogel u64 ptc255; 5668cfa0ad2SJack F Vogel u64 ptc511; 5678cfa0ad2SJack F Vogel u64 ptc1023; 5688cfa0ad2SJack F Vogel u64 ptc1522; 5698cfa0ad2SJack F Vogel u64 mptc; 5708cfa0ad2SJack F Vogel u64 bptc; 5718cfa0ad2SJack F Vogel u64 tsctc; 5728cfa0ad2SJack F Vogel u64 tsctfc; 5738cfa0ad2SJack F Vogel u64 iac; 5748cfa0ad2SJack F Vogel u64 icrxptc; 5758cfa0ad2SJack F Vogel u64 icrxatc; 5768cfa0ad2SJack F Vogel u64 ictxptc; 5778cfa0ad2SJack F Vogel u64 ictxatc; 5788cfa0ad2SJack F Vogel u64 ictxqec; 5798cfa0ad2SJack F Vogel u64 ictxqmtc; 5808cfa0ad2SJack F Vogel u64 icrxdmtc; 5818cfa0ad2SJack F Vogel u64 icrxoc; 5828cfa0ad2SJack F Vogel u64 cbtmpc; 5838cfa0ad2SJack F Vogel u64 htdpmc; 5848cfa0ad2SJack F Vogel u64 cbrdpc; 5858cfa0ad2SJack F Vogel u64 cbrmpc; 5868cfa0ad2SJack F Vogel u64 rpthc; 5878cfa0ad2SJack F Vogel u64 hgptc; 5888cfa0ad2SJack F Vogel u64 htcbdpc; 5898cfa0ad2SJack F Vogel u64 hgorc; 5908cfa0ad2SJack F Vogel u64 hgotc; 5918cfa0ad2SJack F Vogel u64 lenerrs; 5928cfa0ad2SJack F Vogel u64 scvpc; 5938cfa0ad2SJack F Vogel u64 hrmpc; 594daf9197cSJack F Vogel u64 doosync; 5954dab5c37SJack F Vogel u64 o2bgptc; 5964dab5c37SJack F Vogel u64 o2bspc; 5974dab5c37SJack F Vogel u64 b2ospc; 5984dab5c37SJack F Vogel u64 b2ogprc; 599daf9197cSJack F Vogel }; 600daf9197cSJack F Vogel 601b8270585SJack F Vogel struct e1000_vf_stats { 602b8270585SJack F Vogel u64 base_gprc; 603b8270585SJack F Vogel u64 base_gptc; 604b8270585SJack F Vogel u64 base_gorc; 605b8270585SJack F Vogel u64 base_gotc; 606b8270585SJack F Vogel u64 base_mprc; 607b8270585SJack F Vogel u64 base_gotlbc; 608b8270585SJack F Vogel u64 base_gptlbc; 609b8270585SJack F Vogel u64 base_gorlbc; 610b8270585SJack F Vogel u64 base_gprlbc; 611b8270585SJack F Vogel 612b8270585SJack F Vogel u32 last_gprc; 613b8270585SJack F Vogel u32 last_gptc; 614b8270585SJack F Vogel u32 last_gorc; 615b8270585SJack F Vogel u32 last_gotc; 616b8270585SJack F Vogel u32 last_mprc; 617b8270585SJack F Vogel u32 last_gotlbc; 618b8270585SJack F Vogel u32 last_gptlbc; 619b8270585SJack F Vogel u32 last_gorlbc; 620b8270585SJack F Vogel u32 last_gprlbc; 621b8270585SJack F Vogel 622b8270585SJack F Vogel u64 gprc; 623b8270585SJack F Vogel u64 gptc; 624b8270585SJack F Vogel u64 gorc; 625b8270585SJack F Vogel u64 gotc; 626b8270585SJack F Vogel u64 mprc; 627b8270585SJack F Vogel u64 gotlbc; 628b8270585SJack F Vogel u64 gptlbc; 629b8270585SJack F Vogel u64 gorlbc; 630b8270585SJack F Vogel u64 gprlbc; 631b8270585SJack F Vogel }; 6328cfa0ad2SJack F Vogel 6338cfa0ad2SJack F Vogel struct e1000_phy_stats { 6348cfa0ad2SJack F Vogel u32 idle_errors; 6358cfa0ad2SJack F Vogel u32 receive_errors; 6368cfa0ad2SJack F Vogel }; 6378cfa0ad2SJack F Vogel 6388cfa0ad2SJack F Vogel struct e1000_host_mng_dhcp_cookie { 6398cfa0ad2SJack F Vogel u32 signature; 6408cfa0ad2SJack F Vogel u8 status; 6418cfa0ad2SJack F Vogel u8 reserved0; 6428cfa0ad2SJack F Vogel u16 vlan_id; 6438cfa0ad2SJack F Vogel u32 reserved1; 6448cfa0ad2SJack F Vogel u16 reserved2; 6458cfa0ad2SJack F Vogel u8 reserved3; 6468cfa0ad2SJack F Vogel u8 checksum; 6478cfa0ad2SJack F Vogel }; 6488cfa0ad2SJack F Vogel 6498cfa0ad2SJack F Vogel /* Host Interface "Rev 1" */ 6508cfa0ad2SJack F Vogel struct e1000_host_command_header { 6518cfa0ad2SJack F Vogel u8 command_id; 6528cfa0ad2SJack F Vogel u8 command_length; 6538cfa0ad2SJack F Vogel u8 command_options; 6548cfa0ad2SJack F Vogel u8 checksum; 6558cfa0ad2SJack F Vogel }; 6568cfa0ad2SJack F Vogel 6578cfa0ad2SJack F Vogel #define E1000_HI_MAX_DATA_LENGTH 252 6588cfa0ad2SJack F Vogel struct e1000_host_command_info { 6598cfa0ad2SJack F Vogel struct e1000_host_command_header command_header; 6608cfa0ad2SJack F Vogel u8 command_data[E1000_HI_MAX_DATA_LENGTH]; 6618cfa0ad2SJack F Vogel }; 6628cfa0ad2SJack F Vogel 6638cfa0ad2SJack F Vogel /* Host Interface "Rev 2" */ 6648cfa0ad2SJack F Vogel struct e1000_host_mng_command_header { 6658cfa0ad2SJack F Vogel u8 command_id; 6668cfa0ad2SJack F Vogel u8 checksum; 6678cfa0ad2SJack F Vogel u16 reserved1; 6688cfa0ad2SJack F Vogel u16 reserved2; 6698cfa0ad2SJack F Vogel u16 command_length; 6708cfa0ad2SJack F Vogel }; 6718cfa0ad2SJack F Vogel 6728cfa0ad2SJack F Vogel #define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8 6738cfa0ad2SJack F Vogel struct e1000_host_mng_command_info { 6748cfa0ad2SJack F Vogel struct e1000_host_mng_command_header command_header; 6758cfa0ad2SJack F Vogel u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH]; 6768cfa0ad2SJack F Vogel }; 6778cfa0ad2SJack F Vogel 6788cfa0ad2SJack F Vogel #include "e1000_mac.h" 6798cfa0ad2SJack F Vogel #include "e1000_phy.h" 6808cfa0ad2SJack F Vogel #include "e1000_nvm.h" 6818cfa0ad2SJack F Vogel #include "e1000_manage.h" 682b8270585SJack F Vogel #include "e1000_mbx.h" 6838cfa0ad2SJack F Vogel 6848cfa0ad2SJack F Vogel /* Function pointers for the MAC. */ 6856ab6bfe3SJack F Vogel struct e1000_mac_operations { 6868cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 687d035aa2dSJack F Vogel s32 (*id_led_init)(struct e1000_hw *); 6888cfa0ad2SJack F Vogel s32 (*blink_led)(struct e1000_hw *); 6896ab6bfe3SJack F Vogel bool (*check_mng_mode)(struct e1000_hw *); 6908cfa0ad2SJack F Vogel s32 (*check_for_link)(struct e1000_hw *); 6918cfa0ad2SJack F Vogel s32 (*cleanup_led)(struct e1000_hw *); 6928cfa0ad2SJack F Vogel void (*clear_hw_cntrs)(struct e1000_hw *); 6938cfa0ad2SJack F Vogel void (*clear_vfta)(struct e1000_hw *); 6948cfa0ad2SJack F Vogel s32 (*get_bus_info)(struct e1000_hw *); 695daf9197cSJack F Vogel void (*set_lan_id)(struct e1000_hw *); 6968cfa0ad2SJack F Vogel s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *); 6978cfa0ad2SJack F Vogel s32 (*led_on)(struct e1000_hw *); 6988cfa0ad2SJack F Vogel s32 (*led_off)(struct e1000_hw *); 699d035aa2dSJack F Vogel void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32); 7008cfa0ad2SJack F Vogel s32 (*reset_hw)(struct e1000_hw *); 7018cfa0ad2SJack F Vogel s32 (*init_hw)(struct e1000_hw *); 7028cfa0ad2SJack F Vogel void (*shutdown_serdes)(struct e1000_hw *); 703a69ed8dfSJack F Vogel void (*power_up_serdes)(struct e1000_hw *); 7048cfa0ad2SJack F Vogel s32 (*setup_link)(struct e1000_hw *); 7058cfa0ad2SJack F Vogel s32 (*setup_physical_interface)(struct e1000_hw *); 7068cfa0ad2SJack F Vogel s32 (*setup_led)(struct e1000_hw *); 7078cfa0ad2SJack F Vogel void (*write_vfta)(struct e1000_hw *, u32, u32); 7088cfa0ad2SJack F Vogel void (*config_collision_dist)(struct e1000_hw *); 7098cc64f1eSJack F Vogel int (*rar_set)(struct e1000_hw *, u8*, u32); 7108cfa0ad2SJack F Vogel s32 (*read_mac_addr)(struct e1000_hw *); 7118cfa0ad2SJack F Vogel s32 (*validate_mdi_setting)(struct e1000_hw *); 712e373323fSSean Bruno s32 (*set_obff_timer)(struct e1000_hw *, u32); 713ab5d0362SJack F Vogel s32 (*acquire_swfw_sync)(struct e1000_hw *, u16); 714ab5d0362SJack F Vogel void (*release_swfw_sync)(struct e1000_hw *, u16); 7158cfa0ad2SJack F Vogel }; 7168cfa0ad2SJack F Vogel 7176ab6bfe3SJack F Vogel /* When to use various PHY register access functions: 7184dab5c37SJack F Vogel * 7194dab5c37SJack F Vogel * Func Caller 7204dab5c37SJack F Vogel * Function Does Does When to use 7214dab5c37SJack F Vogel * ~~~~~~~~~~~~ ~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 7224dab5c37SJack F Vogel * X_reg L,P,A n/a for simple PHY reg accesses 7234dab5c37SJack F Vogel * X_reg_locked P,A L for multiple accesses of different regs 7244dab5c37SJack F Vogel * on different pages 7254dab5c37SJack F Vogel * X_reg_page A L,P for multiple accesses of different regs 7264dab5c37SJack F Vogel * on the same page 7274dab5c37SJack F Vogel * 7284dab5c37SJack F Vogel * Where X=[read|write], L=locking, P=sets page, A=register access 7294dab5c37SJack F Vogel * 7304dab5c37SJack F Vogel */ 7318cfa0ad2SJack F Vogel struct e1000_phy_operations { 7328cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 7338cfa0ad2SJack F Vogel s32 (*acquire)(struct e1000_hw *); 734daf9197cSJack F Vogel s32 (*cfg_on_link_up)(struct e1000_hw *); 7358cfa0ad2SJack F Vogel s32 (*check_polarity)(struct e1000_hw *); 7368cfa0ad2SJack F Vogel s32 (*check_reset_block)(struct e1000_hw *); 7378cfa0ad2SJack F Vogel s32 (*commit)(struct e1000_hw *); 7388cfa0ad2SJack F Vogel s32 (*force_speed_duplex)(struct e1000_hw *); 7398cfa0ad2SJack F Vogel s32 (*get_cfg_done)(struct e1000_hw *hw); 7408cfa0ad2SJack F Vogel s32 (*get_cable_length)(struct e1000_hw *); 7418cfa0ad2SJack F Vogel s32 (*get_info)(struct e1000_hw *); 7424dab5c37SJack F Vogel s32 (*set_page)(struct e1000_hw *, u16); 7438cfa0ad2SJack F Vogel s32 (*read_reg)(struct e1000_hw *, u32, u16 *); 7444edd8523SJack F Vogel s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *); 7454dab5c37SJack F Vogel s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *); 7468cfa0ad2SJack F Vogel void (*release)(struct e1000_hw *); 7478cfa0ad2SJack F Vogel s32 (*reset)(struct e1000_hw *); 7488cfa0ad2SJack F Vogel s32 (*set_d0_lplu_state)(struct e1000_hw *, bool); 7498cfa0ad2SJack F Vogel s32 (*set_d3_lplu_state)(struct e1000_hw *, bool); 7508cfa0ad2SJack F Vogel s32 (*write_reg)(struct e1000_hw *, u32, u16); 7514edd8523SJack F Vogel s32 (*write_reg_locked)(struct e1000_hw *, u32, u16); 7524dab5c37SJack F Vogel s32 (*write_reg_page)(struct e1000_hw *, u32, u16); 7538cfa0ad2SJack F Vogel void (*power_up)(struct e1000_hw *); 7548cfa0ad2SJack F Vogel void (*power_down)(struct e1000_hw *); 7554dab5c37SJack F Vogel s32 (*read_i2c_byte)(struct e1000_hw *, u8, u8, u8 *); 7564dab5c37SJack F Vogel s32 (*write_i2c_byte)(struct e1000_hw *, u8, u8, u8); 7578cfa0ad2SJack F Vogel }; 7588cfa0ad2SJack F Vogel 7596ab6bfe3SJack F Vogel /* Function pointers for the NVM. */ 7608cfa0ad2SJack F Vogel struct e1000_nvm_operations { 7618cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 7628cfa0ad2SJack F Vogel s32 (*acquire)(struct e1000_hw *); 7638cfa0ad2SJack F Vogel s32 (*read)(struct e1000_hw *, u16, u16, u16 *); 7648cfa0ad2SJack F Vogel void (*release)(struct e1000_hw *); 7658cfa0ad2SJack F Vogel void (*reload)(struct e1000_hw *); 7668cfa0ad2SJack F Vogel s32 (*update)(struct e1000_hw *); 7678cfa0ad2SJack F Vogel s32 (*valid_led_default)(struct e1000_hw *, u16 *); 7688cfa0ad2SJack F Vogel s32 (*validate)(struct e1000_hw *); 7698cfa0ad2SJack F Vogel s32 (*write)(struct e1000_hw *, u16, u16, u16 *); 7708cfa0ad2SJack F Vogel }; 7718cfa0ad2SJack F Vogel 7728cfa0ad2SJack F Vogel struct e1000_mac_info { 7738cfa0ad2SJack F Vogel struct e1000_mac_operations ops; 774f0ecc46dSJack F Vogel u8 addr[ETH_ADDR_LEN]; 775f0ecc46dSJack F Vogel u8 perm_addr[ETH_ADDR_LEN]; 7768cfa0ad2SJack F Vogel 7778cfa0ad2SJack F Vogel enum e1000_mac_type type; 7788cfa0ad2SJack F Vogel 7798cfa0ad2SJack F Vogel u32 collision_delta; 7808cfa0ad2SJack F Vogel u32 ledctl_default; 7818cfa0ad2SJack F Vogel u32 ledctl_mode1; 7828cfa0ad2SJack F Vogel u32 ledctl_mode2; 7838cfa0ad2SJack F Vogel u32 mc_filter_type; 7848cfa0ad2SJack F Vogel u32 tx_packet_delta; 7858cfa0ad2SJack F Vogel u32 txcw; 7868cfa0ad2SJack F Vogel 7878cfa0ad2SJack F Vogel u16 current_ifs_val; 7888cfa0ad2SJack F Vogel u16 ifs_max_val; 7898cfa0ad2SJack F Vogel u16 ifs_min_val; 7908cfa0ad2SJack F Vogel u16 ifs_ratio; 7918cfa0ad2SJack F Vogel u16 ifs_step_size; 7928cfa0ad2SJack F Vogel u16 mta_reg_count; 7934edd8523SJack F Vogel u16 uta_reg_count; 7949d81738fSJack F Vogel 7959d81738fSJack F Vogel /* Maximum size of the MTA register table in all supported adapters */ 7969d81738fSJack F Vogel #define MAX_MTA_REG 128 797d035aa2dSJack F Vogel u32 mta_shadow[MAX_MTA_REG]; 7988cfa0ad2SJack F Vogel u16 rar_entry_count; 7998cfa0ad2SJack F Vogel 8008cfa0ad2SJack F Vogel u8 forced_speed_duplex; 8018cfa0ad2SJack F Vogel 8028cfa0ad2SJack F Vogel bool adaptive_ifs; 8038ec87fc5SJack F Vogel bool has_fwsm; 8048cfa0ad2SJack F Vogel bool arc_subsystem_valid; 8058cfa0ad2SJack F Vogel bool asf_firmware_present; 8068cfa0ad2SJack F Vogel bool autoneg; 8078cfa0ad2SJack F Vogel bool autoneg_failed; 8088cfa0ad2SJack F Vogel bool get_link_status; 8098cfa0ad2SJack F Vogel bool in_ifs_mode; 8108cfa0ad2SJack F Vogel bool report_tx_early; 811d035aa2dSJack F Vogel enum e1000_serdes_link_state serdes_link_state; 8128cfa0ad2SJack F Vogel bool serdes_has_link; 8138cfa0ad2SJack F Vogel bool tx_pkt_filtering; 8146ab6bfe3SJack F Vogel u32 max_frame_size; 8158cfa0ad2SJack F Vogel }; 8168cfa0ad2SJack F Vogel 8178cfa0ad2SJack F Vogel struct e1000_phy_info { 8188cfa0ad2SJack F Vogel struct e1000_phy_operations ops; 8198cfa0ad2SJack F Vogel enum e1000_phy_type type; 8208cfa0ad2SJack F Vogel 8218cfa0ad2SJack F Vogel enum e1000_1000t_rx_status local_rx; 8228cfa0ad2SJack F Vogel enum e1000_1000t_rx_status remote_rx; 8238cfa0ad2SJack F Vogel enum e1000_ms_type ms_type; 8248cfa0ad2SJack F Vogel enum e1000_ms_type original_ms_type; 8258cfa0ad2SJack F Vogel enum e1000_rev_polarity cable_polarity; 8268cfa0ad2SJack F Vogel enum e1000_smart_speed smart_speed; 8278cfa0ad2SJack F Vogel 8288cfa0ad2SJack F Vogel u32 addr; 8298cfa0ad2SJack F Vogel u32 id; 8308cfa0ad2SJack F Vogel u32 reset_delay_us; /* in usec */ 8318cfa0ad2SJack F Vogel u32 revision; 8328cfa0ad2SJack F Vogel 8338cfa0ad2SJack F Vogel enum e1000_media_type media_type; 8348cfa0ad2SJack F Vogel 8358cfa0ad2SJack F Vogel u16 autoneg_advertised; 8368cfa0ad2SJack F Vogel u16 autoneg_mask; 8378cfa0ad2SJack F Vogel u16 cable_length; 8388cfa0ad2SJack F Vogel u16 max_cable_length; 8398cfa0ad2SJack F Vogel u16 min_cable_length; 8408cfa0ad2SJack F Vogel 8418cfa0ad2SJack F Vogel u8 mdix; 8428cfa0ad2SJack F Vogel 8438cfa0ad2SJack F Vogel bool disable_polarity_correction; 8448cfa0ad2SJack F Vogel bool is_mdix; 8458cfa0ad2SJack F Vogel bool polarity_correction; 8468cfa0ad2SJack F Vogel bool speed_downgraded; 8478cfa0ad2SJack F Vogel bool autoneg_wait_to_complete; 8488cfa0ad2SJack F Vogel }; 8498cfa0ad2SJack F Vogel 8508cfa0ad2SJack F Vogel struct e1000_nvm_info { 8518cfa0ad2SJack F Vogel struct e1000_nvm_operations ops; 8528cfa0ad2SJack F Vogel enum e1000_nvm_type type; 8538cfa0ad2SJack F Vogel enum e1000_nvm_override override; 8548cfa0ad2SJack F Vogel 8558cfa0ad2SJack F Vogel u32 flash_bank_size; 8568cfa0ad2SJack F Vogel u32 flash_base_addr; 8578cfa0ad2SJack F Vogel 8588cfa0ad2SJack F Vogel u16 word_size; 8598cfa0ad2SJack F Vogel u16 delay_usec; 8608cfa0ad2SJack F Vogel u16 address_bits; 8618cfa0ad2SJack F Vogel u16 opcode_bits; 8628cfa0ad2SJack F Vogel u16 page_size; 8638cfa0ad2SJack F Vogel }; 8648cfa0ad2SJack F Vogel 8658cfa0ad2SJack F Vogel struct e1000_bus_info { 8668cfa0ad2SJack F Vogel enum e1000_bus_type type; 8678cfa0ad2SJack F Vogel enum e1000_bus_speed speed; 8688cfa0ad2SJack F Vogel enum e1000_bus_width width; 8698cfa0ad2SJack F Vogel 8708cfa0ad2SJack F Vogel u16 func; 8718cfa0ad2SJack F Vogel u16 pci_cmd_word; 8728cfa0ad2SJack F Vogel }; 8738cfa0ad2SJack F Vogel 8748cfa0ad2SJack F Vogel struct e1000_fc_info { 8758cfa0ad2SJack F Vogel u32 high_water; /* Flow control high-water mark */ 8768cfa0ad2SJack F Vogel u32 low_water; /* Flow control low-water mark */ 8778cfa0ad2SJack F Vogel u16 pause_time; /* Flow control pause timer */ 878b8270585SJack F Vogel u16 refresh_time; /* Flow control refresh timer */ 8798cfa0ad2SJack F Vogel bool send_xon; /* Flow control send XON */ 8808cfa0ad2SJack F Vogel bool strict_ieee; /* Strict IEEE mode */ 881daf9197cSJack F Vogel enum e1000_fc_mode current_mode; /* FC mode in effect */ 882daf9197cSJack F Vogel enum e1000_fc_mode requested_mode; /* FC mode requested by caller */ 883daf9197cSJack F Vogel }; 884daf9197cSJack F Vogel 8857d9119bdSJack F Vogel struct e1000_mbx_operations { 8867d9119bdSJack F Vogel s32 (*init_params)(struct e1000_hw *hw); 8877d9119bdSJack F Vogel s32 (*read)(struct e1000_hw *, u32 *, u16, u16); 8887d9119bdSJack F Vogel s32 (*write)(struct e1000_hw *, u32 *, u16, u16); 8897d9119bdSJack F Vogel s32 (*read_posted)(struct e1000_hw *, u32 *, u16, u16); 8907d9119bdSJack F Vogel s32 (*write_posted)(struct e1000_hw *, u32 *, u16, u16); 8917d9119bdSJack F Vogel s32 (*check_for_msg)(struct e1000_hw *, u16); 8927d9119bdSJack F Vogel s32 (*check_for_ack)(struct e1000_hw *, u16); 8937d9119bdSJack F Vogel s32 (*check_for_rst)(struct e1000_hw *, u16); 8947d9119bdSJack F Vogel }; 8957d9119bdSJack F Vogel 8967d9119bdSJack F Vogel struct e1000_mbx_stats { 8977d9119bdSJack F Vogel u32 msgs_tx; 8987d9119bdSJack F Vogel u32 msgs_rx; 8997d9119bdSJack F Vogel 9007d9119bdSJack F Vogel u32 acks; 9017d9119bdSJack F Vogel u32 reqs; 9027d9119bdSJack F Vogel u32 rsts; 9037d9119bdSJack F Vogel }; 9047d9119bdSJack F Vogel 9057d9119bdSJack F Vogel struct e1000_mbx_info { 9067d9119bdSJack F Vogel struct e1000_mbx_operations ops; 9077d9119bdSJack F Vogel struct e1000_mbx_stats stats; 9087d9119bdSJack F Vogel u32 timeout; 9097d9119bdSJack F Vogel u32 usec_delay; 9107d9119bdSJack F Vogel u16 size; 9117d9119bdSJack F Vogel }; 9127d9119bdSJack F Vogel 913daf9197cSJack F Vogel struct e1000_dev_spec_82541 { 914daf9197cSJack F Vogel enum e1000_dsp_config dsp_config; 915daf9197cSJack F Vogel enum e1000_ffe_config ffe_config; 916daf9197cSJack F Vogel u16 spd_default; 917daf9197cSJack F Vogel bool phy_init_script; 918daf9197cSJack F Vogel }; 919daf9197cSJack F Vogel 920daf9197cSJack F Vogel struct e1000_dev_spec_82542 { 921daf9197cSJack F Vogel bool dma_fairness; 922daf9197cSJack F Vogel }; 923daf9197cSJack F Vogel 924daf9197cSJack F Vogel struct e1000_dev_spec_82543 { 925daf9197cSJack F Vogel u32 tbi_compatibility; 926daf9197cSJack F Vogel bool dma_fairness; 927daf9197cSJack F Vogel bool init_phy_disabled; 928daf9197cSJack F Vogel }; 929daf9197cSJack F Vogel 930daf9197cSJack F Vogel struct e1000_dev_spec_82571 { 931daf9197cSJack F Vogel bool laa_is_present; 9329d81738fSJack F Vogel u32 smb_counter; 9337d9119bdSJack F Vogel E1000_MUTEX swflag_mutex; 934daf9197cSJack F Vogel }; 935daf9197cSJack F Vogel 9364edd8523SJack F Vogel struct e1000_dev_spec_80003es2lan { 9374edd8523SJack F Vogel bool mdic_wa_enable; 9384edd8523SJack F Vogel }; 9394edd8523SJack F Vogel 940daf9197cSJack F Vogel struct e1000_shadow_ram { 941daf9197cSJack F Vogel u16 value; 942daf9197cSJack F Vogel bool modified; 943daf9197cSJack F Vogel }; 944daf9197cSJack F Vogel 945daf9197cSJack F Vogel #define E1000_SHADOW_RAM_WORDS 2048 946daf9197cSJack F Vogel 9478cc64f1eSJack F Vogel /* I218 PHY Ultra Low Power (ULP) states */ 9488cc64f1eSJack F Vogel enum e1000_ulp_state { 9498cc64f1eSJack F Vogel e1000_ulp_state_unknown, 9508cc64f1eSJack F Vogel e1000_ulp_state_off, 9518cc64f1eSJack F Vogel e1000_ulp_state_on, 9528cc64f1eSJack F Vogel }; 9538cc64f1eSJack F Vogel 954daf9197cSJack F Vogel struct e1000_dev_spec_ich8lan { 955daf9197cSJack F Vogel bool kmrn_lock_loss_workaround_enabled; 956daf9197cSJack F Vogel struct e1000_shadow_ram shadow_ram[E1000_SHADOW_RAM_WORDS]; 9574edd8523SJack F Vogel E1000_MUTEX nvm_mutex; 9584edd8523SJack F Vogel E1000_MUTEX swflag_mutex; 9594edd8523SJack F Vogel bool nvm_k1_enabled; 960ab5d0362SJack F Vogel bool eee_disable; 9616ab6bfe3SJack F Vogel u16 eee_lp_ability; 9628cc64f1eSJack F Vogel enum e1000_ulp_state ulp_state; 963b8270585SJack F Vogel }; 964b8270585SJack F Vogel 965daf9197cSJack F Vogel struct e1000_dev_spec_82575 { 966daf9197cSJack F Vogel bool sgmii_active; 967d035aa2dSJack F Vogel bool global_device_reset; 968ab5d0362SJack F Vogel bool eee_disable; 9694dab5c37SJack F Vogel bool module_plugged; 9706ab6bfe3SJack F Vogel bool clear_semaphore_once; 9714dab5c37SJack F Vogel u32 mtu; 9726ab6bfe3SJack F Vogel struct sfp_e1000_flags eth_flags; 9737609433eSJack F Vogel u8 media_port; 9747609433eSJack F Vogel bool media_changed; 975daf9197cSJack F Vogel }; 976daf9197cSJack F Vogel 977daf9197cSJack F Vogel struct e1000_dev_spec_vf { 978daf9197cSJack F Vogel u32 vf_number; 979d035aa2dSJack F Vogel u32 v2p_mailbox; 9808cfa0ad2SJack F Vogel }; 9818cfa0ad2SJack F Vogel 9828cfa0ad2SJack F Vogel struct e1000_hw { 9838cfa0ad2SJack F Vogel void *back; 9848cfa0ad2SJack F Vogel 9858cfa0ad2SJack F Vogel u8 *hw_addr; 9868cfa0ad2SJack F Vogel u8 *flash_address; 9878cfa0ad2SJack F Vogel unsigned long io_base; 9888cfa0ad2SJack F Vogel 9898cfa0ad2SJack F Vogel struct e1000_mac_info mac; 9908cfa0ad2SJack F Vogel struct e1000_fc_info fc; 9918cfa0ad2SJack F Vogel struct e1000_phy_info phy; 9928cfa0ad2SJack F Vogel struct e1000_nvm_info nvm; 9938cfa0ad2SJack F Vogel struct e1000_bus_info bus; 994b8270585SJack F Vogel struct e1000_mbx_info mbx; 9958cfa0ad2SJack F Vogel struct e1000_host_mng_dhcp_cookie mng_cookie; 9968cfa0ad2SJack F Vogel 997daf9197cSJack F Vogel union { 998daf9197cSJack F Vogel struct e1000_dev_spec_82541 _82541; 999daf9197cSJack F Vogel struct e1000_dev_spec_82542 _82542; 1000daf9197cSJack F Vogel struct e1000_dev_spec_82543 _82543; 1001daf9197cSJack F Vogel struct e1000_dev_spec_82571 _82571; 10024edd8523SJack F Vogel struct e1000_dev_spec_80003es2lan _80003es2lan; 1003daf9197cSJack F Vogel struct e1000_dev_spec_ich8lan ich8lan; 1004daf9197cSJack F Vogel struct e1000_dev_spec_82575 _82575; 1005daf9197cSJack F Vogel struct e1000_dev_spec_vf vf; 1006daf9197cSJack F Vogel } dev_spec; 10078cfa0ad2SJack F Vogel 10088cfa0ad2SJack F Vogel u16 device_id; 10098cfa0ad2SJack F Vogel u16 subsystem_vendor_id; 10108cfa0ad2SJack F Vogel u16 subsystem_device_id; 10118cfa0ad2SJack F Vogel u16 vendor_id; 10128cfa0ad2SJack F Vogel 10138cfa0ad2SJack F Vogel u8 revision_id; 10148cfa0ad2SJack F Vogel }; 10158cfa0ad2SJack F Vogel 10168cfa0ad2SJack F Vogel #include "e1000_82541.h" 10178cfa0ad2SJack F Vogel #include "e1000_82543.h" 10188cfa0ad2SJack F Vogel #include "e1000_82571.h" 10198cfa0ad2SJack F Vogel #include "e1000_80003es2lan.h" 10208cfa0ad2SJack F Vogel #include "e1000_ich8lan.h" 10218cfa0ad2SJack F Vogel #include "e1000_82575.h" 1022ab5d0362SJack F Vogel #include "e1000_i210.h" 10238cfa0ad2SJack F Vogel 10248cfa0ad2SJack F Vogel /* These functions must be implemented by drivers */ 10258cfa0ad2SJack F Vogel void e1000_pci_clear_mwi(struct e1000_hw *hw); 10268cfa0ad2SJack F Vogel void e1000_pci_set_mwi(struct e1000_hw *hw); 10278cfa0ad2SJack F Vogel s32 e1000_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); 10289d81738fSJack F Vogel s32 e1000_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); 10298cfa0ad2SJack F Vogel void e1000_read_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 10308cfa0ad2SJack F Vogel void e1000_write_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 10318cfa0ad2SJack F Vogel 10328cfa0ad2SJack F Vogel #endif 1033