175eba5b6SRobert Mustacchi /****************************************************************************** 275eba5b6SRobert Mustacchi 3*42cc51e0SRobert Mustacchi Copyright (c) 2001-2015, Intel Corporation 475eba5b6SRobert Mustacchi All rights reserved. 575eba5b6SRobert Mustacchi 675eba5b6SRobert Mustacchi Redistribution and use in source and binary forms, with or without 775eba5b6SRobert Mustacchi modification, are permitted provided that the following conditions are met: 875eba5b6SRobert Mustacchi 975eba5b6SRobert Mustacchi 1. Redistributions of source code must retain the above copyright notice, 1075eba5b6SRobert Mustacchi this list of conditions and the following disclaimer. 1175eba5b6SRobert Mustacchi 1275eba5b6SRobert Mustacchi 2. Redistributions in binary form must reproduce the above copyright 1375eba5b6SRobert Mustacchi notice, this list of conditions and the following disclaimer in the 1475eba5b6SRobert Mustacchi documentation and/or other materials provided with the distribution. 1575eba5b6SRobert Mustacchi 1675eba5b6SRobert Mustacchi 3. Neither the name of the Intel Corporation nor the names of its 1775eba5b6SRobert Mustacchi contributors may be used to endorse or promote products derived from 1875eba5b6SRobert Mustacchi this software without specific prior written permission. 1975eba5b6SRobert Mustacchi 2075eba5b6SRobert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2175eba5b6SRobert Mustacchi AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2275eba5b6SRobert Mustacchi IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2375eba5b6SRobert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2475eba5b6SRobert Mustacchi LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2575eba5b6SRobert Mustacchi CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2675eba5b6SRobert Mustacchi SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2775eba5b6SRobert Mustacchi INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2875eba5b6SRobert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2975eba5b6SRobert Mustacchi ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3075eba5b6SRobert Mustacchi POSSIBILITY OF SUCH DAMAGE. 3175eba5b6SRobert Mustacchi 3275eba5b6SRobert Mustacchi ******************************************************************************/ 3375eba5b6SRobert Mustacchi /*$FreeBSD$*/ 3475eba5b6SRobert Mustacchi 3575eba5b6SRobert Mustacchi #ifndef _E1000_HW_H_ 3675eba5b6SRobert Mustacchi #define _E1000_HW_H_ 3775eba5b6SRobert Mustacchi 3875eba5b6SRobert Mustacchi #include "e1000_osdep.h" 3975eba5b6SRobert Mustacchi #include "e1000_regs.h" 4075eba5b6SRobert Mustacchi #include "e1000_defines.h" 4175eba5b6SRobert Mustacchi 4275eba5b6SRobert Mustacchi struct e1000_hw; 4375eba5b6SRobert Mustacchi 4475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82542 0x1000 4575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82543GC_FIBER 0x1001 4675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82543GC_COPPER 0x1004 4775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82544EI_COPPER 0x1008 4875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82544EI_FIBER 0x1009 4975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82544GC_COPPER 0x100C 5075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82544GC_LOM 0x100D 5175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82540EM 0x100E 5275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82540EM_LOM 0x1015 5375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82540EP_LOM 0x1016 5475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82540EP 0x1017 5575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82540EP_LP 0x101E 5675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82545EM_COPPER 0x100F 5775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82545EM_FIBER 0x1011 5875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82545GM_COPPER 0x1026 5975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82545GM_FIBER 0x1027 6075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82545GM_SERDES 0x1028 6175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546EB_COPPER 0x1010 6275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546EB_FIBER 0x1012 6375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546EB_QUAD_COPPER 0x101D 6475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_COPPER 0x1079 6575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_FIBER 0x107A 6675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_SERDES 0x107B 6775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_PCIE 0x108A 6875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_QUAD_COPPER 0x1099 6975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 0x10B5 7075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541EI 0x1013 7175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541EI_MOBILE 0x1018 7275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541ER_LOM 0x1014 7375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541ER 0x1078 7475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541GI 0x1076 7575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541GI_LF 0x107C 7675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82541GI_MOBILE 0x1077 7775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82547EI 0x1019 7875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82547EI_MOBILE 0x101A 7975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82547GI 0x1075 8075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_COPPER 0x105E 8175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_FIBER 0x105F 8275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_SERDES 0x1060 8375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9 8475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_SERDES_QUAD 0x10DA 8575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4 8675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571PT_QUAD_COPPER 0x10D5 8775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5 8875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82571EB_QUAD_COPPER_LP 0x10BC 8975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82572EI_COPPER 0x107D 9075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82572EI_FIBER 0x107E 9175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82572EI_SERDES 0x107F 9275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82572EI 0x10B9 9375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82573E 0x108B 9475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82573E_IAMT 0x108C 9575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82573L 0x109A 9675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82574L 0x10D3 9775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82574LA 0x10F6 9875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82583V 0x150C 9975eba5b6SRobert Mustacchi #define E1000_DEV_ID_80003ES2LAN_COPPER_DPT 0x1096 10075eba5b6SRobert Mustacchi #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT 0x1098 10175eba5b6SRobert Mustacchi #define E1000_DEV_ID_80003ES2LAN_COPPER_SPT 0x10BA 10275eba5b6SRobert Mustacchi #define E1000_DEV_ID_80003ES2LAN_SERDES_SPT 0x10BB 10375eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_82567V_3 0x1501 10475eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IGP_M_AMT 0x1049 10575eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IGP_AMT 0x104A 10675eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IGP_C 0x104B 10775eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IFE 0x104C 10875eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IFE_GT 0x10C4 10975eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IFE_G 0x10C5 11075eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH8_IGP_M 0x104D 11175eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IGP_M 0x10BF 11275eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IGP_M_AMT 0x10F5 11375eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IGP_M_V 0x10CB 11475eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IGP_AMT 0x10BD 11575eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_BM 0x10E5 11675eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IGP_C 0x294C 11775eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IFE 0x10C0 11875eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IFE_GT 0x10C3 11975eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH9_IFE_G 0x10C2 12075eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_R_BM_LM 0x10CC 12175eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_R_BM_LF 0x10CD 12275eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_R_BM_V 0x10CE 12375eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_D_BM_LM 0x10DE 12475eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_D_BM_LF 0x10DF 12575eba5b6SRobert Mustacchi #define E1000_DEV_ID_ICH10_D_BM_V 0x1525 12675eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_M_HV_LM 0x10EA 12775eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_M_HV_LC 0x10EB 12875eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_D_HV_DM 0x10EF 12975eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_D_HV_DC 0x10F0 13075eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH2_LV_LM 0x1502 13175eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH2_LV_V 0x1503 13275eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_LPT_I217_LM 0x153A 13375eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_LPT_I217_V 0x153B 13475eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_LPTLP_I218_LM 0x155A 13575eba5b6SRobert Mustacchi #define E1000_DEV_ID_PCH_LPTLP_I218_V 0x1559 136c124a83eSRobert Mustacchi #define E1000_DEV_ID_PCH_I218_LM2 0x15A0 137c124a83eSRobert Mustacchi #define E1000_DEV_ID_PCH_I218_V2 0x15A1 138c124a83eSRobert Mustacchi #define E1000_DEV_ID_PCH_I218_LM3 0x15A2 /* Wildcat Point PCH */ 139c124a83eSRobert Mustacchi #define E1000_DEV_ID_PCH_I218_V3 0x15A3 /* Wildcat Point PCH */ 140*42cc51e0SRobert Mustacchi #define E1000_DEV_ID_PCH_SPT_I219_LM 0x156F /* Sunrise Point PCH */ 141*42cc51e0SRobert Mustacchi #define E1000_DEV_ID_PCH_SPT_I219_V 0x1570 /* Sunrise Point PCH */ 142*42cc51e0SRobert Mustacchi #define E1000_DEV_ID_PCH_SPT_I219_LM2 0x15B7 /* Sunrise Point-H PCH */ 143*42cc51e0SRobert Mustacchi #define E1000_DEV_ID_PCH_SPT_I219_V2 0x15B8 /* Sunrise Point-H PCH */ 144*42cc51e0SRobert Mustacchi #define E1000_DEV_ID_PCH_LBG_I219_LM3 0x15B9 /* LEWISBURG PCH */ 14575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576 0x10C9 14675eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_FIBER 0x10E6 14775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_SERDES 0x10E7 14875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 14975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_QUAD_COPPER_ET2 0x1526 15075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_NS 0x150A 15175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_NS_SERDES 0x1518 15275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_SERDES_QUAD 0x150D 15375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_VF 0x10CA 15475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82576_VF_HV 0x152D 15575eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_VF 0x1520 15675eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_VF_HV 0x152F 15775eba5b6SRobert Mustacchi #define E1000_DEV_ID_82575EB_COPPER 0x10A7 15875eba5b6SRobert Mustacchi #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 15975eba5b6SRobert Mustacchi #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 16075eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_COPPER 0x150E 16175eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_FIBER 0x150F 16275eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_SERDES 0x1510 16375eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_SGMII 0x1511 16475eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_COPPER_DUAL 0x1516 16575eba5b6SRobert Mustacchi #define E1000_DEV_ID_82580_QUAD_FIBER 0x1527 16675eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_COPPER 0x1521 16775eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_FIBER 0x1522 16875eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_SERDES 0x1523 16975eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_SGMII 0x1524 17075eba5b6SRobert Mustacchi #define E1000_DEV_ID_I350_DA4 0x1546 17175eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_COPPER 0x1533 17275eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_COPPER_OEM1 0x1534 17375eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_COPPER_IT 0x1535 17475eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_FIBER 0x1536 17575eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_SERDES 0x1537 17675eba5b6SRobert Mustacchi #define E1000_DEV_ID_I210_SGMII 0x1538 177c124a83eSRobert Mustacchi #define E1000_DEV_ID_I210_COPPER_FLASHLESS 0x157B 178c124a83eSRobert Mustacchi #define E1000_DEV_ID_I210_SERDES_FLASHLESS 0x157C 17975eba5b6SRobert Mustacchi #define E1000_DEV_ID_I211_COPPER 0x1539 18013485e69SGarrett D'Amore #define E1000_DEV_ID_I354_BACKPLANE_1GBPS 0x1F40 18113485e69SGarrett D'Amore #define E1000_DEV_ID_I354_SGMII 0x1F41 18213485e69SGarrett D'Amore #define E1000_DEV_ID_I354_BACKPLANE_2_5GBPS 0x1F45 18375eba5b6SRobert Mustacchi #define E1000_DEV_ID_DH89XXCC_SGMII 0x0438 18475eba5b6SRobert Mustacchi #define E1000_DEV_ID_DH89XXCC_SERDES 0x043A 18575eba5b6SRobert Mustacchi #define E1000_DEV_ID_DH89XXCC_BACKPLANE 0x043C 18675eba5b6SRobert Mustacchi #define E1000_DEV_ID_DH89XXCC_SFP 0x0440 18775eba5b6SRobert Mustacchi 18875eba5b6SRobert Mustacchi #define E1000_REVISION_0 0 18975eba5b6SRobert Mustacchi #define E1000_REVISION_1 1 19075eba5b6SRobert Mustacchi #define E1000_REVISION_2 2 19175eba5b6SRobert Mustacchi #define E1000_REVISION_3 3 19275eba5b6SRobert Mustacchi #define E1000_REVISION_4 4 19375eba5b6SRobert Mustacchi 19475eba5b6SRobert Mustacchi #define E1000_FUNC_0 0 19575eba5b6SRobert Mustacchi #define E1000_FUNC_1 1 19675eba5b6SRobert Mustacchi #define E1000_FUNC_2 2 19775eba5b6SRobert Mustacchi #define E1000_FUNC_3 3 19875eba5b6SRobert Mustacchi 19975eba5b6SRobert Mustacchi #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0 0 20075eba5b6SRobert Mustacchi #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1 3 20175eba5b6SRobert Mustacchi #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2 6 20275eba5b6SRobert Mustacchi #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3 9 20375eba5b6SRobert Mustacchi 20475eba5b6SRobert Mustacchi enum e1000_mac_type { 20575eba5b6SRobert Mustacchi e1000_undefined = 0, 20675eba5b6SRobert Mustacchi e1000_82542, 20775eba5b6SRobert Mustacchi e1000_82543, 20875eba5b6SRobert Mustacchi e1000_82544, 20975eba5b6SRobert Mustacchi e1000_82540, 21075eba5b6SRobert Mustacchi e1000_82545, 21175eba5b6SRobert Mustacchi e1000_82545_rev_3, 21275eba5b6SRobert Mustacchi e1000_82546, 21375eba5b6SRobert Mustacchi e1000_82546_rev_3, 21475eba5b6SRobert Mustacchi e1000_82541, 21575eba5b6SRobert Mustacchi e1000_82541_rev_2, 21675eba5b6SRobert Mustacchi e1000_82547, 21775eba5b6SRobert Mustacchi e1000_82547_rev_2, 21875eba5b6SRobert Mustacchi e1000_82571, 21975eba5b6SRobert Mustacchi e1000_82572, 22075eba5b6SRobert Mustacchi e1000_82573, 22175eba5b6SRobert Mustacchi e1000_82574, 22275eba5b6SRobert Mustacchi e1000_82583, 22375eba5b6SRobert Mustacchi e1000_80003es2lan, 22475eba5b6SRobert Mustacchi e1000_ich8lan, 22575eba5b6SRobert Mustacchi e1000_ich9lan, 22675eba5b6SRobert Mustacchi e1000_ich10lan, 22775eba5b6SRobert Mustacchi e1000_pchlan, 22875eba5b6SRobert Mustacchi e1000_pch2lan, 22975eba5b6SRobert Mustacchi e1000_pch_lpt, 230*42cc51e0SRobert Mustacchi e1000_pch_spt, 23175eba5b6SRobert Mustacchi e1000_82575, 23275eba5b6SRobert Mustacchi e1000_82576, 23375eba5b6SRobert Mustacchi e1000_82580, 23475eba5b6SRobert Mustacchi e1000_i350, 23513485e69SGarrett D'Amore e1000_i354, 23675eba5b6SRobert Mustacchi e1000_i210, 23775eba5b6SRobert Mustacchi e1000_i211, 23875eba5b6SRobert Mustacchi e1000_vfadapt, 23975eba5b6SRobert Mustacchi e1000_vfadapt_i350, 24075eba5b6SRobert Mustacchi e1000_num_macs /* List is 1-based, so subtract 1 for TRUE count. */ 24175eba5b6SRobert Mustacchi }; 24275eba5b6SRobert Mustacchi 24375eba5b6SRobert Mustacchi enum e1000_media_type { 24475eba5b6SRobert Mustacchi e1000_media_type_unknown = 0, 24575eba5b6SRobert Mustacchi e1000_media_type_copper = 1, 24675eba5b6SRobert Mustacchi e1000_media_type_fiber = 2, 24775eba5b6SRobert Mustacchi e1000_media_type_internal_serdes = 3, 24875eba5b6SRobert Mustacchi e1000_num_media_types 24975eba5b6SRobert Mustacchi }; 25075eba5b6SRobert Mustacchi 25175eba5b6SRobert Mustacchi enum e1000_nvm_type { 25275eba5b6SRobert Mustacchi e1000_nvm_unknown = 0, 25375eba5b6SRobert Mustacchi e1000_nvm_none, 25475eba5b6SRobert Mustacchi e1000_nvm_eeprom_spi, 25575eba5b6SRobert Mustacchi e1000_nvm_eeprom_microwire, 25675eba5b6SRobert Mustacchi e1000_nvm_flash_hw, 257c124a83eSRobert Mustacchi e1000_nvm_invm, 25875eba5b6SRobert Mustacchi e1000_nvm_flash_sw 25975eba5b6SRobert Mustacchi }; 26075eba5b6SRobert Mustacchi 26175eba5b6SRobert Mustacchi enum e1000_nvm_override { 26275eba5b6SRobert Mustacchi e1000_nvm_override_none = 0, 26375eba5b6SRobert Mustacchi e1000_nvm_override_spi_small, 26475eba5b6SRobert Mustacchi e1000_nvm_override_spi_large, 26575eba5b6SRobert Mustacchi e1000_nvm_override_microwire_small, 26675eba5b6SRobert Mustacchi e1000_nvm_override_microwire_large 26775eba5b6SRobert Mustacchi }; 26875eba5b6SRobert Mustacchi 26975eba5b6SRobert Mustacchi enum e1000_phy_type { 27075eba5b6SRobert Mustacchi e1000_phy_unknown = 0, 27175eba5b6SRobert Mustacchi e1000_phy_none, 27275eba5b6SRobert Mustacchi e1000_phy_m88, 27375eba5b6SRobert Mustacchi e1000_phy_igp, 27475eba5b6SRobert Mustacchi e1000_phy_igp_2, 27575eba5b6SRobert Mustacchi e1000_phy_gg82563, 27675eba5b6SRobert Mustacchi e1000_phy_igp_3, 27775eba5b6SRobert Mustacchi e1000_phy_ife, 27875eba5b6SRobert Mustacchi e1000_phy_bm, 27975eba5b6SRobert Mustacchi e1000_phy_82578, 28075eba5b6SRobert Mustacchi e1000_phy_82577, 28175eba5b6SRobert Mustacchi e1000_phy_82579, 28275eba5b6SRobert Mustacchi e1000_phy_i217, 28375eba5b6SRobert Mustacchi e1000_phy_82580, 28475eba5b6SRobert Mustacchi e1000_phy_vf, 28575eba5b6SRobert Mustacchi e1000_phy_i210, 28675eba5b6SRobert Mustacchi }; 28775eba5b6SRobert Mustacchi 28875eba5b6SRobert Mustacchi enum e1000_bus_type { 28975eba5b6SRobert Mustacchi e1000_bus_type_unknown = 0, 29075eba5b6SRobert Mustacchi e1000_bus_type_pci, 29175eba5b6SRobert Mustacchi e1000_bus_type_pcix, 29275eba5b6SRobert Mustacchi e1000_bus_type_pci_express, 29375eba5b6SRobert Mustacchi e1000_bus_type_reserved 29475eba5b6SRobert Mustacchi }; 29575eba5b6SRobert Mustacchi 29675eba5b6SRobert Mustacchi enum e1000_bus_speed { 29775eba5b6SRobert Mustacchi e1000_bus_speed_unknown = 0, 29875eba5b6SRobert Mustacchi e1000_bus_speed_33, 29975eba5b6SRobert Mustacchi e1000_bus_speed_66, 30075eba5b6SRobert Mustacchi e1000_bus_speed_100, 30175eba5b6SRobert Mustacchi e1000_bus_speed_120, 30275eba5b6SRobert Mustacchi e1000_bus_speed_133, 30375eba5b6SRobert Mustacchi e1000_bus_speed_2500, 30475eba5b6SRobert Mustacchi e1000_bus_speed_5000, 30575eba5b6SRobert Mustacchi e1000_bus_speed_reserved 30675eba5b6SRobert Mustacchi }; 30775eba5b6SRobert Mustacchi 30875eba5b6SRobert Mustacchi enum e1000_bus_width { 30975eba5b6SRobert Mustacchi e1000_bus_width_unknown = 0, 31075eba5b6SRobert Mustacchi e1000_bus_width_pcie_x1, 31175eba5b6SRobert Mustacchi e1000_bus_width_pcie_x2, 31275eba5b6SRobert Mustacchi e1000_bus_width_pcie_x4 = 4, 31375eba5b6SRobert Mustacchi e1000_bus_width_pcie_x8 = 8, 31475eba5b6SRobert Mustacchi e1000_bus_width_32, 31575eba5b6SRobert Mustacchi e1000_bus_width_64, 31675eba5b6SRobert Mustacchi e1000_bus_width_reserved 31775eba5b6SRobert Mustacchi }; 31875eba5b6SRobert Mustacchi 31975eba5b6SRobert Mustacchi enum e1000_1000t_rx_status { 32075eba5b6SRobert Mustacchi e1000_1000t_rx_status_not_ok = 0, 32175eba5b6SRobert Mustacchi e1000_1000t_rx_status_ok, 32275eba5b6SRobert Mustacchi e1000_1000t_rx_status_undefined = 0xFF 32375eba5b6SRobert Mustacchi }; 32475eba5b6SRobert Mustacchi 32575eba5b6SRobert Mustacchi enum e1000_rev_polarity { 32675eba5b6SRobert Mustacchi e1000_rev_polarity_normal = 0, 32775eba5b6SRobert Mustacchi e1000_rev_polarity_reversed, 32875eba5b6SRobert Mustacchi e1000_rev_polarity_undefined = 0xFF 32975eba5b6SRobert Mustacchi }; 33075eba5b6SRobert Mustacchi 33175eba5b6SRobert Mustacchi enum e1000_fc_mode { 33275eba5b6SRobert Mustacchi e1000_fc_none = 0, 33375eba5b6SRobert Mustacchi e1000_fc_rx_pause, 33475eba5b6SRobert Mustacchi e1000_fc_tx_pause, 33575eba5b6SRobert Mustacchi e1000_fc_full, 33675eba5b6SRobert Mustacchi e1000_fc_default = 0xFF 33775eba5b6SRobert Mustacchi }; 33875eba5b6SRobert Mustacchi 33975eba5b6SRobert Mustacchi enum e1000_ffe_config { 34075eba5b6SRobert Mustacchi e1000_ffe_config_enabled = 0, 34175eba5b6SRobert Mustacchi e1000_ffe_config_active, 34275eba5b6SRobert Mustacchi e1000_ffe_config_blocked 34375eba5b6SRobert Mustacchi }; 34475eba5b6SRobert Mustacchi 34575eba5b6SRobert Mustacchi enum e1000_dsp_config { 34675eba5b6SRobert Mustacchi e1000_dsp_config_disabled = 0, 34775eba5b6SRobert Mustacchi e1000_dsp_config_enabled, 34875eba5b6SRobert Mustacchi e1000_dsp_config_activated, 34975eba5b6SRobert Mustacchi e1000_dsp_config_undefined = 0xFF 35075eba5b6SRobert Mustacchi }; 35175eba5b6SRobert Mustacchi 35275eba5b6SRobert Mustacchi enum e1000_ms_type { 35375eba5b6SRobert Mustacchi e1000_ms_hw_default = 0, 35475eba5b6SRobert Mustacchi e1000_ms_force_master, 35575eba5b6SRobert Mustacchi e1000_ms_force_slave, 35675eba5b6SRobert Mustacchi e1000_ms_auto 35775eba5b6SRobert Mustacchi }; 35875eba5b6SRobert Mustacchi 35975eba5b6SRobert Mustacchi enum e1000_smart_speed { 36075eba5b6SRobert Mustacchi e1000_smart_speed_default = 0, 36175eba5b6SRobert Mustacchi e1000_smart_speed_on, 36275eba5b6SRobert Mustacchi e1000_smart_speed_off 36375eba5b6SRobert Mustacchi }; 36475eba5b6SRobert Mustacchi 36575eba5b6SRobert Mustacchi enum e1000_serdes_link_state { 36675eba5b6SRobert Mustacchi e1000_serdes_link_down = 0, 36775eba5b6SRobert Mustacchi e1000_serdes_link_autoneg_progress, 36875eba5b6SRobert Mustacchi e1000_serdes_link_autoneg_complete, 36975eba5b6SRobert Mustacchi e1000_serdes_link_forced_up 37075eba5b6SRobert Mustacchi }; 37175eba5b6SRobert Mustacchi 372c124a83eSRobert Mustacchi #define __le16 u16 373c124a83eSRobert Mustacchi #define __le32 u32 374c124a83eSRobert Mustacchi #define __le64 u64 37575eba5b6SRobert Mustacchi /* Receive Descriptor */ 37675eba5b6SRobert Mustacchi struct e1000_rx_desc { 37775eba5b6SRobert Mustacchi __le64 buffer_addr; /* Address of the descriptor's data buffer */ 37875eba5b6SRobert Mustacchi __le16 length; /* Length of data DMAed into data buffer */ 37975eba5b6SRobert Mustacchi __le16 csum; /* Packet checksum */ 38075eba5b6SRobert Mustacchi u8 status; /* Descriptor status */ 38175eba5b6SRobert Mustacchi u8 errors; /* Descriptor Errors */ 38275eba5b6SRobert Mustacchi __le16 special; 38375eba5b6SRobert Mustacchi }; 38475eba5b6SRobert Mustacchi 38575eba5b6SRobert Mustacchi /* Receive Descriptor - Extended */ 38675eba5b6SRobert Mustacchi union e1000_rx_desc_extended { 38775eba5b6SRobert Mustacchi struct { 38875eba5b6SRobert Mustacchi __le64 buffer_addr; 38975eba5b6SRobert Mustacchi __le64 reserved; 39075eba5b6SRobert Mustacchi } read; 39175eba5b6SRobert Mustacchi struct { 39275eba5b6SRobert Mustacchi struct { 39375eba5b6SRobert Mustacchi __le32 mrq; /* Multiple Rx Queues */ 39475eba5b6SRobert Mustacchi union { 39575eba5b6SRobert Mustacchi __le32 rss; /* RSS Hash */ 39675eba5b6SRobert Mustacchi struct { 39775eba5b6SRobert Mustacchi __le16 ip_id; /* IP id */ 39875eba5b6SRobert Mustacchi __le16 csum; /* Packet Checksum */ 39975eba5b6SRobert Mustacchi } csum_ip; 40075eba5b6SRobert Mustacchi } hi_dword; 40175eba5b6SRobert Mustacchi } lower; 40275eba5b6SRobert Mustacchi struct { 40375eba5b6SRobert Mustacchi __le32 status_error; /* ext status/error */ 40475eba5b6SRobert Mustacchi __le16 length; 40575eba5b6SRobert Mustacchi __le16 vlan; /* VLAN tag */ 40675eba5b6SRobert Mustacchi } upper; 40775eba5b6SRobert Mustacchi } wb; /* writeback */ 40875eba5b6SRobert Mustacchi }; 40975eba5b6SRobert Mustacchi 41075eba5b6SRobert Mustacchi #define MAX_PS_BUFFERS 4 411c124a83eSRobert Mustacchi 412c124a83eSRobert Mustacchi /* Number of packet split data buffers (not including the header buffer) */ 413c124a83eSRobert Mustacchi #define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1) 414c124a83eSRobert Mustacchi 41575eba5b6SRobert Mustacchi /* Receive Descriptor - Packet Split */ 41675eba5b6SRobert Mustacchi union e1000_rx_desc_packet_split { 41775eba5b6SRobert Mustacchi struct { 41875eba5b6SRobert Mustacchi /* one buffer for protocol header(s), three data buffers */ 41975eba5b6SRobert Mustacchi __le64 buffer_addr[MAX_PS_BUFFERS]; 42075eba5b6SRobert Mustacchi } read; 42175eba5b6SRobert Mustacchi struct { 42275eba5b6SRobert Mustacchi struct { 42375eba5b6SRobert Mustacchi __le32 mrq; /* Multiple Rx Queues */ 42475eba5b6SRobert Mustacchi union { 42575eba5b6SRobert Mustacchi __le32 rss; /* RSS Hash */ 42675eba5b6SRobert Mustacchi struct { 42775eba5b6SRobert Mustacchi __le16 ip_id; /* IP id */ 42875eba5b6SRobert Mustacchi __le16 csum; /* Packet Checksum */ 42975eba5b6SRobert Mustacchi } csum_ip; 43075eba5b6SRobert Mustacchi } hi_dword; 43175eba5b6SRobert Mustacchi } lower; 43275eba5b6SRobert Mustacchi struct { 43375eba5b6SRobert Mustacchi __le32 status_error; /* ext status/error */ 43475eba5b6SRobert Mustacchi __le16 length0; /* length of buffer 0 */ 43575eba5b6SRobert Mustacchi __le16 vlan; /* VLAN tag */ 43675eba5b6SRobert Mustacchi } middle; 43775eba5b6SRobert Mustacchi struct { 43875eba5b6SRobert Mustacchi __le16 header_status; 439c124a83eSRobert Mustacchi /* length of buffers 1-3 */ 440c124a83eSRobert Mustacchi __le16 length[PS_PAGE_BUFFERS]; 44175eba5b6SRobert Mustacchi } upper; 44275eba5b6SRobert Mustacchi __le64 reserved; 44375eba5b6SRobert Mustacchi } wb; /* writeback */ 44475eba5b6SRobert Mustacchi }; 44575eba5b6SRobert Mustacchi 44675eba5b6SRobert Mustacchi /* Transmit Descriptor */ 44775eba5b6SRobert Mustacchi struct e1000_tx_desc { 44875eba5b6SRobert Mustacchi __le64 buffer_addr; /* Address of the descriptor's data buffer */ 44975eba5b6SRobert Mustacchi union { 45075eba5b6SRobert Mustacchi __le32 data; 45175eba5b6SRobert Mustacchi struct { 45275eba5b6SRobert Mustacchi __le16 length; /* Data buffer length */ 45375eba5b6SRobert Mustacchi u8 cso; /* Checksum offset */ 45475eba5b6SRobert Mustacchi u8 cmd; /* Descriptor control */ 45575eba5b6SRobert Mustacchi } flags; 45675eba5b6SRobert Mustacchi } lower; 45775eba5b6SRobert Mustacchi union { 45875eba5b6SRobert Mustacchi __le32 data; 45975eba5b6SRobert Mustacchi struct { 46075eba5b6SRobert Mustacchi u8 status; /* Descriptor status */ 46175eba5b6SRobert Mustacchi u8 css; /* Checksum start */ 46275eba5b6SRobert Mustacchi __le16 special; 46375eba5b6SRobert Mustacchi } fields; 46475eba5b6SRobert Mustacchi } upper; 46575eba5b6SRobert Mustacchi }; 46675eba5b6SRobert Mustacchi 46775eba5b6SRobert Mustacchi /* Offload Context Descriptor */ 46875eba5b6SRobert Mustacchi struct e1000_context_desc { 46975eba5b6SRobert Mustacchi union { 47075eba5b6SRobert Mustacchi __le32 ip_config; 47175eba5b6SRobert Mustacchi struct { 47275eba5b6SRobert Mustacchi u8 ipcss; /* IP checksum start */ 47375eba5b6SRobert Mustacchi u8 ipcso; /* IP checksum offset */ 47475eba5b6SRobert Mustacchi __le16 ipcse; /* IP checksum end */ 47575eba5b6SRobert Mustacchi } ip_fields; 47675eba5b6SRobert Mustacchi } lower_setup; 47775eba5b6SRobert Mustacchi union { 47875eba5b6SRobert Mustacchi __le32 tcp_config; 47975eba5b6SRobert Mustacchi struct { 48075eba5b6SRobert Mustacchi u8 tucss; /* TCP checksum start */ 48175eba5b6SRobert Mustacchi u8 tucso; /* TCP checksum offset */ 48275eba5b6SRobert Mustacchi __le16 tucse; /* TCP checksum end */ 48375eba5b6SRobert Mustacchi } tcp_fields; 48475eba5b6SRobert Mustacchi } upper_setup; 48575eba5b6SRobert Mustacchi __le32 cmd_and_length; 48675eba5b6SRobert Mustacchi union { 48775eba5b6SRobert Mustacchi __le32 data; 48875eba5b6SRobert Mustacchi struct { 48975eba5b6SRobert Mustacchi u8 status; /* Descriptor status */ 49075eba5b6SRobert Mustacchi u8 hdr_len; /* Header length */ 49175eba5b6SRobert Mustacchi __le16 mss; /* Maximum segment size */ 49275eba5b6SRobert Mustacchi } fields; 49375eba5b6SRobert Mustacchi } tcp_seg_setup; 49475eba5b6SRobert Mustacchi }; 49575eba5b6SRobert Mustacchi 49675eba5b6SRobert Mustacchi /* Offload data descriptor */ 49775eba5b6SRobert Mustacchi struct e1000_data_desc { 49875eba5b6SRobert Mustacchi __le64 buffer_addr; /* Address of the descriptor's buffer address */ 49975eba5b6SRobert Mustacchi union { 50075eba5b6SRobert Mustacchi __le32 data; 50175eba5b6SRobert Mustacchi struct { 50275eba5b6SRobert Mustacchi __le16 length; /* Data buffer length */ 50375eba5b6SRobert Mustacchi u8 typ_len_ext; 50475eba5b6SRobert Mustacchi u8 cmd; 50575eba5b6SRobert Mustacchi } flags; 50675eba5b6SRobert Mustacchi } lower; 50775eba5b6SRobert Mustacchi union { 50875eba5b6SRobert Mustacchi __le32 data; 50975eba5b6SRobert Mustacchi struct { 51075eba5b6SRobert Mustacchi u8 status; /* Descriptor status */ 51175eba5b6SRobert Mustacchi u8 popts; /* Packet Options */ 51275eba5b6SRobert Mustacchi __le16 special; 51375eba5b6SRobert Mustacchi } fields; 51475eba5b6SRobert Mustacchi } upper; 51575eba5b6SRobert Mustacchi }; 51675eba5b6SRobert Mustacchi 51775eba5b6SRobert Mustacchi /* Statistics counters collected by the MAC */ 51875eba5b6SRobert Mustacchi struct e1000_hw_stats { 51975eba5b6SRobert Mustacchi u64 crcerrs; 52075eba5b6SRobert Mustacchi u64 algnerrc; 52175eba5b6SRobert Mustacchi u64 symerrs; 52275eba5b6SRobert Mustacchi u64 rxerrc; 52375eba5b6SRobert Mustacchi u64 mpc; 52475eba5b6SRobert Mustacchi u64 scc; 52575eba5b6SRobert Mustacchi u64 ecol; 52675eba5b6SRobert Mustacchi u64 mcc; 52775eba5b6SRobert Mustacchi u64 latecol; 52875eba5b6SRobert Mustacchi u64 colc; 52975eba5b6SRobert Mustacchi u64 dc; 53075eba5b6SRobert Mustacchi u64 tncrs; 53175eba5b6SRobert Mustacchi u64 sec; 53275eba5b6SRobert Mustacchi u64 cexterr; 53375eba5b6SRobert Mustacchi u64 rlec; 53475eba5b6SRobert Mustacchi u64 xonrxc; 53575eba5b6SRobert Mustacchi u64 xontxc; 53675eba5b6SRobert Mustacchi u64 xoffrxc; 53775eba5b6SRobert Mustacchi u64 xofftxc; 53875eba5b6SRobert Mustacchi u64 fcruc; 53975eba5b6SRobert Mustacchi u64 prc64; 54075eba5b6SRobert Mustacchi u64 prc127; 54175eba5b6SRobert Mustacchi u64 prc255; 54275eba5b6SRobert Mustacchi u64 prc511; 54375eba5b6SRobert Mustacchi u64 prc1023; 54475eba5b6SRobert Mustacchi u64 prc1522; 54575eba5b6SRobert Mustacchi u64 gprc; 54675eba5b6SRobert Mustacchi u64 bprc; 54775eba5b6SRobert Mustacchi u64 mprc; 54875eba5b6SRobert Mustacchi u64 gptc; 54975eba5b6SRobert Mustacchi u64 gorc; 55075eba5b6SRobert Mustacchi u64 gotc; 55175eba5b6SRobert Mustacchi u64 rnbc; 55275eba5b6SRobert Mustacchi u64 ruc; 55375eba5b6SRobert Mustacchi u64 rfc; 55475eba5b6SRobert Mustacchi u64 roc; 55575eba5b6SRobert Mustacchi u64 rjc; 55675eba5b6SRobert Mustacchi u64 mgprc; 55775eba5b6SRobert Mustacchi u64 mgpdc; 55875eba5b6SRobert Mustacchi u64 mgptc; 55975eba5b6SRobert Mustacchi u64 tor; 56075eba5b6SRobert Mustacchi u64 tot; 56175eba5b6SRobert Mustacchi u64 tpr; 56275eba5b6SRobert Mustacchi u64 tpt; 56375eba5b6SRobert Mustacchi u64 ptc64; 56475eba5b6SRobert Mustacchi u64 ptc127; 56575eba5b6SRobert Mustacchi u64 ptc255; 56675eba5b6SRobert Mustacchi u64 ptc511; 56775eba5b6SRobert Mustacchi u64 ptc1023; 56875eba5b6SRobert Mustacchi u64 ptc1522; 56975eba5b6SRobert Mustacchi u64 mptc; 57075eba5b6SRobert Mustacchi u64 bptc; 57175eba5b6SRobert Mustacchi u64 tsctc; 57275eba5b6SRobert Mustacchi u64 tsctfc; 57375eba5b6SRobert Mustacchi u64 iac; 57475eba5b6SRobert Mustacchi u64 icrxptc; 57575eba5b6SRobert Mustacchi u64 icrxatc; 57675eba5b6SRobert Mustacchi u64 ictxptc; 57775eba5b6SRobert Mustacchi u64 ictxatc; 57875eba5b6SRobert Mustacchi u64 ictxqec; 57975eba5b6SRobert Mustacchi u64 ictxqmtc; 58075eba5b6SRobert Mustacchi u64 icrxdmtc; 58175eba5b6SRobert Mustacchi u64 icrxoc; 58275eba5b6SRobert Mustacchi u64 cbtmpc; 58375eba5b6SRobert Mustacchi u64 htdpmc; 58475eba5b6SRobert Mustacchi u64 cbrdpc; 58575eba5b6SRobert Mustacchi u64 cbrmpc; 58675eba5b6SRobert Mustacchi u64 rpthc; 58775eba5b6SRobert Mustacchi u64 hgptc; 58875eba5b6SRobert Mustacchi u64 htcbdpc; 58975eba5b6SRobert Mustacchi u64 hgorc; 59075eba5b6SRobert Mustacchi u64 hgotc; 59175eba5b6SRobert Mustacchi u64 lenerrs; 59275eba5b6SRobert Mustacchi u64 scvpc; 59375eba5b6SRobert Mustacchi u64 hrmpc; 59475eba5b6SRobert Mustacchi u64 doosync; 59575eba5b6SRobert Mustacchi u64 o2bgptc; 59675eba5b6SRobert Mustacchi u64 o2bspc; 59775eba5b6SRobert Mustacchi u64 b2ospc; 59875eba5b6SRobert Mustacchi u64 b2ogprc; 59975eba5b6SRobert Mustacchi }; 60075eba5b6SRobert Mustacchi 60175eba5b6SRobert Mustacchi struct e1000_vf_stats { 60275eba5b6SRobert Mustacchi u64 base_gprc; 60375eba5b6SRobert Mustacchi u64 base_gptc; 60475eba5b6SRobert Mustacchi u64 base_gorc; 60575eba5b6SRobert Mustacchi u64 base_gotc; 60675eba5b6SRobert Mustacchi u64 base_mprc; 60775eba5b6SRobert Mustacchi u64 base_gotlbc; 60875eba5b6SRobert Mustacchi u64 base_gptlbc; 60975eba5b6SRobert Mustacchi u64 base_gorlbc; 61075eba5b6SRobert Mustacchi u64 base_gprlbc; 61175eba5b6SRobert Mustacchi 61275eba5b6SRobert Mustacchi u32 last_gprc; 61375eba5b6SRobert Mustacchi u32 last_gptc; 61475eba5b6SRobert Mustacchi u32 last_gorc; 61575eba5b6SRobert Mustacchi u32 last_gotc; 61675eba5b6SRobert Mustacchi u32 last_mprc; 61775eba5b6SRobert Mustacchi u32 last_gotlbc; 61875eba5b6SRobert Mustacchi u32 last_gptlbc; 61975eba5b6SRobert Mustacchi u32 last_gorlbc; 62075eba5b6SRobert Mustacchi u32 last_gprlbc; 62175eba5b6SRobert Mustacchi 62275eba5b6SRobert Mustacchi u64 gprc; 62375eba5b6SRobert Mustacchi u64 gptc; 62475eba5b6SRobert Mustacchi u64 gorc; 62575eba5b6SRobert Mustacchi u64 gotc; 62675eba5b6SRobert Mustacchi u64 mprc; 62775eba5b6SRobert Mustacchi u64 gotlbc; 62875eba5b6SRobert Mustacchi u64 gptlbc; 62975eba5b6SRobert Mustacchi u64 gorlbc; 63075eba5b6SRobert Mustacchi u64 gprlbc; 63175eba5b6SRobert Mustacchi }; 63275eba5b6SRobert Mustacchi 63375eba5b6SRobert Mustacchi struct e1000_phy_stats { 63475eba5b6SRobert Mustacchi u32 idle_errors; 63575eba5b6SRobert Mustacchi u32 receive_errors; 63675eba5b6SRobert Mustacchi }; 63775eba5b6SRobert Mustacchi 63875eba5b6SRobert Mustacchi struct e1000_host_mng_dhcp_cookie { 63975eba5b6SRobert Mustacchi u32 signature; 64075eba5b6SRobert Mustacchi u8 status; 64175eba5b6SRobert Mustacchi u8 reserved0; 64275eba5b6SRobert Mustacchi u16 vlan_id; 64375eba5b6SRobert Mustacchi u32 reserved1; 64475eba5b6SRobert Mustacchi u16 reserved2; 64575eba5b6SRobert Mustacchi u8 reserved3; 64675eba5b6SRobert Mustacchi u8 checksum; 64775eba5b6SRobert Mustacchi }; 64875eba5b6SRobert Mustacchi 64975eba5b6SRobert Mustacchi /* Host Interface "Rev 1" */ 65075eba5b6SRobert Mustacchi struct e1000_host_command_header { 65175eba5b6SRobert Mustacchi u8 command_id; 65275eba5b6SRobert Mustacchi u8 command_length; 65375eba5b6SRobert Mustacchi u8 command_options; 65475eba5b6SRobert Mustacchi u8 checksum; 65575eba5b6SRobert Mustacchi }; 65675eba5b6SRobert Mustacchi 65775eba5b6SRobert Mustacchi #define E1000_HI_MAX_DATA_LENGTH 252 65875eba5b6SRobert Mustacchi struct e1000_host_command_info { 65975eba5b6SRobert Mustacchi struct e1000_host_command_header command_header; 66075eba5b6SRobert Mustacchi u8 command_data[E1000_HI_MAX_DATA_LENGTH]; 66175eba5b6SRobert Mustacchi }; 66275eba5b6SRobert Mustacchi 66375eba5b6SRobert Mustacchi /* Host Interface "Rev 2" */ 66475eba5b6SRobert Mustacchi struct e1000_host_mng_command_header { 66575eba5b6SRobert Mustacchi u8 command_id; 66675eba5b6SRobert Mustacchi u8 checksum; 66775eba5b6SRobert Mustacchi u16 reserved1; 66875eba5b6SRobert Mustacchi u16 reserved2; 66975eba5b6SRobert Mustacchi u16 command_length; 67075eba5b6SRobert Mustacchi }; 67175eba5b6SRobert Mustacchi 67275eba5b6SRobert Mustacchi #define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8 67375eba5b6SRobert Mustacchi struct e1000_host_mng_command_info { 67475eba5b6SRobert Mustacchi struct e1000_host_mng_command_header command_header; 67575eba5b6SRobert Mustacchi u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH]; 67675eba5b6SRobert Mustacchi }; 67775eba5b6SRobert Mustacchi 67875eba5b6SRobert Mustacchi #include "e1000_mac.h" 67975eba5b6SRobert Mustacchi #include "e1000_phy.h" 68075eba5b6SRobert Mustacchi #include "e1000_nvm.h" 68175eba5b6SRobert Mustacchi #include "e1000_manage.h" 68275eba5b6SRobert Mustacchi #include "e1000_mbx.h" 68375eba5b6SRobert Mustacchi 68475eba5b6SRobert Mustacchi /* Function pointers for the MAC. */ 68575eba5b6SRobert Mustacchi struct e1000_mac_operations { 68675eba5b6SRobert Mustacchi s32 (*init_params)(struct e1000_hw *); 68775eba5b6SRobert Mustacchi s32 (*id_led_init)(struct e1000_hw *); 68875eba5b6SRobert Mustacchi s32 (*blink_led)(struct e1000_hw *); 68975eba5b6SRobert Mustacchi bool (*check_mng_mode)(struct e1000_hw *); 69075eba5b6SRobert Mustacchi s32 (*check_for_link)(struct e1000_hw *); 69175eba5b6SRobert Mustacchi s32 (*cleanup_led)(struct e1000_hw *); 69275eba5b6SRobert Mustacchi void (*clear_hw_cntrs)(struct e1000_hw *); 69375eba5b6SRobert Mustacchi void (*clear_vfta)(struct e1000_hw *); 69475eba5b6SRobert Mustacchi s32 (*get_bus_info)(struct e1000_hw *); 69575eba5b6SRobert Mustacchi void (*set_lan_id)(struct e1000_hw *); 69675eba5b6SRobert Mustacchi s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *); 69775eba5b6SRobert Mustacchi s32 (*led_on)(struct e1000_hw *); 69875eba5b6SRobert Mustacchi s32 (*led_off)(struct e1000_hw *); 69975eba5b6SRobert Mustacchi void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32); 70075eba5b6SRobert Mustacchi s32 (*reset_hw)(struct e1000_hw *); 70175eba5b6SRobert Mustacchi s32 (*init_hw)(struct e1000_hw *); 70275eba5b6SRobert Mustacchi void (*shutdown_serdes)(struct e1000_hw *); 70375eba5b6SRobert Mustacchi void (*power_up_serdes)(struct e1000_hw *); 70475eba5b6SRobert Mustacchi s32 (*setup_link)(struct e1000_hw *); 70575eba5b6SRobert Mustacchi s32 (*setup_physical_interface)(struct e1000_hw *); 70675eba5b6SRobert Mustacchi s32 (*setup_led)(struct e1000_hw *); 70775eba5b6SRobert Mustacchi void (*write_vfta)(struct e1000_hw *, u32, u32); 70875eba5b6SRobert Mustacchi void (*config_collision_dist)(struct e1000_hw *); 709c124a83eSRobert Mustacchi int (*rar_set)(struct e1000_hw *, u8*, u32); 71075eba5b6SRobert Mustacchi s32 (*read_mac_addr)(struct e1000_hw *); 71175eba5b6SRobert Mustacchi s32 (*validate_mdi_setting)(struct e1000_hw *); 71275eba5b6SRobert Mustacchi s32 (*set_obff_timer)(struct e1000_hw *, u32); 71375eba5b6SRobert Mustacchi s32 (*acquire_swfw_sync)(struct e1000_hw *, u16); 71475eba5b6SRobert Mustacchi void (*release_swfw_sync)(struct e1000_hw *, u16); 71575eba5b6SRobert Mustacchi }; 71675eba5b6SRobert Mustacchi 71775eba5b6SRobert Mustacchi /* When to use various PHY register access functions: 71875eba5b6SRobert Mustacchi * 71975eba5b6SRobert Mustacchi * Func Caller 72075eba5b6SRobert Mustacchi * Function Does Does When to use 72175eba5b6SRobert Mustacchi * ~~~~~~~~~~~~ ~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 72275eba5b6SRobert Mustacchi * X_reg L,P,A n/a for simple PHY reg accesses 72375eba5b6SRobert Mustacchi * X_reg_locked P,A L for multiple accesses of different regs 72475eba5b6SRobert Mustacchi * on different pages 72575eba5b6SRobert Mustacchi * X_reg_page A L,P for multiple accesses of different regs 72675eba5b6SRobert Mustacchi * on the same page 72775eba5b6SRobert Mustacchi * 72875eba5b6SRobert Mustacchi * Where X=[read|write], L=locking, P=sets page, A=register access 72975eba5b6SRobert Mustacchi * 73075eba5b6SRobert Mustacchi */ 73175eba5b6SRobert Mustacchi struct e1000_phy_operations { 73275eba5b6SRobert Mustacchi s32 (*init_params)(struct e1000_hw *); 73375eba5b6SRobert Mustacchi s32 (*acquire)(struct e1000_hw *); 73475eba5b6SRobert Mustacchi s32 (*cfg_on_link_up)(struct e1000_hw *); 73575eba5b6SRobert Mustacchi s32 (*check_polarity)(struct e1000_hw *); 73675eba5b6SRobert Mustacchi s32 (*check_reset_block)(struct e1000_hw *); 73775eba5b6SRobert Mustacchi s32 (*commit)(struct e1000_hw *); 73875eba5b6SRobert Mustacchi s32 (*force_speed_duplex)(struct e1000_hw *); 73975eba5b6SRobert Mustacchi s32 (*get_cfg_done)(struct e1000_hw *hw); 74075eba5b6SRobert Mustacchi s32 (*get_cable_length)(struct e1000_hw *); 74175eba5b6SRobert Mustacchi s32 (*get_info)(struct e1000_hw *); 74275eba5b6SRobert Mustacchi s32 (*set_page)(struct e1000_hw *, u16); 74375eba5b6SRobert Mustacchi s32 (*read_reg)(struct e1000_hw *, u32, u16 *); 74475eba5b6SRobert Mustacchi s32 (*read_reg_locked)(struct e1000_hw *, u32, u16 *); 74575eba5b6SRobert Mustacchi s32 (*read_reg_page)(struct e1000_hw *, u32, u16 *); 74675eba5b6SRobert Mustacchi void (*release)(struct e1000_hw *); 74775eba5b6SRobert Mustacchi s32 (*reset)(struct e1000_hw *); 74875eba5b6SRobert Mustacchi s32 (*set_d0_lplu_state)(struct e1000_hw *, bool); 74975eba5b6SRobert Mustacchi s32 (*set_d3_lplu_state)(struct e1000_hw *, bool); 75075eba5b6SRobert Mustacchi s32 (*write_reg)(struct e1000_hw *, u32, u16); 75175eba5b6SRobert Mustacchi s32 (*write_reg_locked)(struct e1000_hw *, u32, u16); 75275eba5b6SRobert Mustacchi s32 (*write_reg_page)(struct e1000_hw *, u32, u16); 75375eba5b6SRobert Mustacchi void (*power_up)(struct e1000_hw *); 75475eba5b6SRobert Mustacchi void (*power_down)(struct e1000_hw *); 75575eba5b6SRobert Mustacchi s32 (*read_i2c_byte)(struct e1000_hw *, u8, u8, u8 *); 75675eba5b6SRobert Mustacchi s32 (*write_i2c_byte)(struct e1000_hw *, u8, u8, u8); 75775eba5b6SRobert Mustacchi }; 75875eba5b6SRobert Mustacchi 75975eba5b6SRobert Mustacchi /* Function pointers for the NVM. */ 76075eba5b6SRobert Mustacchi struct e1000_nvm_operations { 76175eba5b6SRobert Mustacchi s32 (*init_params)(struct e1000_hw *); 76275eba5b6SRobert Mustacchi s32 (*acquire)(struct e1000_hw *); 76375eba5b6SRobert Mustacchi s32 (*read)(struct e1000_hw *, u16, u16, u16 *); 76475eba5b6SRobert Mustacchi void (*release)(struct e1000_hw *); 76575eba5b6SRobert Mustacchi void (*reload)(struct e1000_hw *); 76675eba5b6SRobert Mustacchi s32 (*update)(struct e1000_hw *); 76775eba5b6SRobert Mustacchi s32 (*valid_led_default)(struct e1000_hw *, u16 *); 76875eba5b6SRobert Mustacchi s32 (*validate)(struct e1000_hw *); 76975eba5b6SRobert Mustacchi s32 (*write)(struct e1000_hw *, u16, u16, u16 *); 77075eba5b6SRobert Mustacchi }; 77175eba5b6SRobert Mustacchi 77275eba5b6SRobert Mustacchi struct e1000_mac_info { 77375eba5b6SRobert Mustacchi struct e1000_mac_operations ops; 77475eba5b6SRobert Mustacchi u8 addr[ETH_ADDR_LEN]; 77575eba5b6SRobert Mustacchi u8 perm_addr[ETH_ADDR_LEN]; 77675eba5b6SRobert Mustacchi 77775eba5b6SRobert Mustacchi enum e1000_mac_type type; 77875eba5b6SRobert Mustacchi 77975eba5b6SRobert Mustacchi u32 collision_delta; 78075eba5b6SRobert Mustacchi u32 ledctl_default; 78175eba5b6SRobert Mustacchi u32 ledctl_mode1; 78275eba5b6SRobert Mustacchi u32 ledctl_mode2; 78375eba5b6SRobert Mustacchi u32 mc_filter_type; 78475eba5b6SRobert Mustacchi u32 tx_packet_delta; 78575eba5b6SRobert Mustacchi u32 txcw; 78675eba5b6SRobert Mustacchi 78775eba5b6SRobert Mustacchi u16 current_ifs_val; 78875eba5b6SRobert Mustacchi u16 ifs_max_val; 78975eba5b6SRobert Mustacchi u16 ifs_min_val; 79075eba5b6SRobert Mustacchi u16 ifs_ratio; 79175eba5b6SRobert Mustacchi u16 ifs_step_size; 79275eba5b6SRobert Mustacchi u16 mta_reg_count; 79375eba5b6SRobert Mustacchi u16 uta_reg_count; 79475eba5b6SRobert Mustacchi 79575eba5b6SRobert Mustacchi /* Maximum size of the MTA register table in all supported adapters */ 79675eba5b6SRobert Mustacchi #define MAX_MTA_REG 128 79775eba5b6SRobert Mustacchi u32 mta_shadow[MAX_MTA_REG]; 79875eba5b6SRobert Mustacchi u16 rar_entry_count; 79975eba5b6SRobert Mustacchi 80075eba5b6SRobert Mustacchi u8 forced_speed_duplex; 80175eba5b6SRobert Mustacchi 80275eba5b6SRobert Mustacchi bool adaptive_ifs; 80375eba5b6SRobert Mustacchi bool has_fwsm; 80475eba5b6SRobert Mustacchi bool arc_subsystem_valid; 80575eba5b6SRobert Mustacchi bool asf_firmware_present; 80675eba5b6SRobert Mustacchi bool autoneg; 80775eba5b6SRobert Mustacchi bool autoneg_failed; 80875eba5b6SRobert Mustacchi bool get_link_status; 80975eba5b6SRobert Mustacchi bool in_ifs_mode; 81075eba5b6SRobert Mustacchi bool report_tx_early; 81175eba5b6SRobert Mustacchi enum e1000_serdes_link_state serdes_link_state; 81275eba5b6SRobert Mustacchi bool serdes_has_link; 81375eba5b6SRobert Mustacchi bool tx_pkt_filtering; 81475eba5b6SRobert Mustacchi u32 max_frame_size; 81575eba5b6SRobert Mustacchi }; 81675eba5b6SRobert Mustacchi 81775eba5b6SRobert Mustacchi struct e1000_phy_info { 81875eba5b6SRobert Mustacchi struct e1000_phy_operations ops; 81975eba5b6SRobert Mustacchi enum e1000_phy_type type; 82075eba5b6SRobert Mustacchi 82175eba5b6SRobert Mustacchi enum e1000_1000t_rx_status local_rx; 82275eba5b6SRobert Mustacchi enum e1000_1000t_rx_status remote_rx; 82375eba5b6SRobert Mustacchi enum e1000_ms_type ms_type; 82475eba5b6SRobert Mustacchi enum e1000_ms_type original_ms_type; 82575eba5b6SRobert Mustacchi enum e1000_rev_polarity cable_polarity; 82675eba5b6SRobert Mustacchi enum e1000_smart_speed smart_speed; 82775eba5b6SRobert Mustacchi 82875eba5b6SRobert Mustacchi u32 addr; 82975eba5b6SRobert Mustacchi u32 id; 83075eba5b6SRobert Mustacchi u32 reset_delay_us; /* in usec */ 83175eba5b6SRobert Mustacchi u32 revision; 83275eba5b6SRobert Mustacchi 83375eba5b6SRobert Mustacchi enum e1000_media_type media_type; 83475eba5b6SRobert Mustacchi 83575eba5b6SRobert Mustacchi u16 autoneg_advertised; 83675eba5b6SRobert Mustacchi u16 autoneg_mask; 83775eba5b6SRobert Mustacchi u16 cable_length; 83875eba5b6SRobert Mustacchi u16 max_cable_length; 83975eba5b6SRobert Mustacchi u16 min_cable_length; 84075eba5b6SRobert Mustacchi 84175eba5b6SRobert Mustacchi u8 mdix; 84275eba5b6SRobert Mustacchi 84375eba5b6SRobert Mustacchi bool disable_polarity_correction; 84475eba5b6SRobert Mustacchi bool is_mdix; 84575eba5b6SRobert Mustacchi bool polarity_correction; 84675eba5b6SRobert Mustacchi bool speed_downgraded; 84775eba5b6SRobert Mustacchi bool autoneg_wait_to_complete; 84875eba5b6SRobert Mustacchi }; 84975eba5b6SRobert Mustacchi 85075eba5b6SRobert Mustacchi struct e1000_nvm_info { 85175eba5b6SRobert Mustacchi struct e1000_nvm_operations ops; 85275eba5b6SRobert Mustacchi enum e1000_nvm_type type; 85375eba5b6SRobert Mustacchi enum e1000_nvm_override override; 85475eba5b6SRobert Mustacchi 85575eba5b6SRobert Mustacchi u32 flash_bank_size; 85675eba5b6SRobert Mustacchi u32 flash_base_addr; 85775eba5b6SRobert Mustacchi 85875eba5b6SRobert Mustacchi u16 word_size; 85975eba5b6SRobert Mustacchi u16 delay_usec; 86075eba5b6SRobert Mustacchi u16 address_bits; 86175eba5b6SRobert Mustacchi u16 opcode_bits; 86275eba5b6SRobert Mustacchi u16 page_size; 86375eba5b6SRobert Mustacchi }; 86475eba5b6SRobert Mustacchi 86575eba5b6SRobert Mustacchi struct e1000_bus_info { 86675eba5b6SRobert Mustacchi enum e1000_bus_type type; 86775eba5b6SRobert Mustacchi enum e1000_bus_speed speed; 86875eba5b6SRobert Mustacchi enum e1000_bus_width width; 86975eba5b6SRobert Mustacchi 87075eba5b6SRobert Mustacchi u16 func; 87175eba5b6SRobert Mustacchi u16 pci_cmd_word; 87275eba5b6SRobert Mustacchi }; 87375eba5b6SRobert Mustacchi 87475eba5b6SRobert Mustacchi struct e1000_fc_info { 87575eba5b6SRobert Mustacchi u32 high_water; /* Flow control high-water mark */ 87675eba5b6SRobert Mustacchi u32 low_water; /* Flow control low-water mark */ 87775eba5b6SRobert Mustacchi u16 pause_time; /* Flow control pause timer */ 87875eba5b6SRobert Mustacchi u16 refresh_time; /* Flow control refresh timer */ 87975eba5b6SRobert Mustacchi bool send_xon; /* Flow control send XON */ 88075eba5b6SRobert Mustacchi bool strict_ieee; /* Strict IEEE mode */ 88175eba5b6SRobert Mustacchi enum e1000_fc_mode current_mode; /* FC mode in effect */ 88275eba5b6SRobert Mustacchi enum e1000_fc_mode requested_mode; /* FC mode requested by caller */ 88375eba5b6SRobert Mustacchi }; 88475eba5b6SRobert Mustacchi 88575eba5b6SRobert Mustacchi struct e1000_mbx_operations { 88675eba5b6SRobert Mustacchi s32 (*init_params)(struct e1000_hw *hw); 88775eba5b6SRobert Mustacchi s32 (*read)(struct e1000_hw *, u32 *, u16, u16); 88875eba5b6SRobert Mustacchi s32 (*write)(struct e1000_hw *, u32 *, u16, u16); 88975eba5b6SRobert Mustacchi s32 (*read_posted)(struct e1000_hw *, u32 *, u16, u16); 89075eba5b6SRobert Mustacchi s32 (*write_posted)(struct e1000_hw *, u32 *, u16, u16); 89175eba5b6SRobert Mustacchi s32 (*check_for_msg)(struct e1000_hw *, u16); 89275eba5b6SRobert Mustacchi s32 (*check_for_ack)(struct e1000_hw *, u16); 89375eba5b6SRobert Mustacchi s32 (*check_for_rst)(struct e1000_hw *, u16); 89475eba5b6SRobert Mustacchi }; 89575eba5b6SRobert Mustacchi 89675eba5b6SRobert Mustacchi struct e1000_mbx_stats { 89775eba5b6SRobert Mustacchi u32 msgs_tx; 89875eba5b6SRobert Mustacchi u32 msgs_rx; 89975eba5b6SRobert Mustacchi 90075eba5b6SRobert Mustacchi u32 acks; 90175eba5b6SRobert Mustacchi u32 reqs; 90275eba5b6SRobert Mustacchi u32 rsts; 90375eba5b6SRobert Mustacchi }; 90475eba5b6SRobert Mustacchi 90575eba5b6SRobert Mustacchi struct e1000_mbx_info { 90675eba5b6SRobert Mustacchi struct e1000_mbx_operations ops; 90775eba5b6SRobert Mustacchi struct e1000_mbx_stats stats; 90875eba5b6SRobert Mustacchi u32 timeout; 90975eba5b6SRobert Mustacchi u32 usec_delay; 91075eba5b6SRobert Mustacchi u16 size; 91175eba5b6SRobert Mustacchi }; 91275eba5b6SRobert Mustacchi 91375eba5b6SRobert Mustacchi struct e1000_dev_spec_82541 { 91475eba5b6SRobert Mustacchi enum e1000_dsp_config dsp_config; 91575eba5b6SRobert Mustacchi enum e1000_ffe_config ffe_config; 91675eba5b6SRobert Mustacchi u32 tx_fifo_head; 91775eba5b6SRobert Mustacchi u32 tx_fifo_start; 91875eba5b6SRobert Mustacchi u32 tx_fifo_size; 91975eba5b6SRobert Mustacchi u16 dsp_reset_counter; 92075eba5b6SRobert Mustacchi u16 spd_default; 92175eba5b6SRobert Mustacchi bool phy_init_script; 92275eba5b6SRobert Mustacchi bool ttl_workaround; 92375eba5b6SRobert Mustacchi }; 92475eba5b6SRobert Mustacchi 92575eba5b6SRobert Mustacchi struct e1000_dev_spec_82542 { 92675eba5b6SRobert Mustacchi bool dma_fairness; 92775eba5b6SRobert Mustacchi }; 92875eba5b6SRobert Mustacchi 92975eba5b6SRobert Mustacchi struct e1000_dev_spec_82543 { 93075eba5b6SRobert Mustacchi u32 tbi_compatibility; 93175eba5b6SRobert Mustacchi bool dma_fairness; 93275eba5b6SRobert Mustacchi bool init_phy_disabled; 93375eba5b6SRobert Mustacchi }; 93475eba5b6SRobert Mustacchi 93575eba5b6SRobert Mustacchi struct e1000_dev_spec_82571 { 93675eba5b6SRobert Mustacchi bool laa_is_present; 93775eba5b6SRobert Mustacchi u32 smb_counter; 93875eba5b6SRobert Mustacchi E1000_MUTEX swflag_mutex; 93975eba5b6SRobert Mustacchi }; 94075eba5b6SRobert Mustacchi 94175eba5b6SRobert Mustacchi struct e1000_dev_spec_80003es2lan { 94275eba5b6SRobert Mustacchi bool mdic_wa_enable; 94375eba5b6SRobert Mustacchi }; 94475eba5b6SRobert Mustacchi 94575eba5b6SRobert Mustacchi struct e1000_shadow_ram { 94675eba5b6SRobert Mustacchi u16 value; 94775eba5b6SRobert Mustacchi bool modified; 94875eba5b6SRobert Mustacchi }; 94975eba5b6SRobert Mustacchi 95075eba5b6SRobert Mustacchi #define E1000_SHADOW_RAM_WORDS 2048 95175eba5b6SRobert Mustacchi 952c124a83eSRobert Mustacchi /* I218 PHY Ultra Low Power (ULP) states */ 953c124a83eSRobert Mustacchi enum e1000_ulp_state { 954c124a83eSRobert Mustacchi e1000_ulp_state_unknown, 955c124a83eSRobert Mustacchi e1000_ulp_state_off, 956c124a83eSRobert Mustacchi e1000_ulp_state_on, 957c124a83eSRobert Mustacchi }; 958c124a83eSRobert Mustacchi 95975eba5b6SRobert Mustacchi struct e1000_dev_spec_ich8lan { 96075eba5b6SRobert Mustacchi bool kmrn_lock_loss_workaround_enabled; 96175eba5b6SRobert Mustacchi struct e1000_shadow_ram shadow_ram[E1000_SHADOW_RAM_WORDS]; 96275eba5b6SRobert Mustacchi E1000_MUTEX nvm_mutex; 96375eba5b6SRobert Mustacchi E1000_MUTEX swflag_mutex; 96475eba5b6SRobert Mustacchi bool nvm_k1_enabled; 96575eba5b6SRobert Mustacchi bool eee_disable; 96675eba5b6SRobert Mustacchi u16 eee_lp_ability; 967c124a83eSRobert Mustacchi enum e1000_ulp_state ulp_state; 96875eba5b6SRobert Mustacchi }; 96975eba5b6SRobert Mustacchi 97075eba5b6SRobert Mustacchi struct e1000_dev_spec_82575 { 97175eba5b6SRobert Mustacchi bool sgmii_active; 97275eba5b6SRobert Mustacchi bool global_device_reset; 97375eba5b6SRobert Mustacchi bool eee_disable; 97475eba5b6SRobert Mustacchi bool module_plugged; 97575eba5b6SRobert Mustacchi bool clear_semaphore_once; 97675eba5b6SRobert Mustacchi u32 mtu; 97775eba5b6SRobert Mustacchi struct sfp_e1000_flags eth_flags; 978c124a83eSRobert Mustacchi u8 media_port; 979c124a83eSRobert Mustacchi bool media_changed; 98075eba5b6SRobert Mustacchi }; 98175eba5b6SRobert Mustacchi 98275eba5b6SRobert Mustacchi struct e1000_dev_spec_vf { 98375eba5b6SRobert Mustacchi u32 vf_number; 98475eba5b6SRobert Mustacchi u32 v2p_mailbox; 98575eba5b6SRobert Mustacchi }; 98675eba5b6SRobert Mustacchi 98775eba5b6SRobert Mustacchi struct e1000_hw { 98875eba5b6SRobert Mustacchi void *back; 98975eba5b6SRobert Mustacchi 99075eba5b6SRobert Mustacchi u8 *hw_addr; 99175eba5b6SRobert Mustacchi u8 *flash_address; 99275eba5b6SRobert Mustacchi unsigned long io_base; 99375eba5b6SRobert Mustacchi 99475eba5b6SRobert Mustacchi struct e1000_mac_info mac; 99575eba5b6SRobert Mustacchi struct e1000_fc_info fc; 99675eba5b6SRobert Mustacchi struct e1000_phy_info phy; 99775eba5b6SRobert Mustacchi struct e1000_nvm_info nvm; 99875eba5b6SRobert Mustacchi struct e1000_bus_info bus; 99975eba5b6SRobert Mustacchi struct e1000_mbx_info mbx; 100075eba5b6SRobert Mustacchi struct e1000_host_mng_dhcp_cookie mng_cookie; 100175eba5b6SRobert Mustacchi 100275eba5b6SRobert Mustacchi union { 100375eba5b6SRobert Mustacchi struct e1000_dev_spec_82541 _82541; 100475eba5b6SRobert Mustacchi struct e1000_dev_spec_82542 _82542; 100575eba5b6SRobert Mustacchi struct e1000_dev_spec_82543 _82543; 100675eba5b6SRobert Mustacchi struct e1000_dev_spec_82571 _82571; 100775eba5b6SRobert Mustacchi struct e1000_dev_spec_80003es2lan _80003es2lan; 100875eba5b6SRobert Mustacchi struct e1000_dev_spec_ich8lan ich8lan; 100975eba5b6SRobert Mustacchi struct e1000_dev_spec_82575 _82575; 101075eba5b6SRobert Mustacchi struct e1000_dev_spec_vf vf; 101175eba5b6SRobert Mustacchi } dev_spec; 101275eba5b6SRobert Mustacchi 101375eba5b6SRobert Mustacchi u16 device_id; 101475eba5b6SRobert Mustacchi u16 subsystem_vendor_id; 101575eba5b6SRobert Mustacchi u16 subsystem_device_id; 101675eba5b6SRobert Mustacchi u16 vendor_id; 101775eba5b6SRobert Mustacchi 101875eba5b6SRobert Mustacchi u8 revision_id; 101975eba5b6SRobert Mustacchi }; 102075eba5b6SRobert Mustacchi 102175eba5b6SRobert Mustacchi #include "e1000_82541.h" 102275eba5b6SRobert Mustacchi #include "e1000_82543.h" 102375eba5b6SRobert Mustacchi #include "e1000_82571.h" 102475eba5b6SRobert Mustacchi #include "e1000_80003es2lan.h" 102575eba5b6SRobert Mustacchi #include "e1000_ich8lan.h" 102675eba5b6SRobert Mustacchi #include "e1000_82575.h" 102775eba5b6SRobert Mustacchi #include "e1000_i210.h" 102875eba5b6SRobert Mustacchi 102975eba5b6SRobert Mustacchi /* These functions must be implemented by drivers */ 103075eba5b6SRobert Mustacchi void e1000_pci_clear_mwi(struct e1000_hw *hw); 103175eba5b6SRobert Mustacchi void e1000_pci_set_mwi(struct e1000_hw *hw); 103275eba5b6SRobert Mustacchi s32 e1000_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); 103375eba5b6SRobert Mustacchi s32 e1000_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); 103475eba5b6SRobert Mustacchi void e1000_read_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 103575eba5b6SRobert Mustacchi void e1000_write_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 103675eba5b6SRobert Mustacchi 103775eba5b6SRobert Mustacchi #endif 1038