18cfa0ad2SJack F Vogel /****************************************************************************** 28cfa0ad2SJack F Vogel 3d035aa2dSJack F Vogel Copyright (c) 2001-2009, 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 988cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_COPPER_DPT 0x1096 998cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT 0x1098 1008cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_COPPER_SPT 0x10BA 1018cfa0ad2SJack F Vogel #define E1000_DEV_ID_80003ES2LAN_SERDES_SPT 0x10BB 1028cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_M_AMT 0x1049 1038cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_AMT 0x104A 1048cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_C 0x104B 1058cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE 0x104C 1068cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE_GT 0x10C4 1078cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IFE_G 0x10C5 1088cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH8_IGP_M 0x104D 1098cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M 0x10BF 1108cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M_AMT 0x10F5 1118cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_M_V 0x10CB 1128cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_AMT 0x10BD 1138cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_BM 0x10E5 1148cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IGP_C 0x294C 1158cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE 0x10C0 1168cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE_GT 0x10C3 1178cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH9_IFE_G 0x10C2 1188cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_LM 0x10CC 1198cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_LF 0x10CD 1208cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_R_BM_V 0x10CE 1218cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_D_BM_LM 0x10DE 1228cfa0ad2SJack F Vogel #define E1000_DEV_ID_ICH10_D_BM_LF 0x10DF 1238cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576 0x10C9 1248cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_FIBER 0x10E6 1258cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_SERDES 0x10E7 1268cfa0ad2SJack F Vogel #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 127d035aa2dSJack F Vogel #define E1000_DEV_ID_82576_NS 0x150A 1288cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575EB_COPPER 0x10A7 1298cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 1308cfa0ad2SJack F Vogel #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 131d035aa2dSJack F Vogel #define E1000_DEV_ID_82575GB_QUAD_COPPER_PM 0x10E2 1328cfa0ad2SJack F Vogel #define E1000_REVISION_0 0 1338cfa0ad2SJack F Vogel #define E1000_REVISION_1 1 1348cfa0ad2SJack F Vogel #define E1000_REVISION_2 2 1358cfa0ad2SJack F Vogel #define E1000_REVISION_3 3 1368cfa0ad2SJack F Vogel #define E1000_REVISION_4 4 1378cfa0ad2SJack F Vogel 1388cfa0ad2SJack F Vogel #define E1000_FUNC_0 0 1398cfa0ad2SJack F Vogel #define E1000_FUNC_1 1 1408cfa0ad2SJack F Vogel 141d035aa2dSJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0 0 142d035aa2dSJack F Vogel #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1 3 143d035aa2dSJack F Vogel 1448cfa0ad2SJack F Vogel enum e1000_mac_type { 1458cfa0ad2SJack F Vogel e1000_undefined = 0, 1468cfa0ad2SJack F Vogel e1000_82542, 1478cfa0ad2SJack F Vogel e1000_82543, 1488cfa0ad2SJack F Vogel e1000_82544, 1498cfa0ad2SJack F Vogel e1000_82540, 1508cfa0ad2SJack F Vogel e1000_82545, 1518cfa0ad2SJack F Vogel e1000_82545_rev_3, 1528cfa0ad2SJack F Vogel e1000_82546, 1538cfa0ad2SJack F Vogel e1000_82546_rev_3, 1548cfa0ad2SJack F Vogel e1000_82541, 1558cfa0ad2SJack F Vogel e1000_82541_rev_2, 1568cfa0ad2SJack F Vogel e1000_82547, 1578cfa0ad2SJack F Vogel e1000_82547_rev_2, 1588cfa0ad2SJack F Vogel e1000_82571, 1598cfa0ad2SJack F Vogel e1000_82572, 1608cfa0ad2SJack F Vogel e1000_82573, 1618cfa0ad2SJack F Vogel e1000_82574, 1628cfa0ad2SJack F Vogel e1000_80003es2lan, 1638cfa0ad2SJack F Vogel e1000_ich8lan, 1648cfa0ad2SJack F Vogel e1000_ich9lan, 1658cfa0ad2SJack F Vogel e1000_ich10lan, 1668cfa0ad2SJack F Vogel e1000_82575, 1678cfa0ad2SJack F Vogel e1000_82576, 1688cfa0ad2SJack F Vogel e1000_num_macs /* List is 1-based, so subtract 1 for TRUE count. */ 1698cfa0ad2SJack F Vogel }; 1708cfa0ad2SJack F Vogel 1718cfa0ad2SJack F Vogel enum e1000_media_type { 1728cfa0ad2SJack F Vogel e1000_media_type_unknown = 0, 1738cfa0ad2SJack F Vogel e1000_media_type_copper = 1, 1748cfa0ad2SJack F Vogel e1000_media_type_fiber = 2, 1758cfa0ad2SJack F Vogel e1000_media_type_internal_serdes = 3, 1768cfa0ad2SJack F Vogel e1000_num_media_types 1778cfa0ad2SJack F Vogel }; 1788cfa0ad2SJack F Vogel 1798cfa0ad2SJack F Vogel enum e1000_nvm_type { 1808cfa0ad2SJack F Vogel e1000_nvm_unknown = 0, 1818cfa0ad2SJack F Vogel e1000_nvm_none, 1828cfa0ad2SJack F Vogel e1000_nvm_eeprom_spi, 1838cfa0ad2SJack F Vogel e1000_nvm_eeprom_microwire, 1848cfa0ad2SJack F Vogel e1000_nvm_flash_hw, 1858cfa0ad2SJack F Vogel e1000_nvm_flash_sw 1868cfa0ad2SJack F Vogel }; 1878cfa0ad2SJack F Vogel 1888cfa0ad2SJack F Vogel enum e1000_nvm_override { 1898cfa0ad2SJack F Vogel e1000_nvm_override_none = 0, 1908cfa0ad2SJack F Vogel e1000_nvm_override_spi_small, 1918cfa0ad2SJack F Vogel e1000_nvm_override_spi_large, 1928cfa0ad2SJack F Vogel e1000_nvm_override_microwire_small, 1938cfa0ad2SJack F Vogel e1000_nvm_override_microwire_large 1948cfa0ad2SJack F Vogel }; 1958cfa0ad2SJack F Vogel 1968cfa0ad2SJack F Vogel enum e1000_phy_type { 1978cfa0ad2SJack F Vogel e1000_phy_unknown = 0, 1988cfa0ad2SJack F Vogel e1000_phy_none, 1998cfa0ad2SJack F Vogel e1000_phy_m88, 2008cfa0ad2SJack F Vogel e1000_phy_igp, 2018cfa0ad2SJack F Vogel e1000_phy_igp_2, 2028cfa0ad2SJack F Vogel e1000_phy_gg82563, 2038cfa0ad2SJack F Vogel e1000_phy_igp_3, 2048cfa0ad2SJack F Vogel e1000_phy_ife, 2058cfa0ad2SJack F Vogel e1000_phy_bm, 2068cfa0ad2SJack F Vogel e1000_phy_vf, 2078cfa0ad2SJack F Vogel }; 2088cfa0ad2SJack F Vogel 2098cfa0ad2SJack F Vogel enum e1000_bus_type { 2108cfa0ad2SJack F Vogel e1000_bus_type_unknown = 0, 2118cfa0ad2SJack F Vogel e1000_bus_type_pci, 2128cfa0ad2SJack F Vogel e1000_bus_type_pcix, 2138cfa0ad2SJack F Vogel e1000_bus_type_pci_express, 2148cfa0ad2SJack F Vogel e1000_bus_type_reserved 2158cfa0ad2SJack F Vogel }; 2168cfa0ad2SJack F Vogel 2178cfa0ad2SJack F Vogel enum e1000_bus_speed { 2188cfa0ad2SJack F Vogel e1000_bus_speed_unknown = 0, 2198cfa0ad2SJack F Vogel e1000_bus_speed_33, 2208cfa0ad2SJack F Vogel e1000_bus_speed_66, 2218cfa0ad2SJack F Vogel e1000_bus_speed_100, 2228cfa0ad2SJack F Vogel e1000_bus_speed_120, 2238cfa0ad2SJack F Vogel e1000_bus_speed_133, 2248cfa0ad2SJack F Vogel e1000_bus_speed_2500, 2258cfa0ad2SJack F Vogel e1000_bus_speed_5000, 2268cfa0ad2SJack F Vogel e1000_bus_speed_reserved 2278cfa0ad2SJack F Vogel }; 2288cfa0ad2SJack F Vogel 2298cfa0ad2SJack F Vogel enum e1000_bus_width { 2308cfa0ad2SJack F Vogel e1000_bus_width_unknown = 0, 2318cfa0ad2SJack F Vogel e1000_bus_width_pcie_x1, 2328cfa0ad2SJack F Vogel e1000_bus_width_pcie_x2, 2338cfa0ad2SJack F Vogel e1000_bus_width_pcie_x4 = 4, 2348cfa0ad2SJack F Vogel e1000_bus_width_pcie_x8 = 8, 2358cfa0ad2SJack F Vogel e1000_bus_width_32, 2368cfa0ad2SJack F Vogel e1000_bus_width_64, 2378cfa0ad2SJack F Vogel e1000_bus_width_reserved 2388cfa0ad2SJack F Vogel }; 2398cfa0ad2SJack F Vogel 2408cfa0ad2SJack F Vogel enum e1000_1000t_rx_status { 2418cfa0ad2SJack F Vogel e1000_1000t_rx_status_not_ok = 0, 2428cfa0ad2SJack F Vogel e1000_1000t_rx_status_ok, 2438cfa0ad2SJack F Vogel e1000_1000t_rx_status_undefined = 0xFF 2448cfa0ad2SJack F Vogel }; 2458cfa0ad2SJack F Vogel 2468cfa0ad2SJack F Vogel enum e1000_rev_polarity { 2478cfa0ad2SJack F Vogel e1000_rev_polarity_normal = 0, 2488cfa0ad2SJack F Vogel e1000_rev_polarity_reversed, 2498cfa0ad2SJack F Vogel e1000_rev_polarity_undefined = 0xFF 2508cfa0ad2SJack F Vogel }; 2518cfa0ad2SJack F Vogel 252daf9197cSJack F Vogel enum e1000_fc_mode { 2538cfa0ad2SJack F Vogel e1000_fc_none = 0, 2548cfa0ad2SJack F Vogel e1000_fc_rx_pause, 2558cfa0ad2SJack F Vogel e1000_fc_tx_pause, 2568cfa0ad2SJack F Vogel e1000_fc_full, 2578cfa0ad2SJack F Vogel e1000_fc_default = 0xFF 2588cfa0ad2SJack F Vogel }; 2598cfa0ad2SJack F Vogel 2608cfa0ad2SJack F Vogel enum e1000_ffe_config { 2618cfa0ad2SJack F Vogel e1000_ffe_config_enabled = 0, 2628cfa0ad2SJack F Vogel e1000_ffe_config_active, 2638cfa0ad2SJack F Vogel e1000_ffe_config_blocked 2648cfa0ad2SJack F Vogel }; 2658cfa0ad2SJack F Vogel 2668cfa0ad2SJack F Vogel enum e1000_dsp_config { 2678cfa0ad2SJack F Vogel e1000_dsp_config_disabled = 0, 2688cfa0ad2SJack F Vogel e1000_dsp_config_enabled, 2698cfa0ad2SJack F Vogel e1000_dsp_config_activated, 2708cfa0ad2SJack F Vogel e1000_dsp_config_undefined = 0xFF 2718cfa0ad2SJack F Vogel }; 2728cfa0ad2SJack F Vogel 273daf9197cSJack F Vogel enum e1000_ms_type { 274daf9197cSJack F Vogel e1000_ms_hw_default = 0, 275daf9197cSJack F Vogel e1000_ms_force_master, 276daf9197cSJack F Vogel e1000_ms_force_slave, 277daf9197cSJack F Vogel e1000_ms_auto 278daf9197cSJack F Vogel }; 279daf9197cSJack F Vogel 280daf9197cSJack F Vogel enum e1000_smart_speed { 281daf9197cSJack F Vogel e1000_smart_speed_default = 0, 282daf9197cSJack F Vogel e1000_smart_speed_on, 283daf9197cSJack F Vogel e1000_smart_speed_off 284daf9197cSJack F Vogel }; 285daf9197cSJack F Vogel 286d035aa2dSJack F Vogel enum e1000_serdes_link_state { 287d035aa2dSJack F Vogel e1000_serdes_link_down = 0, 288d035aa2dSJack F Vogel e1000_serdes_link_autoneg_progress, 289d035aa2dSJack F Vogel e1000_serdes_link_autoneg_complete, 290d035aa2dSJack F Vogel e1000_serdes_link_forced_up 291d035aa2dSJack F Vogel }; 292d035aa2dSJack F Vogel 2938cfa0ad2SJack F Vogel /* Receive Descriptor */ 2948cfa0ad2SJack F Vogel struct e1000_rx_desc { 295daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's data buffer */ 296daf9197cSJack F Vogel __le16 length; /* Length of data DMAed into data buffer */ 297daf9197cSJack F Vogel __le16 csum; /* Packet checksum */ 2988cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 2998cfa0ad2SJack F Vogel u8 errors; /* Descriptor Errors */ 300daf9197cSJack F Vogel __le16 special; 3018cfa0ad2SJack F Vogel }; 3028cfa0ad2SJack F Vogel 3038cfa0ad2SJack F Vogel /* Receive Descriptor - Extended */ 3048cfa0ad2SJack F Vogel union e1000_rx_desc_extended { 3058cfa0ad2SJack F Vogel struct { 306daf9197cSJack F Vogel __le64 buffer_addr; 307daf9197cSJack F Vogel __le64 reserved; 3088cfa0ad2SJack F Vogel } read; 3098cfa0ad2SJack F Vogel struct { 3108cfa0ad2SJack F Vogel struct { 311daf9197cSJack F Vogel __le32 mrq; /* Multiple Rx Queues */ 3128cfa0ad2SJack F Vogel union { 313daf9197cSJack F Vogel __le32 rss; /* RSS Hash */ 3148cfa0ad2SJack F Vogel struct { 315daf9197cSJack F Vogel __le16 ip_id; /* IP id */ 316daf9197cSJack F Vogel __le16 csum; /* Packet Checksum */ 3178cfa0ad2SJack F Vogel } csum_ip; 3188cfa0ad2SJack F Vogel } hi_dword; 3198cfa0ad2SJack F Vogel } lower; 3208cfa0ad2SJack F Vogel struct { 321daf9197cSJack F Vogel __le32 status_error; /* ext status/error */ 322daf9197cSJack F Vogel __le16 length; 323daf9197cSJack F Vogel __le16 vlan; /* VLAN tag */ 3248cfa0ad2SJack F Vogel } upper; 3258cfa0ad2SJack F Vogel } wb; /* writeback */ 3268cfa0ad2SJack F Vogel }; 3278cfa0ad2SJack F Vogel 3288cfa0ad2SJack F Vogel #define MAX_PS_BUFFERS 4 3298cfa0ad2SJack F Vogel /* Receive Descriptor - Packet Split */ 3308cfa0ad2SJack F Vogel union e1000_rx_desc_packet_split { 3318cfa0ad2SJack F Vogel struct { 3328cfa0ad2SJack F Vogel /* one buffer for protocol header(s), three data buffers */ 333daf9197cSJack F Vogel __le64 buffer_addr[MAX_PS_BUFFERS]; 3348cfa0ad2SJack F Vogel } read; 3358cfa0ad2SJack F Vogel struct { 3368cfa0ad2SJack F Vogel struct { 337daf9197cSJack F Vogel __le32 mrq; /* Multiple Rx Queues */ 3388cfa0ad2SJack F Vogel union { 339daf9197cSJack F Vogel __le32 rss; /* RSS Hash */ 3408cfa0ad2SJack F Vogel struct { 341daf9197cSJack F Vogel __le16 ip_id; /* IP id */ 342daf9197cSJack F Vogel __le16 csum; /* Packet Checksum */ 3438cfa0ad2SJack F Vogel } csum_ip; 3448cfa0ad2SJack F Vogel } hi_dword; 3458cfa0ad2SJack F Vogel } lower; 3468cfa0ad2SJack F Vogel struct { 347daf9197cSJack F Vogel __le32 status_error; /* ext status/error */ 348daf9197cSJack F Vogel __le16 length0; /* length of buffer 0 */ 349daf9197cSJack F Vogel __le16 vlan; /* VLAN tag */ 3508cfa0ad2SJack F Vogel } middle; 3518cfa0ad2SJack F Vogel struct { 352daf9197cSJack F Vogel __le16 header_status; 353daf9197cSJack F Vogel __le16 length[3]; /* length of buffers 1-3 */ 3548cfa0ad2SJack F Vogel } upper; 355daf9197cSJack F Vogel __le64 reserved; 3568cfa0ad2SJack F Vogel } wb; /* writeback */ 3578cfa0ad2SJack F Vogel }; 3588cfa0ad2SJack F Vogel 3598cfa0ad2SJack F Vogel /* Transmit Descriptor */ 3608cfa0ad2SJack F Vogel struct e1000_tx_desc { 361daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's data buffer */ 3628cfa0ad2SJack F Vogel union { 363daf9197cSJack F Vogel __le32 data; 3648cfa0ad2SJack F Vogel struct { 365daf9197cSJack F Vogel __le16 length; /* Data buffer length */ 3668cfa0ad2SJack F Vogel u8 cso; /* Checksum offset */ 3678cfa0ad2SJack F Vogel u8 cmd; /* Descriptor control */ 3688cfa0ad2SJack F Vogel } flags; 3698cfa0ad2SJack F Vogel } lower; 3708cfa0ad2SJack F Vogel union { 371daf9197cSJack F Vogel __le32 data; 3728cfa0ad2SJack F Vogel struct { 3738cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 3748cfa0ad2SJack F Vogel u8 css; /* Checksum start */ 375daf9197cSJack F Vogel __le16 special; 3768cfa0ad2SJack F Vogel } fields; 3778cfa0ad2SJack F Vogel } upper; 3788cfa0ad2SJack F Vogel }; 3798cfa0ad2SJack F Vogel 3808cfa0ad2SJack F Vogel /* Offload Context Descriptor */ 3818cfa0ad2SJack F Vogel struct e1000_context_desc { 3828cfa0ad2SJack F Vogel union { 383daf9197cSJack F Vogel __le32 ip_config; 3848cfa0ad2SJack F Vogel struct { 3858cfa0ad2SJack F Vogel u8 ipcss; /* IP checksum start */ 3868cfa0ad2SJack F Vogel u8 ipcso; /* IP checksum offset */ 387daf9197cSJack F Vogel __le16 ipcse; /* IP checksum end */ 3888cfa0ad2SJack F Vogel } ip_fields; 3898cfa0ad2SJack F Vogel } lower_setup; 3908cfa0ad2SJack F Vogel union { 391daf9197cSJack F Vogel __le32 tcp_config; 3928cfa0ad2SJack F Vogel struct { 3938cfa0ad2SJack F Vogel u8 tucss; /* TCP checksum start */ 3948cfa0ad2SJack F Vogel u8 tucso; /* TCP checksum offset */ 395daf9197cSJack F Vogel __le16 tucse; /* TCP checksum end */ 3968cfa0ad2SJack F Vogel } tcp_fields; 3978cfa0ad2SJack F Vogel } upper_setup; 398daf9197cSJack F Vogel __le32 cmd_and_length; 3998cfa0ad2SJack F Vogel union { 400daf9197cSJack F Vogel __le32 data; 4018cfa0ad2SJack F Vogel struct { 4028cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 4038cfa0ad2SJack F Vogel u8 hdr_len; /* Header length */ 404daf9197cSJack F Vogel __le16 mss; /* Maximum segment size */ 4058cfa0ad2SJack F Vogel } fields; 4068cfa0ad2SJack F Vogel } tcp_seg_setup; 4078cfa0ad2SJack F Vogel }; 4088cfa0ad2SJack F Vogel 4098cfa0ad2SJack F Vogel /* Offload data descriptor */ 4108cfa0ad2SJack F Vogel struct e1000_data_desc { 411daf9197cSJack F Vogel __le64 buffer_addr; /* Address of the descriptor's buffer address */ 4128cfa0ad2SJack F Vogel union { 413daf9197cSJack F Vogel __le32 data; 4148cfa0ad2SJack F Vogel struct { 415daf9197cSJack F Vogel __le16 length; /* Data buffer length */ 4168cfa0ad2SJack F Vogel u8 typ_len_ext; 4178cfa0ad2SJack F Vogel u8 cmd; 4188cfa0ad2SJack F Vogel } flags; 4198cfa0ad2SJack F Vogel } lower; 4208cfa0ad2SJack F Vogel union { 421daf9197cSJack F Vogel __le32 data; 4228cfa0ad2SJack F Vogel struct { 4238cfa0ad2SJack F Vogel u8 status; /* Descriptor status */ 4248cfa0ad2SJack F Vogel u8 popts; /* Packet Options */ 425daf9197cSJack F Vogel __le16 special; 4268cfa0ad2SJack F Vogel } fields; 4278cfa0ad2SJack F Vogel } upper; 4288cfa0ad2SJack F Vogel }; 4298cfa0ad2SJack F Vogel 4308cfa0ad2SJack F Vogel /* Statistics counters collected by the MAC */ 4318cfa0ad2SJack F Vogel struct e1000_hw_stats { 4328cfa0ad2SJack F Vogel u64 crcerrs; 4338cfa0ad2SJack F Vogel u64 algnerrc; 4348cfa0ad2SJack F Vogel u64 symerrs; 4358cfa0ad2SJack F Vogel u64 rxerrc; 4368cfa0ad2SJack F Vogel u64 mpc; 4378cfa0ad2SJack F Vogel u64 scc; 4388cfa0ad2SJack F Vogel u64 ecol; 4398cfa0ad2SJack F Vogel u64 mcc; 4408cfa0ad2SJack F Vogel u64 latecol; 4418cfa0ad2SJack F Vogel u64 colc; 4428cfa0ad2SJack F Vogel u64 dc; 4438cfa0ad2SJack F Vogel u64 tncrs; 4448cfa0ad2SJack F Vogel u64 sec; 4458cfa0ad2SJack F Vogel u64 cexterr; 4468cfa0ad2SJack F Vogel u64 rlec; 4478cfa0ad2SJack F Vogel u64 xonrxc; 4488cfa0ad2SJack F Vogel u64 xontxc; 4498cfa0ad2SJack F Vogel u64 xoffrxc; 4508cfa0ad2SJack F Vogel u64 xofftxc; 4518cfa0ad2SJack F Vogel u64 fcruc; 4528cfa0ad2SJack F Vogel u64 prc64; 4538cfa0ad2SJack F Vogel u64 prc127; 4548cfa0ad2SJack F Vogel u64 prc255; 4558cfa0ad2SJack F Vogel u64 prc511; 4568cfa0ad2SJack F Vogel u64 prc1023; 4578cfa0ad2SJack F Vogel u64 prc1522; 4588cfa0ad2SJack F Vogel u64 gprc; 4598cfa0ad2SJack F Vogel u64 bprc; 4608cfa0ad2SJack F Vogel u64 mprc; 4618cfa0ad2SJack F Vogel u64 gptc; 4628cfa0ad2SJack F Vogel u64 gorc; 4638cfa0ad2SJack F Vogel u64 gotc; 4648cfa0ad2SJack F Vogel u64 rnbc; 4658cfa0ad2SJack F Vogel u64 ruc; 4668cfa0ad2SJack F Vogel u64 rfc; 4678cfa0ad2SJack F Vogel u64 roc; 4688cfa0ad2SJack F Vogel u64 rjc; 4698cfa0ad2SJack F Vogel u64 mgprc; 4708cfa0ad2SJack F Vogel u64 mgpdc; 4718cfa0ad2SJack F Vogel u64 mgptc; 4728cfa0ad2SJack F Vogel u64 tor; 4738cfa0ad2SJack F Vogel u64 tot; 4748cfa0ad2SJack F Vogel u64 tpr; 4758cfa0ad2SJack F Vogel u64 tpt; 4768cfa0ad2SJack F Vogel u64 ptc64; 4778cfa0ad2SJack F Vogel u64 ptc127; 4788cfa0ad2SJack F Vogel u64 ptc255; 4798cfa0ad2SJack F Vogel u64 ptc511; 4808cfa0ad2SJack F Vogel u64 ptc1023; 4818cfa0ad2SJack F Vogel u64 ptc1522; 4828cfa0ad2SJack F Vogel u64 mptc; 4838cfa0ad2SJack F Vogel u64 bptc; 4848cfa0ad2SJack F Vogel u64 tsctc; 4858cfa0ad2SJack F Vogel u64 tsctfc; 4868cfa0ad2SJack F Vogel u64 iac; 4878cfa0ad2SJack F Vogel u64 icrxptc; 4888cfa0ad2SJack F Vogel u64 icrxatc; 4898cfa0ad2SJack F Vogel u64 ictxptc; 4908cfa0ad2SJack F Vogel u64 ictxatc; 4918cfa0ad2SJack F Vogel u64 ictxqec; 4928cfa0ad2SJack F Vogel u64 ictxqmtc; 4938cfa0ad2SJack F Vogel u64 icrxdmtc; 4948cfa0ad2SJack F Vogel u64 icrxoc; 4958cfa0ad2SJack F Vogel u64 cbtmpc; 4968cfa0ad2SJack F Vogel u64 htdpmc; 4978cfa0ad2SJack F Vogel u64 cbrdpc; 4988cfa0ad2SJack F Vogel u64 cbrmpc; 4998cfa0ad2SJack F Vogel u64 rpthc; 5008cfa0ad2SJack F Vogel u64 hgptc; 5018cfa0ad2SJack F Vogel u64 htcbdpc; 5028cfa0ad2SJack F Vogel u64 hgorc; 5038cfa0ad2SJack F Vogel u64 hgotc; 5048cfa0ad2SJack F Vogel u64 lenerrs; 5058cfa0ad2SJack F Vogel u64 scvpc; 5068cfa0ad2SJack F Vogel u64 hrmpc; 507daf9197cSJack F Vogel u64 doosync; 508daf9197cSJack F Vogel }; 509daf9197cSJack F Vogel 5108cfa0ad2SJack F Vogel 5118cfa0ad2SJack F Vogel struct e1000_phy_stats { 5128cfa0ad2SJack F Vogel u32 idle_errors; 5138cfa0ad2SJack F Vogel u32 receive_errors; 5148cfa0ad2SJack F Vogel }; 5158cfa0ad2SJack F Vogel 5168cfa0ad2SJack F Vogel struct e1000_host_mng_dhcp_cookie { 5178cfa0ad2SJack F Vogel u32 signature; 5188cfa0ad2SJack F Vogel u8 status; 5198cfa0ad2SJack F Vogel u8 reserved0; 5208cfa0ad2SJack F Vogel u16 vlan_id; 5218cfa0ad2SJack F Vogel u32 reserved1; 5228cfa0ad2SJack F Vogel u16 reserved2; 5238cfa0ad2SJack F Vogel u8 reserved3; 5248cfa0ad2SJack F Vogel u8 checksum; 5258cfa0ad2SJack F Vogel }; 5268cfa0ad2SJack F Vogel 5278cfa0ad2SJack F Vogel /* Host Interface "Rev 1" */ 5288cfa0ad2SJack F Vogel struct e1000_host_command_header { 5298cfa0ad2SJack F Vogel u8 command_id; 5308cfa0ad2SJack F Vogel u8 command_length; 5318cfa0ad2SJack F Vogel u8 command_options; 5328cfa0ad2SJack F Vogel u8 checksum; 5338cfa0ad2SJack F Vogel }; 5348cfa0ad2SJack F Vogel 5358cfa0ad2SJack F Vogel #define E1000_HI_MAX_DATA_LENGTH 252 5368cfa0ad2SJack F Vogel struct e1000_host_command_info { 5378cfa0ad2SJack F Vogel struct e1000_host_command_header command_header; 5388cfa0ad2SJack F Vogel u8 command_data[E1000_HI_MAX_DATA_LENGTH]; 5398cfa0ad2SJack F Vogel }; 5408cfa0ad2SJack F Vogel 5418cfa0ad2SJack F Vogel /* Host Interface "Rev 2" */ 5428cfa0ad2SJack F Vogel struct e1000_host_mng_command_header { 5438cfa0ad2SJack F Vogel u8 command_id; 5448cfa0ad2SJack F Vogel u8 checksum; 5458cfa0ad2SJack F Vogel u16 reserved1; 5468cfa0ad2SJack F Vogel u16 reserved2; 5478cfa0ad2SJack F Vogel u16 command_length; 5488cfa0ad2SJack F Vogel }; 5498cfa0ad2SJack F Vogel 5508cfa0ad2SJack F Vogel #define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8 5518cfa0ad2SJack F Vogel struct e1000_host_mng_command_info { 5528cfa0ad2SJack F Vogel struct e1000_host_mng_command_header command_header; 5538cfa0ad2SJack F Vogel u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH]; 5548cfa0ad2SJack F Vogel }; 5558cfa0ad2SJack F Vogel 5568cfa0ad2SJack F Vogel #include "e1000_mac.h" 5578cfa0ad2SJack F Vogel #include "e1000_phy.h" 5588cfa0ad2SJack F Vogel #include "e1000_nvm.h" 5598cfa0ad2SJack F Vogel #include "e1000_manage.h" 5608cfa0ad2SJack F Vogel 5618cfa0ad2SJack F Vogel struct e1000_mac_operations { 5628cfa0ad2SJack F Vogel /* Function pointers for the MAC. */ 5638cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 564d035aa2dSJack F Vogel s32 (*id_led_init)(struct e1000_hw *); 5658cfa0ad2SJack F Vogel s32 (*blink_led)(struct e1000_hw *); 5668cfa0ad2SJack F Vogel s32 (*check_for_link)(struct e1000_hw *); 5678cfa0ad2SJack F Vogel bool (*check_mng_mode)(struct e1000_hw *hw); 5688cfa0ad2SJack F Vogel s32 (*cleanup_led)(struct e1000_hw *); 5698cfa0ad2SJack F Vogel void (*clear_hw_cntrs)(struct e1000_hw *); 5708cfa0ad2SJack F Vogel void (*clear_vfta)(struct e1000_hw *); 5718cfa0ad2SJack F Vogel s32 (*get_bus_info)(struct e1000_hw *); 572daf9197cSJack F Vogel void (*set_lan_id)(struct e1000_hw *); 5738cfa0ad2SJack F Vogel s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *); 5748cfa0ad2SJack F Vogel s32 (*led_on)(struct e1000_hw *); 5758cfa0ad2SJack F Vogel s32 (*led_off)(struct e1000_hw *); 576d035aa2dSJack F Vogel void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32); 5778cfa0ad2SJack F Vogel s32 (*reset_hw)(struct e1000_hw *); 5788cfa0ad2SJack F Vogel s32 (*init_hw)(struct e1000_hw *); 5798cfa0ad2SJack F Vogel void (*shutdown_serdes)(struct e1000_hw *); 5808cfa0ad2SJack F Vogel s32 (*setup_link)(struct e1000_hw *); 5818cfa0ad2SJack F Vogel s32 (*setup_physical_interface)(struct e1000_hw *); 5828cfa0ad2SJack F Vogel s32 (*setup_led)(struct e1000_hw *); 5838cfa0ad2SJack F Vogel void (*write_vfta)(struct e1000_hw *, u32, u32); 5848cfa0ad2SJack F Vogel void (*mta_set)(struct e1000_hw *, u32); 5858cfa0ad2SJack F Vogel void (*config_collision_dist)(struct e1000_hw *); 5868cfa0ad2SJack F Vogel void (*rar_set)(struct e1000_hw *, u8*, u32); 5878cfa0ad2SJack F Vogel s32 (*read_mac_addr)(struct e1000_hw *); 5888cfa0ad2SJack F Vogel s32 (*validate_mdi_setting)(struct e1000_hw *); 5898cfa0ad2SJack F Vogel s32 (*mng_host_if_write)(struct e1000_hw *, u8*, u16, u16, u8*); 5908cfa0ad2SJack F Vogel s32 (*mng_write_cmd_header)(struct e1000_hw *hw, 5918cfa0ad2SJack F Vogel struct e1000_host_mng_command_header*); 5928cfa0ad2SJack F Vogel s32 (*mng_enable_host_if)(struct e1000_hw *); 5938cfa0ad2SJack F Vogel s32 (*wait_autoneg)(struct e1000_hw *); 5948cfa0ad2SJack F Vogel }; 5958cfa0ad2SJack F Vogel 5968cfa0ad2SJack F Vogel struct e1000_phy_operations { 5978cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 5988cfa0ad2SJack F Vogel s32 (*acquire)(struct e1000_hw *); 599daf9197cSJack F Vogel s32 (*cfg_on_link_up)(struct e1000_hw *); 6008cfa0ad2SJack F Vogel s32 (*check_polarity)(struct e1000_hw *); 6018cfa0ad2SJack F Vogel s32 (*check_reset_block)(struct e1000_hw *); 6028cfa0ad2SJack F Vogel s32 (*commit)(struct e1000_hw *); 6038cfa0ad2SJack F Vogel s32 (*force_speed_duplex)(struct e1000_hw *); 6048cfa0ad2SJack F Vogel s32 (*get_cfg_done)(struct e1000_hw *hw); 6058cfa0ad2SJack F Vogel s32 (*get_cable_length)(struct e1000_hw *); 6068cfa0ad2SJack F Vogel s32 (*get_info)(struct e1000_hw *); 6078cfa0ad2SJack F Vogel s32 (*read_reg)(struct e1000_hw *, u32, u16 *); 6088cfa0ad2SJack F Vogel void (*release)(struct e1000_hw *); 6098cfa0ad2SJack F Vogel s32 (*reset)(struct e1000_hw *); 6108cfa0ad2SJack F Vogel s32 (*set_d0_lplu_state)(struct e1000_hw *, bool); 6118cfa0ad2SJack F Vogel s32 (*set_d3_lplu_state)(struct e1000_hw *, bool); 6128cfa0ad2SJack F Vogel s32 (*write_reg)(struct e1000_hw *, u32, u16); 6138cfa0ad2SJack F Vogel void (*power_up)(struct e1000_hw *); 6148cfa0ad2SJack F Vogel void (*power_down)(struct e1000_hw *); 6158cfa0ad2SJack F Vogel }; 6168cfa0ad2SJack F Vogel 6178cfa0ad2SJack F Vogel struct e1000_nvm_operations { 6188cfa0ad2SJack F Vogel s32 (*init_params)(struct e1000_hw *); 6198cfa0ad2SJack F Vogel s32 (*acquire)(struct e1000_hw *); 6208cfa0ad2SJack F Vogel s32 (*read)(struct e1000_hw *, u16, u16, u16 *); 6218cfa0ad2SJack F Vogel void (*release)(struct e1000_hw *); 6228cfa0ad2SJack F Vogel void (*reload)(struct e1000_hw *); 6238cfa0ad2SJack F Vogel s32 (*update)(struct e1000_hw *); 6248cfa0ad2SJack F Vogel s32 (*valid_led_default)(struct e1000_hw *, u16 *); 6258cfa0ad2SJack F Vogel s32 (*validate)(struct e1000_hw *); 6268cfa0ad2SJack F Vogel s32 (*write)(struct e1000_hw *, u16, u16, u16 *); 6278cfa0ad2SJack F Vogel }; 6288cfa0ad2SJack F Vogel 6298cfa0ad2SJack F Vogel struct e1000_mac_info { 6308cfa0ad2SJack F Vogel struct e1000_mac_operations ops; 6318cfa0ad2SJack F Vogel u8 addr[6]; 6328cfa0ad2SJack F Vogel u8 perm_addr[6]; 6338cfa0ad2SJack F Vogel 6348cfa0ad2SJack F Vogel enum e1000_mac_type type; 6358cfa0ad2SJack F Vogel 6368cfa0ad2SJack F Vogel u32 collision_delta; 6378cfa0ad2SJack F Vogel u32 ledctl_default; 6388cfa0ad2SJack F Vogel u32 ledctl_mode1; 6398cfa0ad2SJack F Vogel u32 ledctl_mode2; 6408cfa0ad2SJack F Vogel u32 mc_filter_type; 6418cfa0ad2SJack F Vogel u32 tx_packet_delta; 6428cfa0ad2SJack F Vogel u32 txcw; 6438cfa0ad2SJack F Vogel 6448cfa0ad2SJack F Vogel u16 current_ifs_val; 6458cfa0ad2SJack F Vogel u16 ifs_max_val; 6468cfa0ad2SJack F Vogel u16 ifs_min_val; 6478cfa0ad2SJack F Vogel u16 ifs_ratio; 6488cfa0ad2SJack F Vogel u16 ifs_step_size; 6498cfa0ad2SJack F Vogel u16 mta_reg_count; 650d035aa2dSJack F Vogel #define MAX_MTA_REG 128 /* this must be the maximum size of the MTA register 651d035aa2dSJack F Vogel * table in all supported adapters 652d035aa2dSJack F Vogel */ 653d035aa2dSJack F Vogel u32 mta_shadow[MAX_MTA_REG]; 6548cfa0ad2SJack F Vogel u16 rar_entry_count; 6558cfa0ad2SJack F Vogel 6568cfa0ad2SJack F Vogel u8 forced_speed_duplex; 6578cfa0ad2SJack F Vogel 6588cfa0ad2SJack F Vogel bool adaptive_ifs; 6598cfa0ad2SJack F Vogel bool arc_subsystem_valid; 6608cfa0ad2SJack F Vogel bool asf_firmware_present; 6618cfa0ad2SJack F Vogel bool autoneg; 6628cfa0ad2SJack F Vogel bool autoneg_failed; 6638cfa0ad2SJack F Vogel bool get_link_status; 6648cfa0ad2SJack F Vogel bool in_ifs_mode; 6658cfa0ad2SJack F Vogel bool report_tx_early; 666d035aa2dSJack F Vogel enum e1000_serdes_link_state serdes_link_state; 6678cfa0ad2SJack F Vogel bool serdes_has_link; 6688cfa0ad2SJack F Vogel bool tx_pkt_filtering; 6698cfa0ad2SJack F Vogel }; 6708cfa0ad2SJack F Vogel 6718cfa0ad2SJack F Vogel struct e1000_phy_info { 6728cfa0ad2SJack F Vogel struct e1000_phy_operations ops; 6738cfa0ad2SJack F Vogel enum e1000_phy_type type; 6748cfa0ad2SJack F Vogel 6758cfa0ad2SJack F Vogel enum e1000_1000t_rx_status local_rx; 6768cfa0ad2SJack F Vogel enum e1000_1000t_rx_status remote_rx; 6778cfa0ad2SJack F Vogel enum e1000_ms_type ms_type; 6788cfa0ad2SJack F Vogel enum e1000_ms_type original_ms_type; 6798cfa0ad2SJack F Vogel enum e1000_rev_polarity cable_polarity; 6808cfa0ad2SJack F Vogel enum e1000_smart_speed smart_speed; 6818cfa0ad2SJack F Vogel 6828cfa0ad2SJack F Vogel u32 addr; 6838cfa0ad2SJack F Vogel u32 id; 6848cfa0ad2SJack F Vogel u32 reset_delay_us; /* in usec */ 6858cfa0ad2SJack F Vogel u32 revision; 6868cfa0ad2SJack F Vogel 6878cfa0ad2SJack F Vogel enum e1000_media_type media_type; 6888cfa0ad2SJack F Vogel 6898cfa0ad2SJack F Vogel u16 autoneg_advertised; 6908cfa0ad2SJack F Vogel u16 autoneg_mask; 6918cfa0ad2SJack F Vogel u16 cable_length; 6928cfa0ad2SJack F Vogel u16 max_cable_length; 6938cfa0ad2SJack F Vogel u16 min_cable_length; 6948cfa0ad2SJack F Vogel 6958cfa0ad2SJack F Vogel u8 mdix; 6968cfa0ad2SJack F Vogel 6978cfa0ad2SJack F Vogel bool disable_polarity_correction; 6988cfa0ad2SJack F Vogel bool is_mdix; 6998cfa0ad2SJack F Vogel bool polarity_correction; 7008cfa0ad2SJack F Vogel bool reset_disable; 7018cfa0ad2SJack F Vogel bool speed_downgraded; 7028cfa0ad2SJack F Vogel bool autoneg_wait_to_complete; 7038cfa0ad2SJack F Vogel }; 7048cfa0ad2SJack F Vogel 7058cfa0ad2SJack F Vogel struct e1000_nvm_info { 7068cfa0ad2SJack F Vogel struct e1000_nvm_operations ops; 7078cfa0ad2SJack F Vogel enum e1000_nvm_type type; 7088cfa0ad2SJack F Vogel enum e1000_nvm_override override; 7098cfa0ad2SJack F Vogel 7108cfa0ad2SJack F Vogel u32 flash_bank_size; 7118cfa0ad2SJack F Vogel u32 flash_base_addr; 7128cfa0ad2SJack F Vogel 7138cfa0ad2SJack F Vogel u16 word_size; 7148cfa0ad2SJack F Vogel u16 delay_usec; 7158cfa0ad2SJack F Vogel u16 address_bits; 7168cfa0ad2SJack F Vogel u16 opcode_bits; 7178cfa0ad2SJack F Vogel u16 page_size; 7188cfa0ad2SJack F Vogel }; 7198cfa0ad2SJack F Vogel 7208cfa0ad2SJack F Vogel struct e1000_bus_info { 7218cfa0ad2SJack F Vogel enum e1000_bus_type type; 7228cfa0ad2SJack F Vogel enum e1000_bus_speed speed; 7238cfa0ad2SJack F Vogel enum e1000_bus_width width; 7248cfa0ad2SJack F Vogel 7258cfa0ad2SJack F Vogel u16 func; 7268cfa0ad2SJack F Vogel u16 pci_cmd_word; 7278cfa0ad2SJack F Vogel }; 7288cfa0ad2SJack F Vogel 7298cfa0ad2SJack F Vogel struct e1000_fc_info { 7308cfa0ad2SJack F Vogel u32 high_water; /* Flow control high-water mark */ 7318cfa0ad2SJack F Vogel u32 low_water; /* Flow control low-water mark */ 7328cfa0ad2SJack F Vogel u16 pause_time; /* Flow control pause timer */ 7338cfa0ad2SJack F Vogel bool send_xon; /* Flow control send XON */ 7348cfa0ad2SJack F Vogel bool strict_ieee; /* Strict IEEE mode */ 735daf9197cSJack F Vogel enum e1000_fc_mode current_mode; /* FC mode in effect */ 736daf9197cSJack F Vogel enum e1000_fc_mode requested_mode; /* FC mode requested by caller */ 737daf9197cSJack F Vogel }; 738daf9197cSJack F Vogel 739daf9197cSJack F Vogel struct e1000_dev_spec_82541 { 740daf9197cSJack F Vogel enum e1000_dsp_config dsp_config; 741daf9197cSJack F Vogel enum e1000_ffe_config ffe_config; 742daf9197cSJack F Vogel u16 spd_default; 743daf9197cSJack F Vogel bool phy_init_script; 744daf9197cSJack F Vogel }; 745daf9197cSJack F Vogel 746daf9197cSJack F Vogel struct e1000_dev_spec_82542 { 747daf9197cSJack F Vogel bool dma_fairness; 748daf9197cSJack F Vogel }; 749daf9197cSJack F Vogel 750daf9197cSJack F Vogel struct e1000_dev_spec_82543 { 751daf9197cSJack F Vogel u32 tbi_compatibility; 752daf9197cSJack F Vogel bool dma_fairness; 753daf9197cSJack F Vogel bool init_phy_disabled; 754daf9197cSJack F Vogel }; 755daf9197cSJack F Vogel 756daf9197cSJack F Vogel struct e1000_dev_spec_82571 { 757daf9197cSJack F Vogel bool laa_is_present; 758daf9197cSJack F Vogel }; 759daf9197cSJack F Vogel 760daf9197cSJack F Vogel struct e1000_shadow_ram { 761daf9197cSJack F Vogel u16 value; 762daf9197cSJack F Vogel bool modified; 763daf9197cSJack F Vogel }; 764daf9197cSJack F Vogel 765daf9197cSJack F Vogel #define E1000_SHADOW_RAM_WORDS 2048 766daf9197cSJack F Vogel 767daf9197cSJack F Vogel struct e1000_dev_spec_ich8lan { 768daf9197cSJack F Vogel bool kmrn_lock_loss_workaround_enabled; 769daf9197cSJack F Vogel struct e1000_shadow_ram shadow_ram[E1000_SHADOW_RAM_WORDS]; 770daf9197cSJack F Vogel }; 771daf9197cSJack F Vogel 772daf9197cSJack F Vogel struct e1000_dev_spec_82575 { 773daf9197cSJack F Vogel bool sgmii_active; 774d035aa2dSJack F Vogel bool global_device_reset; 775daf9197cSJack F Vogel }; 776daf9197cSJack F Vogel 777daf9197cSJack F Vogel struct e1000_dev_spec_vf { 778daf9197cSJack F Vogel u32 vf_number; 779d035aa2dSJack F Vogel u32 v2p_mailbox; 7808cfa0ad2SJack F Vogel }; 7818cfa0ad2SJack F Vogel 782d035aa2dSJack F Vogel 7838cfa0ad2SJack F Vogel struct e1000_hw { 7848cfa0ad2SJack F Vogel void *back; 7858cfa0ad2SJack F Vogel 7868cfa0ad2SJack F Vogel u8 *hw_addr; 7878cfa0ad2SJack F Vogel u8 *flash_address; 7888cfa0ad2SJack F Vogel unsigned long io_base; 7898cfa0ad2SJack F Vogel 7908cfa0ad2SJack F Vogel struct e1000_mac_info mac; 7918cfa0ad2SJack F Vogel struct e1000_fc_info fc; 7928cfa0ad2SJack F Vogel struct e1000_phy_info phy; 7938cfa0ad2SJack F Vogel struct e1000_nvm_info nvm; 7948cfa0ad2SJack F Vogel struct e1000_bus_info bus; 7958cfa0ad2SJack F Vogel struct e1000_host_mng_dhcp_cookie mng_cookie; 7968cfa0ad2SJack F Vogel 797daf9197cSJack F Vogel union { 798daf9197cSJack F Vogel struct e1000_dev_spec_82541 _82541; 799daf9197cSJack F Vogel struct e1000_dev_spec_82542 _82542; 800daf9197cSJack F Vogel struct e1000_dev_spec_82543 _82543; 801daf9197cSJack F Vogel struct e1000_dev_spec_82571 _82571; 802daf9197cSJack F Vogel struct e1000_dev_spec_ich8lan ich8lan; 803daf9197cSJack F Vogel struct e1000_dev_spec_82575 _82575; 804daf9197cSJack F Vogel struct e1000_dev_spec_vf vf; 805daf9197cSJack F Vogel } dev_spec; 8068cfa0ad2SJack F Vogel 8078cfa0ad2SJack F Vogel u16 device_id; 8088cfa0ad2SJack F Vogel u16 subsystem_vendor_id; 8098cfa0ad2SJack F Vogel u16 subsystem_device_id; 8108cfa0ad2SJack F Vogel u16 vendor_id; 8118cfa0ad2SJack F Vogel 8128cfa0ad2SJack F Vogel u8 revision_id; 8138cfa0ad2SJack F Vogel }; 8148cfa0ad2SJack F Vogel 8158cfa0ad2SJack F Vogel #include "e1000_82541.h" 8168cfa0ad2SJack F Vogel #include "e1000_82543.h" 8178cfa0ad2SJack F Vogel #include "e1000_82571.h" 8188cfa0ad2SJack F Vogel #include "e1000_80003es2lan.h" 8198cfa0ad2SJack F Vogel #include "e1000_ich8lan.h" 8208cfa0ad2SJack F Vogel #include "e1000_82575.h" 8218cfa0ad2SJack F Vogel 8228cfa0ad2SJack F Vogel /* These functions must be implemented by drivers */ 8238cfa0ad2SJack F Vogel void e1000_pci_clear_mwi(struct e1000_hw *hw); 8248cfa0ad2SJack F Vogel void e1000_pci_set_mwi(struct e1000_hw *hw); 8258cfa0ad2SJack F Vogel s32 e1000_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value); 8268cfa0ad2SJack F Vogel void e1000_read_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 8278cfa0ad2SJack F Vogel void e1000_write_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value); 8288cfa0ad2SJack F Vogel 8298cfa0ad2SJack F Vogel #endif 830