19c80d176SSepherosa Ziehau /****************************************************************************** 29c80d176SSepherosa Ziehau 34765c386SMichael Neumann Copyright (c) 2001-2014, Intel Corporation 49c80d176SSepherosa Ziehau All rights reserved. 59c80d176SSepherosa Ziehau 69c80d176SSepherosa Ziehau Redistribution and use in source and binary forms, with or without 79c80d176SSepherosa Ziehau modification, are permitted provided that the following conditions are met: 89c80d176SSepherosa Ziehau 99c80d176SSepherosa Ziehau 1. Redistributions of source code must retain the above copyright notice, 109c80d176SSepherosa Ziehau this list of conditions and the following disclaimer. 119c80d176SSepherosa Ziehau 129c80d176SSepherosa Ziehau 2. Redistributions in binary form must reproduce the above copyright 139c80d176SSepherosa Ziehau notice, this list of conditions and the following disclaimer in the 149c80d176SSepherosa Ziehau documentation and/or other materials provided with the distribution. 159c80d176SSepherosa Ziehau 169c80d176SSepherosa Ziehau 3. Neither the name of the Intel Corporation nor the names of its 179c80d176SSepherosa Ziehau contributors may be used to endorse or promote products derived from 189c80d176SSepherosa Ziehau this software without specific prior written permission. 199c80d176SSepherosa Ziehau 209c80d176SSepherosa Ziehau THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 219c80d176SSepherosa Ziehau AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 229c80d176SSepherosa Ziehau IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 239c80d176SSepherosa Ziehau ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 249c80d176SSepherosa Ziehau LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 259c80d176SSepherosa Ziehau CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 269c80d176SSepherosa Ziehau SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 279c80d176SSepherosa Ziehau INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 289c80d176SSepherosa Ziehau CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 299c80d176SSepherosa Ziehau ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 309c80d176SSepherosa Ziehau POSSIBILITY OF SUCH DAMAGE. 319c80d176SSepherosa Ziehau 329c80d176SSepherosa Ziehau ******************************************************************************/ 33379ebbe7SSepherosa Ziehau /*$FreeBSD:$*/ 349c80d176SSepherosa Ziehau 359c80d176SSepherosa Ziehau #ifndef _E1000_DEFINES_H_ 369c80d176SSepherosa Ziehau #define _E1000_DEFINES_H_ 379c80d176SSepherosa Ziehau 389c80d176SSepherosa Ziehau /* Number of Transmit and Receive Descriptors must be a multiple of 8 */ 399c80d176SSepherosa Ziehau #define REQ_TX_DESCRIPTOR_MULTIPLE 8 409c80d176SSepherosa Ziehau #define REQ_RX_DESCRIPTOR_MULTIPLE 8 419c80d176SSepherosa Ziehau 429c80d176SSepherosa Ziehau /* Definitions for power management and wakeup registers */ 439c80d176SSepherosa Ziehau /* Wake Up Control */ 449c80d176SSepherosa Ziehau #define E1000_WUC_APME 0x00000001 /* APM Enable */ 459c80d176SSepherosa Ziehau #define E1000_WUC_PME_EN 0x00000002 /* PME Enable */ 469c80d176SSepherosa Ziehau #define E1000_WUC_PME_STATUS 0x00000004 /* PME Status */ 479c80d176SSepherosa Ziehau #define E1000_WUC_APMPME 0x00000008 /* Assert PME on APM Wakeup */ 489c80d176SSepherosa Ziehau #define E1000_WUC_LSCWE 0x00000010 /* Link Status wake up enable */ 4962583d18SSepherosa Ziehau #define E1000_WUC_PPROXYE 0x00000010 /* Protocol Proxy Enable */ 509c80d176SSepherosa Ziehau #define E1000_WUC_LSCWO 0x00000020 /* Link Status wake up override */ 519c80d176SSepherosa Ziehau #define E1000_WUC_SPM 0x80000000 /* Enable SPM */ 529c80d176SSepherosa Ziehau #define E1000_WUC_PHY_WAKE 0x00000100 /* if PHY supports wakeup */ 534be59a01SSepherosa Ziehau #define E1000_WUC_FLX6_PHY 0x4000 /* Flexible Filter 6 Enable */ 544be59a01SSepherosa Ziehau #define E1000_WUC_FLX7_PHY 0x8000 /* Flexible Filter 7 Enable */ 559c80d176SSepherosa Ziehau 569c80d176SSepherosa Ziehau /* Wake Up Filter Control */ 579c80d176SSepherosa Ziehau #define E1000_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ 589c80d176SSepherosa Ziehau #define E1000_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */ 599c80d176SSepherosa Ziehau #define E1000_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */ 609c80d176SSepherosa Ziehau #define E1000_WUFC_MC 0x00000008 /* Directed Multicast Wakeup Enable */ 619c80d176SSepherosa Ziehau #define E1000_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ 629c80d176SSepherosa Ziehau #define E1000_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ 639c80d176SSepherosa Ziehau #define E1000_WUFC_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Enable */ 649c80d176SSepherosa Ziehau #define E1000_WUFC_IPV6 0x00000080 /* Directed IPv6 Packet Wakeup Enable */ 654be59a01SSepherosa Ziehau #define E1000_WUFC_IGNORE_TCO_PHY 0x00000800 /* Ignore WakeOn TCO packets */ 664be59a01SSepherosa Ziehau #define E1000_WUFC_FLX0_PHY 0x00001000 /* Flexible Filter 0 Enable */ 674be59a01SSepherosa Ziehau #define E1000_WUFC_FLX1_PHY 0x00002000 /* Flexible Filter 1 Enable */ 684be59a01SSepherosa Ziehau #define E1000_WUFC_FLX2_PHY 0x00004000 /* Flexible Filter 2 Enable */ 694be59a01SSepherosa Ziehau #define E1000_WUFC_FLX3_PHY 0x00008000 /* Flexible Filter 3 Enable */ 704be59a01SSepherosa Ziehau #define E1000_WUFC_FLX4_PHY 0x00000200 /* Flexible Filter 4 Enable */ 714be59a01SSepherosa Ziehau #define E1000_WUFC_FLX5_PHY 0x00000400 /* Flexible Filter 5 Enable */ 729c80d176SSepherosa Ziehau #define E1000_WUFC_IGNORE_TCO 0x00008000 /* Ignore WakeOn TCO packets */ 739c80d176SSepherosa Ziehau #define E1000_WUFC_FLX0 0x00010000 /* Flexible Filter 0 Enable */ 749c80d176SSepherosa Ziehau #define E1000_WUFC_FLX1 0x00020000 /* Flexible Filter 1 Enable */ 759c80d176SSepherosa Ziehau #define E1000_WUFC_FLX2 0x00040000 /* Flexible Filter 2 Enable */ 769c80d176SSepherosa Ziehau #define E1000_WUFC_FLX3 0x00080000 /* Flexible Filter 3 Enable */ 774be59a01SSepherosa Ziehau #define E1000_WUFC_FLX4 0x00100000 /* Flexible Filter 4 Enable */ 784be59a01SSepherosa Ziehau #define E1000_WUFC_FLX5 0x00200000 /* Flexible Filter 5 Enable */ 794be59a01SSepherosa Ziehau #define E1000_WUFC_FLX6 0x00400000 /* Flexible Filter 6 Enable */ 804be59a01SSepherosa Ziehau #define E1000_WUFC_FLX7 0x00800000 /* Flexible Filter 7 Enable */ 814be59a01SSepherosa Ziehau #define E1000_WUFC_ALL_FILTERS_PHY_4 0x0000F0FF /* wakeup filters mask */ 824be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_OFFSET_PHY 12 /* Flexible Filters bits offset */ 834be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_FILTERS_PHY_4 0x0000F000 /* 4 flexible filters mask */ 844be59a01SSepherosa Ziehau #define E1000_WUFC_ALL_FILTERS_PHY_6 0x0000F6FF /* 6 wakeup filters mask */ 854be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_FILTERS_PHY_6 0x0000F600 /* 6 flexible filters mask */ 8662583d18SSepherosa Ziehau #define E1000_WUFC_FW_RST 0x80000000 /* Wake on FW Reset Enable */ 874be59a01SSepherosa Ziehau #define E1000_WUFC_ALL_FILTERS 0x000F00FF /* all wakeup filters mask */ 884be59a01SSepherosa Ziehau #define E1000_WUFC_ALL_FILTERS_6 0x003F00FF /* Mask all 6 wu filters */ 894be59a01SSepherosa Ziehau #define E1000_WUFC_ALL_FILTERS_8 0x00FF00FF /* Mask all 8 wu filters */ 904be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_OFFSET 16 /* Flexible Filters bits offset */ 914be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_FILTERS 0x000F0000 /* 4 flexible filters mask */ 924be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_FILTERS_6 0x003F0000 /* 6 flexible filters mask */ 934be59a01SSepherosa Ziehau #define E1000_WUFC_FLX_FILTERS_8 0x00FF0000 /* 8 flexible filters mask */ 9462583d18SSepherosa Ziehau /* 9562583d18SSepherosa Ziehau * For 82576 to utilize Extended filter masks in addition to 9662583d18SSepherosa Ziehau * existing (filter) masks 9762583d18SSepherosa Ziehau */ 9862583d18SSepherosa Ziehau #define E1000_WUFC_EXT_FLX_FILTERS 0x00300000 /* Ext. FLX filter mask */ 999c80d176SSepherosa Ziehau 1009c80d176SSepherosa Ziehau /* Wake Up Status */ 1019c80d176SSepherosa Ziehau #define E1000_WUS_LNKC E1000_WUFC_LNKC 1029c80d176SSepherosa Ziehau #define E1000_WUS_MAG E1000_WUFC_MAG 1039c80d176SSepherosa Ziehau #define E1000_WUS_EX E1000_WUFC_EX 1049c80d176SSepherosa Ziehau #define E1000_WUS_MC E1000_WUFC_MC 1059c80d176SSepherosa Ziehau #define E1000_WUS_BC E1000_WUFC_BC 1069c80d176SSepherosa Ziehau #define E1000_WUS_ARP E1000_WUFC_ARP 1079c80d176SSepherosa Ziehau #define E1000_WUS_IPV4 E1000_WUFC_IPV4 1089c80d176SSepherosa Ziehau #define E1000_WUS_IPV6 E1000_WUFC_IPV6 1094be59a01SSepherosa Ziehau #define E1000_WUS_FLX0_PHY E1000_WUFC_FLX0_PHY 1104be59a01SSepherosa Ziehau #define E1000_WUS_FLX1_PHY E1000_WUFC_FLX1_PHY 1114be59a01SSepherosa Ziehau #define E1000_WUS_FLX2_PHY E1000_WUFC_FLX2_PHY 1124be59a01SSepherosa Ziehau #define E1000_WUS_FLX3_PHY E1000_WUFC_FLX3_PHY 1134be59a01SSepherosa Ziehau #define E1000_WUS_FLX_FILTERS_PHY_4 E1000_WUFC_FLX_FILTERS_PHY_4 1149c80d176SSepherosa Ziehau #define E1000_WUS_FLX0 E1000_WUFC_FLX0 1159c80d176SSepherosa Ziehau #define E1000_WUS_FLX1 E1000_WUFC_FLX1 1169c80d176SSepherosa Ziehau #define E1000_WUS_FLX2 E1000_WUFC_FLX2 1179c80d176SSepherosa Ziehau #define E1000_WUS_FLX3 E1000_WUFC_FLX3 1184be59a01SSepherosa Ziehau #define E1000_WUS_FLX4 E1000_WUFC_FLX4 1194be59a01SSepherosa Ziehau #define E1000_WUS_FLX5 E1000_WUFC_FLX5 1204be59a01SSepherosa Ziehau #define E1000_WUS_FLX6 E1000_WUFC_FLX6 1214be59a01SSepherosa Ziehau #define E1000_WUS_FLX7 E1000_WUFC_FLX7 1224be59a01SSepherosa Ziehau #define E1000_WUS_FLX4_PHY E1000_WUFC_FLX4_PHY 1234be59a01SSepherosa Ziehau #define E1000_WUS_FLX5_PHY E1000_WUFC_FLX5_PHY 1244be59a01SSepherosa Ziehau #define E1000_WUS_FLX6_PHY 0x0400 1254be59a01SSepherosa Ziehau #define E1000_WUS_FLX7_PHY 0x0800 1269c80d176SSepherosa Ziehau #define E1000_WUS_FLX_FILTERS E1000_WUFC_FLX_FILTERS 1274be59a01SSepherosa Ziehau #define E1000_WUS_FLX_FILTERS_6 E1000_WUFC_FLX_FILTERS_6 1284be59a01SSepherosa Ziehau #define E1000_WUS_FLX_FILTERS_8 E1000_WUFC_FLX_FILTERS_8 1294be59a01SSepherosa Ziehau #define E1000_WUS_FLX_FILTERS_PHY_6 E1000_WUFC_FLX_FILTERS_PHY_6 1309c80d176SSepherosa Ziehau 1319c80d176SSepherosa Ziehau /* Wake Up Packet Length */ 1329c80d176SSepherosa Ziehau #define E1000_WUPL_LENGTH_MASK 0x0FFF /* Only the lower 12 bits are valid */ 1339c80d176SSepherosa Ziehau 1349c80d176SSepherosa Ziehau /* Four Flexible Filters are supported */ 1359c80d176SSepherosa Ziehau #define E1000_FLEXIBLE_FILTER_COUNT_MAX 4 1364be59a01SSepherosa Ziehau /* Six Flexible Filters are supported */ 1374be59a01SSepherosa Ziehau #define E1000_FLEXIBLE_FILTER_COUNT_MAX_6 6 1384be59a01SSepherosa Ziehau /* Eight Flexible Filters are supported */ 1394be59a01SSepherosa Ziehau #define E1000_FLEXIBLE_FILTER_COUNT_MAX_8 8 14062583d18SSepherosa Ziehau /* Two Extended Flexible Filters are supported (82576) */ 14162583d18SSepherosa Ziehau #define E1000_EXT_FLEXIBLE_FILTER_COUNT_MAX 2 14262583d18SSepherosa Ziehau #define E1000_FHFT_LENGTH_OFFSET 0xFC /* Length byte in FHFT */ 14362583d18SSepherosa Ziehau #define E1000_FHFT_LENGTH_MASK 0x0FF /* Length in lower byte */ 1449c80d176SSepherosa Ziehau 1459c80d176SSepherosa Ziehau /* Each Flexible Filter is at most 128 (0x80) bytes in length */ 1469c80d176SSepherosa Ziehau #define E1000_FLEXIBLE_FILTER_SIZE_MAX 128 1479c80d176SSepherosa Ziehau 1489c80d176SSepherosa Ziehau #define E1000_FFLT_SIZE E1000_FLEXIBLE_FILTER_COUNT_MAX 1494be59a01SSepherosa Ziehau #define E1000_FFLT_SIZE_6 E1000_FLEXIBLE_FILTER_COUNT_MAX_6 1504be59a01SSepherosa Ziehau #define E1000_FFLT_SIZE_8 E1000_FLEXIBLE_FILTER_COUNT_MAX_8 1519c80d176SSepherosa Ziehau #define E1000_FFMT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX 1529c80d176SSepherosa Ziehau #define E1000_FFVT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX 1539c80d176SSepherosa Ziehau 1549c80d176SSepherosa Ziehau /* Extended Device Control */ 1559c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_GPI0_EN 0x00000001 /* Maps SDP4 to GPI0 */ 1569c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_GPI1_EN 0x00000002 /* Maps SDP5 to GPI1 */ 1579c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_PHYINT_EN E1000_CTRL_EXT_GPI1_EN 1589c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_GPI2_EN 0x00000004 /* Maps SDP6 to GPI2 */ 159379ebbe7SSepherosa Ziehau #define E1000_CTRL_EXT_LPCD 0x00000004 /* LCD Power Cycle Done */ 1609c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_GPI3_EN 0x00000008 /* Maps SDP7 to GPI3 */ 1619c80d176SSepherosa Ziehau /* Reserved (bits 4,5) in >= 82575 */ 1624be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP4_DATA 0x00000010 /* SW Definable Pin 4 data */ 1634be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP5_DATA 0x00000020 /* SW Definable Pin 5 data */ 1649c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_PHY_INT E1000_CTRL_EXT_SDP5_DATA 1654be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP6_DATA 0x00000040 /* SW Definable Pin 6 data */ 1664be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP3_DATA 0x00000080 /* SW Definable Pin 3 data */ 1679c80d176SSepherosa Ziehau /* SDP 4/5 (bits 8,9) are reserved in >= 82575 */ 1689c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SDP4_DIR 0x00000100 /* Direction of SDP4 0=in 1=out */ 1699c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SDP5_DIR 0x00000200 /* Direction of SDP5 0=in 1=out */ 1709c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 0=in 1=out */ 1716a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_SDP3_DIR 0x00000800 /* Direction of SDP3 0=in 1=out */ 172379ebbe7SSepherosa Ziehau #define E1000_CTRL_EXT_FORCE_SMBUS 0x00000800 /* Force SMBus mode */ 1739c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_ASDCHK 0x00001000 /* Initiate an ASD sequence */ 1749c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ 1759c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_IPS 0x00004000 /* Invert Power State */ 17662583d18SSepherosa Ziehau /* Physical Func Reset Done Indication */ 17762583d18SSepherosa Ziehau #define E1000_CTRL_EXT_PFRSTD 0x00004000 178ba0123e0SSepherosa Ziehau #define E1000_CTRL_EXT_SDLPE 0X00040000 /* SerDes Low Power Enable */ 1799c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */ 1809c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ 1814be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clk Gating */ 1829c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 1834be59a01SSepherosa Ziehau /* Offset of the link mode field in Ctrl Ext register */ 1844be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_OFFSET 22 1856a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_82580_MASK 0x01C00000 /*82580 bit 24:22*/ 1866a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_1000BASE_KX 0x00400000 1879c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000 1889c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_TBI 0x00C00000 1899c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_KMRN 0x00000000 1909c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES 0x00C00000 1919c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_PCIX_SERDES 0x00800000 1929c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_SGMII 0x00800000 1939c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_EIAME 0x01000000 1949c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_IRCA 0x00000001 1959c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_WR_WMARK_MASK 0x03000000 1969c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_WR_WMARK_256 0x00000000 1979c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_WR_WMARK_320 0x01000000 1989c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_WR_WMARK_384 0x02000000 1999c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_WR_WMARK_448 0x03000000 2009c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_CANC 0x04000000 /* Int delay cancellation */ 2014be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_DRV_LOAD 0x10000000 /* Drv loaded bit for FW */ 2029c80d176SSepherosa Ziehau /* IAME enable bit (27) was removed in >= 82575 */ 2034be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_IAME 0x08000000 /* Int ACK Auto-mask */ 2044be59a01SSepherosa Ziehau /* packet buffer parity error detection enabled */ 2054be59a01SSepherosa Ziehau #define E1000_CRTL_EXT_PB_PAREN 0x01000000 2064be59a01SSepherosa Ziehau /* descriptor FIFO parity error detection enable */ 2074be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_DF_PAREN 0x02000000 2089c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_GHOST_PAREN 0x40000000 2099c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_PBA_CLR 0x80000000 /* PBA Clear */ 2109c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LSECCK 0x00001000 2116a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_PHYPDEN 0x00100000 2129c80d176SSepherosa Ziehau #define E1000_I2CCMD_REG_ADDR_SHIFT 16 2139c80d176SSepherosa Ziehau #define E1000_I2CCMD_REG_ADDR 0x00FF0000 2149c80d176SSepherosa Ziehau #define E1000_I2CCMD_PHY_ADDR_SHIFT 24 2159c80d176SSepherosa Ziehau #define E1000_I2CCMD_PHY_ADDR 0x07000000 2169c80d176SSepherosa Ziehau #define E1000_I2CCMD_OPCODE_READ 0x08000000 2179c80d176SSepherosa Ziehau #define E1000_I2CCMD_OPCODE_WRITE 0x00000000 2189c80d176SSepherosa Ziehau #define E1000_I2CCMD_RESET 0x10000000 2199c80d176SSepherosa Ziehau #define E1000_I2CCMD_READY 0x20000000 2209c80d176SSepherosa Ziehau #define E1000_I2CCMD_INTERRUPT_ENA 0x40000000 2219c80d176SSepherosa Ziehau #define E1000_I2CCMD_ERROR 0x80000000 2224be59a01SSepherosa Ziehau #define E1000_I2CCMD_SFP_DATA_ADDR(a) (0x0000 + (a)) 2234be59a01SSepherosa Ziehau #define E1000_I2CCMD_SFP_DIAG_ADDR(a) (0x0100 + (a)) 2249c80d176SSepherosa Ziehau #define E1000_MAX_SGMII_PHY_REG_ADDR 255 2259c80d176SSepherosa Ziehau #define E1000_I2CCMD_PHY_TIMEOUT 200 22662583d18SSepherosa Ziehau #define E1000_IVAR_VALID 0x80 22762583d18SSepherosa Ziehau #define E1000_GPIE_NSICR 0x00000001 22862583d18SSepherosa Ziehau #define E1000_GPIE_MSIX_MODE 0x00000010 22962583d18SSepherosa Ziehau #define E1000_GPIE_EIAME 0x40000000 23062583d18SSepherosa Ziehau #define E1000_GPIE_PBA 0x80000000 2319c80d176SSepherosa Ziehau 2329c80d176SSepherosa Ziehau /* Receive Descriptor bit definitions */ 2339c80d176SSepherosa Ziehau #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */ 2349c80d176SSepherosa Ziehau #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */ 2359c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */ 2369c80d176SSepherosa Ziehau #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ 2379c80d176SSepherosa Ziehau #define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ 2389c80d176SSepherosa Ziehau #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ 2399c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ 2409c80d176SSepherosa Ziehau #define E1000_RXD_STAT_PIF 0x80 /* passed in-exact filter */ 2419c80d176SSepherosa Ziehau #define E1000_RXD_STAT_CRCV 0x100 /* Speculative CRC Valid */ 2429c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IPIDV 0x200 /* IP identification valid */ 2439c80d176SSepherosa Ziehau #define E1000_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */ 2449c80d176SSepherosa Ziehau #define E1000_RXD_STAT_DYNINT 0x800 /* Pkt caused INT via DYNINT */ 2459c80d176SSepherosa Ziehau #define E1000_RXD_STAT_ACK 0x8000 /* ACK Packet indication */ 2469c80d176SSepherosa Ziehau #define E1000_RXD_ERR_CE 0x01 /* CRC Error */ 2479c80d176SSepherosa Ziehau #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */ 2489c80d176SSepherosa Ziehau #define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */ 2499c80d176SSepherosa Ziehau #define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */ 2509c80d176SSepherosa Ziehau #define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */ 2519c80d176SSepherosa Ziehau #define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */ 2529c80d176SSepherosa Ziehau #define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */ 2539c80d176SSepherosa Ziehau #define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ 2549c80d176SSepherosa Ziehau #define E1000_RXD_SPC_PRI_MASK 0xE000 /* Priority is in upper 3 bits */ 2559c80d176SSepherosa Ziehau #define E1000_RXD_SPC_PRI_SHIFT 13 2569c80d176SSepherosa Ziehau #define E1000_RXD_SPC_CFI_MASK 0x1000 /* CFI is bit 12 */ 2579c80d176SSepherosa Ziehau #define E1000_RXD_SPC_CFI_SHIFT 12 2589c80d176SSepherosa Ziehau 2594be59a01SSepherosa Ziehau #define E1000_RXDEXT_STATERR_TST 0x00000100 /* Time Stamp taken */ 2606d5e2922SSepherosa Ziehau #define E1000_RXDEXT_STATERR_LB 0x00040000 2619c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_CE 0x01000000 2629c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_SE 0x02000000 2639c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_SEQ 0x04000000 2649c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_CXE 0x10000000 2659c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_TCPE 0x20000000 2669c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_IPE 0x40000000 2679c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_RXE 0x80000000 2689c80d176SSepherosa Ziehau 2694be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECH 0x01000000 2704be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECE_MASK 0x60000000 2714be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECE_NO_ERROR 0x00000000 2724be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECE_NO_SA_MATCH 0x20000000 2734be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECE_REPLAY_DETECT 0x40000000 2744be59a01SSepherosa Ziehau #define E1000_RXDEXT_LSECE_BAD_SIG 0x60000000 2754be59a01SSepherosa Ziehau 2769c80d176SSepherosa Ziehau /* mask to determine if packets should be dropped due to frame errors */ 2779c80d176SSepherosa Ziehau #define E1000_RXD_ERR_FRAME_ERR_MASK ( \ 2789c80d176SSepherosa Ziehau E1000_RXD_ERR_CE | \ 2799c80d176SSepherosa Ziehau E1000_RXD_ERR_SE | \ 2809c80d176SSepherosa Ziehau E1000_RXD_ERR_SEQ | \ 2819c80d176SSepherosa Ziehau E1000_RXD_ERR_CXE | \ 2829c80d176SSepherosa Ziehau E1000_RXD_ERR_RXE) 2839c80d176SSepherosa Ziehau 2849c80d176SSepherosa Ziehau /* Same mask, but for extended and packet split descriptors */ 2859c80d176SSepherosa Ziehau #define E1000_RXDEXT_ERR_FRAME_ERR_MASK ( \ 2869c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_CE | \ 2879c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_SE | \ 2889c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_SEQ | \ 2899c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_CXE | \ 2909c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_RXE) 2919c80d176SSepherosa Ziehau 2924be59a01SSepherosa Ziehau /* Packet Types as indicated in the Adv/Ext receive descriptor. */ 2934be59a01SSepherosa Ziehau #define E1000_RXD_PKTTYPE_MASK 0x000F0000 2944be59a01SSepherosa Ziehau #define E1000_RXD_PKTTYPE_PTP 0x000E0000 2954be59a01SSepherosa Ziehau 2969c80d176SSepherosa Ziehau #define E1000_MRQC_ENABLE_MASK 0x00000007 2979c80d176SSepherosa Ziehau #define E1000_MRQC_ENABLE_RSS_2Q 0x00000001 2989c80d176SSepherosa Ziehau #define E1000_MRQC_ENABLE_RSS_INT 0x00000004 2999c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_MASK 0xFFFF0000 3009c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV4_TCP 0x00010000 3019c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV4 0x00020000 3029c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6_TCP_EX 0x00040000 3039c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6_EX 0x00080000 3049c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6 0x00100000 3059c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6_TCP 0x00200000 3069c80d176SSepherosa Ziehau 3079c80d176SSepherosa Ziehau #define E1000_RXDPS_HDRSTAT_HDRSP 0x00008000 3089c80d176SSepherosa Ziehau #define E1000_RXDPS_HDRSTAT_HDRLEN_MASK 0x000003FF 3099c80d176SSepherosa Ziehau 3109c80d176SSepherosa Ziehau /* Management Control */ 3119c80d176SSepherosa Ziehau #define E1000_MANC_SMBUS_EN 0x00000001 /* SMBus Enabled - RO */ 3129c80d176SSepherosa Ziehau #define E1000_MANC_ASF_EN 0x00000002 /* ASF Enabled - RO */ 3139c80d176SSepherosa Ziehau #define E1000_MANC_R_ON_FORCE 0x00000004 /* Reset on Force TCO - RO */ 3149c80d176SSepherosa Ziehau #define E1000_MANC_RMCP_EN 0x00000100 /* Enable RCMP 026Fh Filtering */ 3159c80d176SSepherosa Ziehau #define E1000_MANC_0298_EN 0x00000200 /* Enable RCMP 0298h Filtering */ 3169c80d176SSepherosa Ziehau #define E1000_MANC_IPV4_EN 0x00000400 /* Enable IPv4 */ 3179c80d176SSepherosa Ziehau #define E1000_MANC_IPV6_EN 0x00000800 /* Enable IPv6 */ 3189c80d176SSepherosa Ziehau #define E1000_MANC_SNAP_EN 0x00001000 /* Accept LLC/SNAP */ 3199c80d176SSepherosa Ziehau #define E1000_MANC_ARP_EN 0x00002000 /* Enable ARP Request Filtering */ 3209c80d176SSepherosa Ziehau /* Enable Neighbor Discovery Filtering */ 3219c80d176SSepherosa Ziehau #define E1000_MANC_NEIGHBOR_EN 0x00004000 3229c80d176SSepherosa Ziehau #define E1000_MANC_ARP_RES_EN 0x00008000 /* Enable ARP response Filtering */ 3239c80d176SSepherosa Ziehau #define E1000_MANC_TCO_RESET 0x00010000 /* TCO Reset Occurred */ 3249c80d176SSepherosa Ziehau #define E1000_MANC_RCV_TCO_EN 0x00020000 /* Receive TCO Packets Enabled */ 3259c80d176SSepherosa Ziehau #define E1000_MANC_REPORT_STATUS 0x00040000 /* Status Reporting Enabled */ 3269c80d176SSepherosa Ziehau #define E1000_MANC_RCV_ALL 0x00080000 /* Receive All Enabled */ 3279c80d176SSepherosa Ziehau #define E1000_MANC_BLK_PHY_RST_ON_IDE 0x00040000 /* Block phy resets */ 3289c80d176SSepherosa Ziehau /* Enable MAC address filtering */ 3299c80d176SSepherosa Ziehau #define E1000_MANC_EN_MAC_ADDR_FILTER 0x00100000 3309c80d176SSepherosa Ziehau /* Enable MNG packets to host memory */ 3319c80d176SSepherosa Ziehau #define E1000_MANC_EN_MNG2HOST 0x00200000 3329c80d176SSepherosa Ziehau /* Enable IP address filtering */ 3339c80d176SSepherosa Ziehau #define E1000_MANC_EN_IP_ADDR_FILTER 0x00400000 3344be59a01SSepherosa Ziehau #define E1000_MANC_EN_XSUM_FILTER 0x00800000 /* Ena checksum filtering */ 3354be59a01SSepherosa Ziehau #define E1000_MANC_BR_EN 0x01000000 /* Ena broadcast filtering */ 3369c80d176SSepherosa Ziehau #define E1000_MANC_SMB_REQ 0x01000000 /* SMBus Request */ 3379c80d176SSepherosa Ziehau #define E1000_MANC_SMB_GNT 0x02000000 /* SMBus Grant */ 3389c80d176SSepherosa Ziehau #define E1000_MANC_SMB_CLK_IN 0x04000000 /* SMBus Clock In */ 3399c80d176SSepherosa Ziehau #define E1000_MANC_SMB_DATA_IN 0x08000000 /* SMBus Data In */ 3409c80d176SSepherosa Ziehau #define E1000_MANC_SMB_DATA_OUT 0x10000000 /* SMBus Data Out */ 3419c80d176SSepherosa Ziehau #define E1000_MANC_SMB_CLK_OUT 0x20000000 /* SMBus Clock Out */ 34262583d18SSepherosa Ziehau #define E1000_MANC_MPROXYE 0x40000000 /* Mngment Proxy Enable */ 3434be59a01SSepherosa Ziehau #define E1000_MANC_EN_BMC2OS 0x10000000 /* OS2BMC is enabld or not */ 3449c80d176SSepherosa Ziehau 3459c80d176SSepherosa Ziehau #define E1000_MANC_SMB_DATA_OUT_SHIFT 28 /* SMBus Data Out Shift */ 3469c80d176SSepherosa Ziehau #define E1000_MANC_SMB_CLK_OUT_SHIFT 29 /* SMBus Clock Out Shift */ 3479c80d176SSepherosa Ziehau 3486a5a645eSSepherosa Ziehau #define E1000_MANC2H_PORT_623 0x00000020 /* Port 0x26f */ 3496a5a645eSSepherosa Ziehau #define E1000_MANC2H_PORT_664 0x00000040 /* Port 0x298 */ 3506a5a645eSSepherosa Ziehau #define E1000_MDEF_PORT_623 0x00000800 /* Port 0x26f */ 3516a5a645eSSepherosa Ziehau #define E1000_MDEF_PORT_664 0x00000400 /* Port 0x298 */ 3526a5a645eSSepherosa Ziehau 3539c80d176SSepherosa Ziehau /* Receive Control */ 3549c80d176SSepherosa Ziehau #define E1000_RCTL_RST 0x00000001 /* Software reset */ 3559c80d176SSepherosa Ziehau #define E1000_RCTL_EN 0x00000002 /* enable */ 3569c80d176SSepherosa Ziehau #define E1000_RCTL_SBP 0x00000004 /* store bad packet */ 3576a5a645eSSepherosa Ziehau #define E1000_RCTL_UPE 0x00000008 /* unicast promisc enable */ 3586a5a645eSSepherosa Ziehau #define E1000_RCTL_MPE 0x00000010 /* multicast promisc enable */ 3599c80d176SSepherosa Ziehau #define E1000_RCTL_LPE 0x00000020 /* long packet enable */ 3609c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_NO 0x00000000 /* no loopback mode */ 3619c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */ 3629c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_SLP 0x00000080 /* serial link loopback mode */ 3639c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */ 3649c80d176SSepherosa Ziehau #define E1000_RCTL_DTYP_MASK 0x00000C00 /* Descriptor type mask */ 3659c80d176SSepherosa Ziehau #define E1000_RCTL_DTYP_PS 0x00000400 /* Packet Split descriptor */ 3666d5e2922SSepherosa Ziehau #define E1000_RCTL_RDMTS_HALF 0x00000000 /* Rx desc min thresh size */ 3676d5e2922SSepherosa Ziehau #define E1000_RCTL_RDMTS_QUAT 0x00000100 /* Rx desc min thresh size */ 3686d5e2922SSepherosa Ziehau #define E1000_RCTL_RDMTS_EIGTH 0x00000200 /* Rx desc min thresh size */ 369ba0123e0SSepherosa Ziehau #define E1000_RCTL_RDMTS_HEX 0x00010000 370*a40fda39SSepherosa Ziehau #define E1000_RCTL_RDMTS1_HEX E1000_RCTL_RDMTS_HEX 3719c80d176SSepherosa Ziehau #define E1000_RCTL_MO_SHIFT 12 /* multicast offset shift */ 3729c80d176SSepherosa Ziehau #define E1000_RCTL_MO_0 0x00000000 /* multicast offset 11:0 */ 3739c80d176SSepherosa Ziehau #define E1000_RCTL_MO_1 0x00001000 /* multicast offset 12:1 */ 3749c80d176SSepherosa Ziehau #define E1000_RCTL_MO_2 0x00002000 /* multicast offset 13:2 */ 3759c80d176SSepherosa Ziehau #define E1000_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */ 3769c80d176SSepherosa Ziehau #define E1000_RCTL_MDR 0x00004000 /* multicast desc ring 0 */ 3779c80d176SSepherosa Ziehau #define E1000_RCTL_BAM 0x00008000 /* broadcast enable */ 3789c80d176SSepherosa Ziehau /* these buffer sizes are valid if E1000_RCTL_BSEX is 0 */ 3796d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_2048 0x00000000 /* Rx buffer size 2048 */ 3806d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_1024 0x00010000 /* Rx buffer size 1024 */ 3816d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_512 0x00020000 /* Rx buffer size 512 */ 3826d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_256 0x00030000 /* Rx buffer size 256 */ 3839c80d176SSepherosa Ziehau /* these buffer sizes are valid if E1000_RCTL_BSEX is 1 */ 3846d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_16384 0x00010000 /* Rx buffer size 16384 */ 3856d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_8192 0x00020000 /* Rx buffer size 8192 */ 3866d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_4096 0x00030000 /* Rx buffer size 4096 */ 3879c80d176SSepherosa Ziehau #define E1000_RCTL_VFE 0x00040000 /* vlan filter enable */ 3889c80d176SSepherosa Ziehau #define E1000_RCTL_CFIEN 0x00080000 /* canonical form enable */ 3899c80d176SSepherosa Ziehau #define E1000_RCTL_CFI 0x00100000 /* canonical form indicator */ 3909c80d176SSepherosa Ziehau #define E1000_RCTL_DPF 0x00400000 /* discard pause frames */ 3919c80d176SSepherosa Ziehau #define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */ 3929c80d176SSepherosa Ziehau #define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */ 3939c80d176SSepherosa Ziehau #define E1000_RCTL_SECRC 0x04000000 /* Strip Ethernet CRC */ 3949c80d176SSepherosa Ziehau #define E1000_RCTL_FLXBUF_MASK 0x78000000 /* Flexible buffer size */ 3959c80d176SSepherosa Ziehau #define E1000_RCTL_FLXBUF_SHIFT 27 /* Flexible buffer shift */ 3969c80d176SSepherosa Ziehau 397379ebbe7SSepherosa Ziehau /* Use byte values for the following shift parameters 3989c80d176SSepherosa Ziehau * Usage: 3999c80d176SSepherosa Ziehau * psrctl |= (((ROUNDUP(value0, 128) >> E1000_PSRCTL_BSIZE0_SHIFT) & 4009c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE0_MASK) | 4019c80d176SSepherosa Ziehau * ((ROUNDUP(value1, 1024) >> E1000_PSRCTL_BSIZE1_SHIFT) & 4029c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE1_MASK) | 4039c80d176SSepherosa Ziehau * ((ROUNDUP(value2, 1024) << E1000_PSRCTL_BSIZE2_SHIFT) & 4049c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE2_MASK) | 4059c80d176SSepherosa Ziehau * ((ROUNDUP(value3, 1024) << E1000_PSRCTL_BSIZE3_SHIFT) |; 4069c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE3_MASK)) 4079c80d176SSepherosa Ziehau * where value0 = [128..16256], default=256 4089c80d176SSepherosa Ziehau * value1 = [1024..64512], default=4096 4099c80d176SSepherosa Ziehau * value2 = [0..64512], default=4096 4109c80d176SSepherosa Ziehau * value3 = [0..64512], default=0 4119c80d176SSepherosa Ziehau */ 4129c80d176SSepherosa Ziehau 4139c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE0_MASK 0x0000007F 4149c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE1_MASK 0x00003F00 4159c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE2_MASK 0x003F0000 4169c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE3_MASK 0x3F000000 4179c80d176SSepherosa Ziehau 4189c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE0_SHIFT 7 /* Shift _right_ 7 */ 4199c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE1_SHIFT 2 /* Shift _right_ 2 */ 4209c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE2_SHIFT 6 /* Shift _left_ 6 */ 4219c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE3_SHIFT 14 /* Shift _left_ 14 */ 4229c80d176SSepherosa Ziehau 4239c80d176SSepherosa Ziehau /* SWFW_SYNC Definitions */ 4246a5a645eSSepherosa Ziehau #define E1000_SWFW_EEP_SM 0x01 4256a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY0_SM 0x02 4266a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY1_SM 0x04 4276a5a645eSSepherosa Ziehau #define E1000_SWFW_CSR_SM 0x08 4286a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY2_SM 0x20 4296a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY3_SM 0x40 43062583d18SSepherosa Ziehau #define E1000_SWFW_SW_MNG_SM 0x400 4319c80d176SSepherosa Ziehau 4329c80d176SSepherosa Ziehau /* FACTPS Definitions */ 4339c80d176SSepherosa Ziehau #define E1000_FACTPS_LFS 0x40000000 /* LAN Function Select */ 4349c80d176SSepherosa Ziehau /* Device Control */ 4359c80d176SSepherosa Ziehau #define E1000_CTRL_FD 0x00000001 /* Full duplex.0=half; 1=full */ 4369c80d176SSepherosa Ziehau #define E1000_CTRL_BEM 0x00000002 /* Endian Mode.0=little,1=big */ 4379c80d176SSepherosa Ziehau #define E1000_CTRL_PRIOR 0x00000004 /* Priority on PCI. 0=rx,1=fair */ 4386a5a645eSSepherosa Ziehau #define E1000_CTRL_GIO_MASTER_DISABLE 0x00000004 /*Blocks new Master reqs */ 4399c80d176SSepherosa Ziehau #define E1000_CTRL_LRST 0x00000008 /* Link reset. 0=normal,1=reset */ 4409c80d176SSepherosa Ziehau #define E1000_CTRL_TME 0x00000010 /* Test mode. 0=normal,1=test */ 4419c80d176SSepherosa Ziehau #define E1000_CTRL_SLE 0x00000020 /* Serial Link on 0=dis,1=en */ 4429c80d176SSepherosa Ziehau #define E1000_CTRL_ASDE 0x00000020 /* Auto-speed detect enable */ 4439c80d176SSepherosa Ziehau #define E1000_CTRL_SLU 0x00000040 /* Set link up (Force Link) */ 4449c80d176SSepherosa Ziehau #define E1000_CTRL_ILOS 0x00000080 /* Invert Loss-Of Signal */ 4459c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_SEL 0x00000300 /* Speed Select Mask */ 4469c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_10 0x00000000 /* Force 10Mb */ 4479c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_100 0x00000100 /* Force 100Mb */ 4489c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_1000 0x00000200 /* Force 1Gb */ 4499c80d176SSepherosa Ziehau #define E1000_CTRL_BEM32 0x00000400 /* Big Endian 32 mode */ 4509c80d176SSepherosa Ziehau #define E1000_CTRL_FRCSPD 0x00000800 /* Force Speed */ 4519c80d176SSepherosa Ziehau #define E1000_CTRL_FRCDPX 0x00001000 /* Force Duplex */ 4529c80d176SSepherosa Ziehau #define E1000_CTRL_D_UD_EN 0x00002000 /* Dock/Undock enable */ 4534be59a01SSepherosa Ziehau /* Defined polarity of Dock/Undock indication in SDP[0] */ 4544be59a01SSepherosa Ziehau #define E1000_CTRL_D_UD_POLARITY 0x00004000 4554be59a01SSepherosa Ziehau /* Reset both PHY ports, through PHYRST_N pin */ 4564be59a01SSepherosa Ziehau #define E1000_CTRL_FORCE_PHY_RESET 0x00008000 4574be59a01SSepherosa Ziehau /* enable link status from external LINK_0 and LINK_1 pins */ 4584be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_EN 0x00010000 4596a5a645eSSepherosa Ziehau #define E1000_CTRL_LANPHYPC_OVERRIDE 0x00010000 /* SW control of LANPHYPC */ 4606a5a645eSSepherosa Ziehau #define E1000_CTRL_LANPHYPC_VALUE 0x00020000 /* SW value of LANPHYPC */ 461379ebbe7SSepherosa Ziehau #define E1000_CTRL_MEHE 0x00080000 /* Memory Error Handling Enable */ 4629c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ 4639c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ 4649c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN2 0x00100000 /* SWDPIN 2 value */ 46562583d18SSepherosa Ziehau #define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */ 466379ebbe7SSepherosa Ziehau #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */ 4679c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN3 0x00200000 /* SWDPIN 3 value */ 4689c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */ 4699c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO1 0x00800000 /* SWDPIN 1 input or output */ 4709c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO2 0x01000000 /* SWDPIN 2 input or output */ 4719c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO3 0x02000000 /* SWDPIN 3 input or output */ 4729c80d176SSepherosa Ziehau #define E1000_CTRL_RST 0x04000000 /* Global reset */ 4739c80d176SSepherosa Ziehau #define E1000_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */ 4749c80d176SSepherosa Ziehau #define E1000_CTRL_TFCE 0x10000000 /* Transmit flow control enable */ 4759c80d176SSepherosa Ziehau #define E1000_CTRL_RTE 0x20000000 /* Routing tag enable */ 4769c80d176SSepherosa Ziehau #define E1000_CTRL_VME 0x40000000 /* IEEE VLAN mode enable */ 4779c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RST 0x80000000 /* PHY Reset */ 4789c80d176SSepherosa Ziehau #define E1000_CTRL_SW2FW_INT 0x02000000 /* Initiate an interrupt to ME */ 4799c80d176SSepherosa Ziehau #define E1000_CTRL_I2C_ENA 0x02000000 /* I2C enable */ 4809c80d176SSepherosa Ziehau 4819c80d176SSepherosa Ziehau /* 4829c80d176SSepherosa Ziehau * Bit definitions for the Management Data IO (MDIO) and Management Data 4839c80d176SSepherosa Ziehau * Clock (MDC) pins in the Device Control Register. 4849c80d176SSepherosa Ziehau */ 4859c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RESET_DIR E1000_CTRL_SWDPIO0 4869c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RESET E1000_CTRL_SWDPIN0 4879c80d176SSepherosa Ziehau #define E1000_CTRL_MDIO_DIR E1000_CTRL_SWDPIO2 4889c80d176SSepherosa Ziehau #define E1000_CTRL_MDIO E1000_CTRL_SWDPIN2 4899c80d176SSepherosa Ziehau #define E1000_CTRL_MDC_DIR E1000_CTRL_SWDPIO3 4909c80d176SSepherosa Ziehau #define E1000_CTRL_MDC E1000_CTRL_SWDPIN3 4919c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RESET_DIR4 E1000_CTRL_EXT_SDP4_DIR 4929c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RESET4 E1000_CTRL_EXT_SDP4_DATA 4939c80d176SSepherosa Ziehau 4949c80d176SSepherosa Ziehau #define E1000_CONNSW_ENRGSRC 0x4 495379ebbe7SSepherosa Ziehau #define E1000_CONNSW_PHYSD 0x400 496ba0123e0SSepherosa Ziehau #define E1000_CONNSW_PHY_PDN 0x800 497379ebbe7SSepherosa Ziehau #define E1000_CONNSW_SERDESD 0x200 498ba0123e0SSepherosa Ziehau #define E1000_CONNSW_AUTOSENSE_CONF 0x2 499ba0123e0SSepherosa Ziehau #define E1000_CONNSW_AUTOSENSE_EN 0x1 5009c80d176SSepherosa Ziehau #define E1000_PCS_CFG_PCS_EN 8 5019c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FLV_LINK_UP 1 5029c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_10 0 5039c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_100 2 5049c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_1000 4 5059c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FDV_FULL 8 5069c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSD 0x10 5079c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FORCE_LINK 0x20 5089c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_LOW_LINK_LATCH 0x40 5099c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FORCE_FCTRL 0x80 5109c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_ENABLE 0x10000 5119c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_RESTART 0x20000 5129c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_TIMEOUT 0x40000 5139c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_SGMII_BYPASS 0x80000 5149c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_SGMII_TRIGGER 0x100000 5159c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FAST_LINK_TIMER 0x1000000 5169c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_LINK_OK_FIX 0x2000000 5179c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_CRS_ON_NI 0x4000000 5189c80d176SSepherosa Ziehau #define E1000_ENABLE_SERDES_LOOPBACK 0x0410 5199c80d176SSepherosa Ziehau 5209c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_LINK_OK 1 5219c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SPEED_10 0 5229c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SPEED_100 2 5239c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SPEED_1000 4 5249c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_DUPLEX_FULL 8 5259c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SYNK_OK 0x10 5269c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_COMPLETE 0x10000 5279c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_PAGE_RX 0x20000 5289c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_TIMED_OUT 0x40000 5299c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_REMOTE_FAULT 0x80000 5309c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_ERROR_RWS 0x100000 5319c80d176SSepherosa Ziehau 5329c80d176SSepherosa Ziehau /* Device Status */ 5334be59a01SSepherosa Ziehau #define E1000_STATUS_FD 0x00000001 /* Duplex 0=half 1=full */ 5349c80d176SSepherosa Ziehau #define E1000_STATUS_LU 0x00000002 /* Link up.0=no,1=link */ 5359c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_MASK 0x0000000C /* PCI Function Mask */ 5369c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_SHIFT 2 5379c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_0 0x00000000 /* Function 0 */ 5389c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_1 0x00000004 /* Function 1 */ 5399c80d176SSepherosa Ziehau #define E1000_STATUS_TXOFF 0x00000010 /* transmission paused */ 5409c80d176SSepherosa Ziehau #define E1000_STATUS_TBIMODE 0x00000020 /* TBI mode */ 5419c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_MASK 0x000000C0 5429c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */ 5439c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */ 5449c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */ 5454be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Compltn by NVM */ 5469c80d176SSepherosa Ziehau #define E1000_STATUS_ASDV 0x00000300 /* Auto speed detect value */ 5476a5a645eSSepherosa Ziehau #define E1000_STATUS_PHYRA 0x00000400 /* PHY Reset Asserted */ 5484be59a01SSepherosa Ziehau /* Change in Dock/Undock state clear on write '0'. */ 5494be59a01SSepherosa Ziehau #define E1000_STATUS_DOCK_CI 0x00000800 5509c80d176SSepherosa Ziehau #define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Master request status */ 5519c80d176SSepherosa Ziehau #define E1000_STATUS_MTXCKOK 0x00000400 /* MTX clock running OK */ 5529c80d176SSepherosa Ziehau #define E1000_STATUS_PCI66 0x00000800 /* In 66Mhz slot */ 5539c80d176SSepherosa Ziehau #define E1000_STATUS_BUS64 0x00001000 /* In 64 bit slot */ 554ba0123e0SSepherosa Ziehau #define E1000_STATUS_2P5_SKU 0x00001000 /* Val of 2.5GBE SKU strap */ 555ba0123e0SSepherosa Ziehau #define E1000_STATUS_2P5_SKU_OVER 0x00002000 /* Val of 2.5GBE SKU Over */ 5569c80d176SSepherosa Ziehau #define E1000_STATUS_PCIX_MODE 0x00002000 /* PCI-X mode */ 5579c80d176SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED 0x0000C000 /* PCI-X bus speed */ 5584be59a01SSepherosa Ziehau #define E1000_STATUS_BMC_SKU_0 0x00100000 /* BMC USB redirect disbld */ 5599c80d176SSepherosa Ziehau #define E1000_STATUS_BMC_SKU_1 0x00200000 /* BMC SRAM disabled */ 5609c80d176SSepherosa Ziehau #define E1000_STATUS_BMC_SKU_2 0x00400000 /* BMC SDRAM disabled */ 5619c80d176SSepherosa Ziehau #define E1000_STATUS_BMC_CRYPTO 0x00800000 /* BMC crypto disabled */ 5624be59a01SSepherosa Ziehau /* BMC external code execution disabled */ 5634be59a01SSepherosa Ziehau #define E1000_STATUS_BMC_LITE 0x01000000 5649c80d176SSepherosa Ziehau #define E1000_STATUS_RGMII_ENABLE 0x02000000 /* RGMII disabled */ 5659c80d176SSepherosa Ziehau #define E1000_STATUS_FUSE_8 0x04000000 5669c80d176SSepherosa Ziehau #define E1000_STATUS_FUSE_9 0x08000000 5674be59a01SSepherosa Ziehau #define E1000_STATUS_SERDES0_DIS 0x10000000 /* SERDES disbld on port 0 */ 5684be59a01SSepherosa Ziehau #define E1000_STATUS_SERDES1_DIS 0x20000000 /* SERDES disbld on port 1 */ 5699c80d176SSepherosa Ziehau 5709c80d176SSepherosa Ziehau /* Constants used to interpret the masked PCI-X bus speed. */ 5714be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_66 0x00000000 /* PCI-X bus spd 50-66MHz */ 5724be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_100 0x00004000 /* PCI-X bus spd 66-100MHz */ 5734be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_133 0x00008000 /* PCI-X bus spd 100-133MHz*/ 5749c80d176SSepherosa Ziehau 5759c80d176SSepherosa Ziehau #define SPEED_10 10 5769c80d176SSepherosa Ziehau #define SPEED_100 100 5779c80d176SSepherosa Ziehau #define SPEED_1000 1000 578ba0123e0SSepherosa Ziehau #define SPEED_2500 2500 5799c80d176SSepherosa Ziehau #define HALF_DUPLEX 1 5809c80d176SSepherosa Ziehau #define FULL_DUPLEX 2 5819c80d176SSepherosa Ziehau 5829c80d176SSepherosa Ziehau #define PHY_FORCE_TIME 20 5839c80d176SSepherosa Ziehau 5849c80d176SSepherosa Ziehau #define ADVERTISE_10_HALF 0x0001 5859c80d176SSepherosa Ziehau #define ADVERTISE_10_FULL 0x0002 5869c80d176SSepherosa Ziehau #define ADVERTISE_100_HALF 0x0004 5879c80d176SSepherosa Ziehau #define ADVERTISE_100_FULL 0x0008 5889c80d176SSepherosa Ziehau #define ADVERTISE_1000_HALF 0x0010 /* Not used, just FYI */ 5899c80d176SSepherosa Ziehau #define ADVERTISE_1000_FULL 0x0020 5909c80d176SSepherosa Ziehau 5919c80d176SSepherosa Ziehau /* 1000/H is not supported, nor spec-compliant. */ 5924be59a01SSepherosa Ziehau #define E1000_ALL_SPEED_DUPLEX ( \ 5934be59a01SSepherosa Ziehau ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 5944be59a01SSepherosa Ziehau ADVERTISE_100_FULL | ADVERTISE_1000_FULL) 5954be59a01SSepherosa Ziehau #define E1000_ALL_NOT_GIG ( \ 5964be59a01SSepherosa Ziehau ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 5974be59a01SSepherosa Ziehau ADVERTISE_100_FULL) 5989c80d176SSepherosa Ziehau #define E1000_ALL_100_SPEED (ADVERTISE_100_HALF | ADVERTISE_100_FULL) 5999c80d176SSepherosa Ziehau #define E1000_ALL_10_SPEED (ADVERTISE_10_HALF | ADVERTISE_10_FULL) 6004be59a01SSepherosa Ziehau #define E1000_ALL_FULL_DUPLEX ( \ 6014be59a01SSepherosa Ziehau ADVERTISE_10_FULL | ADVERTISE_100_FULL | ADVERTISE_1000_FULL) 6029c80d176SSepherosa Ziehau #define E1000_ALL_HALF_DUPLEX (ADVERTISE_10_HALF | ADVERTISE_100_HALF) 6039c80d176SSepherosa Ziehau 6049c80d176SSepherosa Ziehau #define AUTONEG_ADVERTISE_SPEED_DEFAULT E1000_ALL_SPEED_DUPLEX 6059c80d176SSepherosa Ziehau 6069c80d176SSepherosa Ziehau /* LED Control */ 6076a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_MODE_MASK 0x00000007 6086a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_IVRT 0x00000008 6096a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_BLINK 0x00000010 6106a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_MASK 0x0000001F 6116a5a645eSSepherosa Ziehau 6129c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F 6139c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_MODE_SHIFT 0 6149c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_BLINK_RATE 0x00000020 6159c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_IVRT 0x00000040 6169c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_BLINK 0x00000080 6179c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED1_MODE_MASK 0x00000F00 6189c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED1_MODE_SHIFT 8 6199c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED1_BLINK_RATE 0x00002000 6209c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED1_IVRT 0x00004000 6219c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED1_BLINK 0x00008000 6229c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED2_MODE_MASK 0x000F0000 6239c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED2_MODE_SHIFT 16 6249c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED2_BLINK_RATE 0x00200000 6259c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED2_IVRT 0x00400000 6269c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED2_BLINK 0x00800000 6279c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED3_MODE_MASK 0x0F000000 6289c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED3_MODE_SHIFT 24 6299c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED3_BLINK_RATE 0x20000000 6309c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED3_IVRT 0x40000000 6319c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED3_BLINK 0x80000000 6329c80d176SSepherosa Ziehau 6339c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_10_1000 0x0 6349c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_100_1000 0x1 6359c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_UP 0x2 6369c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_ACTIVITY 0x3 6379c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_ACTIVITY 0x4 6389c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_10 0x5 6399c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_100 0x6 6409c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_1000 0x7 6419c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_PCIX_MODE 0x8 6429c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_FULL_DUPLEX 0x9 6439c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_COLLISION 0xA 6449c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_BUS_SPEED 0xB 6459c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_BUS_SIZE 0xC 6469c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_PAUSED 0xD 6479c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LED_ON 0xE 6489c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LED_OFF 0xF 6499c80d176SSepherosa Ziehau 6509c80d176SSepherosa Ziehau /* Transmit Descriptor bit definitions */ 6519c80d176SSepherosa Ziehau #define E1000_TXD_DTYP_D 0x00100000 /* Data Descriptor */ 6529c80d176SSepherosa Ziehau #define E1000_TXD_DTYP_C 0x00000000 /* Context Descriptor */ 6539c80d176SSepherosa Ziehau #define E1000_TXD_POPTS_SHIFT 8 /* POPTS shift */ 6549c80d176SSepherosa Ziehau #define E1000_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ 6559c80d176SSepherosa Ziehau #define E1000_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ 6569c80d176SSepherosa Ziehau #define E1000_TXD_CMD_EOP 0x01000000 /* End of Packet */ 6579c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */ 6589c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IC 0x04000000 /* Insert Checksum */ 6599c80d176SSepherosa Ziehau #define E1000_TXD_CMD_RS 0x08000000 /* Report Status */ 6609c80d176SSepherosa Ziehau #define E1000_TXD_CMD_RPS 0x10000000 /* Report Packet Sent */ 6614be59a01SSepherosa Ziehau #define E1000_TXD_CMD_DEXT 0x20000000 /* Desc extension (0 = legacy) */ 6629c80d176SSepherosa Ziehau #define E1000_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ 6639c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IDE 0x80000000 /* Enable Tidv register */ 6649c80d176SSepherosa Ziehau #define E1000_TXD_STAT_DD 0x00000001 /* Descriptor Done */ 6659c80d176SSepherosa Ziehau #define E1000_TXD_STAT_EC 0x00000002 /* Excess Collisions */ 6669c80d176SSepherosa Ziehau #define E1000_TXD_STAT_LC 0x00000004 /* Late Collisions */ 6679c80d176SSepherosa Ziehau #define E1000_TXD_STAT_TU 0x00000008 /* Transmit underrun */ 6689c80d176SSepherosa Ziehau #define E1000_TXD_CMD_TCP 0x01000000 /* TCP packet */ 6699c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IP 0x02000000 /* IP packet */ 6709c80d176SSepherosa Ziehau #define E1000_TXD_CMD_TSE 0x04000000 /* TCP Seg enable */ 6719c80d176SSepherosa Ziehau #define E1000_TXD_STAT_TC 0x00000004 /* Tx Underrun */ 6729c80d176SSepherosa Ziehau /* Extended desc bits for Linksec and timesync */ 6734be59a01SSepherosa Ziehau #define E1000_TXD_CMD_LINKSEC 0x10000000 /* Apply LinkSec on packet */ 6744be59a01SSepherosa Ziehau #define E1000_TXD_EXTCMD_TSTAMP 0x00000010 /* IEEE1588 Timestamp packet */ 6759c80d176SSepherosa Ziehau 6769c80d176SSepherosa Ziehau /* Transmit Control */ 6779c80d176SSepherosa Ziehau #define E1000_TCTL_RST 0x00000001 /* software reset */ 6786d5e2922SSepherosa Ziehau #define E1000_TCTL_EN 0x00000002 /* enable Tx */ 6799c80d176SSepherosa Ziehau #define E1000_TCTL_BCE 0x00000004 /* busy check enable */ 6809c80d176SSepherosa Ziehau #define E1000_TCTL_PSP 0x00000008 /* pad short packets */ 6819c80d176SSepherosa Ziehau #define E1000_TCTL_CT 0x00000ff0 /* collision threshold */ 6829c80d176SSepherosa Ziehau #define E1000_TCTL_COLD 0x003ff000 /* collision distance */ 6839c80d176SSepherosa Ziehau #define E1000_TCTL_SWXOFF 0x00400000 /* SW Xoff transmission */ 6849c80d176SSepherosa Ziehau #define E1000_TCTL_PBE 0x00800000 /* Packet Burst Enable */ 6859c80d176SSepherosa Ziehau #define E1000_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */ 6869c80d176SSepherosa Ziehau #define E1000_TCTL_NRTU 0x02000000 /* No Re-transmit on underrun */ 6879c80d176SSepherosa Ziehau #define E1000_TCTL_MULR 0x10000000 /* Multiple request support */ 6889c80d176SSepherosa Ziehau 6899c80d176SSepherosa Ziehau /* Transmit Arbitration Count */ 6909c80d176SSepherosa Ziehau #define E1000_TARC0_ENABLE 0x00000400 /* Enable Tx Queue 0 */ 6919c80d176SSepherosa Ziehau 6929c80d176SSepherosa Ziehau /* SerDes Control */ 6939c80d176SSepherosa Ziehau #define E1000_SCTL_DISABLE_SERDES_LOOPBACK 0x0400 694379ebbe7SSepherosa Ziehau #define E1000_SCTL_ENABLE_SERDES_LOOPBACK 0x0410 6959c80d176SSepherosa Ziehau 6969c80d176SSepherosa Ziehau /* Receive Checksum Control */ 6979c80d176SSepherosa Ziehau #define E1000_RXCSUM_PCSS_MASK 0x000000FF /* Packet Checksum Start */ 6989c80d176SSepherosa Ziehau #define E1000_RXCSUM_IPOFL 0x00000100 /* IPv4 checksum offload */ 6999c80d176SSepherosa Ziehau #define E1000_RXCSUM_TUOFL 0x00000200 /* TCP / UDP checksum offload */ 7009c80d176SSepherosa Ziehau #define E1000_RXCSUM_IPV6OFL 0x00000400 /* IPv6 checksum offload */ 7019c80d176SSepherosa Ziehau #define E1000_RXCSUM_CRCOFL 0x00000800 /* CRC32 offload enable */ 7029c80d176SSepherosa Ziehau #define E1000_RXCSUM_IPPCSE 0x00001000 /* IP payload checksum enable */ 7039c80d176SSepherosa Ziehau #define E1000_RXCSUM_PCSD 0x00002000 /* packet checksum disabled */ 7049c80d176SSepherosa Ziehau 7059c80d176SSepherosa Ziehau /* Header split receive */ 7069c80d176SSepherosa Ziehau #define E1000_RFCTL_ISCSI_DIS 0x00000001 7079c80d176SSepherosa Ziehau #define E1000_RFCTL_ISCSI_DWC_MASK 0x0000003E 7089c80d176SSepherosa Ziehau #define E1000_RFCTL_ISCSI_DWC_SHIFT 1 7099c80d176SSepherosa Ziehau #define E1000_RFCTL_NFSW_DIS 0x00000040 7109c80d176SSepherosa Ziehau #define E1000_RFCTL_NFSR_DIS 0x00000080 7119c80d176SSepherosa Ziehau #define E1000_RFCTL_NFS_VER_MASK 0x00000300 7129c80d176SSepherosa Ziehau #define E1000_RFCTL_NFS_VER_SHIFT 8 7139c80d176SSepherosa Ziehau #define E1000_RFCTL_IPV6_DIS 0x00000400 7149c80d176SSepherosa Ziehau #define E1000_RFCTL_IPV6_XSUM_DIS 0x00000800 7159c80d176SSepherosa Ziehau #define E1000_RFCTL_ACK_DIS 0x00001000 7169c80d176SSepherosa Ziehau #define E1000_RFCTL_ACKD_DIS 0x00002000 7179c80d176SSepherosa Ziehau #define E1000_RFCTL_IPFRSP_DIS 0x00004000 7189c80d176SSepherosa Ziehau #define E1000_RFCTL_EXTEN 0x00008000 7199c80d176SSepherosa Ziehau #define E1000_RFCTL_IPV6_EX_DIS 0x00010000 7209c80d176SSepherosa Ziehau #define E1000_RFCTL_NEW_IPV6_EXT_DIS 0x00020000 7219c80d176SSepherosa Ziehau #define E1000_RFCTL_LEF 0x00040000 7229c80d176SSepherosa Ziehau 7239c80d176SSepherosa Ziehau /* Collision related configuration parameters */ 7249c80d176SSepherosa Ziehau #define E1000_COLLISION_THRESHOLD 15 7259c80d176SSepherosa Ziehau #define E1000_CT_SHIFT 4 7269c80d176SSepherosa Ziehau #define E1000_COLLISION_DISTANCE 63 7279c80d176SSepherosa Ziehau #define E1000_COLD_SHIFT 12 7289c80d176SSepherosa Ziehau 7299c80d176SSepherosa Ziehau /* Default values for the transmit IPG register */ 7306a5a645eSSepherosa Ziehau #ifndef NO_82542_SUPPORT 7319c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGT 10 7326a5a645eSSepherosa Ziehau #endif 7339c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGT_FIBER 9 7349c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGT_COPPER 8 7359c80d176SSepherosa Ziehau 7369c80d176SSepherosa Ziehau #define E1000_TIPG_IPGT_MASK 0x000003FF 7379c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR1_MASK 0x000FFC00 7389c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR2_MASK 0x3FF00000 7399c80d176SSepherosa Ziehau 7406a5a645eSSepherosa Ziehau #ifndef NO_82542_SUPPORT 7419c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGR1 2 7426a5a645eSSepherosa Ziehau #endif 7439c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGR1 8 7449c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR1_SHIFT 10 7459c80d176SSepherosa Ziehau 7466a5a645eSSepherosa Ziehau #ifndef NO_82542_SUPPORT 7479c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGR2 10 7486a5a645eSSepherosa Ziehau #endif 7499c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGR2 6 7509c80d176SSepherosa Ziehau #define DEFAULT_80003ES2LAN_TIPG_IPGR2 7 7519c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR2_SHIFT 20 7529c80d176SSepherosa Ziehau 7539c80d176SSepherosa Ziehau /* Ethertype field values */ 7549c80d176SSepherosa Ziehau #define ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.3ac packet */ 7559c80d176SSepherosa Ziehau 7569c80d176SSepherosa Ziehau #define ETHERNET_FCS_SIZE 4 7579c80d176SSepherosa Ziehau #define MAX_JUMBO_FRAME_SIZE 0x3F00 7584765c386SMichael Neumann #define E1000_TX_PTR_GAP 0x1F 7599c80d176SSepherosa Ziehau 7609c80d176SSepherosa Ziehau /* Extended Configuration Control and Size */ 7619c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020 7629c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE 0x00000001 7636a5a645eSSepherosa Ziehau #define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE 0x00000008 7649c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_SWFLAG 0x00000020 7656a5a645eSSepherosa Ziehau #define E1000_EXTCNF_CTRL_GATE_PHY_CFG 0x00000080 7669c80d176SSepherosa Ziehau #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK 0x00FF0000 7679c80d176SSepherosa Ziehau #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT 16 7689c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK 0x0FFF0000 7699c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT 16 7709c80d176SSepherosa Ziehau 7719c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_SPD_EN 0x00000001 7729c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_D0A_LPLU 0x00000002 7739c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_NOND0A_LPLU 0x00000004 7749c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_NOND0A_GBE_DISABLE 0x00000008 7759c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_GBE_DISABLE 0x00000040 7769c80d176SSepherosa Ziehau 7779c80d176SSepherosa Ziehau #define E1000_KABGTXD_BGSQLBIAS 0x00050000 7789c80d176SSepherosa Ziehau 779379ebbe7SSepherosa Ziehau /* Low Power IDLE Control */ 780379ebbe7SSepherosa Ziehau #define E1000_LPIC_LPIET_SHIFT 24 /* Low Power Idle Entry Time */ 781379ebbe7SSepherosa Ziehau 7829c80d176SSepherosa Ziehau /* PBA constants */ 7839c80d176SSepherosa Ziehau #define E1000_PBA_6K 0x0006 /* 6KB */ 7849c80d176SSepherosa Ziehau #define E1000_PBA_8K 0x0008 /* 8KB */ 7856a5a645eSSepherosa Ziehau #define E1000_PBA_10K 0x000A /* 10KB */ 7869c80d176SSepherosa Ziehau #define E1000_PBA_12K 0x000C /* 12KB */ 7876a5a645eSSepherosa Ziehau #define E1000_PBA_14K 0x000E /* 14KB */ 7889c80d176SSepherosa Ziehau #define E1000_PBA_16K 0x0010 /* 16KB */ 7896a5a645eSSepherosa Ziehau #define E1000_PBA_18K 0x0012 7909c80d176SSepherosa Ziehau #define E1000_PBA_20K 0x0014 7919c80d176SSepherosa Ziehau #define E1000_PBA_22K 0x0016 7929c80d176SSepherosa Ziehau #define E1000_PBA_24K 0x0018 7936a5a645eSSepherosa Ziehau #define E1000_PBA_26K 0x001A 7949c80d176SSepherosa Ziehau #define E1000_PBA_30K 0x001E 7959c80d176SSepherosa Ziehau #define E1000_PBA_32K 0x0020 7969c80d176SSepherosa Ziehau #define E1000_PBA_34K 0x0022 7976a5a645eSSepherosa Ziehau #define E1000_PBA_35K 0x0023 7989c80d176SSepherosa Ziehau #define E1000_PBA_38K 0x0026 7999c80d176SSepherosa Ziehau #define E1000_PBA_40K 0x0028 8009c80d176SSepherosa Ziehau #define E1000_PBA_48K 0x0030 /* 48KB */ 8019c80d176SSepherosa Ziehau #define E1000_PBA_64K 0x0040 /* 64KB */ 8029c80d176SSepherosa Ziehau 8034be59a01SSepherosa Ziehau #define E1000_PBA_RXA_MASK 0xFFFF 8044be59a01SSepherosa Ziehau 8059c80d176SSepherosa Ziehau #define E1000_PBS_16K E1000_PBA_16K 8069c80d176SSepherosa Ziehau #define E1000_PBS_24K E1000_PBA_24K 8079c80d176SSepherosa Ziehau 808379ebbe7SSepherosa Ziehau /* Uncorrectable/correctable ECC Error counts and enable bits */ 809379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_CORR_ERR_CNT_MASK 0x000000FF 810379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_UNCORR_ERR_CNT_MASK 0x0000FF00 811379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT 8 812379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_ECC_ENABLE 0x00010000 813379ebbe7SSepherosa Ziehau 8149c80d176SSepherosa Ziehau #define IFS_MAX 80 8159c80d176SSepherosa Ziehau #define IFS_MIN 40 8169c80d176SSepherosa Ziehau #define IFS_RATIO 4 8179c80d176SSepherosa Ziehau #define IFS_STEP 10 8189c80d176SSepherosa Ziehau #define MIN_NUM_XMITS 1000 8199c80d176SSepherosa Ziehau 8209c80d176SSepherosa Ziehau /* SW Semaphore Register */ 8219c80d176SSepherosa Ziehau #define E1000_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ 8229c80d176SSepherosa Ziehau #define E1000_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ 8239c80d176SSepherosa Ziehau #define E1000_SWSM_WMNG 0x00000004 /* Wake MNG Clock */ 8249c80d176SSepherosa Ziehau #define E1000_SWSM_DRV_LOAD 0x00000008 /* Driver Loaded Bit */ 8259c80d176SSepherosa Ziehau 8266a5a645eSSepherosa Ziehau #define E1000_SWSM2_LOCK 0x00000002 /* Secondary driver semaphore bit */ 8276a5a645eSSepherosa Ziehau 8289c80d176SSepherosa Ziehau /* Interrupt Cause Read */ 8299c80d176SSepherosa Ziehau #define E1000_ICR_TXDW 0x00000001 /* Transmit desc written back */ 8309c80d176SSepherosa Ziehau #define E1000_ICR_TXQE 0x00000002 /* Transmit Queue empty */ 8319c80d176SSepherosa Ziehau #define E1000_ICR_LSC 0x00000004 /* Link Status Change */ 8326d5e2922SSepherosa Ziehau #define E1000_ICR_RXSEQ 0x00000008 /* Rx sequence error */ 8336d5e2922SSepherosa Ziehau #define E1000_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */ 8346d5e2922SSepherosa Ziehau #define E1000_ICR_RXO 0x00000040 /* Rx overrun */ 8356d5e2922SSepherosa Ziehau #define E1000_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */ 8369c80d176SSepherosa Ziehau #define E1000_ICR_VMMB 0x00000100 /* VM MB event */ 8379c80d176SSepherosa Ziehau #define E1000_ICR_MDAC 0x00000200 /* MDIO access complete */ 8389c80d176SSepherosa Ziehau #define E1000_ICR_RXCFG 0x00000400 /* Rx /c/ ordered set */ 8399c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN0 0x00000800 /* GP Int 0 */ 8409c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN1 0x00001000 /* GP Int 1 */ 8419c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN2 0x00002000 /* GP Int 2 */ 8429c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN3 0x00004000 /* GP Int 3 */ 8439c80d176SSepherosa Ziehau #define E1000_ICR_TXD_LOW 0x00008000 8449c80d176SSepherosa Ziehau #define E1000_ICR_SRPD 0x00010000 8459c80d176SSepherosa Ziehau #define E1000_ICR_ACK 0x00020000 /* Receive Ack frame */ 8469c80d176SSepherosa Ziehau #define E1000_ICR_MNG 0x00040000 /* Manageability event */ 8479c80d176SSepherosa Ziehau #define E1000_ICR_DOCK 0x00080000 /* Dock/Undock */ 848ba0123e0SSepherosa Ziehau #define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */ 8494be59a01SSepherosa Ziehau #define E1000_ICR_TS 0x00080000 /* Time Sync Interrupt */ 8506a5a645eSSepherosa Ziehau #define E1000_ICR_DRSTA 0x40000000 /* Device Reset Asserted */ 851379ebbe7SSepherosa Ziehau #define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */ 8524be59a01SSepherosa Ziehau /* If this bit asserted, the driver should claim the interrupt */ 8534be59a01SSepherosa Ziehau #define E1000_ICR_INT_ASSERTED 0x80000000 8549c80d176SSepherosa Ziehau #define E1000_ICR_RXD_FIFO_PAR0 0x00100000 /* Q0 Rx desc FIFO parity error */ 8559c80d176SSepherosa Ziehau #define E1000_ICR_TXD_FIFO_PAR0 0x00200000 /* Q0 Tx desc FIFO parity error */ 8569c80d176SSepherosa Ziehau #define E1000_ICR_HOST_ARB_PAR 0x00400000 /* host arb read buffer parity err */ 8579c80d176SSepherosa Ziehau #define E1000_ICR_PB_PAR 0x00800000 /* packet buffer parity error */ 8589c80d176SSepherosa Ziehau #define E1000_ICR_RXD_FIFO_PAR1 0x01000000 /* Q1 Rx desc FIFO parity error */ 8599c80d176SSepherosa Ziehau #define E1000_ICR_TXD_FIFO_PAR1 0x02000000 /* Q1 Tx desc FIFO parity error */ 8609c80d176SSepherosa Ziehau #define E1000_ICR_ALL_PARITY 0x03F00000 /* all parity error bits */ 8614be59a01SSepherosa Ziehau /* FW changed the status of DISSW bit in the FWSM */ 8624be59a01SSepherosa Ziehau #define E1000_ICR_DSW 0x00000020 8634be59a01SSepherosa Ziehau /* LAN connected device generates an interrupt */ 8644be59a01SSepherosa Ziehau #define E1000_ICR_PHYINT 0x00001000 8659c80d176SSepherosa Ziehau #define E1000_ICR_DOUTSYNC 0x10000000 /* NIC DMA out of sync */ 8669c80d176SSepherosa Ziehau #define E1000_ICR_EPRST 0x00100000 /* ME hardware reset occurs */ 8674be59a01SSepherosa Ziehau #define E1000_ICR_RXQ0 0x00100000 /* Rx Queue 0 Interrupt */ 8684be59a01SSepherosa Ziehau #define E1000_ICR_RXQ1 0x00200000 /* Rx Queue 1 Interrupt */ 8694be59a01SSepherosa Ziehau #define E1000_ICR_TXQ0 0x00400000 /* Tx Queue 0 Interrupt */ 8704be59a01SSepherosa Ziehau #define E1000_ICR_TXQ1 0x00800000 /* Tx Queue 1 Interrupt */ 8714be59a01SSepherosa Ziehau #define E1000_ICR_OTHER 0x01000000 /* Other Interrupts */ 8726a5a645eSSepherosa Ziehau #define E1000_ICR_FER 0x00400000 /* Fatal Error */ 8739c80d176SSepherosa Ziehau 87462583d18SSepherosa Ziehau #define E1000_ICR_THS 0x00800000 /* ICR.THS: Thermal Sensor Event*/ 87562583d18SSepherosa Ziehau #define E1000_ICR_MDDET 0x10000000 /* Malicious Driver Detect */ 87662583d18SSepherosa Ziehau 8774be59a01SSepherosa Ziehau #define E1000_ITR_MASK 0x000FFFFF /* ITR value bitfield */ 8784be59a01SSepherosa Ziehau #define E1000_ITR_MULT 256 /* ITR mulitplier in nsec */ 8794be59a01SSepherosa Ziehau 8806a5a645eSSepherosa Ziehau /* PBA ECC Register */ 8816a5a645eSSepherosa Ziehau #define E1000_PBA_ECC_COUNTER_MASK 0xFFF00000 /* ECC counter mask */ 8826a5a645eSSepherosa Ziehau #define E1000_PBA_ECC_COUNTER_SHIFT 20 /* ECC counter shift value */ 8836a5a645eSSepherosa Ziehau #define E1000_PBA_ECC_CORR_EN 0x00000001 /* Enable ECC error correction */ 8846a5a645eSSepherosa Ziehau #define E1000_PBA_ECC_STAT_CLR 0x00000002 /* Clear ECC error counter */ 8856a5a645eSSepherosa Ziehau #define E1000_PBA_ECC_INT_EN 0x00000004 /* Enable ICR bit 5 on ECC error */ 8869c80d176SSepherosa Ziehau 88762583d18SSepherosa Ziehau /* Extended Interrupt Cause Read */ 88862583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE0 0x00000001 /* Rx Queue 0 Interrupt */ 88962583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE1 0x00000002 /* Rx Queue 1 Interrupt */ 89062583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE2 0x00000004 /* Rx Queue 2 Interrupt */ 89162583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE3 0x00000008 /* Rx Queue 3 Interrupt */ 89262583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE0 0x00000100 /* Tx Queue 0 Interrupt */ 89362583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE1 0x00000200 /* Tx Queue 1 Interrupt */ 89462583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE2 0x00000400 /* Tx Queue 2 Interrupt */ 89562583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE3 0x00000800 /* Tx Queue 3 Interrupt */ 89662583d18SSepherosa Ziehau #define E1000_EICR_TCP_TIMER 0x40000000 /* TCP Timer */ 89762583d18SSepherosa Ziehau #define E1000_EICR_OTHER 0x80000000 /* Interrupt Cause Active */ 89862583d18SSepherosa Ziehau /* TCP Timer */ 89962583d18SSepherosa Ziehau #define E1000_TCPTIMER_KS 0x00000100 /* KickStart */ 90062583d18SSepherosa Ziehau #define E1000_TCPTIMER_COUNT_ENABLE 0x00000200 /* Count Enable */ 90162583d18SSepherosa Ziehau #define E1000_TCPTIMER_COUNT_FINISH 0x00000400 /* Count finish */ 90262583d18SSepherosa Ziehau #define E1000_TCPTIMER_LOOP 0x00000800 /* Loop */ 90362583d18SSepherosa Ziehau 904379ebbe7SSepherosa Ziehau /* This defines the bits that are set in the Interrupt Mask 9059c80d176SSepherosa Ziehau * Set/Read Register. Each bit is documented below: 9069c80d176SSepherosa Ziehau * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) 9079c80d176SSepherosa Ziehau * o RXSEQ = Receive Sequence Error 9089c80d176SSepherosa Ziehau */ 9099c80d176SSepherosa Ziehau #define POLL_IMS_ENABLE_MASK ( \ 9109c80d176SSepherosa Ziehau E1000_IMS_RXDMT0 | \ 9119c80d176SSepherosa Ziehau E1000_IMS_RXSEQ) 9129c80d176SSepherosa Ziehau 9139c80d176SSepherosa Ziehau /* 9149c80d176SSepherosa Ziehau * This defines the bits that are set in the Interrupt Mask 9159c80d176SSepherosa Ziehau * Set/Read Register. Each bit is documented below: 9169c80d176SSepherosa Ziehau * o RXT0 = Receiver Timer Interrupt (ring 0) 9179c80d176SSepherosa Ziehau * o TXDW = Transmit Descriptor Written Back 9189c80d176SSepherosa Ziehau * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) 9199c80d176SSepherosa Ziehau * o RXSEQ = Receive Sequence Error 9209c80d176SSepherosa Ziehau * o LSC = Link Status Change 9219c80d176SSepherosa Ziehau */ 9229c80d176SSepherosa Ziehau #define IMS_ENABLE_MASK ( \ 9239c80d176SSepherosa Ziehau E1000_IMS_RXT0 | \ 9249c80d176SSepherosa Ziehau E1000_IMS_TXDW | \ 9259c80d176SSepherosa Ziehau E1000_IMS_RXDMT0 | \ 9269c80d176SSepherosa Ziehau E1000_IMS_RXSEQ | \ 9279c80d176SSepherosa Ziehau E1000_IMS_LSC) 9289c80d176SSepherosa Ziehau 9299c80d176SSepherosa Ziehau /* Interrupt Mask Set */ 9306a5a645eSSepherosa Ziehau #define E1000_IMS_TXDW E1000_ICR_TXDW /* Tx desc written back */ 9319c80d176SSepherosa Ziehau #define E1000_IMS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ 9329c80d176SSepherosa Ziehau #define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */ 9339c80d176SSepherosa Ziehau #define E1000_IMS_VMMB E1000_ICR_VMMB /* Mail box activity */ 9346d5e2922SSepherosa Ziehau #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */ 9356d5e2922SSepherosa Ziehau #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */ 9366d5e2922SSepherosa Ziehau #define E1000_IMS_RXO E1000_ICR_RXO /* Rx overrun */ 9376d5e2922SSepherosa Ziehau #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */ 9389c80d176SSepherosa Ziehau #define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO access complete */ 9399c80d176SSepherosa Ziehau #define E1000_IMS_RXCFG E1000_ICR_RXCFG /* Rx /c/ ordered set */ 9409c80d176SSepherosa Ziehau #define E1000_IMS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ 9419c80d176SSepherosa Ziehau #define E1000_IMS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ 9429c80d176SSepherosa Ziehau #define E1000_IMS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ 9439c80d176SSepherosa Ziehau #define E1000_IMS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ 9449c80d176SSepherosa Ziehau #define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW 9459c80d176SSepherosa Ziehau #define E1000_IMS_SRPD E1000_ICR_SRPD 9469c80d176SSepherosa Ziehau #define E1000_IMS_ACK E1000_ICR_ACK /* Receive Ack frame */ 9479c80d176SSepherosa Ziehau #define E1000_IMS_MNG E1000_ICR_MNG /* Manageability event */ 9489c80d176SSepherosa Ziehau #define E1000_IMS_DOCK E1000_ICR_DOCK /* Dock/Undock */ 949ba0123e0SSepherosa Ziehau #define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */ 9504be59a01SSepherosa Ziehau #define E1000_IMS_TS E1000_ICR_TS /* Time Sync Interrupt */ 9516a5a645eSSepherosa Ziehau #define E1000_IMS_DRSTA E1000_ICR_DRSTA /* Device Reset Asserted */ 9524be59a01SSepherosa Ziehau /* Q0 Rx desc FIFO parity error */ 9534be59a01SSepherosa Ziehau #define E1000_IMS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0 9544be59a01SSepherosa Ziehau /* Q0 Tx desc FIFO parity error */ 9554be59a01SSepherosa Ziehau #define E1000_IMS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0 9564be59a01SSepherosa Ziehau /* host arb read buffer parity error */ 9574be59a01SSepherosa Ziehau #define E1000_IMS_HOST_ARB_PAR E1000_ICR_HOST_ARB_PAR 9584be59a01SSepherosa Ziehau /* packet buffer parity error */ 9594be59a01SSepherosa Ziehau #define E1000_IMS_PB_PAR E1000_ICR_PB_PAR 9604be59a01SSepherosa Ziehau /* Q1 Rx desc FIFO parity error */ 9614be59a01SSepherosa Ziehau #define E1000_IMS_RXD_FIFO_PAR1 E1000_ICR_RXD_FIFO_PAR1 9624be59a01SSepherosa Ziehau /* Q1 Tx desc FIFO parity error */ 9634be59a01SSepherosa Ziehau #define E1000_IMS_TXD_FIFO_PAR1 E1000_ICR_TXD_FIFO_PAR1 9649c80d176SSepherosa Ziehau #define E1000_IMS_DSW E1000_ICR_DSW 9659c80d176SSepherosa Ziehau #define E1000_IMS_PHYINT E1000_ICR_PHYINT 9669c80d176SSepherosa Ziehau #define E1000_IMS_DOUTSYNC E1000_ICR_DOUTSYNC /* NIC DMA out of sync */ 9679c80d176SSepherosa Ziehau #define E1000_IMS_EPRST E1000_ICR_EPRST 968379ebbe7SSepherosa Ziehau #define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */ 9694be59a01SSepherosa Ziehau #define E1000_IMS_RXQ0 E1000_ICR_RXQ0 /* Rx Queue 0 Interrupt */ 9704be59a01SSepherosa Ziehau #define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */ 9714be59a01SSepherosa Ziehau #define E1000_IMS_TXQ0 E1000_ICR_TXQ0 /* Tx Queue 0 Interrupt */ 9724be59a01SSepherosa Ziehau #define E1000_IMS_TXQ1 E1000_ICR_TXQ1 /* Tx Queue 1 Interrupt */ 9734be59a01SSepherosa Ziehau #define E1000_IMS_OTHER E1000_ICR_OTHER /* Other Interrupts */ 9746a5a645eSSepherosa Ziehau #define E1000_IMS_FER E1000_ICR_FER /* Fatal Error */ 9759c80d176SSepherosa Ziehau 97662583d18SSepherosa Ziehau #define E1000_IMS_THS E1000_ICR_THS /* ICR.TS: Thermal Sensor Event*/ 97762583d18SSepherosa Ziehau #define E1000_IMS_MDDET E1000_ICR_MDDET /* Malicious Driver Detect */ 97862583d18SSepherosa Ziehau /* Extended Interrupt Mask Set */ 97962583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE0 E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 98062583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE1 E1000_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 98162583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE2 E1000_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 98262583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE3 E1000_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 98362583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE0 E1000_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 98462583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE1 E1000_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 98562583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE2 E1000_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 98662583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE3 E1000_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 98762583d18SSepherosa Ziehau #define E1000_EIMS_TCP_TIMER E1000_EICR_TCP_TIMER /* TCP Timer */ 98862583d18SSepherosa Ziehau #define E1000_EIMS_OTHER E1000_EICR_OTHER /* Interrupt Cause Active */ 98962583d18SSepherosa Ziehau 9909c80d176SSepherosa Ziehau /* Interrupt Cause Set */ 9916a5a645eSSepherosa Ziehau #define E1000_ICS_TXDW E1000_ICR_TXDW /* Tx desc written back */ 9929c80d176SSepherosa Ziehau #define E1000_ICS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ 9939c80d176SSepherosa Ziehau #define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ 9946d5e2922SSepherosa Ziehau #define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */ 9956d5e2922SSepherosa Ziehau #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */ 9966d5e2922SSepherosa Ziehau #define E1000_ICS_RXO E1000_ICR_RXO /* Rx overrun */ 9976d5e2922SSepherosa Ziehau #define E1000_ICS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */ 9989c80d176SSepherosa Ziehau #define E1000_ICS_MDAC E1000_ICR_MDAC /* MDIO access complete */ 9999c80d176SSepherosa Ziehau #define E1000_ICS_RXCFG E1000_ICR_RXCFG /* Rx /c/ ordered set */ 10009c80d176SSepherosa Ziehau #define E1000_ICS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ 10019c80d176SSepherosa Ziehau #define E1000_ICS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ 10029c80d176SSepherosa Ziehau #define E1000_ICS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ 10039c80d176SSepherosa Ziehau #define E1000_ICS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ 10049c80d176SSepherosa Ziehau #define E1000_ICS_TXD_LOW E1000_ICR_TXD_LOW 10059c80d176SSepherosa Ziehau #define E1000_ICS_SRPD E1000_ICR_SRPD 10069c80d176SSepherosa Ziehau #define E1000_ICS_ACK E1000_ICR_ACK /* Receive Ack frame */ 10079c80d176SSepherosa Ziehau #define E1000_ICS_MNG E1000_ICR_MNG /* Manageability event */ 10089c80d176SSepherosa Ziehau #define E1000_ICS_DOCK E1000_ICR_DOCK /* Dock/Undock */ 10096a5a645eSSepherosa Ziehau #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */ 10104be59a01SSepherosa Ziehau /* Q0 Rx desc FIFO parity error */ 10114be59a01SSepherosa Ziehau #define E1000_ICS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0 10124be59a01SSepherosa Ziehau /* Q0 Tx desc FIFO parity error */ 10134be59a01SSepherosa Ziehau #define E1000_ICS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0 10144be59a01SSepherosa Ziehau /* host arb read buffer parity error */ 10154be59a01SSepherosa Ziehau #define E1000_ICS_HOST_ARB_PAR E1000_ICR_HOST_ARB_PAR 10164be59a01SSepherosa Ziehau /* packet buffer parity error */ 10174be59a01SSepherosa Ziehau #define E1000_ICS_PB_PAR E1000_ICR_PB_PAR 10184be59a01SSepherosa Ziehau /* Q1 Rx desc FIFO parity error */ 10194be59a01SSepherosa Ziehau #define E1000_ICS_RXD_FIFO_PAR1 E1000_ICR_RXD_FIFO_PAR1 10204be59a01SSepherosa Ziehau /* Q1 Tx desc FIFO parity error */ 10214be59a01SSepherosa Ziehau #define E1000_ICS_TXD_FIFO_PAR1 E1000_ICR_TXD_FIFO_PAR1 10229c80d176SSepherosa Ziehau #define E1000_ICS_DSW E1000_ICR_DSW 10239c80d176SSepherosa Ziehau #define E1000_ICS_DOUTSYNC E1000_ICR_DOUTSYNC /* NIC DMA out of sync */ 10249c80d176SSepherosa Ziehau #define E1000_ICS_PHYINT E1000_ICR_PHYINT 10259c80d176SSepherosa Ziehau #define E1000_ICS_EPRST E1000_ICR_EPRST 10269c80d176SSepherosa Ziehau 102762583d18SSepherosa Ziehau /* Extended Interrupt Cause Set */ 102862583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE0 E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 102962583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE1 E1000_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 103062583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE2 E1000_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 103162583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE3 E1000_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 103262583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE0 E1000_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 103362583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE1 E1000_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 103462583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE2 E1000_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 103562583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE3 E1000_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 103662583d18SSepherosa Ziehau #define E1000_EICS_TCP_TIMER E1000_EICR_TCP_TIMER /* TCP Timer */ 103762583d18SSepherosa Ziehau #define E1000_EICS_OTHER E1000_EICR_OTHER /* Interrupt Cause Active */ 103862583d18SSepherosa Ziehau 103962583d18SSepherosa Ziehau #define E1000_EITR_ITR_INT_MASK 0x0000FFFF 104062583d18SSepherosa Ziehau /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ 104162583d18SSepherosa Ziehau #define E1000_EITR_CNT_IGNR 0x80000000 /* Don't reset counters on write */ 1042ba0123e0SSepherosa Ziehau #define E1000_EITR_INTERVAL 0x00007FFC 104362583d18SSepherosa Ziehau 10449c80d176SSepherosa Ziehau /* Transmit Descriptor Control */ 10459c80d176SSepherosa Ziehau #define E1000_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */ 10469c80d176SSepherosa Ziehau #define E1000_TXDCTL_HTHRESH 0x00003F00 /* TXDCTL Host Threshold */ 10479c80d176SSepherosa Ziehau #define E1000_TXDCTL_WTHRESH 0x003F0000 /* TXDCTL Writeback Threshold */ 10489c80d176SSepherosa Ziehau #define E1000_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */ 10499c80d176SSepherosa Ziehau #define E1000_TXDCTL_LWTHRESH 0xFE000000 /* TXDCTL Low Threshold */ 10509c80d176SSepherosa Ziehau #define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */ 10519c80d176SSepherosa Ziehau #define E1000_TXDCTL_MAX_TX_DESC_PREFETCH 0x0100001F /* GRAN=1, PTHRESH=31 */ 10529c80d176SSepherosa Ziehau /* Enable the counting of descriptors still to be processed. */ 10539c80d176SSepherosa Ziehau #define E1000_TXDCTL_COUNT_DESC 0x00400000 10549c80d176SSepherosa Ziehau 10559c80d176SSepherosa Ziehau /* Flow Control Constants */ 10569c80d176SSepherosa Ziehau #define FLOW_CONTROL_ADDRESS_LOW 0x00C28001 10579c80d176SSepherosa Ziehau #define FLOW_CONTROL_ADDRESS_HIGH 0x00000100 10589c80d176SSepherosa Ziehau #define FLOW_CONTROL_TYPE 0x8808 10599c80d176SSepherosa Ziehau 10609c80d176SSepherosa Ziehau /* 802.1q VLAN Packet Size */ 10619c80d176SSepherosa Ziehau #define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMA'd) */ 10629c80d176SSepherosa Ziehau #define E1000_VLAN_FILTER_TBL_SIZE 128 /* VLAN Filter Table (4096 bits) */ 10639c80d176SSepherosa Ziehau 1064379ebbe7SSepherosa Ziehau /* Receive Address 10659c80d176SSepherosa Ziehau * Number of high/low register pairs in the RAR. The RAR (Receive Address 10669c80d176SSepherosa Ziehau * Registers) holds the directed and multicast addresses that we monitor. 10679c80d176SSepherosa Ziehau * Technically, we have 16 spots. However, we reserve one of these spots 10689c80d176SSepherosa Ziehau * (RAR[15]) for our directed address used by controllers with 10699c80d176SSepherosa Ziehau * manageability enabled, allowing us room for 15 multicast addresses. 10709c80d176SSepherosa Ziehau */ 10719c80d176SSepherosa Ziehau #define E1000_RAR_ENTRIES 15 10729c80d176SSepherosa Ziehau #define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */ 10736a5a645eSSepherosa Ziehau #define E1000_RAL_MAC_ADDR_LEN 4 10746a5a645eSSepherosa Ziehau #define E1000_RAH_MAC_ADDR_LEN 2 107562583d18SSepherosa Ziehau #define E1000_RAH_QUEUE_MASK_82575 0x000C0000 10766a5a645eSSepherosa Ziehau #define E1000_RAH_POOL_MASK 0x03FC0000 10776d5e2922SSepherosa Ziehau #define E1000_RAH_POOL_SHIFT 18 10786a5a645eSSepherosa Ziehau #define E1000_RAH_POOL_1 0x00040000 10799c80d176SSepherosa Ziehau 10809c80d176SSepherosa Ziehau /* Error Codes */ 10819c80d176SSepherosa Ziehau #define E1000_SUCCESS 0 10829c80d176SSepherosa Ziehau #define E1000_ERR_NVM 1 10839c80d176SSepherosa Ziehau #define E1000_ERR_PHY 2 10849c80d176SSepherosa Ziehau #define E1000_ERR_CONFIG 3 10859c80d176SSepherosa Ziehau #define E1000_ERR_PARAM 4 10869c80d176SSepherosa Ziehau #define E1000_ERR_MAC_INIT 5 10879c80d176SSepherosa Ziehau #define E1000_ERR_PHY_TYPE 6 10889c80d176SSepherosa Ziehau #define E1000_ERR_RESET 9 10899c80d176SSepherosa Ziehau #define E1000_ERR_MASTER_REQUESTS_PENDING 10 10909c80d176SSepherosa Ziehau #define E1000_ERR_HOST_INTERFACE_COMMAND 11 10919c80d176SSepherosa Ziehau #define E1000_BLK_PHY_RESET 12 10929c80d176SSepherosa Ziehau #define E1000_ERR_SWFW_SYNC 13 10939c80d176SSepherosa Ziehau #define E1000_NOT_IMPLEMENTED 14 10946a5a645eSSepherosa Ziehau #define E1000_ERR_MBX 15 10956a5a645eSSepherosa Ziehau #define E1000_ERR_INVALID_ARGUMENT 16 10966a5a645eSSepherosa Ziehau #define E1000_ERR_NO_SPACE 17 10976a5a645eSSepherosa Ziehau #define E1000_ERR_NVM_PBA_SECTION 18 10984be59a01SSepherosa Ziehau #define E1000_ERR_I2C 19 10994be59a01SSepherosa Ziehau #define E1000_ERR_INVM_VALUE_NOT_FOUND 20 11009c80d176SSepherosa Ziehau 11019c80d176SSepherosa Ziehau /* Loop limit on how long we wait for auto-negotiation to complete */ 11029c80d176SSepherosa Ziehau #define FIBER_LINK_UP_LIMIT 50 11039c80d176SSepherosa Ziehau #define COPPER_LINK_UP_LIMIT 10 11049c80d176SSepherosa Ziehau #define PHY_AUTO_NEG_LIMIT 45 11059c80d176SSepherosa Ziehau #define PHY_FORCE_LIMIT 20 11069c80d176SSepherosa Ziehau /* Number of 100 microseconds we wait for PCI Express master disable */ 11079c80d176SSepherosa Ziehau #define MASTER_DISABLE_TIMEOUT 800 11089c80d176SSepherosa Ziehau /* Number of milliseconds we wait for PHY configuration done after MAC reset */ 11099c80d176SSepherosa Ziehau #define PHY_CFG_TIMEOUT 100 11109c80d176SSepherosa Ziehau /* Number of 2 milliseconds we wait for acquiring MDIO ownership. */ 11119c80d176SSepherosa Ziehau #define MDIO_OWNERSHIP_TIMEOUT 10 11129c80d176SSepherosa Ziehau /* Number of milliseconds for NVM auto read done after MAC reset. */ 11139c80d176SSepherosa Ziehau #define AUTO_READ_DONE_TIMEOUT 10 11149c80d176SSepherosa Ziehau 11159c80d176SSepherosa Ziehau /* Flow Control */ 11169c80d176SSepherosa Ziehau #define E1000_FCRTH_RTH 0x0000FFF8 /* Mask Bits[15:3] for RTH */ 11179c80d176SSepherosa Ziehau #define E1000_FCRTH_XFCE 0x80000000 /* External Flow Control Enable */ 11189c80d176SSepherosa Ziehau #define E1000_FCRTL_RTL 0x0000FFF8 /* Mask Bits[15:3] for RTL */ 11199c80d176SSepherosa Ziehau #define E1000_FCRTL_XONE 0x80000000 /* Enable XON frame transmission */ 11209c80d176SSepherosa Ziehau 11219c80d176SSepherosa Ziehau /* Transmit Configuration Word */ 11229c80d176SSepherosa Ziehau #define E1000_TXCW_FD 0x00000020 /* TXCW full duplex */ 11239c80d176SSepherosa Ziehau #define E1000_TXCW_HD 0x00000040 /* TXCW half duplex */ 11249c80d176SSepherosa Ziehau #define E1000_TXCW_PAUSE 0x00000080 /* TXCW sym pause request */ 11259c80d176SSepherosa Ziehau #define E1000_TXCW_ASM_DIR 0x00000100 /* TXCW astm pause direction */ 11269c80d176SSepherosa Ziehau #define E1000_TXCW_PAUSE_MASK 0x00000180 /* TXCW pause request mask */ 11279c80d176SSepherosa Ziehau #define E1000_TXCW_RF 0x00003000 /* TXCW remote fault */ 11289c80d176SSepherosa Ziehau #define E1000_TXCW_NP 0x00008000 /* TXCW next page */ 11299c80d176SSepherosa Ziehau #define E1000_TXCW_CW 0x0000ffff /* TxConfigWord mask */ 11309c80d176SSepherosa Ziehau #define E1000_TXCW_TXC 0x40000000 /* Transmit Config control */ 11319c80d176SSepherosa Ziehau #define E1000_TXCW_ANE 0x80000000 /* Auto-neg enable */ 11329c80d176SSepherosa Ziehau 11339c80d176SSepherosa Ziehau /* Receive Configuration Word */ 11349c80d176SSepherosa Ziehau #define E1000_RXCW_CW 0x0000ffff /* RxConfigWord mask */ 11359c80d176SSepherosa Ziehau #define E1000_RXCW_NC 0x04000000 /* Receive config no carrier */ 11369c80d176SSepherosa Ziehau #define E1000_RXCW_IV 0x08000000 /* Receive config invalid */ 11379c80d176SSepherosa Ziehau #define E1000_RXCW_CC 0x10000000 /* Receive config change */ 11389c80d176SSepherosa Ziehau #define E1000_RXCW_C 0x20000000 /* Receive config */ 11399c80d176SSepherosa Ziehau #define E1000_RXCW_SYNCH 0x40000000 /* Receive config synch */ 11409c80d176SSepherosa Ziehau #define E1000_RXCW_ANC 0x80000000 /* Auto-neg complete */ 11419c80d176SSepherosa Ziehau 11426d5e2922SSepherosa Ziehau #define E1000_TSYNCTXCTL_VALID 0x00000001 /* Tx timestamp valid */ 11436d5e2922SSepherosa Ziehau #define E1000_TSYNCTXCTL_ENABLED 0x00000010 /* enable Tx timestamping */ 11446a5a645eSSepherosa Ziehau 11456d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_VALID 0x00000001 /* Rx timestamp valid */ 11466d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_MASK 0x0000000E /* Rx type mask */ 11476a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L2_V2 0x00 11486a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L4_V1 0x02 11496a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L2_L4_V2 0x04 11506a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_ALL 0x08 11516a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_EVENT_V2 0x0A 11526d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_ENABLED 0x00000010 /* enable Rx timestamping */ 11534be59a01SSepherosa Ziehau #define E1000_TSYNCRXCTL_SYSCFI 0x00000020 /* Sys clock frequency */ 11546a5a645eSSepherosa Ziehau 11556a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_CTRLT_MASK 0x000000FF 11566a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE 0x00 11576a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE 0x01 11586a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE 0x02 11596a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE 0x03 11606a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE 0x04 11616a5a645eSSepherosa Ziehau 11626a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_MSGID_MASK 0x00000F00 11636a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE 0x0000 11646a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE 0x0100 11656a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE 0x0200 11666a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE 0x0300 11676a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE 0x0800 11686a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE 0x0900 11696a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE 0x0A00 11706a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE 0x0B00 11716a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE 0x0C00 11726a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE 0x0D00 11736a5a645eSSepherosa Ziehau 1174379ebbe7SSepherosa Ziehau #define E1000_RXMTRL_PTP_V1_SYNC_MESSAGE 0x00000000 1175379ebbe7SSepherosa Ziehau #define E1000_RXMTRL_PTP_V1_DELAY_REQ_MESSAGE 0x00010000 1176379ebbe7SSepherosa Ziehau 1177379ebbe7SSepherosa Ziehau #define E1000_RXMTRL_PTP_V2_SYNC_MESSAGE 0x00000000 1178379ebbe7SSepherosa Ziehau #define E1000_RXMTRL_PTP_V2_DELAY_REQ_MESSAGE 0x01000000 1179379ebbe7SSepherosa Ziehau 11806a5a645eSSepherosa Ziehau #define E1000_TIMINCA_16NS_SHIFT 24 11814be59a01SSepherosa Ziehau #define E1000_TIMINCA_INCPERIOD_SHIFT 24 11824be59a01SSepherosa Ziehau #define E1000_TIMINCA_INCVALUE_MASK 0x00FFFFFF 11834be59a01SSepherosa Ziehau 11844be59a01SSepherosa Ziehau #define E1000_TSICR_TXTS 0x00000002 11854be59a01SSepherosa Ziehau #define E1000_TSIM_TXTS 0x00000002 11866a5a645eSSepherosa Ziehau /* TUPLE Filtering Configuration */ 11876a5a645eSSepherosa Ziehau #define E1000_TTQF_DISABLE_MASK 0xF0008000 /* TTQF Disable Mask */ 11886a5a645eSSepherosa Ziehau #define E1000_TTQF_QUEUE_ENABLE 0x100 /* TTQF Queue Enable Bit */ 11896a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_MASK 0xFF /* TTQF Protocol Mask */ 11906a5a645eSSepherosa Ziehau /* TTQF TCP Bit, shift with E1000_TTQF_PROTOCOL SHIFT */ 11916a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_TCP 0x0 11926a5a645eSSepherosa Ziehau /* TTQF UDP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */ 11936a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_UDP 0x1 11946a5a645eSSepherosa Ziehau /* TTQF SCTP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */ 11956a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_SCTP 0x2 11966a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_SHIFT 5 /* TTQF Protocol Shift */ 11976a5a645eSSepherosa Ziehau #define E1000_TTQF_QUEUE_SHIFT 16 /* TTQF Queue Shfit */ 11986a5a645eSSepherosa Ziehau #define E1000_TTQF_RX_QUEUE_MASK 0x70000 /* TTQF Queue Mask */ 11996a5a645eSSepherosa Ziehau #define E1000_TTQF_MASK_ENABLE 0x10000000 /* TTQF Mask Enable Bit */ 12006a5a645eSSepherosa Ziehau #define E1000_IMIR_CLEAR_MASK 0xF001FFFF /* IMIR Reg Clear Mask */ 12016a5a645eSSepherosa Ziehau #define E1000_IMIR_PORT_BYPASS 0x20000 /* IMIR Port Bypass Bit */ 12026a5a645eSSepherosa Ziehau #define E1000_IMIR_PRIORITY_SHIFT 29 /* IMIR Priority Shift */ 12036a5a645eSSepherosa Ziehau #define E1000_IMIREXT_CLEAR_MASK 0x7FFFF /* IMIREXT Reg Clear Mask */ 12046a5a645eSSepherosa Ziehau 12056a5a645eSSepherosa Ziehau #define E1000_MDICNFG_EXT_MDIO 0x80000000 /* MDI ext/int destination */ 12066a5a645eSSepherosa Ziehau #define E1000_MDICNFG_COM_MDIO 0x40000000 /* MDI shared w/ lan 0 */ 12076a5a645eSSepherosa Ziehau #define E1000_MDICNFG_PHY_MASK 0x03E00000 12086a5a645eSSepherosa Ziehau #define E1000_MDICNFG_PHY_SHIFT 21 1209ba0123e0SSepherosa Ziehau 1210379ebbe7SSepherosa Ziehau #define E1000_MEDIA_PORT_COPPER 1 1211379ebbe7SSepherosa Ziehau #define E1000_MEDIA_PORT_OTHER 2 1212ba0123e0SSepherosa Ziehau #define E1000_M88E1112_AUTO_COPPER_SGMII 0x2 1213ba0123e0SSepherosa Ziehau #define E1000_M88E1112_AUTO_COPPER_BASEX 0x3 1214379ebbe7SSepherosa Ziehau #define E1000_M88E1112_STATUS_LINK 0x0004 /* Interface Link Bit */ 1215ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1 0x10 1216ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1_MODE_MASK 0x0380 /* Mode Select */ 1217ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT 7 1218379ebbe7SSepherosa Ziehau #define E1000_M88E1112_PAGE_ADDR 0x16 1219379ebbe7SSepherosa Ziehau #define E1000_M88E1112_STATUS 0x01 12206a5a645eSSepherosa Ziehau 122162583d18SSepherosa Ziehau #define E1000_THSTAT_LOW_EVENT 0x20000000 /* Low thermal threshold */ 122262583d18SSepherosa Ziehau #define E1000_THSTAT_MID_EVENT 0x00200000 /* Mid thermal threshold */ 122362583d18SSepherosa Ziehau #define E1000_THSTAT_HIGH_EVENT 0x00002000 /* High thermal threshold */ 122462583d18SSepherosa Ziehau #define E1000_THSTAT_PWR_DOWN 0x00000001 /* Power Down Event */ 12254be59a01SSepherosa Ziehau #define E1000_THSTAT_LINK_THROTTLE 0x00000002 /* Link Spd Throttle Event */ 122662583d18SSepherosa Ziehau 12274be59a01SSepherosa Ziehau /* I350 EEE defines */ 12284be59a01SSepherosa Ziehau #define E1000_IPCNFG_EEE_1G_AN 0x00000008 /* IPCNFG EEE Ena 1G AN */ 12294be59a01SSepherosa Ziehau #define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* IPCNFG EEE Ena 100M AN */ 123062583d18SSepherosa Ziehau #define E1000_EEER_TX_LPI_EN 0x00010000 /* EEER Tx LPI Enable */ 123162583d18SSepherosa Ziehau #define E1000_EEER_RX_LPI_EN 0x00020000 /* EEER Rx LPI Enable */ 12324be59a01SSepherosa Ziehau #define E1000_EEER_LPI_FC 0x00040000 /* EEER Ena on Flow Cntrl */ 123362583d18SSepherosa Ziehau /* EEE status */ 12344be59a01SSepherosa Ziehau #define E1000_EEER_EEE_NEG 0x20000000 /* EEE capability nego */ 123562583d18SSepherosa Ziehau #define E1000_EEER_RX_LPI_STATUS 0x40000000 /* Rx in LPI state */ 123662583d18SSepherosa Ziehau #define E1000_EEER_TX_LPI_STATUS 0x80000000 /* Tx in LPI state */ 1237379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_ADDR_I350 0x040F /* EEE LP Advertisement */ 1238ba0123e0SSepherosa Ziehau #define E1000_M88E1543_PAGE_ADDR 0x16 /* Page Offset Register */ 1239ba0123e0SSepherosa Ziehau #define E1000_M88E1543_EEE_CTRL_1 0x0 1240ba0123e0SSepherosa Ziehau #define E1000_M88E1543_EEE_CTRL_1_MS 0x0001 /* EEE Master/Slave */ 1241*a40fda39SSepherosa Ziehau #define E1000_M88E1543_FIBER_CTRL 0x0 /* Fiber Control Register */ 1242379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_DEV_I354 7 1243379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_ADDR_I354 60 1244379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_100_SUPPORTED (1 << 1) /* 100BaseTx EEE Supported */ 1245379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_1000_SUPPORTED (1 << 2) /* 1000BaseT EEE Supported */ 1246379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_DEV_I354 3 1247379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_ADDR_I354 1 1248379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_TX_LPI_IND 0x0200 /* Tx in LPI state */ 1249379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_RX_LPI_RCVD 0x0400 1250379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_TX_LPI_RCVD 0x0800 1251ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_1 0x0010 1252ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_2 0x0011 1253ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_3 0x0007 1254ba0123e0SSepherosa Ziehau #define E1000_M88E1512_MODE 0x0014 12554be59a01SSepherosa Ziehau #define E1000_EEE_SU_LPI_CLK_STP 0x00800000 /* EEE LPI Clock Stop */ 1256379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_DEV_I210 7 /* EEE LP Adv Device */ 1257379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_ADDR_I210 61 /* EEE LP Adv Register */ 12589c80d176SSepherosa Ziehau /* PCI Express Control */ 12599c80d176SSepherosa Ziehau #define E1000_GCR_RXD_NO_SNOOP 0x00000001 12609c80d176SSepherosa Ziehau #define E1000_GCR_RXDSCW_NO_SNOOP 0x00000002 12619c80d176SSepherosa Ziehau #define E1000_GCR_RXDSCR_NO_SNOOP 0x00000004 12629c80d176SSepherosa Ziehau #define E1000_GCR_TXD_NO_SNOOP 0x00000008 12639c80d176SSepherosa Ziehau #define E1000_GCR_TXDSCW_NO_SNOOP 0x00000010 12649c80d176SSepherosa Ziehau #define E1000_GCR_TXDSCR_NO_SNOOP 0x00000020 12656a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_MASK 0x0000F000 12666a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_10ms 0x00001000 12676a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_RESEND 0x00010000 12686a5a645eSSepherosa Ziehau #define E1000_GCR_CAP_VER2 0x00040000 12699c80d176SSepherosa Ziehau 12709c80d176SSepherosa Ziehau #define PCIE_NO_SNOOP_ALL (E1000_GCR_RXD_NO_SNOOP | \ 12719c80d176SSepherosa Ziehau E1000_GCR_RXDSCW_NO_SNOOP | \ 12729c80d176SSepherosa Ziehau E1000_GCR_RXDSCR_NO_SNOOP | \ 12739c80d176SSepherosa Ziehau E1000_GCR_TXD_NO_SNOOP | \ 12749c80d176SSepherosa Ziehau E1000_GCR_TXDSCW_NO_SNOOP | \ 12759c80d176SSepherosa Ziehau E1000_GCR_TXDSCR_NO_SNOOP) 12769c80d176SSepherosa Ziehau 1277379ebbe7SSepherosa Ziehau #define E1000_MMDAC_FUNC_DATA 0x4000 /* Data, no post increment */ 1278379ebbe7SSepherosa Ziehau 12794be59a01SSepherosa Ziehau /* mPHY address control and data registers */ 12804be59a01SSepherosa Ziehau #define E1000_MPHY_ADDR_CTL 0x0024 /* Address Control Reg */ 12814be59a01SSepherosa Ziehau #define E1000_MPHY_ADDR_CTL_OFFSET_MASK 0xFFFF0000 12824be59a01SSepherosa Ziehau #define E1000_MPHY_DATA 0x0E10 /* Data Register */ 12834be59a01SSepherosa Ziehau 12844be59a01SSepherosa Ziehau /* AFE CSR Offset for PCS CLK */ 12854be59a01SSepherosa Ziehau #define E1000_MPHY_PCS_CLK_REG_OFFSET 0x0004 12864be59a01SSepherosa Ziehau /* Override for near end digital loopback. */ 12874be59a01SSepherosa Ziehau #define E1000_MPHY_PCS_CLK_REG_DIGINELBEN 0x10 12884be59a01SSepherosa Ziehau 12899c80d176SSepherosa Ziehau /* PHY Control Register */ 12909c80d176SSepherosa Ziehau #define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ 12919c80d176SSepherosa Ziehau #define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ 12929c80d176SSepherosa Ziehau #define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */ 12939c80d176SSepherosa Ziehau #define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */ 12949c80d176SSepherosa Ziehau #define MII_CR_ISOLATE 0x0400 /* Isolate PHY from MII */ 12959c80d176SSepherosa Ziehau #define MII_CR_POWER_DOWN 0x0800 /* Power down */ 12969c80d176SSepherosa Ziehau #define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */ 12979c80d176SSepherosa Ziehau #define MII_CR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */ 12989c80d176SSepherosa Ziehau #define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */ 12999c80d176SSepherosa Ziehau #define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */ 13009c80d176SSepherosa Ziehau #define MII_CR_SPEED_1000 0x0040 13019c80d176SSepherosa Ziehau #define MII_CR_SPEED_100 0x2000 13029c80d176SSepherosa Ziehau #define MII_CR_SPEED_10 0x0000 13039c80d176SSepherosa Ziehau 13049c80d176SSepherosa Ziehau /* PHY Status Register */ 13059c80d176SSepherosa Ziehau #define MII_SR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */ 13069c80d176SSepherosa Ziehau #define MII_SR_JABBER_DETECT 0x0002 /* Jabber Detected */ 13079c80d176SSepherosa Ziehau #define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */ 13089c80d176SSepherosa Ziehau #define MII_SR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */ 13099c80d176SSepherosa Ziehau #define MII_SR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */ 13109c80d176SSepherosa Ziehau #define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */ 13119c80d176SSepherosa Ziehau #define MII_SR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */ 13129c80d176SSepherosa Ziehau #define MII_SR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */ 13139c80d176SSepherosa Ziehau #define MII_SR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */ 13149c80d176SSepherosa Ziehau #define MII_SR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */ 13159c80d176SSepherosa Ziehau #define MII_SR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */ 13169c80d176SSepherosa Ziehau #define MII_SR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */ 13179c80d176SSepherosa Ziehau #define MII_SR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */ 13189c80d176SSepherosa Ziehau #define MII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */ 13199c80d176SSepherosa Ziehau #define MII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */ 13209c80d176SSepherosa Ziehau 13219c80d176SSepherosa Ziehau /* Autoneg Advertisement Register */ 13229c80d176SSepherosa Ziehau #define NWAY_AR_SELECTOR_FIELD 0x0001 /* indicates IEEE 802.3 CSMA/CD */ 13239c80d176SSepherosa Ziehau #define NWAY_AR_10T_HD_CAPS 0x0020 /* 10T Half Duplex Capable */ 13249c80d176SSepherosa Ziehau #define NWAY_AR_10T_FD_CAPS 0x0040 /* 10T Full Duplex Capable */ 13259c80d176SSepherosa Ziehau #define NWAY_AR_100TX_HD_CAPS 0x0080 /* 100TX Half Duplex Capable */ 13269c80d176SSepherosa Ziehau #define NWAY_AR_100TX_FD_CAPS 0x0100 /* 100TX Full Duplex Capable */ 13279c80d176SSepherosa Ziehau #define NWAY_AR_100T4_CAPS 0x0200 /* 100T4 Capable */ 13289c80d176SSepherosa Ziehau #define NWAY_AR_PAUSE 0x0400 /* Pause operation desired */ 13299c80d176SSepherosa Ziehau #define NWAY_AR_ASM_DIR 0x0800 /* Asymmetric Pause Direction bit */ 13309c80d176SSepherosa Ziehau #define NWAY_AR_REMOTE_FAULT 0x2000 /* Remote Fault detected */ 13319c80d176SSepherosa Ziehau #define NWAY_AR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 13329c80d176SSepherosa Ziehau 13339c80d176SSepherosa Ziehau /* Link Partner Ability Register (Base Page) */ 13349c80d176SSepherosa Ziehau #define NWAY_LPAR_SELECTOR_FIELD 0x0000 /* LP protocol selector field */ 13354be59a01SSepherosa Ziehau #define NWAY_LPAR_10T_HD_CAPS 0x0020 /* LP 10T Half Dplx Capable */ 13364be59a01SSepherosa Ziehau #define NWAY_LPAR_10T_FD_CAPS 0x0040 /* LP 10T Full Dplx Capable */ 13374be59a01SSepherosa Ziehau #define NWAY_LPAR_100TX_HD_CAPS 0x0080 /* LP 100TX Half Dplx Capable */ 13384be59a01SSepherosa Ziehau #define NWAY_LPAR_100TX_FD_CAPS 0x0100 /* LP 100TX Full Dplx Capable */ 13399c80d176SSepherosa Ziehau #define NWAY_LPAR_100T4_CAPS 0x0200 /* LP is 100T4 Capable */ 13409c80d176SSepherosa Ziehau #define NWAY_LPAR_PAUSE 0x0400 /* LP Pause operation desired */ 13414be59a01SSepherosa Ziehau #define NWAY_LPAR_ASM_DIR 0x0800 /* LP Asym Pause Direction bit */ 13424be59a01SSepherosa Ziehau #define NWAY_LPAR_REMOTE_FAULT 0x2000 /* LP detected Remote Fault */ 13434be59a01SSepherosa Ziehau #define NWAY_LPAR_ACKNOWLEDGE 0x4000 /* LP rx'd link code word */ 13449c80d176SSepherosa Ziehau #define NWAY_LPAR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 13459c80d176SSepherosa Ziehau 13469c80d176SSepherosa Ziehau /* Autoneg Expansion Register */ 13479c80d176SSepherosa Ziehau #define NWAY_ER_LP_NWAY_CAPS 0x0001 /* LP has Auto Neg Capability */ 13484be59a01SSepherosa Ziehau #define NWAY_ER_PAGE_RXD 0x0002 /* LP 10T Half Dplx Capable */ 13494be59a01SSepherosa Ziehau #define NWAY_ER_NEXT_PAGE_CAPS 0x0004 /* LP 10T Full Dplx Capable */ 13504be59a01SSepherosa Ziehau #define NWAY_ER_LP_NEXT_PAGE_CAPS 0x0008 /* LP 100TX Half Dplx Capable */ 13514be59a01SSepherosa Ziehau #define NWAY_ER_PAR_DETECT_FAULT 0x0010 /* LP 100TX Full Dplx Capable */ 13529c80d176SSepherosa Ziehau 13539c80d176SSepherosa Ziehau /* 1000BASE-T Control Register */ 13549c80d176SSepherosa Ziehau #define CR_1000T_ASYM_PAUSE 0x0080 /* Advertise asymmetric pause bit */ 13559c80d176SSepherosa Ziehau #define CR_1000T_HD_CAPS 0x0100 /* Advertise 1000T HD capability */ 13569c80d176SSepherosa Ziehau #define CR_1000T_FD_CAPS 0x0200 /* Advertise 1000T FD capability */ 13574be59a01SSepherosa Ziehau /* 1=Repeater/switch device port 0=DTE device */ 13584be59a01SSepherosa Ziehau #define CR_1000T_REPEATER_DTE 0x0400 13594be59a01SSepherosa Ziehau /* 1=Configure PHY as Master 0=Configure PHY as Slave */ 13604be59a01SSepherosa Ziehau #define CR_1000T_MS_VALUE 0x0800 13614be59a01SSepherosa Ziehau /* 1=Master/Slave manual config value 0=Automatic Master/Slave config */ 13624be59a01SSepherosa Ziehau #define CR_1000T_MS_ENABLE 0x1000 13639c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_NORMAL 0x0000 /* Normal Operation */ 13649c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_1 0x2000 /* Transmit Waveform test */ 13659c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_2 0x4000 /* Master Transmit Jitter test */ 13669c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_3 0x6000 /* Slave Transmit Jitter test */ 13679c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_4 0x8000 /* Transmitter Distortion test */ 13689c80d176SSepherosa Ziehau 13699c80d176SSepherosa Ziehau /* 1000BASE-T Status Register */ 13704be59a01SSepherosa Ziehau #define SR_1000T_IDLE_ERROR_CNT 0x00FF /* Num idle err since last rd */ 13714be59a01SSepherosa Ziehau #define SR_1000T_ASYM_PAUSE_DIR 0x0100 /* LP asym pause direction bit */ 13729c80d176SSepherosa Ziehau #define SR_1000T_LP_HD_CAPS 0x0400 /* LP is 1000T HD capable */ 13739c80d176SSepherosa Ziehau #define SR_1000T_LP_FD_CAPS 0x0800 /* LP is 1000T FD capable */ 13749c80d176SSepherosa Ziehau #define SR_1000T_REMOTE_RX_STATUS 0x1000 /* Remote receiver OK */ 13759c80d176SSepherosa Ziehau #define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */ 13764be59a01SSepherosa Ziehau #define SR_1000T_MS_CONFIG_RES 0x4000 /* 1=Local Tx Master, 0=Slave */ 13779c80d176SSepherosa Ziehau #define SR_1000T_MS_CONFIG_FAULT 0x8000 /* Master/Slave config fault */ 13789c80d176SSepherosa Ziehau 13799c80d176SSepherosa Ziehau #define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT 5 13809c80d176SSepherosa Ziehau 13819c80d176SSepherosa Ziehau /* PHY 1000 MII Register/Bit Definitions */ 13829c80d176SSepherosa Ziehau /* PHY Registers defined by IEEE */ 13839c80d176SSepherosa Ziehau #define PHY_CONTROL 0x00 /* Control Register */ 13849c80d176SSepherosa Ziehau #define PHY_STATUS 0x01 /* Status Register */ 13859c80d176SSepherosa Ziehau #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ 13869c80d176SSepherosa Ziehau #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ 13879c80d176SSepherosa Ziehau #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ 13889c80d176SSepherosa Ziehau #define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */ 13899c80d176SSepherosa Ziehau #define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Reg */ 13909c80d176SSepherosa Ziehau #define PHY_NEXT_PAGE_TX 0x07 /* Next Page Tx */ 13919c80d176SSepherosa Ziehau #define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */ 13929c80d176SSepherosa Ziehau #define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */ 13939c80d176SSepherosa Ziehau #define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */ 13949c80d176SSepherosa Ziehau #define PHY_EXT_STATUS 0x0F /* Extended Status Reg */ 13959c80d176SSepherosa Ziehau 13966a5a645eSSepherosa Ziehau #define PHY_CONTROL_LB 0x4000 /* PHY Loopback bit */ 13976a5a645eSSepherosa Ziehau 13989c80d176SSepherosa Ziehau /* NVM Control */ 13999c80d176SSepherosa Ziehau #define E1000_EECD_SK 0x00000001 /* NVM Clock */ 14009c80d176SSepherosa Ziehau #define E1000_EECD_CS 0x00000002 /* NVM Chip Select */ 14019c80d176SSepherosa Ziehau #define E1000_EECD_DI 0x00000004 /* NVM Data In */ 14029c80d176SSepherosa Ziehau #define E1000_EECD_DO 0x00000008 /* NVM Data Out */ 14039c80d176SSepherosa Ziehau #define E1000_EECD_FWE_MASK 0x00000030 14049c80d176SSepherosa Ziehau #define E1000_EECD_FWE_DIS 0x00000010 /* Disable FLASH writes */ 14059c80d176SSepherosa Ziehau #define E1000_EECD_FWE_EN 0x00000020 /* Enable FLASH writes */ 14069c80d176SSepherosa Ziehau #define E1000_EECD_FWE_SHIFT 4 14079c80d176SSepherosa Ziehau #define E1000_EECD_REQ 0x00000040 /* NVM Access Request */ 14089c80d176SSepherosa Ziehau #define E1000_EECD_GNT 0x00000080 /* NVM Access Grant */ 14099c80d176SSepherosa Ziehau #define E1000_EECD_PRES 0x00000100 /* NVM Present */ 14109c80d176SSepherosa Ziehau #define E1000_EECD_SIZE 0x00000200 /* NVM Size (0=64 word 1=256 word) */ 14116d5e2922SSepherosa Ziehau #define E1000_EECD_BLOCKED 0x00008000 /* Bit banging access blocked flag */ 14126d5e2922SSepherosa Ziehau #define E1000_EECD_ABORT 0x00010000 /* NVM operation aborted flag */ 14136d5e2922SSepherosa Ziehau #define E1000_EECD_TIMEOUT 0x00020000 /* NVM read operation timeout flag */ 14146d5e2922SSepherosa Ziehau #define E1000_EECD_ERROR_CLR 0x00040000 /* NVM error status clear bit */ 14159c80d176SSepherosa Ziehau /* NVM Addressing bits based on type 0=small, 1=large */ 14169c80d176SSepherosa Ziehau #define E1000_EECD_ADDR_BITS 0x00000400 14179c80d176SSepherosa Ziehau #define E1000_EECD_TYPE 0x00002000 /* NVM Type (1-SPI, 0-Microwire) */ 14189c80d176SSepherosa Ziehau #ifndef E1000_NVM_GRANT_ATTEMPTS 14199c80d176SSepherosa Ziehau #define E1000_NVM_GRANT_ATTEMPTS 1000 /* NVM # attempts to gain grant */ 14209c80d176SSepherosa Ziehau #endif 14219c80d176SSepherosa Ziehau #define E1000_EECD_AUTO_RD 0x00000200 /* NVM Auto Read done */ 14229c80d176SSepherosa Ziehau #define E1000_EECD_SIZE_EX_MASK 0x00007800 /* NVM Size */ 14239c80d176SSepherosa Ziehau #define E1000_EECD_SIZE_EX_SHIFT 11 14249c80d176SSepherosa Ziehau #define E1000_EECD_NVADDS 0x00018000 /* NVM Address Size */ 14259c80d176SSepherosa Ziehau #define E1000_EECD_SELSHAD 0x00020000 /* Select Shadow RAM */ 14269c80d176SSepherosa Ziehau #define E1000_EECD_INITSRAM 0x00040000 /* Initialize Shadow RAM */ 14279c80d176SSepherosa Ziehau #define E1000_EECD_FLUPD 0x00080000 /* Update FLASH */ 14284be59a01SSepherosa Ziehau #define E1000_EECD_AUPDEN 0x00100000 /* Ena Auto FLASH update */ 14299c80d176SSepherosa Ziehau #define E1000_EECD_SHADV 0x00200000 /* Shadow RAM Data Valid */ 14309c80d176SSepherosa Ziehau #define E1000_EECD_SEC1VAL 0x00400000 /* Sector One Valid */ 14319c80d176SSepherosa Ziehau #define E1000_EECD_SECVAL_SHIFT 22 14326a5a645eSSepherosa Ziehau #define E1000_EECD_SEC1VAL_VALID_MASK (E1000_EECD_AUTO_RD | E1000_EECD_PRES) 14334be59a01SSepherosa Ziehau #define E1000_EECD_FLUPD_I210 0x00800000 /* Update FLASH */ 14344be59a01SSepherosa Ziehau #define E1000_EECD_FLUDONE_I210 0x04000000 /* Update FLASH done */ 14354be59a01SSepherosa Ziehau #define E1000_EECD_FLASH_DETECTED_I210 0x00080000 /* FLASH detected */ 1436379ebbe7SSepherosa Ziehau #define E1000_EECD_SEC1VAL_I210 0x02000000 /* Sector One Valid */ 14374be59a01SSepherosa Ziehau #define E1000_FLUDONE_ATTEMPTS 20000 14384be59a01SSepherosa Ziehau #define E1000_EERD_EEWR_MAX_COUNT 512 /* buffered EEPROM words rw */ 14394be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_RX 0x00 14404be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_TX_QAV(_i) (0x02 + (_i)) 14414be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_TX_LEGACY E1000_I210_FIFO_SEL_TX_QAV(0) 14424be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_BMC2OS_TX 0x06 14434be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_BMC2OS_RX 0x01 14449c80d176SSepherosa Ziehau 1445379ebbe7SSepherosa Ziehau #define E1000_I210_FLASH_SECTOR_SIZE 0x1000 /* 4KB FLASH sector unit size */ 1446379ebbe7SSepherosa Ziehau /* Secure FLASH mode requires removing MSb */ 1447379ebbe7SSepherosa Ziehau #define E1000_I210_FW_PTR_MASK 0x7FFF 1448379ebbe7SSepherosa Ziehau /* Firmware code revision field word offset*/ 1449379ebbe7SSepherosa Ziehau #define E1000_I210_FW_VER_OFFSET 328 1450379ebbe7SSepherosa Ziehau 14519c80d176SSepherosa Ziehau #define E1000_NVM_SWDPIN0 0x0001 /* SWDPIN 0 NVM Value */ 14529c80d176SSepherosa Ziehau #define E1000_NVM_LED_LOGIC 0x0020 /* Led Logic Word */ 14539c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_DATA 16 /* Offset to data in NVM read/write regs */ 14549c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_DONE 2 /* Offset to READ/WRITE done bit */ 14559c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_START 1 /* Start operation */ 14569c80d176SSepherosa Ziehau #define E1000_NVM_RW_ADDR_SHIFT 2 /* Shift to the address bits */ 14579c80d176SSepherosa Ziehau #define E1000_NVM_POLL_WRITE 1 /* Flag for polling for write complete */ 14589c80d176SSepherosa Ziehau #define E1000_NVM_POLL_READ 0 /* Flag for polling for read complete */ 14599c80d176SSepherosa Ziehau #define E1000_FLASH_UPDATES 2000 14609c80d176SSepherosa Ziehau 14619c80d176SSepherosa Ziehau /* NVM Word Offsets */ 14629c80d176SSepherosa Ziehau #define NVM_COMPAT 0x0003 14639c80d176SSepherosa Ziehau #define NVM_ID_LED_SETTINGS 0x0004 14649c80d176SSepherosa Ziehau #define NVM_VERSION 0x0005 14659c80d176SSepherosa Ziehau #define NVM_SERDES_AMPLITUDE 0x0006 /* SERDES output amplitude */ 14669c80d176SSepherosa Ziehau #define NVM_PHY_CLASS_WORD 0x0007 1467379ebbe7SSepherosa Ziehau #define E1000_I210_NVM_FW_MODULE_PTR 0x0010 1468379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_MODULE_PTR 0x0051 1469379ebbe7SSepherosa Ziehau #define NVM_FUTURE_INIT_WORD1 0x0019 1470379ebbe7SSepherosa Ziehau #define NVM_COMPAT_VALID_CSUM 0x0001 1471379ebbe7SSepherosa Ziehau #define NVM_FUTURE_INIT_WORD1_VALID_CSUM 0x0040 14724be59a01SSepherosa Ziehau #define NVM_ETRACK_WORD 0x0042 1473379ebbe7SSepherosa Ziehau #define NVM_ETRACK_HIWORD 0x0043 14744be59a01SSepherosa Ziehau #define NVM_COMB_VER_OFF 0x0083 14754be59a01SSepherosa Ziehau #define NVM_COMB_VER_PTR 0x003d 14764be59a01SSepherosa Ziehau 14774be59a01SSepherosa Ziehau /* NVM version defines */ 14784be59a01SSepherosa Ziehau #define NVM_MAJOR_MASK 0xF000 1479379ebbe7SSepherosa Ziehau #define NVM_MINOR_MASK 0x0FF0 1480379ebbe7SSepherosa Ziehau #define NVM_IMAGE_ID_MASK 0x000F 14814be59a01SSepherosa Ziehau #define NVM_COMB_VER_MASK 0x00FF 14824be59a01SSepherosa Ziehau #define NVM_MAJOR_SHIFT 12 1483379ebbe7SSepherosa Ziehau #define NVM_MINOR_SHIFT 4 14844be59a01SSepherosa Ziehau #define NVM_COMB_VER_SHFT 8 14854be59a01SSepherosa Ziehau #define NVM_VER_INVALID 0xFFFF 14864be59a01SSepherosa Ziehau #define NVM_ETRACK_SHIFT 16 1487379ebbe7SSepherosa Ziehau #define NVM_ETRACK_VALID 0x8000 1488379ebbe7SSepherosa Ziehau #define NVM_NEW_DEC_MASK 0x0F00 1489379ebbe7SSepherosa Ziehau #define NVM_HEX_CONV 16 1490379ebbe7SSepherosa Ziehau #define NVM_HEX_TENS 10 1491379ebbe7SSepherosa Ziehau 1492379ebbe7SSepherosa Ziehau /* FW version defines */ 1493379ebbe7SSepherosa Ziehau /* Offset of "Loader patch ptr" in Firmware Header */ 1494379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_LOADER_PATCH_PTR_OFFSET 0x01 1495379ebbe7SSepherosa Ziehau /* Patch generation hour & minutes */ 1496379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD1_OFFSET 0x04 1497379ebbe7SSepherosa Ziehau /* Patch generation month & day */ 1498379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD2_OFFSET 0x05 1499379ebbe7SSepherosa Ziehau /* Patch generation year */ 1500379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD3_OFFSET 0x06 1501379ebbe7SSepherosa Ziehau /* Patch major & minor numbers */ 1502379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD4_OFFSET 0x07 15034be59a01SSepherosa Ziehau 15044be59a01SSepherosa Ziehau #define NVM_MAC_ADDR 0x0000 15054be59a01SSepherosa Ziehau #define NVM_SUB_DEV_ID 0x000B 15064be59a01SSepherosa Ziehau #define NVM_SUB_VEN_ID 0x000C 15074be59a01SSepherosa Ziehau #define NVM_DEV_ID 0x000D 15084be59a01SSepherosa Ziehau #define NVM_VEN_ID 0x000E 15094be59a01SSepherosa Ziehau #define NVM_INIT_CTRL_2 0x000F 15104be59a01SSepherosa Ziehau #define NVM_INIT_CTRL_4 0x0013 15114be59a01SSepherosa Ziehau #define NVM_LED_1_CFG 0x001C 15124be59a01SSepherosa Ziehau #define NVM_LED_0_2_CFG 0x001F 15134be59a01SSepherosa Ziehau 15149c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL1_REG 0x000A 1515379ebbe7SSepherosa Ziehau #define NVM_COMPAT_VALID_CSUM 0x0001 1516379ebbe7SSepherosa Ziehau #define NVM_FUTURE_INIT_WORD1_VALID_CSUM 0x0040 1517379ebbe7SSepherosa Ziehau 15189c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL2_REG 0x000F 15199c80d176SSepherosa Ziehau #define NVM_SWDEF_PINS_CTRL_PORT_1 0x0010 15209c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL3_PORT_B 0x0014 15219c80d176SSepherosa Ziehau #define NVM_INIT_3GIO_3 0x001A 15229c80d176SSepherosa Ziehau #define NVM_SWDEF_PINS_CTRL_PORT_0 0x0020 15239c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL3_PORT_A 0x0024 15249c80d176SSepherosa Ziehau #define NVM_CFG 0x0012 15259c80d176SSepherosa Ziehau #define NVM_FLASH_VERSION 0x0032 15269c80d176SSepherosa Ziehau #define NVM_ALT_MAC_ADDR_PTR 0x0037 15279c80d176SSepherosa Ziehau #define NVM_CHECKSUM_REG 0x003F 15286d5e2922SSepherosa Ziehau #define NVM_COMPATIBILITY_REG_3 0x0003 15296d5e2922SSepherosa Ziehau #define NVM_COMPATIBILITY_BIT_MASK 0x8000 15309c80d176SSepherosa Ziehau 15316a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ 15326a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ 15336a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_2 0x100000 /* ...for third port */ 15346a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_3 0x200000 /* ...for fourth port */ 15356a5a645eSSepherosa Ziehau 15364be59a01SSepherosa Ziehau #define NVM_82580_LAN_FUNC_OFFSET(a) ((a) ? (0x40 + (0x40 * (a))) : 0) 15376a5a645eSSepherosa Ziehau 15386a5a645eSSepherosa Ziehau /* Mask bits for fields in Word 0x24 of the NVM */ 15396a5a645eSSepherosa Ziehau #define NVM_WORD24_COM_MDIO 0x0008 /* MDIO interface shared */ 15404be59a01SSepherosa Ziehau #define NVM_WORD24_EXT_MDIO 0x0004 /* MDIO accesses routed extrnl */ 15414be59a01SSepherosa Ziehau /* Offset of Link Mode bits for 82575/82576 */ 15424be59a01SSepherosa Ziehau #define NVM_WORD24_LNK_MODE_OFFSET 8 15434be59a01SSepherosa Ziehau /* Offset of Link Mode bits for 82580 up */ 15444be59a01SSepherosa Ziehau #define NVM_WORD24_82580_LNK_MODE_OFFSET 4 15454be59a01SSepherosa Ziehau 15469c80d176SSepherosa Ziehau 15479c80d176SSepherosa Ziehau /* Mask bits for fields in Word 0x0f of the NVM */ 15489c80d176SSepherosa Ziehau #define NVM_WORD0F_PAUSE_MASK 0x3000 15499c80d176SSepherosa Ziehau #define NVM_WORD0F_PAUSE 0x1000 15509c80d176SSepherosa Ziehau #define NVM_WORD0F_ASM_DIR 0x2000 15519c80d176SSepherosa Ziehau #define NVM_WORD0F_ANE 0x0800 15529c80d176SSepherosa Ziehau #define NVM_WORD0F_SWPDIO_EXT_MASK 0x00F0 15539c80d176SSepherosa Ziehau #define NVM_WORD0F_LPLU 0x0001 15549c80d176SSepherosa Ziehau 15559c80d176SSepherosa Ziehau /* Mask bits for fields in Word 0x1a of the NVM */ 15569c80d176SSepherosa Ziehau #define NVM_WORD1A_ASPM_MASK 0x000C 15579c80d176SSepherosa Ziehau 15586a5a645eSSepherosa Ziehau /* Mask bits for fields in Word 0x03 of the EEPROM */ 15596a5a645eSSepherosa Ziehau #define NVM_COMPAT_LOM 0x0800 15606a5a645eSSepherosa Ziehau 15616a5a645eSSepherosa Ziehau /* length of string needed to store PBA number */ 15626a5a645eSSepherosa Ziehau #define E1000_PBANUM_LENGTH 11 15636a5a645eSSepherosa Ziehau 15649c80d176SSepherosa Ziehau /* For checksumming, the sum of all words in the NVM should equal 0xBABA. */ 15659c80d176SSepherosa Ziehau #define NVM_SUM 0xBABA 15669c80d176SSepherosa Ziehau 15679c80d176SSepherosa Ziehau #define NVM_MAC_ADDR_OFFSET 0 1568379ebbe7SSepherosa Ziehau /* PBA (printed board assembly) number words */ 15699c80d176SSepherosa Ziehau #define NVM_PBA_OFFSET_0 8 15709c80d176SSepherosa Ziehau #define NVM_PBA_OFFSET_1 9 15716a5a645eSSepherosa Ziehau #define NVM_PBA_PTR_GUARD 0xFAFA 15729c80d176SSepherosa Ziehau #define NVM_RESERVED_WORD 0xFFFF 15739c80d176SSepherosa Ziehau #define NVM_PHY_CLASS_A 0x8000 15749c80d176SSepherosa Ziehau #define NVM_SERDES_AMPLITUDE_MASK 0x000F 15759c80d176SSepherosa Ziehau #define NVM_SIZE_MASK 0x1C00 15769c80d176SSepherosa Ziehau #define NVM_SIZE_SHIFT 10 15779c80d176SSepherosa Ziehau #define NVM_WORD_SIZE_BASE_SHIFT 6 15789c80d176SSepherosa Ziehau #define NVM_SWDPIO_EXT_SHIFT 4 15799c80d176SSepherosa Ziehau 15809c80d176SSepherosa Ziehau /* NVM Commands - Microwire */ 15819c80d176SSepherosa Ziehau #define NVM_READ_OPCODE_MICROWIRE 0x6 /* NVM read opcode */ 15829c80d176SSepherosa Ziehau #define NVM_WRITE_OPCODE_MICROWIRE 0x5 /* NVM write opcode */ 15839c80d176SSepherosa Ziehau #define NVM_ERASE_OPCODE_MICROWIRE 0x7 /* NVM erase opcode */ 15849c80d176SSepherosa Ziehau #define NVM_EWEN_OPCODE_MICROWIRE 0x13 /* NVM erase/write enable */ 15859c80d176SSepherosa Ziehau #define NVM_EWDS_OPCODE_MICROWIRE 0x10 /* NVM erase/write disable */ 15869c80d176SSepherosa Ziehau 15879c80d176SSepherosa Ziehau /* NVM Commands - SPI */ 15889c80d176SSepherosa Ziehau #define NVM_MAX_RETRY_SPI 5000 /* Max wait of 5ms, for RDY signal */ 15899c80d176SSepherosa Ziehau #define NVM_READ_OPCODE_SPI 0x03 /* NVM read opcode */ 15909c80d176SSepherosa Ziehau #define NVM_WRITE_OPCODE_SPI 0x02 /* NVM write opcode */ 15919c80d176SSepherosa Ziehau #define NVM_A8_OPCODE_SPI 0x08 /* opcode bit-3 = address bit-8 */ 15929c80d176SSepherosa Ziehau #define NVM_WREN_OPCODE_SPI 0x06 /* NVM set Write Enable latch */ 15939c80d176SSepherosa Ziehau #define NVM_WRDI_OPCODE_SPI 0x04 /* NVM reset Write Enable latch */ 15949c80d176SSepherosa Ziehau #define NVM_RDSR_OPCODE_SPI 0x05 /* NVM read Status register */ 15959c80d176SSepherosa Ziehau #define NVM_WRSR_OPCODE_SPI 0x01 /* NVM write Status register */ 15969c80d176SSepherosa Ziehau 15979c80d176SSepherosa Ziehau /* SPI NVM Status Register */ 15989c80d176SSepherosa Ziehau #define NVM_STATUS_RDY_SPI 0x01 15999c80d176SSepherosa Ziehau #define NVM_STATUS_WEN_SPI 0x02 16009c80d176SSepherosa Ziehau #define NVM_STATUS_BP0_SPI 0x04 16019c80d176SSepherosa Ziehau #define NVM_STATUS_BP1_SPI 0x08 16029c80d176SSepherosa Ziehau #define NVM_STATUS_WPEN_SPI 0x80 16039c80d176SSepherosa Ziehau 16049c80d176SSepherosa Ziehau /* Word definitions for ID LED Settings */ 16059c80d176SSepherosa Ziehau #define ID_LED_RESERVED_0000 0x0000 16069c80d176SSepherosa Ziehau #define ID_LED_RESERVED_FFFF 0xFFFF 16079c80d176SSepherosa Ziehau #define ID_LED_DEFAULT ((ID_LED_OFF1_ON2 << 12) | \ 16089c80d176SSepherosa Ziehau (ID_LED_OFF1_OFF2 << 8) | \ 16099c80d176SSepherosa Ziehau (ID_LED_DEF1_DEF2 << 4) | \ 16109c80d176SSepherosa Ziehau (ID_LED_DEF1_DEF2)) 16119c80d176SSepherosa Ziehau #define ID_LED_DEF1_DEF2 0x1 16129c80d176SSepherosa Ziehau #define ID_LED_DEF1_ON2 0x2 16139c80d176SSepherosa Ziehau #define ID_LED_DEF1_OFF2 0x3 16149c80d176SSepherosa Ziehau #define ID_LED_ON1_DEF2 0x4 16159c80d176SSepherosa Ziehau #define ID_LED_ON1_ON2 0x5 16169c80d176SSepherosa Ziehau #define ID_LED_ON1_OFF2 0x6 16179c80d176SSepherosa Ziehau #define ID_LED_OFF1_DEF2 0x7 16189c80d176SSepherosa Ziehau #define ID_LED_OFF1_ON2 0x8 16199c80d176SSepherosa Ziehau #define ID_LED_OFF1_OFF2 0x9 16209c80d176SSepherosa Ziehau 16219c80d176SSepherosa Ziehau #define IGP_ACTIVITY_LED_MASK 0xFFFFF0FF 16229c80d176SSepherosa Ziehau #define IGP_ACTIVITY_LED_ENABLE 0x0300 16239c80d176SSepherosa Ziehau #define IGP_LED3_MODE 0x07000000 16249c80d176SSepherosa Ziehau 16259c80d176SSepherosa Ziehau /* PCI/PCI-X/PCI-EX Config space */ 16269c80d176SSepherosa Ziehau #define PCIX_COMMAND_REGISTER 0xE6 16279c80d176SSepherosa Ziehau #define PCIX_STATUS_REGISTER_LO 0xE8 16289c80d176SSepherosa Ziehau #define PCIX_STATUS_REGISTER_HI 0xEA 16299c80d176SSepherosa Ziehau #define PCI_HEADER_TYPE_REGISTER 0x0E 16309c80d176SSepherosa Ziehau #define PCIE_LINK_STATUS 0x12 16316a5a645eSSepherosa Ziehau #define PCIE_DEVICE_CONTROL2 0x28 16329c80d176SSepherosa Ziehau 16339c80d176SSepherosa Ziehau #define PCIX_COMMAND_MMRBC_MASK 0x000C 16349c80d176SSepherosa Ziehau #define PCIX_COMMAND_MMRBC_SHIFT 0x2 16359c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_MASK 0x0060 16369c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_SHIFT 0x5 16379c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_4K 0x3 16389c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_2K 0x2 16399c80d176SSepherosa Ziehau #define PCIX_STATUS_LO_FUNC_MASK 0x7 16409c80d176SSepherosa Ziehau #define PCI_HEADER_TYPE_MULTIFUNC 0x80 16419c80d176SSepherosa Ziehau #define PCIE_LINK_WIDTH_MASK 0x3F0 16429c80d176SSepherosa Ziehau #define PCIE_LINK_WIDTH_SHIFT 4 16436a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_MASK 0x0F 16446a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_2500 0x01 16456a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_5000 0x02 16466a5a645eSSepherosa Ziehau #define PCIE_DEVICE_CONTROL2_16ms 0x0005 16479c80d176SSepherosa Ziehau 16489c80d176SSepherosa Ziehau #ifndef ETH_ADDR_LEN 16499c80d176SSepherosa Ziehau #define ETH_ADDR_LEN 6 16509c80d176SSepherosa Ziehau #endif 16519c80d176SSepherosa Ziehau 16529c80d176SSepherosa Ziehau #define PHY_REVISION_MASK 0xFFFFFFF0 16539c80d176SSepherosa Ziehau #define MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */ 16549c80d176SSepherosa Ziehau #define MAX_PHY_MULTI_PAGE_REG 0xF 16559c80d176SSepherosa Ziehau 1656379ebbe7SSepherosa Ziehau /* Bit definitions for valid PHY IDs. 16579c80d176SSepherosa Ziehau * I = Integrated 16589c80d176SSepherosa Ziehau * E = External 16599c80d176SSepherosa Ziehau */ 16609c80d176SSepherosa Ziehau #define M88E1000_E_PHY_ID 0x01410C50 16619c80d176SSepherosa Ziehau #define M88E1000_I_PHY_ID 0x01410C30 16629c80d176SSepherosa Ziehau #define M88E1011_I_PHY_ID 0x01410C20 16639c80d176SSepherosa Ziehau #define IGP01E1000_I_PHY_ID 0x02A80380 16649c80d176SSepherosa Ziehau #define M88E1011_I_REV_4 0x04 16659c80d176SSepherosa Ziehau #define M88E1111_I_PHY_ID 0x01410CC0 1666ba0123e0SSepherosa Ziehau #define M88E1543_E_PHY_ID 0x01410EA0 1667ba0123e0SSepherosa Ziehau #define M88E1512_E_PHY_ID 0x01410DD0 166862583d18SSepherosa Ziehau #define M88E1112_E_PHY_ID 0x01410C90 166962583d18SSepherosa Ziehau #define I347AT4_E_PHY_ID 0x01410DC0 167062583d18SSepherosa Ziehau #define M88E1340M_E_PHY_ID 0x01410DF0 16719c80d176SSepherosa Ziehau #define GG82563_E_PHY_ID 0x01410CA0 16729c80d176SSepherosa Ziehau #define IGP03E1000_E_PHY_ID 0x02A80390 16739c80d176SSepherosa Ziehau #define IFE_E_PHY_ID 0x02A80330 16749c80d176SSepherosa Ziehau #define IFE_PLUS_E_PHY_ID 0x02A80320 16759c80d176SSepherosa Ziehau #define IFE_C_E_PHY_ID 0x02A80310 16769c80d176SSepherosa Ziehau #define BME1000_E_PHY_ID 0x01410CB0 16779c80d176SSepherosa Ziehau #define BME1000_E_PHY_ID_R2 0x01410CB1 16786a5a645eSSepherosa Ziehau #define I82577_E_PHY_ID 0x01540050 16796a5a645eSSepherosa Ziehau #define I82578_E_PHY_ID 0x004DD040 16806a5a645eSSepherosa Ziehau #define I82579_E_PHY_ID 0x01540090 1681379ebbe7SSepherosa Ziehau #define I217_E_PHY_ID 0x015400A0 16826a5a645eSSepherosa Ziehau #define I82580_I_PHY_ID 0x015403A0 168362583d18SSepherosa Ziehau #define I350_I_PHY_ID 0x015403B0 16844be59a01SSepherosa Ziehau #define I210_I_PHY_ID 0x01410C00 168562583d18SSepherosa Ziehau #define IGP04E1000_E_PHY_ID 0x02A80391 16869c80d176SSepherosa Ziehau #define M88_VENDOR 0x0141 16879c80d176SSepherosa Ziehau 16889c80d176SSepherosa Ziehau /* M88E1000 Specific Registers */ 16894be59a01SSepherosa Ziehau #define M88E1000_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Reg */ 16904be59a01SSepherosa Ziehau #define M88E1000_PHY_SPEC_STATUS 0x11 /* PHY Specific Status Reg */ 16914be59a01SSepherosa Ziehau #define M88E1000_INT_ENABLE 0x12 /* Interrupt Enable Reg */ 16924be59a01SSepherosa Ziehau #define M88E1000_INT_STATUS 0x13 /* Interrupt Status Reg */ 16934be59a01SSepherosa Ziehau #define M88E1000_EXT_PHY_SPEC_CTRL 0x14 /* Extended PHY Specific Cntrl */ 16949c80d176SSepherosa Ziehau #define M88E1000_RX_ERR_CNTR 0x15 /* Receive Error Counter */ 16959c80d176SSepherosa Ziehau 16969c80d176SSepherosa Ziehau #define M88E1000_PHY_EXT_CTRL 0x1A /* PHY extend control register */ 16974be59a01SSepherosa Ziehau #define M88E1000_PHY_PAGE_SELECT 0x1D /* Reg 29 for pg number setting */ 16984be59a01SSepherosa Ziehau #define M88E1000_PHY_GEN_CONTROL 0x1E /* meaning depends on reg 29 */ 16999c80d176SSepherosa Ziehau #define M88E1000_PHY_VCO_REG_BIT8 0x100 /* Bits 8 & 11 are adjusted for */ 17009c80d176SSepherosa Ziehau #define M88E1000_PHY_VCO_REG_BIT11 0x800 /* improved BER performance */ 17019c80d176SSepherosa Ziehau 17029c80d176SSepherosa Ziehau /* M88E1000 PHY Specific Control Register */ 17039c80d176SSepherosa Ziehau #define M88E1000_PSCR_JABBER_DISABLE 0x0001 /* 1=Jabber Function disabled */ 17046a5a645eSSepherosa Ziehau #define M88E1000_PSCR_POLARITY_REVERSAL 0x0002 /* 1=Polarity Reverse enabled */ 17059c80d176SSepherosa Ziehau #define M88E1000_PSCR_SQE_TEST 0x0004 /* 1=SQE Test enabled */ 17069c80d176SSepherosa Ziehau /* 1=CLK125 low, 0=CLK125 toggling */ 17079c80d176SSepherosa Ziehau #define M88E1000_PSCR_CLK125_DISABLE 0x0010 17084be59a01SSepherosa Ziehau /* MDI Crossover Mode bits 6:5 Manual MDI configuration */ 17094be59a01SSepherosa Ziehau #define M88E1000_PSCR_MDI_MANUAL_MODE 0x0000 17109c80d176SSepherosa Ziehau #define M88E1000_PSCR_MDIX_MANUAL_MODE 0x0020 /* Manual MDIX configuration */ 17119c80d176SSepherosa Ziehau /* 1000BASE-T: Auto crossover, 100BASE-TX/10BASE-T: MDI Mode */ 17129c80d176SSepherosa Ziehau #define M88E1000_PSCR_AUTO_X_1000T 0x0040 17139c80d176SSepherosa Ziehau /* Auto crossover enabled all speeds */ 17149c80d176SSepherosa Ziehau #define M88E1000_PSCR_AUTO_X_MODE 0x0060 17159c80d176SSepherosa Ziehau /* 17169c80d176SSepherosa Ziehau * 1=Enable Extended 10BASE-T distance (Lower 10BASE-T Rx Threshold 17179c80d176SSepherosa Ziehau * 0=Normal 10BASE-T Rx Threshold 17189c80d176SSepherosa Ziehau */ 17199c80d176SSepherosa Ziehau #define M88E1000_PSCR_EN_10BT_EXT_DIST 0x0080 17209c80d176SSepherosa Ziehau /* 1=5-bit interface in 100BASE-TX, 0=MII interface in 100BASE-TX */ 17219c80d176SSepherosa Ziehau #define M88E1000_PSCR_MII_5BIT_ENABLE 0x0100 17229c80d176SSepherosa Ziehau #define M88E1000_PSCR_SCRAMBLER_DISABLE 0x0200 /* 1=Scrambler disable */ 17239c80d176SSepherosa Ziehau #define M88E1000_PSCR_FORCE_LINK_GOOD 0x0400 /* 1=Force link good */ 17246a5a645eSSepherosa Ziehau #define M88E1000_PSCR_ASSERT_CRS_ON_TX 0x0800 /* 1=Assert CRS on Tx */ 17259c80d176SSepherosa Ziehau 17269c80d176SSepherosa Ziehau /* M88E1000 PHY Specific Status Register */ 17279c80d176SSepherosa Ziehau #define M88E1000_PSSR_JABBER 0x0001 /* 1=Jabber */ 17289c80d176SSepherosa Ziehau #define M88E1000_PSSR_REV_POLARITY 0x0002 /* 1=Polarity reversed */ 17299c80d176SSepherosa Ziehau #define M88E1000_PSSR_DOWNSHIFT 0x0020 /* 1=Downshifted */ 17309c80d176SSepherosa Ziehau #define M88E1000_PSSR_MDIX 0x0040 /* 1=MDIX; 0=MDI */ 1731379ebbe7SSepherosa Ziehau /* 0 = <50M 17329c80d176SSepherosa Ziehau * 1 = 50-80M 17339c80d176SSepherosa Ziehau * 2 = 80-110M 17349c80d176SSepherosa Ziehau * 3 = 110-140M 17359c80d176SSepherosa Ziehau * 4 = >140M 17369c80d176SSepherosa Ziehau */ 17379c80d176SSepherosa Ziehau #define M88E1000_PSSR_CABLE_LENGTH 0x0380 17389c80d176SSepherosa Ziehau #define M88E1000_PSSR_LINK 0x0400 /* 1=Link up, 0=Link down */ 17399c80d176SSepherosa Ziehau #define M88E1000_PSSR_SPD_DPLX_RESOLVED 0x0800 /* 1=Speed & Duplex resolved */ 17409c80d176SSepherosa Ziehau #define M88E1000_PSSR_PAGE_RCVD 0x1000 /* 1=Page received */ 17419c80d176SSepherosa Ziehau #define M88E1000_PSSR_DPLX 0x2000 /* 1=Duplex 0=Half Duplex */ 17429c80d176SSepherosa Ziehau #define M88E1000_PSSR_SPEED 0xC000 /* Speed, bits 14:15 */ 17439c80d176SSepherosa Ziehau #define M88E1000_PSSR_10MBS 0x0000 /* 00=10Mbs */ 17449c80d176SSepherosa Ziehau #define M88E1000_PSSR_100MBS 0x4000 /* 01=100Mbs */ 17459c80d176SSepherosa Ziehau #define M88E1000_PSSR_1000MBS 0x8000 /* 10=1000Mbs */ 17469c80d176SSepherosa Ziehau 17479c80d176SSepherosa Ziehau #define M88E1000_PSSR_CABLE_LENGTH_SHIFT 7 17489c80d176SSepherosa Ziehau 17499c80d176SSepherosa Ziehau /* M88E1000 Extended PHY Specific Control Register */ 17509c80d176SSepherosa Ziehau #define M88E1000_EPSCR_FIBER_LOOPBACK 0x4000 /* 1=Fiber loopback */ 17519c80d176SSepherosa Ziehau /* 17529c80d176SSepherosa Ziehau * 1 = Lost lock detect enabled. 17539c80d176SSepherosa Ziehau * Will assert lost lock and bring 17549c80d176SSepherosa Ziehau * link down if idle not seen 17559c80d176SSepherosa Ziehau * within 1ms in 1000BASE-T 17569c80d176SSepherosa Ziehau */ 17579c80d176SSepherosa Ziehau #define M88E1000_EPSCR_DOWN_NO_IDLE 0x8000 1758379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 17599c80d176SSepherosa Ziehau * are the master 17609c80d176SSepherosa Ziehau */ 17619c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK 0x0C00 17629c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_1X 0x0000 17639c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_2X 0x0400 17649c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_3X 0x0800 17659c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_4X 0x0C00 1766379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 17679c80d176SSepherosa Ziehau * are the slave 17689c80d176SSepherosa Ziehau */ 17699c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK 0x0300 17709c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_DIS 0x0000 17719c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X 0x0100 17729c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_2X 0x0200 17739c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_3X 0x0300 17749c80d176SSepherosa Ziehau #define M88E1000_EPSCR_TX_CLK_2_5 0x0060 /* 2.5 MHz TX_CLK */ 17759c80d176SSepherosa Ziehau #define M88E1000_EPSCR_TX_CLK_25 0x0070 /* 25 MHz TX_CLK */ 17769c80d176SSepherosa Ziehau #define M88E1000_EPSCR_TX_CLK_0 0x0000 /* NO TX_CLK */ 17779c80d176SSepherosa Ziehau 17786d5e2922SSepherosa Ziehau /* M88E1111 Specific Registers */ 17796d5e2922SSepherosa Ziehau #define M88E1111_PHY_PAGE_SELECT1 0x16 /* for registers 0-28 */ 17806d5e2922SSepherosa Ziehau #define M88E1111_PHY_PAGE_SELECT2 0x1D /* for registers 30-31 */ 17816d5e2922SSepherosa Ziehau 17826d5e2922SSepherosa Ziehau /* M88E1111 page select register mask */ 17836d5e2922SSepherosa Ziehau #define M88E1111_PHY_PAGE_SELECT_MASK1 0xFF 17846d5e2922SSepherosa Ziehau #define M88E1111_PHY_PAGE_SELECT_MASK2 0x3F 17856d5e2922SSepherosa Ziehau 17864be59a01SSepherosa Ziehau #if !defined(NO_DH89XXCC_SUPPORT) || defined(SPRINGVILLE_HW) 178762583d18SSepherosa Ziehau /* Intel I347AT4 Registers */ 178862583d18SSepherosa Ziehau #define I347AT4_PCDL 0x10 /* PHY Cable Diagnostics Length */ 178962583d18SSepherosa Ziehau #define I347AT4_PCDC 0x15 /* PHY Cable Diagnostics Control */ 179062583d18SSepherosa Ziehau #define I347AT4_PAGE_SELECT 0x16 179162583d18SSepherosa Ziehau 179262583d18SSepherosa Ziehau /* I347AT4 Extended PHY Specific Control Register */ 179362583d18SSepherosa Ziehau 1794379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 179562583d18SSepherosa Ziehau * are the master 179662583d18SSepherosa Ziehau */ 179762583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_ENABLE 0x0800 179862583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_MASK 0x7000 179962583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_1X 0x0000 180062583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_2X 0x1000 180162583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_3X 0x2000 180262583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_4X 0x3000 180362583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_5X 0x4000 180462583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_6X 0x5000 180562583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_7X 0x6000 180662583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_8X 0x7000 180762583d18SSepherosa Ziehau 180862583d18SSepherosa Ziehau /* I347AT4 PHY Cable Diagnostics Control */ 180962583d18SSepherosa Ziehau #define I347AT4_PCDC_CABLE_LENGTH_UNIT 0x0400 /* 0=cm 1=meters */ 181062583d18SSepherosa Ziehau 181162583d18SSepherosa Ziehau /* M88E1112 only registers */ 181262583d18SSepherosa Ziehau #define M88E1112_VCT_DSP_DISTANCE 0x001A 18134be59a01SSepherosa Ziehau #endif /* !defined(NO_DH89XXCC_SUPPORT) || defined(SPRINGVILLE_HW) */ 18146a5a645eSSepherosa Ziehau 18159c80d176SSepherosa Ziehau /* M88EC018 Rev 2 specific DownShift settings */ 18169c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK 0x0E00 18179c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_1X 0x0000 18189c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_2X 0x0200 18199c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_3X 0x0400 18209c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_4X 0x0600 18219c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X 0x0800 18229c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_6X 0x0A00 18239c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_7X 0x0C00 18249c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_8X 0x0E00 18259c80d176SSepherosa Ziehau 18266a5a645eSSepherosa Ziehau #define I82578_EPSCR_DOWNSHIFT_ENABLE 0x0020 18276a5a645eSSepherosa Ziehau #define I82578_EPSCR_DOWNSHIFT_COUNTER_MASK 0x001C 18286a5a645eSSepherosa Ziehau 18299c80d176SSepherosa Ziehau /* BME1000 PHY Specific Control Register */ 18309c80d176SSepherosa Ziehau #define BME1000_PSCR_ENABLE_DOWNSHIFT 0x0800 /* 1 = enable downshift */ 18319c80d176SSepherosa Ziehau 1832379ebbe7SSepherosa Ziehau /* Bits... 18339c80d176SSepherosa Ziehau * 15-5: page 18349c80d176SSepherosa Ziehau * 4-0: register offset 18359c80d176SSepherosa Ziehau */ 18369c80d176SSepherosa Ziehau #define GG82563_PAGE_SHIFT 5 18379c80d176SSepherosa Ziehau #define GG82563_REG(page, reg) \ 18389c80d176SSepherosa Ziehau (((page) << GG82563_PAGE_SHIFT) | ((reg) & MAX_PHY_REG_ADDRESS)) 18399c80d176SSepherosa Ziehau #define GG82563_MIN_ALT_REG 30 18409c80d176SSepherosa Ziehau 18419c80d176SSepherosa Ziehau /* GG82563 Specific Registers */ 18424be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_CTRL GG82563_REG(0, 16) /* PHY Spec Cntrl */ 18434be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_STATUS GG82563_REG(0, 17) /* PHY Spec Status */ 18444be59a01SSepherosa Ziehau #define GG82563_PHY_INT_ENABLE GG82563_REG(0, 18) /* Interrupt Ena */ 18454be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_STATUS_2 GG82563_REG(0, 19) /* PHY Spec Stat2 */ 18464be59a01SSepherosa Ziehau #define GG82563_PHY_RX_ERR_CNTR GG82563_REG(0, 21) /* Rx Err Counter */ 18474be59a01SSepherosa Ziehau #define GG82563_PHY_PAGE_SELECT GG82563_REG(0, 22) /* Page Select */ 18484be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_CTRL_2 GG82563_REG(0, 26) /* PHY Spec Cntrl2 */ 18494be59a01SSepherosa Ziehau #define GG82563_PHY_PAGE_SELECT_ALT GG82563_REG(0, 29) /* Alt Page Select */ 18504be59a01SSepherosa Ziehau /* Test Clock Control (use reg. 29 to select) */ 18514be59a01SSepherosa Ziehau #define GG82563_PHY_TEST_CLK_CTRL GG82563_REG(0, 30) 18529c80d176SSepherosa Ziehau 18534be59a01SSepherosa Ziehau /* MAC Specific Control Register */ 18544be59a01SSepherosa Ziehau #define GG82563_PHY_MAC_SPEC_CTRL GG82563_REG(2, 21) 18554be59a01SSepherosa Ziehau #define GG82563_PHY_MAC_SPEC_CTRL_2 GG82563_REG(2, 26) /* MAC Spec Ctrl 2 */ 18569c80d176SSepherosa Ziehau 18574be59a01SSepherosa Ziehau #define GG82563_PHY_DSP_DISTANCE GG82563_REG(5, 26) /* DSP Distance */ 18589c80d176SSepherosa Ziehau 18599c80d176SSepherosa Ziehau /* Page 193 - Port Control Registers */ 18604be59a01SSepherosa Ziehau /* Kumeran Mode Control */ 18614be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_MODE_CTRL GG82563_REG(193, 16) 18624be59a01SSepherosa Ziehau #define GG82563_PHY_PORT_RESET GG82563_REG(193, 17) /* Port Reset */ 18634be59a01SSepherosa Ziehau #define GG82563_PHY_REVISION_ID GG82563_REG(193, 18) /* Revision ID */ 18644be59a01SSepherosa Ziehau #define GG82563_PHY_DEVICE_ID GG82563_REG(193, 19) /* Device ID */ 18654be59a01SSepherosa Ziehau #define GG82563_PHY_PWR_MGMT_CTRL GG82563_REG(193, 20) /* Pwr Mgt Ctrl */ 18664be59a01SSepherosa Ziehau /* Rate Adaptation Control */ 18674be59a01SSepherosa Ziehau #define GG82563_PHY_RATE_ADAPT_CTRL GG82563_REG(193, 25) 18689c80d176SSepherosa Ziehau 18699c80d176SSepherosa Ziehau /* Page 194 - KMRN Registers */ 18704be59a01SSepherosa Ziehau /* FIFO's Control/Status */ 18714be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_FIFO_CTRL_STAT GG82563_REG(194, 16) 18724be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_CTRL GG82563_REG(194, 17) /* Control */ 18734be59a01SSepherosa Ziehau #define GG82563_PHY_INBAND_CTRL GG82563_REG(194, 18) /* Inband Ctrl */ 18744be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_DIAGNOSTIC GG82563_REG(194, 19) /* Diagnostic */ 18754be59a01SSepherosa Ziehau #define GG82563_PHY_ACK_TIMEOUTS GG82563_REG(194, 20) /* Ack Timeouts */ 18764be59a01SSepherosa Ziehau #define GG82563_PHY_ADV_ABILITY GG82563_REG(194, 21) /* Adver Ability */ 18774be59a01SSepherosa Ziehau /* Link Partner Advertised Ability */ 18784be59a01SSepherosa Ziehau #define GG82563_PHY_LINK_PARTNER_ADV_ABILITY GG82563_REG(194, 23) 18794be59a01SSepherosa Ziehau #define GG82563_PHY_ADV_NEXT_PAGE GG82563_REG(194, 24) /* Adver Next Pg */ 18804be59a01SSepherosa Ziehau /* Link Partner Advertised Next page */ 18814be59a01SSepherosa Ziehau #define GG82563_PHY_LINK_PARTNER_ADV_NEXT_PAGE GG82563_REG(194, 25) 18824be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_MISC GG82563_REG(194, 26) /* Misc. */ 18839c80d176SSepherosa Ziehau 18849c80d176SSepherosa Ziehau /* MDI Control */ 18859c80d176SSepherosa Ziehau #define E1000_MDIC_DATA_MASK 0x0000FFFF 18869c80d176SSepherosa Ziehau #define E1000_MDIC_REG_MASK 0x001F0000 18879c80d176SSepherosa Ziehau #define E1000_MDIC_REG_SHIFT 16 18889c80d176SSepherosa Ziehau #define E1000_MDIC_PHY_MASK 0x03E00000 18899c80d176SSepherosa Ziehau #define E1000_MDIC_PHY_SHIFT 21 18909c80d176SSepherosa Ziehau #define E1000_MDIC_OP_WRITE 0x04000000 18919c80d176SSepherosa Ziehau #define E1000_MDIC_OP_READ 0x08000000 18929c80d176SSepherosa Ziehau #define E1000_MDIC_READY 0x10000000 18939c80d176SSepherosa Ziehau #define E1000_MDIC_INT_EN 0x20000000 18949c80d176SSepherosa Ziehau #define E1000_MDIC_ERROR 0x40000000 18956a5a645eSSepherosa Ziehau #define E1000_MDIC_DEST 0x80000000 18969c80d176SSepherosa Ziehau 18979c80d176SSepherosa Ziehau /* SerDes Control */ 18989c80d176SSepherosa Ziehau #define E1000_GEN_CTL_READY 0x80000000 18999c80d176SSepherosa Ziehau #define E1000_GEN_CTL_ADDRESS_SHIFT 8 19009c80d176SSepherosa Ziehau #define E1000_GEN_POLL_TIMEOUT 640 19019c80d176SSepherosa Ziehau 190262583d18SSepherosa Ziehau /* LinkSec register fields */ 190362583d18SSepherosa Ziehau #define E1000_LSECTXCAP_SUM_MASK 0x00FF0000 190462583d18SSepherosa Ziehau #define E1000_LSECTXCAP_SUM_SHIFT 16 190562583d18SSepherosa Ziehau #define E1000_LSECRXCAP_SUM_MASK 0x00FF0000 190662583d18SSepherosa Ziehau #define E1000_LSECRXCAP_SUM_SHIFT 16 190762583d18SSepherosa Ziehau 190862583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_EN_MASK 0x00000003 190962583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_DISABLE 0x0 191062583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AUTH 0x1 191162583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AUTH_ENCRYPT 0x2 191262583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AISCI 0x00000020 191362583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_PNTHRSH_MASK 0xFFFFFF00 191462583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_RSV_MASK 0x000000D8 191562583d18SSepherosa Ziehau 191662583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_EN_MASK 0x0000000C 191762583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_EN_SHIFT 2 191862583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_DISABLE 0x0 191962583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_CHECK 0x1 192062583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_STRICT 0x2 192162583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_DROP 0x3 192262583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_PLSH 0x00000040 192362583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_RP 0x00000080 192462583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_RSV_MASK 0xFFFFFF33 192562583d18SSepherosa Ziehau 192662583d18SSepherosa Ziehau /* Tx Rate-Scheduler Config fields */ 192762583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RS_ENA 0x80000000 192862583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_DEC_MASK 0x00003FFF 192962583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_INT_SHIFT 14 193062583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_INT_MASK \ 193162583d18SSepherosa Ziehau (E1000_RTTBCNRC_RF_DEC_MASK << E1000_RTTBCNRC_RF_INT_SHIFT) 193262583d18SSepherosa Ziehau 19336a5a645eSSepherosa Ziehau /* DMA Coalescing register fields */ 19344be59a01SSepherosa Ziehau /* DMA Coalescing Watchdog Timer */ 19354be59a01SSepherosa Ziehau #define E1000_DMACR_DMACWT_MASK 0x00003FFF 19364be59a01SSepherosa Ziehau /* DMA Coalescing Rx Threshold */ 19374be59a01SSepherosa Ziehau #define E1000_DMACR_DMACTHR_MASK 0x00FF0000 19386a5a645eSSepherosa Ziehau #define E1000_DMACR_DMACTHR_SHIFT 16 19394be59a01SSepherosa Ziehau /* Lx when no PCIe transactions */ 19404be59a01SSepherosa Ziehau #define E1000_DMACR_DMAC_LX_MASK 0x30000000 19416a5a645eSSepherosa Ziehau #define E1000_DMACR_DMAC_LX_SHIFT 28 19426a5a645eSSepherosa Ziehau #define E1000_DMACR_DMAC_EN 0x80000000 /* Enable DMA Coalescing */ 19434be59a01SSepherosa Ziehau /* DMA Coalescing BMC-to-OS Watchdog Enable */ 19444be59a01SSepherosa Ziehau #define E1000_DMACR_DC_BMC2OSW_EN 0x00008000 19459c80d176SSepherosa Ziehau 19464be59a01SSepherosa Ziehau /* DMA Coalescing Transmit Threshold */ 19474be59a01SSepherosa Ziehau #define E1000_DMCTXTH_DMCTTHR_MASK 0x00000FFF 19486a5a645eSSepherosa Ziehau 19496a5a645eSSepherosa Ziehau #define E1000_DMCTLX_TTLX_MASK 0x00000FFF /* Time to LX request */ 19506a5a645eSSepherosa Ziehau 19514be59a01SSepherosa Ziehau /* Rx Traffic Rate Threshold */ 19524be59a01SSepherosa Ziehau #define E1000_DMCRTRH_UTRESH_MASK 0x0007FFFF 19534be59a01SSepherosa Ziehau /* Rx packet rate in current window */ 19544be59a01SSepherosa Ziehau #define E1000_DMCRTRH_LRPRCW 0x80000000 19556a5a645eSSepherosa Ziehau 19564be59a01SSepherosa Ziehau /* DMA Coal Rx Traffic Current Count */ 19574be59a01SSepherosa Ziehau #define E1000_DMCCNT_CCOUNT_MASK 0x01FFFFFF 19586a5a645eSSepherosa Ziehau 19594be59a01SSepherosa Ziehau /* Flow ctrl Rx Threshold High val */ 19604be59a01SSepherosa Ziehau #define E1000_FCRTC_RTH_COAL_MASK 0x0003FFF0 19616a5a645eSSepherosa Ziehau #define E1000_FCRTC_RTH_COAL_SHIFT 4 19624be59a01SSepherosa Ziehau /* Lx power decision based on DMA coal */ 19634be59a01SSepherosa Ziehau #define E1000_PCIEMISC_LX_DECISION 0x00000080 19644be59a01SSepherosa Ziehau 19654be59a01SSepherosa Ziehau #define E1000_RXPBS_CFG_TS_EN 0x80000000 /* Timestamp in Rx buffer */ 19664be59a01SSepherosa Ziehau #define E1000_RXPBS_SIZE_I210_MASK 0x0000003F /* Rx packet buffer size */ 19674be59a01SSepherosa Ziehau #define E1000_TXPB0S_SIZE_I210_MASK 0x0000003F /* Tx packet buffer 0 size */ 1968ba0123e0SSepherosa Ziehau #define I210_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */ 1969ba0123e0SSepherosa Ziehau #define I210_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */ 1970ba0123e0SSepherosa Ziehau 19716a5a645eSSepherosa Ziehau 1972379ebbe7SSepherosa Ziehau /* Proxy Filter Control */ 197362583d18SSepherosa Ziehau #define E1000_PROXYFC_D0 0x00000001 /* Enable offload in D0 */ 197462583d18SSepherosa Ziehau #define E1000_PROXYFC_EX 0x00000004 /* Directed exact proxy */ 19754be59a01SSepherosa Ziehau #define E1000_PROXYFC_MC 0x00000008 /* Directed MC Proxy */ 197662583d18SSepherosa Ziehau #define E1000_PROXYFC_BC 0x00000010 /* Broadcast Proxy Enable */ 19774be59a01SSepherosa Ziehau #define E1000_PROXYFC_ARP_DIRECTED 0x00000020 /* Directed ARP Proxy Ena */ 197862583d18SSepherosa Ziehau #define E1000_PROXYFC_IPV4 0x00000040 /* Directed IPv4 Enable */ 197962583d18SSepherosa Ziehau #define E1000_PROXYFC_IPV6 0x00000080 /* Directed IPv6 Enable */ 1980379ebbe7SSepherosa Ziehau #define E1000_PROXYFC_NS 0x00000200 /* IPv6 Neighbor Solicitation */ 19814be59a01SSepherosa Ziehau #define E1000_PROXYFC_ARP 0x00000800 /* ARP Request Proxy Ena */ 198262583d18SSepherosa Ziehau /* Proxy Status */ 198362583d18SSepherosa Ziehau #define E1000_PROXYS_CLEAR 0xFFFFFFFF /* Clear */ 198462583d18SSepherosa Ziehau 198562583d18SSepherosa Ziehau /* Firmware Status */ 19864be59a01SSepherosa Ziehau #define E1000_FWSTS_FWRI 0x80000000 /* FW Reset Indication */ 19874be59a01SSepherosa Ziehau /* VF Control */ 19884be59a01SSepherosa Ziehau #define E1000_VTCTRL_RST 0x04000000 /* Reset VF */ 198962583d18SSepherosa Ziehau 19904be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_ID_MASK 0x00000000C /* Mask for Lan ID field */ 19914be59a01SSepherosa Ziehau /* Lan ID bit field offset in status register */ 19924be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_ID_OFFSET 2 19934be59a01SSepherosa Ziehau #define E1000_VFTA_ENTRIES 128 1994ba0123e0SSepherosa Ziehau #ifndef E1000_UNUSEDARG 1995379ebbe7SSepherosa Ziehau #define E1000_UNUSEDARG 1996ba0123e0SSepherosa Ziehau #endif /* E1000_UNUSEDARG */ 1997ba0123e0SSepherosa Ziehau #ifndef ERROR_REPORT 19984765c386SMichael Neumann #define ERROR_REPORT(fmt) do { } while (0) 1999ba0123e0SSepherosa Ziehau #endif /* ERROR_REPORT */ 20009c80d176SSepherosa Ziehau #endif /* _E1000_DEFINES_H_ */ 2001