19c80d176SSepherosa Ziehau /****************************************************************************** 29c80d176SSepherosa Ziehau 3*01a55482SSepherosa Ziehau Copyright (c) 2001-2019, 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 ******************************************************************************/ 3374dc3754SSepherosa 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_PHY_WAKE 0x00000100 /* if PHY supports wakeup */ 499c80d176SSepherosa Ziehau 509c80d176SSepherosa Ziehau /* Wake Up Filter Control */ 519c80d176SSepherosa Ziehau #define E1000_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ 529c80d176SSepherosa Ziehau #define E1000_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */ 539c80d176SSepherosa Ziehau #define E1000_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */ 549c80d176SSepherosa Ziehau #define E1000_WUFC_MC 0x00000008 /* Directed Multicast Wakeup Enable */ 559c80d176SSepherosa Ziehau #define E1000_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ 569c80d176SSepherosa Ziehau #define E1000_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ 579c80d176SSepherosa Ziehau #define E1000_WUFC_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Enable */ 589c80d176SSepherosa Ziehau #define E1000_WUFC_FLX0 0x00010000 /* Flexible Filter 0 Enable */ 599c80d176SSepherosa Ziehau 609c80d176SSepherosa Ziehau /* Wake Up Status */ 619c80d176SSepherosa Ziehau #define E1000_WUS_LNKC E1000_WUFC_LNKC 629c80d176SSepherosa Ziehau #define E1000_WUS_MAG E1000_WUFC_MAG 639c80d176SSepherosa Ziehau #define E1000_WUS_EX E1000_WUFC_EX 649c80d176SSepherosa Ziehau #define E1000_WUS_MC E1000_WUFC_MC 659c80d176SSepherosa Ziehau #define E1000_WUS_BC E1000_WUFC_BC 669c80d176SSepherosa Ziehau 679c80d176SSepherosa Ziehau /* Extended Device Control */ 68379ebbe7SSepherosa Ziehau #define E1000_CTRL_EXT_LPCD 0x00000004 /* LCD Power Cycle Done */ 694be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP4_DATA 0x00000010 /* SW Definable Pin 4 data */ 704be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP6_DATA 0x00000040 /* SW Definable Pin 6 data */ 714be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_SDP3_DATA 0x00000080 /* SW Definable Pin 3 data */ 729c80d176SSepherosa Ziehau /* SDP 4/5 (bits 8,9) are reserved in >= 82575 */ 739c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SDP4_DIR 0x00000100 /* Direction of SDP4 0=in 1=out */ 749c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 0=in 1=out */ 756a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_SDP3_DIR 0x00000800 /* Direction of SDP3 0=in 1=out */ 76379ebbe7SSepherosa Ziehau #define E1000_CTRL_EXT_FORCE_SMBUS 0x00000800 /* Force SMBus mode */ 779c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ 7862583d18SSepherosa Ziehau /* Physical Func Reset Done Indication */ 7962583d18SSepherosa Ziehau #define E1000_CTRL_EXT_PFRSTD 0x00004000 80ba0123e0SSepherosa Ziehau #define E1000_CTRL_EXT_SDLPE 0X00040000 /* SerDes Low Power Enable */ 819c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */ 829c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ 834be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clk Gating */ 849c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 854be59a01SSepherosa Ziehau /* Offset of the link mode field in Ctrl Ext register */ 864be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_OFFSET 22 876a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_1000BASE_KX 0x00400000 889c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000 899c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES 0x00C00000 909c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LINK_MODE_SGMII 0x00800000 919c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_EIAME 0x01000000 929c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_IRCA 0x00000001 934be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_DRV_LOAD 0x10000000 /* Drv loaded bit for FW */ 944be59a01SSepherosa Ziehau #define E1000_CTRL_EXT_IAME 0x08000000 /* Int ACK Auto-mask */ 959c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_PBA_CLR 0x80000000 /* PBA Clear */ 969c80d176SSepherosa Ziehau #define E1000_CTRL_EXT_LSECCK 0x00001000 976a5a645eSSepherosa Ziehau #define E1000_CTRL_EXT_PHYPDEN 0x00100000 989c80d176SSepherosa Ziehau #define E1000_I2CCMD_REG_ADDR_SHIFT 16 999c80d176SSepherosa Ziehau #define E1000_I2CCMD_PHY_ADDR_SHIFT 24 1009c80d176SSepherosa Ziehau #define E1000_I2CCMD_OPCODE_READ 0x08000000 1019c80d176SSepherosa Ziehau #define E1000_I2CCMD_OPCODE_WRITE 0x00000000 1029c80d176SSepherosa Ziehau #define E1000_I2CCMD_READY 0x20000000 1039c80d176SSepherosa Ziehau #define E1000_I2CCMD_ERROR 0x80000000 1044be59a01SSepherosa Ziehau #define E1000_I2CCMD_SFP_DATA_ADDR(a) (0x0000 + (a)) 1054be59a01SSepherosa Ziehau #define E1000_I2CCMD_SFP_DIAG_ADDR(a) (0x0100 + (a)) 1069c80d176SSepherosa Ziehau #define E1000_MAX_SGMII_PHY_REG_ADDR 255 1079c80d176SSepherosa Ziehau #define E1000_I2CCMD_PHY_TIMEOUT 200 10862583d18SSepherosa Ziehau #define E1000_IVAR_VALID 0x80 10962583d18SSepherosa Ziehau #define E1000_GPIE_NSICR 0x00000001 11062583d18SSepherosa Ziehau #define E1000_GPIE_MSIX_MODE 0x00000010 11162583d18SSepherosa Ziehau #define E1000_GPIE_EIAME 0x40000000 11262583d18SSepherosa Ziehau #define E1000_GPIE_PBA 0x80000000 1139c80d176SSepherosa Ziehau 1149c80d176SSepherosa Ziehau /* Receive Descriptor bit definitions */ 1159c80d176SSepherosa Ziehau #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */ 1169c80d176SSepherosa Ziehau #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */ 1179c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */ 1189c80d176SSepherosa Ziehau #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ 1199c80d176SSepherosa Ziehau #define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ 1209c80d176SSepherosa Ziehau #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ 1219c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ 1229c80d176SSepherosa Ziehau #define E1000_RXD_STAT_PIF 0x80 /* passed in-exact filter */ 1239c80d176SSepherosa Ziehau #define E1000_RXD_STAT_IPIDV 0x200 /* IP identification valid */ 1249c80d176SSepherosa Ziehau #define E1000_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */ 1259c80d176SSepherosa Ziehau #define E1000_RXD_STAT_DYNINT 0x800 /* Pkt caused INT via DYNINT */ 1269c80d176SSepherosa Ziehau #define E1000_RXD_ERR_CE 0x01 /* CRC Error */ 1279c80d176SSepherosa Ziehau #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */ 1289c80d176SSepherosa Ziehau #define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */ 1299c80d176SSepherosa Ziehau #define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */ 1309c80d176SSepherosa Ziehau #define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */ 1319c80d176SSepherosa Ziehau #define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */ 1329c80d176SSepherosa Ziehau #define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */ 1339c80d176SSepherosa Ziehau #define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ 1349c80d176SSepherosa Ziehau 1354be59a01SSepherosa Ziehau #define E1000_RXDEXT_STATERR_TST 0x00000100 /* Time Stamp taken */ 1366d5e2922SSepherosa Ziehau #define E1000_RXDEXT_STATERR_LB 0x00040000 1379c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_CE 0x01000000 1389c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_SE 0x02000000 1399c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_SEQ 0x04000000 1409c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_CXE 0x10000000 1419c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_TCPE 0x20000000 1429c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_IPE 0x40000000 1439c80d176SSepherosa Ziehau #define E1000_RXDEXT_STATERR_RXE 0x80000000 1449c80d176SSepherosa Ziehau 1459c80d176SSepherosa Ziehau /* mask to determine if packets should be dropped due to frame errors */ 1469c80d176SSepherosa Ziehau #define E1000_RXD_ERR_FRAME_ERR_MASK ( \ 1479c80d176SSepherosa Ziehau E1000_RXD_ERR_CE | \ 1489c80d176SSepherosa Ziehau E1000_RXD_ERR_SE | \ 1499c80d176SSepherosa Ziehau E1000_RXD_ERR_SEQ | \ 1509c80d176SSepherosa Ziehau E1000_RXD_ERR_CXE | \ 1519c80d176SSepherosa Ziehau E1000_RXD_ERR_RXE) 1529c80d176SSepherosa Ziehau 1539c80d176SSepherosa Ziehau /* Same mask, but for extended and packet split descriptors */ 1549c80d176SSepherosa Ziehau #define E1000_RXDEXT_ERR_FRAME_ERR_MASK ( \ 1559c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_CE | \ 1569c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_SE | \ 1579c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_SEQ | \ 1589c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_CXE | \ 1599c80d176SSepherosa Ziehau E1000_RXDEXT_STATERR_RXE) 1609c80d176SSepherosa Ziehau 16165aebe9fSSepherosa Ziehau #if !defined(EXTERNAL_RELEASE) || defined(E1000E_MQ) 1629c80d176SSepherosa Ziehau #define E1000_MRQC_ENABLE_RSS_2Q 0x00000001 16365aebe9fSSepherosa Ziehau #endif /* !EXTERNAL_RELEASE || E1000E_MQ */ 1649c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_MASK 0xFFFF0000 1659c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV4_TCP 0x00010000 1669c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV4 0x00020000 1679c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6_TCP_EX 0x00040000 1689c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6 0x00100000 1699c80d176SSepherosa Ziehau #define E1000_MRQC_RSS_FIELD_IPV6_TCP 0x00200000 1709c80d176SSepherosa Ziehau 1719c80d176SSepherosa Ziehau #define E1000_RXDPS_HDRSTAT_HDRSP 0x00008000 1729c80d176SSepherosa Ziehau 1739c80d176SSepherosa Ziehau /* Management Control */ 1749c80d176SSepherosa Ziehau #define E1000_MANC_SMBUS_EN 0x00000001 /* SMBus Enabled - RO */ 1759c80d176SSepherosa Ziehau #define E1000_MANC_ASF_EN 0x00000002 /* ASF Enabled - RO */ 1769c80d176SSepherosa Ziehau #define E1000_MANC_ARP_EN 0x00002000 /* Enable ARP Request Filtering */ 1779c80d176SSepherosa Ziehau #define E1000_MANC_RCV_TCO_EN 0x00020000 /* Receive TCO Packets Enabled */ 1789c80d176SSepherosa Ziehau #define E1000_MANC_BLK_PHY_RST_ON_IDE 0x00040000 /* Block phy resets */ 1799c80d176SSepherosa Ziehau /* Enable MAC address filtering */ 1809c80d176SSepherosa Ziehau #define E1000_MANC_EN_MAC_ADDR_FILTER 0x00100000 1819c80d176SSepherosa Ziehau /* Enable MNG packets to host memory */ 1829c80d176SSepherosa Ziehau #define E1000_MANC_EN_MNG2HOST 0x00200000 1839c80d176SSepherosa Ziehau 1846a5a645eSSepherosa Ziehau #define E1000_MANC2H_PORT_623 0x00000020 /* Port 0x26f */ 1856a5a645eSSepherosa Ziehau #define E1000_MANC2H_PORT_664 0x00000040 /* Port 0x298 */ 1866a5a645eSSepherosa Ziehau #define E1000_MDEF_PORT_623 0x00000800 /* Port 0x26f */ 1876a5a645eSSepherosa Ziehau #define E1000_MDEF_PORT_664 0x00000400 /* Port 0x298 */ 1886a5a645eSSepherosa Ziehau 1899c80d176SSepherosa Ziehau /* Receive Control */ 1909c80d176SSepherosa Ziehau #define E1000_RCTL_RST 0x00000001 /* Software reset */ 1919c80d176SSepherosa Ziehau #define E1000_RCTL_EN 0x00000002 /* enable */ 1929c80d176SSepherosa Ziehau #define E1000_RCTL_SBP 0x00000004 /* store bad packet */ 1936a5a645eSSepherosa Ziehau #define E1000_RCTL_UPE 0x00000008 /* unicast promisc enable */ 1946a5a645eSSepherosa Ziehau #define E1000_RCTL_MPE 0x00000010 /* multicast promisc enable */ 1959c80d176SSepherosa Ziehau #define E1000_RCTL_LPE 0x00000020 /* long packet enable */ 1969c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_NO 0x00000000 /* no loopback mode */ 1979c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */ 1989c80d176SSepherosa Ziehau #define E1000_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */ 1999c80d176SSepherosa Ziehau #define E1000_RCTL_DTYP_PS 0x00000400 /* Packet Split descriptor */ 2006d5e2922SSepherosa Ziehau #define E1000_RCTL_RDMTS_HALF 0x00000000 /* Rx desc min thresh size */ 201ba0123e0SSepherosa Ziehau #define E1000_RCTL_RDMTS_HEX 0x00010000 202a40fda39SSepherosa Ziehau #define E1000_RCTL_RDMTS1_HEX E1000_RCTL_RDMTS_HEX 2039c80d176SSepherosa Ziehau #define E1000_RCTL_MO_SHIFT 12 /* multicast offset shift */ 2049c80d176SSepherosa Ziehau #define E1000_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */ 2059c80d176SSepherosa Ziehau #define E1000_RCTL_BAM 0x00008000 /* broadcast enable */ 2069c80d176SSepherosa Ziehau /* these buffer sizes are valid if E1000_RCTL_BSEX is 0 */ 2076d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_2048 0x00000000 /* Rx buffer size 2048 */ 2086d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_1024 0x00010000 /* Rx buffer size 1024 */ 2096d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_512 0x00020000 /* Rx buffer size 512 */ 2106d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_256 0x00030000 /* Rx buffer size 256 */ 2119c80d176SSepherosa Ziehau /* these buffer sizes are valid if E1000_RCTL_BSEX is 1 */ 2126d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_16384 0x00010000 /* Rx buffer size 16384 */ 2136d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_8192 0x00020000 /* Rx buffer size 8192 */ 2146d5e2922SSepherosa Ziehau #define E1000_RCTL_SZ_4096 0x00030000 /* Rx buffer size 4096 */ 2159c80d176SSepherosa Ziehau #define E1000_RCTL_VFE 0x00040000 /* vlan filter enable */ 2169c80d176SSepherosa Ziehau #define E1000_RCTL_CFIEN 0x00080000 /* canonical form enable */ 2179c80d176SSepherosa Ziehau #define E1000_RCTL_CFI 0x00100000 /* canonical form indicator */ 2189c80d176SSepherosa Ziehau #define E1000_RCTL_DPF 0x00400000 /* discard pause frames */ 2199c80d176SSepherosa Ziehau #define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */ 2209c80d176SSepherosa Ziehau #define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */ 2219c80d176SSepherosa Ziehau #define E1000_RCTL_SECRC 0x04000000 /* Strip Ethernet CRC */ 2229c80d176SSepherosa Ziehau 223379ebbe7SSepherosa Ziehau /* Use byte values for the following shift parameters 2249c80d176SSepherosa Ziehau * Usage: 2259c80d176SSepherosa Ziehau * psrctl |= (((ROUNDUP(value0, 128) >> E1000_PSRCTL_BSIZE0_SHIFT) & 2269c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE0_MASK) | 2279c80d176SSepherosa Ziehau * ((ROUNDUP(value1, 1024) >> E1000_PSRCTL_BSIZE1_SHIFT) & 2289c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE1_MASK) | 2299c80d176SSepherosa Ziehau * ((ROUNDUP(value2, 1024) << E1000_PSRCTL_BSIZE2_SHIFT) & 2309c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE2_MASK) | 2319c80d176SSepherosa Ziehau * ((ROUNDUP(value3, 1024) << E1000_PSRCTL_BSIZE3_SHIFT) |; 2329c80d176SSepherosa Ziehau * E1000_PSRCTL_BSIZE3_MASK)) 2339c80d176SSepherosa Ziehau * where value0 = [128..16256], default=256 2349c80d176SSepherosa Ziehau * value1 = [1024..64512], default=4096 2359c80d176SSepherosa Ziehau * value2 = [0..64512], default=4096 2369c80d176SSepherosa Ziehau * value3 = [0..64512], default=0 2379c80d176SSepherosa Ziehau */ 2389c80d176SSepherosa Ziehau 2399c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE0_MASK 0x0000007F 2409c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE1_MASK 0x00003F00 2419c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE2_MASK 0x003F0000 2429c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE3_MASK 0x3F000000 2439c80d176SSepherosa Ziehau 2449c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE0_SHIFT 7 /* Shift _right_ 7 */ 2459c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE1_SHIFT 2 /* Shift _right_ 2 */ 2469c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE2_SHIFT 6 /* Shift _left_ 6 */ 2479c80d176SSepherosa Ziehau #define E1000_PSRCTL_BSIZE3_SHIFT 14 /* Shift _left_ 14 */ 2489c80d176SSepherosa Ziehau 2499c80d176SSepherosa Ziehau /* SWFW_SYNC Definitions */ 2506a5a645eSSepherosa Ziehau #define E1000_SWFW_EEP_SM 0x01 2516a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY0_SM 0x02 2526a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY1_SM 0x04 2536a5a645eSSepherosa Ziehau #define E1000_SWFW_CSR_SM 0x08 2546a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY2_SM 0x20 2556a5a645eSSepherosa Ziehau #define E1000_SWFW_PHY3_SM 0x40 25662583d18SSepherosa Ziehau #define E1000_SWFW_SW_MNG_SM 0x400 2579c80d176SSepherosa Ziehau 2589c80d176SSepherosa Ziehau /* Device Control */ 2599c80d176SSepherosa Ziehau #define E1000_CTRL_FD 0x00000001 /* Full duplex.0=half; 1=full */ 2609c80d176SSepherosa Ziehau #define E1000_CTRL_PRIOR 0x00000004 /* Priority on PCI. 0=rx,1=fair */ 2616a5a645eSSepherosa Ziehau #define E1000_CTRL_GIO_MASTER_DISABLE 0x00000004 /*Blocks new Master reqs */ 2629c80d176SSepherosa Ziehau #define E1000_CTRL_LRST 0x00000008 /* Link reset. 0=normal,1=reset */ 2639c80d176SSepherosa Ziehau #define E1000_CTRL_ASDE 0x00000020 /* Auto-speed detect enable */ 2649c80d176SSepherosa Ziehau #define E1000_CTRL_SLU 0x00000040 /* Set link up (Force Link) */ 2659c80d176SSepherosa Ziehau #define E1000_CTRL_ILOS 0x00000080 /* Invert Loss-Of Signal */ 2669c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_SEL 0x00000300 /* Speed Select Mask */ 2679c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_10 0x00000000 /* Force 10Mb */ 2689c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_100 0x00000100 /* Force 100Mb */ 2699c80d176SSepherosa Ziehau #define E1000_CTRL_SPD_1000 0x00000200 /* Force 1Gb */ 2709c80d176SSepherosa Ziehau #define E1000_CTRL_FRCSPD 0x00000800 /* Force Speed */ 2719c80d176SSepherosa Ziehau #define E1000_CTRL_FRCDPX 0x00001000 /* Force Duplex */ 2726a5a645eSSepherosa Ziehau #define E1000_CTRL_LANPHYPC_OVERRIDE 0x00010000 /* SW control of LANPHYPC */ 2736a5a645eSSepherosa Ziehau #define E1000_CTRL_LANPHYPC_VALUE 0x00020000 /* SW value of LANPHYPC */ 274379ebbe7SSepherosa Ziehau #define E1000_CTRL_MEHE 0x00080000 /* Memory Error Handling Enable */ 2759c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ 2769c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ 2779c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN2 0x00100000 /* SWDPIN 2 value */ 27862583d18SSepherosa Ziehau #define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */ 279379ebbe7SSepherosa Ziehau #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */ 2809c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIN3 0x00200000 /* SWDPIN 3 value */ 2819c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */ 2829c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO2 0x01000000 /* SWDPIN 2 input or output */ 2839c80d176SSepherosa Ziehau #define E1000_CTRL_SWDPIO3 0x02000000 /* SWDPIN 3 input or output */ 2849c80d176SSepherosa Ziehau #define E1000_CTRL_RST 0x04000000 /* Global reset */ 2859c80d176SSepherosa Ziehau #define E1000_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */ 2869c80d176SSepherosa Ziehau #define E1000_CTRL_TFCE 0x10000000 /* Transmit flow control enable */ 2879c80d176SSepherosa Ziehau #define E1000_CTRL_VME 0x40000000 /* IEEE VLAN mode enable */ 2889c80d176SSepherosa Ziehau #define E1000_CTRL_PHY_RST 0x80000000 /* PHY Reset */ 2899c80d176SSepherosa Ziehau #define E1000_CTRL_I2C_ENA 0x02000000 /* I2C enable */ 2909c80d176SSepherosa Ziehau 2919c80d176SSepherosa Ziehau #define E1000_CTRL_MDIO_DIR E1000_CTRL_SWDPIO2 2929c80d176SSepherosa Ziehau #define E1000_CTRL_MDIO E1000_CTRL_SWDPIN2 2939c80d176SSepherosa Ziehau #define E1000_CTRL_MDC_DIR E1000_CTRL_SWDPIO3 2949c80d176SSepherosa Ziehau #define E1000_CTRL_MDC E1000_CTRL_SWDPIN3 2959c80d176SSepherosa Ziehau 2969c80d176SSepherosa Ziehau #define E1000_CONNSW_ENRGSRC 0x4 297379ebbe7SSepherosa Ziehau #define E1000_CONNSW_PHYSD 0x400 298ba0123e0SSepherosa Ziehau #define E1000_CONNSW_PHY_PDN 0x800 299379ebbe7SSepherosa Ziehau #define E1000_CONNSW_SERDESD 0x200 300ba0123e0SSepherosa Ziehau #define E1000_CONNSW_AUTOSENSE_CONF 0x2 301ba0123e0SSepherosa Ziehau #define E1000_CONNSW_AUTOSENSE_EN 0x1 3029c80d176SSepherosa Ziehau #define E1000_PCS_CFG_PCS_EN 8 3039c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FLV_LINK_UP 1 3049c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_10 0 3059c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_100 2 3069c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSV_1000 4 3079c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FDV_FULL 8 3089c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FSD 0x10 3099c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FORCE_LINK 0x20 3109c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_FORCE_FCTRL 0x80 3119c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_ENABLE 0x10000 3129c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_RESTART 0x20000 3139c80d176SSepherosa Ziehau #define E1000_PCS_LCTL_AN_TIMEOUT 0x40000 3149c80d176SSepherosa Ziehau #define E1000_ENABLE_SERDES_LOOPBACK 0x0410 3159c80d176SSepherosa Ziehau 3169c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_LINK_OK 1 3179c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SPEED_100 2 3189c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SPEED_1000 4 3199c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_DUPLEX_FULL 8 3209c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_SYNK_OK 0x10 3219c80d176SSepherosa Ziehau #define E1000_PCS_LSTS_AN_COMPLETE 0x10000 3229c80d176SSepherosa Ziehau 3239c80d176SSepherosa Ziehau /* Device Status */ 3244be59a01SSepherosa Ziehau #define E1000_STATUS_FD 0x00000001 /* Duplex 0=half 1=full */ 3259c80d176SSepherosa Ziehau #define E1000_STATUS_LU 0x00000002 /* Link up.0=no,1=link */ 3269c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_MASK 0x0000000C /* PCI Function Mask */ 3279c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_SHIFT 2 3289c80d176SSepherosa Ziehau #define E1000_STATUS_FUNC_1 0x00000004 /* Function 1 */ 3299c80d176SSepherosa Ziehau #define E1000_STATUS_TXOFF 0x00000010 /* transmission paused */ 3309c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_MASK 0x000000C0 3319c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */ 3329c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */ 3339c80d176SSepherosa Ziehau #define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */ 3344be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Compltn by NVM */ 3356a5a645eSSepherosa Ziehau #define E1000_STATUS_PHYRA 0x00000400 /* PHY Reset Asserted */ 3369c80d176SSepherosa Ziehau #define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Master request status */ 3379c80d176SSepherosa Ziehau #define E1000_STATUS_PCI66 0x00000800 /* In 66Mhz slot */ 3389c80d176SSepherosa Ziehau #define E1000_STATUS_BUS64 0x00001000 /* In 64 bit slot */ 339ba0123e0SSepherosa Ziehau #define E1000_STATUS_2P5_SKU 0x00001000 /* Val of 2.5GBE SKU strap */ 340ba0123e0SSepherosa Ziehau #define E1000_STATUS_2P5_SKU_OVER 0x00002000 /* Val of 2.5GBE SKU Over */ 3419c80d176SSepherosa Ziehau #define E1000_STATUS_PCIX_MODE 0x00002000 /* PCI-X mode */ 3429c80d176SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED 0x0000C000 /* PCI-X bus speed */ 3439c80d176SSepherosa Ziehau 3449c80d176SSepherosa Ziehau /* Constants used to interpret the masked PCI-X bus speed. */ 3454be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_66 0x00000000 /* PCI-X bus spd 50-66MHz */ 3464be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_100 0x00004000 /* PCI-X bus spd 66-100MHz */ 3474be59a01SSepherosa Ziehau #define E1000_STATUS_PCIX_SPEED_133 0x00008000 /* PCI-X bus spd 100-133MHz*/ 348*01a55482SSepherosa Ziehau #define E1000_STATUS_PCIM_STATE 0x40000000 /* PCIm function state */ 3499c80d176SSepherosa Ziehau 3509c80d176SSepherosa Ziehau #define SPEED_10 10 3519c80d176SSepherosa Ziehau #define SPEED_100 100 3529c80d176SSepherosa Ziehau #define SPEED_1000 1000 353ba0123e0SSepherosa Ziehau #define SPEED_2500 2500 3549c80d176SSepherosa Ziehau #define HALF_DUPLEX 1 3559c80d176SSepherosa Ziehau #define FULL_DUPLEX 2 3569c80d176SSepherosa Ziehau 3579c80d176SSepherosa Ziehau #define PHY_FORCE_TIME 20 3589c80d176SSepherosa Ziehau 3599c80d176SSepherosa Ziehau #define ADVERTISE_10_HALF 0x0001 3609c80d176SSepherosa Ziehau #define ADVERTISE_10_FULL 0x0002 3619c80d176SSepherosa Ziehau #define ADVERTISE_100_HALF 0x0004 3629c80d176SSepherosa Ziehau #define ADVERTISE_100_FULL 0x0008 3639c80d176SSepherosa Ziehau #define ADVERTISE_1000_HALF 0x0010 /* Not used, just FYI */ 3649c80d176SSepherosa Ziehau #define ADVERTISE_1000_FULL 0x0020 365*01a55482SSepherosa Ziehau #define ADVERTISE_2500_HALF 0x0040 /* NOT used, just FYI */ 366*01a55482SSepherosa Ziehau #define ADVERTISE_2500_FULL 0x0080 3679c80d176SSepherosa Ziehau 3689c80d176SSepherosa Ziehau /* 1000/H is not supported, nor spec-compliant. */ 3694be59a01SSepherosa Ziehau #define E1000_ALL_SPEED_DUPLEX ( \ 3704be59a01SSepherosa Ziehau ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 3714be59a01SSepherosa Ziehau ADVERTISE_100_FULL | ADVERTISE_1000_FULL) 372*01a55482SSepherosa Ziehau #define E1000_ALL_SPEED_DUPLEX_2500 ( \ 373*01a55482SSepherosa Ziehau ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 374*01a55482SSepherosa Ziehau ADVERTISE_100_FULL | ADVERTISE_1000_FULL | ADVERTISE_2500_FULL) 3754be59a01SSepherosa Ziehau #define E1000_ALL_NOT_GIG ( \ 3764be59a01SSepherosa Ziehau ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 3774be59a01SSepherosa Ziehau ADVERTISE_100_FULL) 3789c80d176SSepherosa Ziehau #define E1000_ALL_100_SPEED (ADVERTISE_100_HALF | ADVERTISE_100_FULL) 3799c80d176SSepherosa Ziehau #define E1000_ALL_10_SPEED (ADVERTISE_10_HALF | ADVERTISE_10_FULL) 3809c80d176SSepherosa Ziehau #define E1000_ALL_HALF_DUPLEX (ADVERTISE_10_HALF | ADVERTISE_100_HALF) 3819c80d176SSepherosa Ziehau 3829c80d176SSepherosa Ziehau #define AUTONEG_ADVERTISE_SPEED_DEFAULT E1000_ALL_SPEED_DUPLEX 383*01a55482SSepherosa Ziehau #define AUTONEG_ADVERTISE_SPEED_DEFAULT_2500 E1000_ALL_SPEED_DUPLEX_2500 3849c80d176SSepherosa Ziehau 3859c80d176SSepherosa Ziehau /* LED Control */ 3866a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_MODE_MASK 0x00000007 3876a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_IVRT 0x00000008 3886a5a645eSSepherosa Ziehau #define E1000_PHY_LED0_MASK 0x0000001F 3896a5a645eSSepherosa Ziehau 3909c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F 3919c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_MODE_SHIFT 0 3929c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_IVRT 0x00000040 3939c80d176SSepherosa Ziehau #define E1000_LEDCTL_LED0_BLINK 0x00000080 3949c80d176SSepherosa Ziehau 3959c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LINK_UP 0x2 3969c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LED_ON 0xE 3979c80d176SSepherosa Ziehau #define E1000_LEDCTL_MODE_LED_OFF 0xF 3989c80d176SSepherosa Ziehau 3999c80d176SSepherosa Ziehau /* Transmit Descriptor bit definitions */ 4009c80d176SSepherosa Ziehau #define E1000_TXD_DTYP_D 0x00100000 /* Data Descriptor */ 4019c80d176SSepherosa Ziehau #define E1000_TXD_DTYP_C 0x00000000 /* Context Descriptor */ 4029c80d176SSepherosa Ziehau #define E1000_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ 4039c80d176SSepherosa Ziehau #define E1000_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ 4049c80d176SSepherosa Ziehau #define E1000_TXD_CMD_EOP 0x01000000 /* End of Packet */ 4059c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */ 4069c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IC 0x04000000 /* Insert Checksum */ 4079c80d176SSepherosa Ziehau #define E1000_TXD_CMD_RS 0x08000000 /* Report Status */ 4089c80d176SSepherosa Ziehau #define E1000_TXD_CMD_RPS 0x10000000 /* Report Packet Sent */ 4094be59a01SSepherosa Ziehau #define E1000_TXD_CMD_DEXT 0x20000000 /* Desc extension (0 = legacy) */ 4109c80d176SSepherosa Ziehau #define E1000_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ 4119c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IDE 0x80000000 /* Enable Tidv register */ 4129c80d176SSepherosa Ziehau #define E1000_TXD_STAT_DD 0x00000001 /* Descriptor Done */ 4139c80d176SSepherosa Ziehau #define E1000_TXD_STAT_EC 0x00000002 /* Excess Collisions */ 4149c80d176SSepherosa Ziehau #define E1000_TXD_STAT_LC 0x00000004 /* Late Collisions */ 4159c80d176SSepherosa Ziehau #define E1000_TXD_STAT_TU 0x00000008 /* Transmit underrun */ 4169c80d176SSepherosa Ziehau #define E1000_TXD_CMD_TCP 0x01000000 /* TCP packet */ 4179c80d176SSepherosa Ziehau #define E1000_TXD_CMD_IP 0x02000000 /* IP packet */ 4189c80d176SSepherosa Ziehau #define E1000_TXD_CMD_TSE 0x04000000 /* TCP Seg enable */ 4199c80d176SSepherosa Ziehau #define E1000_TXD_STAT_TC 0x00000004 /* Tx Underrun */ 4204be59a01SSepherosa Ziehau #define E1000_TXD_EXTCMD_TSTAMP 0x00000010 /* IEEE1588 Timestamp packet */ 4219c80d176SSepherosa Ziehau 4229c80d176SSepherosa Ziehau /* Transmit Control */ 4236d5e2922SSepherosa Ziehau #define E1000_TCTL_EN 0x00000002 /* enable Tx */ 4249c80d176SSepherosa Ziehau #define E1000_TCTL_PSP 0x00000008 /* pad short packets */ 4259c80d176SSepherosa Ziehau #define E1000_TCTL_CT 0x00000ff0 /* collision threshold */ 4269c80d176SSepherosa Ziehau #define E1000_TCTL_COLD 0x003ff000 /* collision distance */ 4279c80d176SSepherosa Ziehau #define E1000_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */ 4289c80d176SSepherosa Ziehau #define E1000_TCTL_MULR 0x10000000 /* Multiple request support */ 4299c80d176SSepherosa Ziehau 4309c80d176SSepherosa Ziehau /* Transmit Arbitration Count */ 4319c80d176SSepherosa Ziehau #define E1000_TARC0_ENABLE 0x00000400 /* Enable Tx Queue 0 */ 4329c80d176SSepherosa Ziehau 4339c80d176SSepherosa Ziehau /* SerDes Control */ 4349c80d176SSepherosa Ziehau #define E1000_SCTL_DISABLE_SERDES_LOOPBACK 0x0400 435379ebbe7SSepherosa Ziehau #define E1000_SCTL_ENABLE_SERDES_LOOPBACK 0x0410 4369c80d176SSepherosa Ziehau 4379c80d176SSepherosa Ziehau /* Receive Checksum Control */ 4389c80d176SSepherosa Ziehau #define E1000_RXCSUM_PCSS_MASK 0x000000FF /* Packet Checksum Start */ 4399c80d176SSepherosa Ziehau #define E1000_RXCSUM_IPOFL 0x00000100 /* IPv4 checksum offload */ 4409c80d176SSepherosa Ziehau #define E1000_RXCSUM_TUOFL 0x00000200 /* TCP / UDP checksum offload */ 4419c80d176SSepherosa Ziehau #define E1000_RXCSUM_CRCOFL 0x00000800 /* CRC32 offload enable */ 4429c80d176SSepherosa Ziehau #define E1000_RXCSUM_IPPCSE 0x00001000 /* IP payload checksum enable */ 4439c80d176SSepherosa Ziehau #define E1000_RXCSUM_PCSD 0x00002000 /* packet checksum disabled */ 4449c80d176SSepherosa Ziehau 4459c80d176SSepherosa Ziehau /* Header split receive */ 4469c80d176SSepherosa Ziehau #define E1000_RFCTL_NFSW_DIS 0x00000040 4479c80d176SSepherosa Ziehau #define E1000_RFCTL_NFSR_DIS 0x00000080 4489c80d176SSepherosa Ziehau #define E1000_RFCTL_ACK_DIS 0x00001000 4499c80d176SSepherosa Ziehau #define E1000_RFCTL_EXTEN 0x00008000 4509c80d176SSepherosa Ziehau #define E1000_RFCTL_IPV6_EX_DIS 0x00010000 4519c80d176SSepherosa Ziehau #define E1000_RFCTL_NEW_IPV6_EXT_DIS 0x00020000 4529c80d176SSepherosa Ziehau #define E1000_RFCTL_LEF 0x00040000 4539c80d176SSepherosa Ziehau 4549c80d176SSepherosa Ziehau /* Collision related configuration parameters */ 4559c80d176SSepherosa Ziehau #define E1000_CT_SHIFT 4 456*01a55482SSepherosa Ziehau #define E1000_COLLISION_THRESHOLD 15 4579c80d176SSepherosa Ziehau #define E1000_COLLISION_DISTANCE 63 4589c80d176SSepherosa Ziehau #define E1000_COLD_SHIFT 12 4599c80d176SSepherosa Ziehau 4609c80d176SSepherosa Ziehau /* Default values for the transmit IPG register */ 4619c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGT 10 4629c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGT_FIBER 9 4639c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGT_COPPER 8 4649c80d176SSepherosa Ziehau 4659c80d176SSepherosa Ziehau #define E1000_TIPG_IPGT_MASK 0x000003FF 4669c80d176SSepherosa Ziehau 4679c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGR1 2 4689c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGR1 8 4699c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR1_SHIFT 10 4709c80d176SSepherosa Ziehau 4719c80d176SSepherosa Ziehau #define DEFAULT_82542_TIPG_IPGR2 10 4729c80d176SSepherosa Ziehau #define DEFAULT_82543_TIPG_IPGR2 6 4739c80d176SSepherosa Ziehau #define DEFAULT_80003ES2LAN_TIPG_IPGR2 7 4749c80d176SSepherosa Ziehau #define E1000_TIPG_IPGR2_SHIFT 20 4759c80d176SSepherosa Ziehau 4769c80d176SSepherosa Ziehau /* Ethertype field values */ 4779c80d176SSepherosa Ziehau #define ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.3ac packet */ 4789c80d176SSepherosa Ziehau 4799c80d176SSepherosa Ziehau #define ETHERNET_FCS_SIZE 4 4809c80d176SSepherosa Ziehau #define MAX_JUMBO_FRAME_SIZE 0x3F00 48174dc3754SSepherosa Ziehau /* The datasheet maximum supported RX size is 9.5KB (9728 bytes) */ 48274dc3754SSepherosa Ziehau #define MAX_RX_JUMBO_FRAME_SIZE 0x2600 4834765c386SMichael Neumann #define E1000_TX_PTR_GAP 0x1F 4849c80d176SSepherosa Ziehau 4859c80d176SSepherosa Ziehau /* Extended Configuration Control and Size */ 4869c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020 4879c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE 0x00000001 4886a5a645eSSepherosa Ziehau #define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE 0x00000008 4899c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_SWFLAG 0x00000020 4906a5a645eSSepherosa Ziehau #define E1000_EXTCNF_CTRL_GATE_PHY_CFG 0x00000080 4919c80d176SSepherosa Ziehau #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK 0x00FF0000 4929c80d176SSepherosa Ziehau #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT 16 4939c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK 0x0FFF0000 4949c80d176SSepherosa Ziehau #define E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT 16 4959c80d176SSepherosa Ziehau 4969c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_D0A_LPLU 0x00000002 4979c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_NOND0A_LPLU 0x00000004 4989c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_NOND0A_GBE_DISABLE 0x00000008 4999c80d176SSepherosa Ziehau #define E1000_PHY_CTRL_GBE_DISABLE 0x00000040 5009c80d176SSepherosa Ziehau 5019c80d176SSepherosa Ziehau #define E1000_KABGTXD_BGSQLBIAS 0x00050000 5029c80d176SSepherosa Ziehau 503379ebbe7SSepherosa Ziehau /* Low Power IDLE Control */ 504379ebbe7SSepherosa Ziehau #define E1000_LPIC_LPIET_SHIFT 24 /* Low Power Idle Entry Time */ 505379ebbe7SSepherosa Ziehau 5069c80d176SSepherosa Ziehau /* PBA constants */ 5079c80d176SSepherosa Ziehau #define E1000_PBA_8K 0x0008 /* 8KB */ 5086a5a645eSSepherosa Ziehau #define E1000_PBA_10K 0x000A /* 10KB */ 5099c80d176SSepherosa Ziehau #define E1000_PBA_12K 0x000C /* 12KB */ 5106a5a645eSSepherosa Ziehau #define E1000_PBA_14K 0x000E /* 14KB */ 5119c80d176SSepherosa Ziehau #define E1000_PBA_16K 0x0010 /* 16KB */ 5126a5a645eSSepherosa Ziehau #define E1000_PBA_18K 0x0012 5139c80d176SSepherosa Ziehau #define E1000_PBA_20K 0x0014 5149c80d176SSepherosa Ziehau #define E1000_PBA_22K 0x0016 5159c80d176SSepherosa Ziehau #define E1000_PBA_24K 0x0018 5166a5a645eSSepherosa Ziehau #define E1000_PBA_26K 0x001A 5179c80d176SSepherosa Ziehau #define E1000_PBA_30K 0x001E 5189c80d176SSepherosa Ziehau #define E1000_PBA_32K 0x0020 5199c80d176SSepherosa Ziehau #define E1000_PBA_34K 0x0022 5206a5a645eSSepherosa Ziehau #define E1000_PBA_35K 0x0023 5219c80d176SSepherosa Ziehau #define E1000_PBA_38K 0x0026 5229c80d176SSepherosa Ziehau #define E1000_PBA_40K 0x0028 5239c80d176SSepherosa Ziehau #define E1000_PBA_48K 0x0030 /* 48KB */ 5249c80d176SSepherosa Ziehau #define E1000_PBA_64K 0x0040 /* 64KB */ 5259c80d176SSepherosa Ziehau 5264be59a01SSepherosa Ziehau #define E1000_PBA_RXA_MASK 0xFFFF 5274be59a01SSepherosa Ziehau 5289c80d176SSepherosa Ziehau #define E1000_PBS_16K E1000_PBA_16K 5299c80d176SSepherosa Ziehau 530379ebbe7SSepherosa Ziehau /* Uncorrectable/correctable ECC Error counts and enable bits */ 531379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_CORR_ERR_CNT_MASK 0x000000FF 532379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_UNCORR_ERR_CNT_MASK 0x0000FF00 533379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT 8 534379ebbe7SSepherosa Ziehau #define E1000_PBECCSTS_ECC_ENABLE 0x00010000 535379ebbe7SSepherosa Ziehau 5369c80d176SSepherosa Ziehau #define IFS_MAX 80 5379c80d176SSepherosa Ziehau #define IFS_MIN 40 5389c80d176SSepherosa Ziehau #define IFS_RATIO 4 5399c80d176SSepherosa Ziehau #define IFS_STEP 10 5409c80d176SSepherosa Ziehau #define MIN_NUM_XMITS 1000 5419c80d176SSepherosa Ziehau 5429c80d176SSepherosa Ziehau /* SW Semaphore Register */ 5439c80d176SSepherosa Ziehau #define E1000_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ 5449c80d176SSepherosa Ziehau #define E1000_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ 5459c80d176SSepherosa Ziehau #define E1000_SWSM_DRV_LOAD 0x00000008 /* Driver Loaded Bit */ 5469c80d176SSepherosa Ziehau 5476a5a645eSSepherosa Ziehau #define E1000_SWSM2_LOCK 0x00000002 /* Secondary driver semaphore bit */ 5486a5a645eSSepherosa Ziehau 5499c80d176SSepherosa Ziehau /* Interrupt Cause Read */ 5509c80d176SSepherosa Ziehau #define E1000_ICR_TXDW 0x00000001 /* Transmit desc written back */ 5519c80d176SSepherosa Ziehau #define E1000_ICR_TXQE 0x00000002 /* Transmit Queue empty */ 5529c80d176SSepherosa Ziehau #define E1000_ICR_LSC 0x00000004 /* Link Status Change */ 5536d5e2922SSepherosa Ziehau #define E1000_ICR_RXSEQ 0x00000008 /* Rx sequence error */ 5546d5e2922SSepherosa Ziehau #define E1000_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */ 5556d5e2922SSepherosa Ziehau #define E1000_ICR_RXO 0x00000040 /* Rx overrun */ 5566d5e2922SSepherosa Ziehau #define E1000_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */ 5579c80d176SSepherosa Ziehau #define E1000_ICR_VMMB 0x00000100 /* VM MB event */ 5589c80d176SSepherosa Ziehau #define E1000_ICR_RXCFG 0x00000400 /* Rx /c/ ordered set */ 5599c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN0 0x00000800 /* GP Int 0 */ 5609c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN1 0x00001000 /* GP Int 1 */ 5619c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN2 0x00002000 /* GP Int 2 */ 5629c80d176SSepherosa Ziehau #define E1000_ICR_GPI_EN3 0x00004000 /* GP Int 3 */ 5639c80d176SSepherosa Ziehau #define E1000_ICR_TXD_LOW 0x00008000 5649c80d176SSepherosa Ziehau #define E1000_ICR_MNG 0x00040000 /* Manageability event */ 565ba0123e0SSepherosa Ziehau #define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */ 5664be59a01SSepherosa Ziehau #define E1000_ICR_TS 0x00080000 /* Time Sync Interrupt */ 5676a5a645eSSepherosa Ziehau #define E1000_ICR_DRSTA 0x40000000 /* Device Reset Asserted */ 5684be59a01SSepherosa Ziehau /* If this bit asserted, the driver should claim the interrupt */ 5694be59a01SSepherosa Ziehau #define E1000_ICR_INT_ASSERTED 0x80000000 5704be59a01SSepherosa Ziehau #define E1000_ICR_RXQ0 0x00100000 /* Rx Queue 0 Interrupt */ 5714be59a01SSepherosa Ziehau #define E1000_ICR_RXQ1 0x00200000 /* Rx Queue 1 Interrupt */ 5724be59a01SSepherosa Ziehau #define E1000_ICR_TXQ0 0x00400000 /* Tx Queue 0 Interrupt */ 5734be59a01SSepherosa Ziehau #define E1000_ICR_TXQ1 0x00800000 /* Tx Queue 1 Interrupt */ 5744be59a01SSepherosa Ziehau #define E1000_ICR_OTHER 0x01000000 /* Other Interrupts */ 57565aebe9fSSepherosa Ziehau #define E1000_ICR_DOUTSYNC 0x10000000 /* NIC DMA out of sync */ 5766a5a645eSSepherosa Ziehau #define E1000_ICR_FER 0x00400000 /* Fatal Error */ 5779c80d176SSepherosa Ziehau 57862583d18SSepherosa Ziehau #define E1000_ICR_THS 0x00800000 /* ICR.THS: Thermal Sensor Event*/ 57962583d18SSepherosa Ziehau #define E1000_ICR_MDDET 0x10000000 /* Malicious Driver Detect */ 58062583d18SSepherosa Ziehau 5819c80d176SSepherosa Ziehau 58262583d18SSepherosa Ziehau /* Extended Interrupt Cause Read */ 58362583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE0 0x00000001 /* Rx Queue 0 Interrupt */ 58462583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE1 0x00000002 /* Rx Queue 1 Interrupt */ 58562583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE2 0x00000004 /* Rx Queue 2 Interrupt */ 58662583d18SSepherosa Ziehau #define E1000_EICR_RX_QUEUE3 0x00000008 /* Rx Queue 3 Interrupt */ 58762583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE0 0x00000100 /* Tx Queue 0 Interrupt */ 58862583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE1 0x00000200 /* Tx Queue 1 Interrupt */ 58962583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE2 0x00000400 /* Tx Queue 2 Interrupt */ 59062583d18SSepherosa Ziehau #define E1000_EICR_TX_QUEUE3 0x00000800 /* Tx Queue 3 Interrupt */ 59162583d18SSepherosa Ziehau #define E1000_EICR_TCP_TIMER 0x40000000 /* TCP Timer */ 59262583d18SSepherosa Ziehau #define E1000_EICR_OTHER 0x80000000 /* Interrupt Cause Active */ 59362583d18SSepherosa Ziehau /* TCP Timer */ 59462583d18SSepherosa Ziehau #define E1000_TCPTIMER_KS 0x00000100 /* KickStart */ 59562583d18SSepherosa Ziehau #define E1000_TCPTIMER_COUNT_ENABLE 0x00000200 /* Count Enable */ 59662583d18SSepherosa Ziehau #define E1000_TCPTIMER_COUNT_FINISH 0x00000400 /* Count finish */ 59762583d18SSepherosa Ziehau #define E1000_TCPTIMER_LOOP 0x00000800 /* Loop */ 59862583d18SSepherosa Ziehau 59965aebe9fSSepherosa Ziehau #define E1000_ITR_MASK 0x000FFFFF /* ITR value bitfield */ 60065aebe9fSSepherosa Ziehau #define E1000_ITR_MULT 256 /* ITR mulitplier in nsec */ 6019c80d176SSepherosa Ziehau 60265aebe9fSSepherosa Ziehau /* PBA ECC Register */ 60365aebe9fSSepherosa Ziehau #define E1000_PBA_ECC_COUNTER_MASK 0xFFF00000 /* ECC counter mask */ 60465aebe9fSSepherosa Ziehau #define E1000_PBA_ECC_COUNTER_SHIFT 20 /* ECC counter shift value */ 60565aebe9fSSepherosa Ziehau #define E1000_PBA_ECC_CORR_EN 0x00000001 /* Enable ECC error correction */ 60665aebe9fSSepherosa Ziehau #define E1000_PBA_ECC_STAT_CLR 0x00000002 /* Clear ECC error counter */ 60765aebe9fSSepherosa Ziehau #define E1000_PBA_ECC_INT_EN 0x00000004 /* Enable ICR bit 5 on ECC error */ 60865aebe9fSSepherosa Ziehau 60965aebe9fSSepherosa Ziehau /* This defines the bits that are set in the Interrupt Mask 6109c80d176SSepherosa Ziehau * Set/Read Register. Each bit is documented below: 6119c80d176SSepherosa Ziehau * o RXT0 = Receiver Timer Interrupt (ring 0) 6129c80d176SSepherosa Ziehau * o TXDW = Transmit Descriptor Written Back 6139c80d176SSepherosa Ziehau * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) 6149c80d176SSepherosa Ziehau * o RXSEQ = Receive Sequence Error 6159c80d176SSepherosa Ziehau * o LSC = Link Status Change 6169c80d176SSepherosa Ziehau */ 6179c80d176SSepherosa Ziehau #define IMS_ENABLE_MASK ( \ 6189c80d176SSepherosa Ziehau E1000_IMS_RXT0 | \ 6199c80d176SSepherosa Ziehau E1000_IMS_TXDW | \ 6209c80d176SSepherosa Ziehau E1000_IMS_RXDMT0 | \ 6219c80d176SSepherosa Ziehau E1000_IMS_RXSEQ | \ 6229c80d176SSepherosa Ziehau E1000_IMS_LSC) 6239c80d176SSepherosa Ziehau 6249c80d176SSepherosa Ziehau /* Interrupt Mask Set */ 6256a5a645eSSepherosa Ziehau #define E1000_IMS_TXDW E1000_ICR_TXDW /* Tx desc written back */ 6269c80d176SSepherosa Ziehau #define E1000_IMS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ 6279c80d176SSepherosa Ziehau #define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */ 6289c80d176SSepherosa Ziehau #define E1000_IMS_VMMB E1000_ICR_VMMB /* Mail box activity */ 6296d5e2922SSepherosa Ziehau #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */ 6306d5e2922SSepherosa Ziehau #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */ 6316d5e2922SSepherosa Ziehau #define E1000_IMS_RXO E1000_ICR_RXO /* Rx overrun */ 6326d5e2922SSepherosa Ziehau #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */ 6339c80d176SSepherosa Ziehau #define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW 634379ebbe7SSepherosa Ziehau #define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */ 6354be59a01SSepherosa Ziehau #define E1000_IMS_RXQ0 E1000_ICR_RXQ0 /* Rx Queue 0 Interrupt */ 6364be59a01SSepherosa Ziehau #define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */ 6374be59a01SSepherosa Ziehau #define E1000_IMS_TXQ0 E1000_ICR_TXQ0 /* Tx Queue 0 Interrupt */ 6384be59a01SSepherosa Ziehau #define E1000_IMS_TXQ1 E1000_ICR_TXQ1 /* Tx Queue 1 Interrupt */ 6394be59a01SSepherosa Ziehau #define E1000_IMS_OTHER E1000_ICR_OTHER /* Other Interrupts */ 64065aebe9fSSepherosa Ziehau #define E1000_IMS_TS E1000_ICR_TS /* Time Sync Interrupt */ 64165aebe9fSSepherosa Ziehau #define E1000_IMS_DRSTA E1000_ICR_DRSTA /* Device Reset Asserted */ 64265aebe9fSSepherosa Ziehau #define E1000_IMS_DOUTSYNC E1000_ICR_DOUTSYNC /* NIC DMA out of sync */ 6436a5a645eSSepherosa Ziehau #define E1000_IMS_FER E1000_ICR_FER /* Fatal Error */ 6449c80d176SSepherosa Ziehau 64562583d18SSepherosa Ziehau #define E1000_IMS_THS E1000_ICR_THS /* ICR.TS: Thermal Sensor Event*/ 64662583d18SSepherosa Ziehau #define E1000_IMS_MDDET E1000_ICR_MDDET /* Malicious Driver Detect */ 64762583d18SSepherosa Ziehau /* Extended Interrupt Mask Set */ 64862583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE0 E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 64962583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE1 E1000_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 65062583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE2 E1000_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 65162583d18SSepherosa Ziehau #define E1000_EIMS_RX_QUEUE3 E1000_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 65262583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE0 E1000_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 65362583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE1 E1000_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 65462583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE2 E1000_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 65562583d18SSepherosa Ziehau #define E1000_EIMS_TX_QUEUE3 E1000_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 65662583d18SSepherosa Ziehau #define E1000_EIMS_TCP_TIMER E1000_EICR_TCP_TIMER /* TCP Timer */ 65762583d18SSepherosa Ziehau #define E1000_EIMS_OTHER E1000_EICR_OTHER /* Interrupt Cause Active */ 65862583d18SSepherosa Ziehau 6599c80d176SSepherosa Ziehau /* Interrupt Cause Set */ 6609c80d176SSepherosa Ziehau #define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ 6616d5e2922SSepherosa Ziehau #define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */ 6626d5e2922SSepherosa Ziehau #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */ 6639c80d176SSepherosa Ziehau 66462583d18SSepherosa Ziehau /* Extended Interrupt Cause Set */ 66562583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE0 E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 66662583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE1 E1000_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 66762583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE2 E1000_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 66862583d18SSepherosa Ziehau #define E1000_EICS_RX_QUEUE3 E1000_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 66962583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE0 E1000_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 67062583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE1 E1000_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 67162583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE2 E1000_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 67262583d18SSepherosa Ziehau #define E1000_EICS_TX_QUEUE3 E1000_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 67362583d18SSepherosa Ziehau #define E1000_EICS_TCP_TIMER E1000_EICR_TCP_TIMER /* TCP Timer */ 67462583d18SSepherosa Ziehau #define E1000_EICS_OTHER E1000_EICR_OTHER /* Interrupt Cause Active */ 67562583d18SSepherosa Ziehau 67662583d18SSepherosa Ziehau #define E1000_EITR_ITR_INT_MASK 0x0000FFFF 67762583d18SSepherosa Ziehau /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ 67862583d18SSepherosa Ziehau #define E1000_EITR_CNT_IGNR 0x80000000 /* Don't reset counters on write */ 679ba0123e0SSepherosa Ziehau #define E1000_EITR_INTERVAL 0x00007FFC 68062583d18SSepherosa Ziehau 6819c80d176SSepherosa Ziehau /* Transmit Descriptor Control */ 6829c80d176SSepherosa Ziehau #define E1000_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */ 6839c80d176SSepherosa Ziehau #define E1000_TXDCTL_HTHRESH 0x00003F00 /* TXDCTL Host Threshold */ 6849c80d176SSepherosa Ziehau #define E1000_TXDCTL_WTHRESH 0x003F0000 /* TXDCTL Writeback Threshold */ 6859c80d176SSepherosa Ziehau #define E1000_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */ 6869c80d176SSepherosa Ziehau #define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */ 6879c80d176SSepherosa Ziehau #define E1000_TXDCTL_MAX_TX_DESC_PREFETCH 0x0100001F /* GRAN=1, PTHRESH=31 */ 6889c80d176SSepherosa Ziehau /* Enable the counting of descriptors still to be processed. */ 6899c80d176SSepherosa Ziehau #define E1000_TXDCTL_COUNT_DESC 0x00400000 6909c80d176SSepherosa Ziehau 6919c80d176SSepherosa Ziehau /* Flow Control Constants */ 6929c80d176SSepherosa Ziehau #define FLOW_CONTROL_ADDRESS_LOW 0x00C28001 6939c80d176SSepherosa Ziehau #define FLOW_CONTROL_ADDRESS_HIGH 0x00000100 6949c80d176SSepherosa Ziehau #define FLOW_CONTROL_TYPE 0x8808 6959c80d176SSepherosa Ziehau 6969c80d176SSepherosa Ziehau /* 802.1q VLAN Packet Size */ 6979c80d176SSepherosa Ziehau #define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMA'd) */ 6989c80d176SSepherosa Ziehau #define E1000_VLAN_FILTER_TBL_SIZE 128 /* VLAN Filter Table (4096 bits) */ 6999c80d176SSepherosa Ziehau 700379ebbe7SSepherosa Ziehau /* Receive Address 7019c80d176SSepherosa Ziehau * Number of high/low register pairs in the RAR. The RAR (Receive Address 7029c80d176SSepherosa Ziehau * Registers) holds the directed and multicast addresses that we monitor. 7039c80d176SSepherosa Ziehau * Technically, we have 16 spots. However, we reserve one of these spots 7049c80d176SSepherosa Ziehau * (RAR[15]) for our directed address used by controllers with 7059c80d176SSepherosa Ziehau * manageability enabled, allowing us room for 15 multicast addresses. 7069c80d176SSepherosa Ziehau */ 7079c80d176SSepherosa Ziehau #define E1000_RAR_ENTRIES 15 7089c80d176SSepherosa Ziehau #define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */ 7096a5a645eSSepherosa Ziehau #define E1000_RAL_MAC_ADDR_LEN 4 7106a5a645eSSepherosa Ziehau #define E1000_RAH_MAC_ADDR_LEN 2 71162583d18SSepherosa Ziehau #define E1000_RAH_QUEUE_MASK_82575 0x000C0000 7126a5a645eSSepherosa Ziehau #define E1000_RAH_POOL_1 0x00040000 7139c80d176SSepherosa Ziehau 7149c80d176SSepherosa Ziehau /* Error Codes */ 7159c80d176SSepherosa Ziehau #define E1000_SUCCESS 0 7169c80d176SSepherosa Ziehau #define E1000_ERR_NVM 1 7179c80d176SSepherosa Ziehau #define E1000_ERR_PHY 2 7189c80d176SSepherosa Ziehau #define E1000_ERR_CONFIG 3 7199c80d176SSepherosa Ziehau #define E1000_ERR_PARAM 4 7209c80d176SSepherosa Ziehau #define E1000_ERR_MAC_INIT 5 7219c80d176SSepherosa Ziehau #define E1000_ERR_PHY_TYPE 6 7229c80d176SSepherosa Ziehau #define E1000_ERR_RESET 9 7239c80d176SSepherosa Ziehau #define E1000_ERR_MASTER_REQUESTS_PENDING 10 7249c80d176SSepherosa Ziehau #define E1000_ERR_HOST_INTERFACE_COMMAND 11 7259c80d176SSepherosa Ziehau #define E1000_BLK_PHY_RESET 12 7269c80d176SSepherosa Ziehau #define E1000_ERR_SWFW_SYNC 13 7279c80d176SSepherosa Ziehau #define E1000_NOT_IMPLEMENTED 14 7286a5a645eSSepherosa Ziehau #define E1000_ERR_MBX 15 7296a5a645eSSepherosa Ziehau #define E1000_ERR_INVALID_ARGUMENT 16 7306a5a645eSSepherosa Ziehau #define E1000_ERR_NO_SPACE 17 7316a5a645eSSepherosa Ziehau #define E1000_ERR_NVM_PBA_SECTION 18 7324be59a01SSepherosa Ziehau #define E1000_ERR_I2C 19 7334be59a01SSepherosa Ziehau #define E1000_ERR_INVM_VALUE_NOT_FOUND 20 7349c80d176SSepherosa Ziehau 7359c80d176SSepherosa Ziehau /* Loop limit on how long we wait for auto-negotiation to complete */ 7369c80d176SSepherosa Ziehau #define FIBER_LINK_UP_LIMIT 50 7379c80d176SSepherosa Ziehau #define COPPER_LINK_UP_LIMIT 10 7389c80d176SSepherosa Ziehau #define PHY_AUTO_NEG_LIMIT 45 7399c80d176SSepherosa Ziehau #define PHY_FORCE_LIMIT 20 7409c80d176SSepherosa Ziehau /* Number of 100 microseconds we wait for PCI Express master disable */ 7419c80d176SSepherosa Ziehau #define MASTER_DISABLE_TIMEOUT 800 7429c80d176SSepherosa Ziehau /* Number of milliseconds we wait for PHY configuration done after MAC reset */ 7439c80d176SSepherosa Ziehau #define PHY_CFG_TIMEOUT 100 7449c80d176SSepherosa Ziehau /* Number of 2 milliseconds we wait for acquiring MDIO ownership. */ 7459c80d176SSepherosa Ziehau #define MDIO_OWNERSHIP_TIMEOUT 10 7469c80d176SSepherosa Ziehau /* Number of milliseconds for NVM auto read done after MAC reset. */ 7479c80d176SSepherosa Ziehau #define AUTO_READ_DONE_TIMEOUT 10 7489c80d176SSepherosa Ziehau 7499c80d176SSepherosa Ziehau /* Flow Control */ 7509c80d176SSepherosa Ziehau #define E1000_FCRTH_RTH 0x0000FFF8 /* Mask Bits[15:3] for RTH */ 7519c80d176SSepherosa Ziehau #define E1000_FCRTL_RTL 0x0000FFF8 /* Mask Bits[15:3] for RTL */ 7529c80d176SSepherosa Ziehau #define E1000_FCRTL_XONE 0x80000000 /* Enable XON frame transmission */ 7539c80d176SSepherosa Ziehau 7549c80d176SSepherosa Ziehau /* Transmit Configuration Word */ 7559c80d176SSepherosa Ziehau #define E1000_TXCW_FD 0x00000020 /* TXCW full duplex */ 7569c80d176SSepherosa Ziehau #define E1000_TXCW_PAUSE 0x00000080 /* TXCW sym pause request */ 7579c80d176SSepherosa Ziehau #define E1000_TXCW_ASM_DIR 0x00000100 /* TXCW astm pause direction */ 7589c80d176SSepherosa Ziehau #define E1000_TXCW_PAUSE_MASK 0x00000180 /* TXCW pause request mask */ 7599c80d176SSepherosa Ziehau #define E1000_TXCW_ANE 0x80000000 /* Auto-neg enable */ 7609c80d176SSepherosa Ziehau 7619c80d176SSepherosa Ziehau /* Receive Configuration Word */ 7629c80d176SSepherosa Ziehau #define E1000_RXCW_CW 0x0000ffff /* RxConfigWord mask */ 7639c80d176SSepherosa Ziehau #define E1000_RXCW_IV 0x08000000 /* Receive config invalid */ 7649c80d176SSepherosa Ziehau #define E1000_RXCW_C 0x20000000 /* Receive config */ 7659c80d176SSepherosa Ziehau #define E1000_RXCW_SYNCH 0x40000000 /* Receive config synch */ 7669c80d176SSepherosa Ziehau 7676d5e2922SSepherosa Ziehau #define E1000_TSYNCTXCTL_VALID 0x00000001 /* Tx timestamp valid */ 7686d5e2922SSepherosa Ziehau #define E1000_TSYNCTXCTL_ENABLED 0x00000010 /* enable Tx timestamping */ 7696a5a645eSSepherosa Ziehau 77074dc3754SSepherosa Ziehau /* HH Time Sync */ 77174dc3754SSepherosa Ziehau #define E1000_TSYNCTXCTL_MAX_ALLOWED_DLY_MASK 0x0000F000 /* max delay */ 77274dc3754SSepherosa Ziehau #define E1000_TSYNCTXCTL_SYNC_COMP_ERR 0x20000000 /* sync err */ 77374dc3754SSepherosa Ziehau #define E1000_TSYNCTXCTL_SYNC_COMP 0x40000000 /* sync complete */ 77474dc3754SSepherosa Ziehau #define E1000_TSYNCTXCTL_START_SYNC 0x80000000 /* initiate sync */ 77574dc3754SSepherosa Ziehau 7766d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_VALID 0x00000001 /* Rx timestamp valid */ 7776d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_MASK 0x0000000E /* Rx type mask */ 7786a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L2_V2 0x00 7796a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L4_V1 0x02 7806a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_L2_L4_V2 0x04 7816a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_ALL 0x08 7826a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCTL_TYPE_EVENT_V2 0x0A 7836d5e2922SSepherosa Ziehau #define E1000_TSYNCRXCTL_ENABLED 0x00000010 /* enable Rx timestamping */ 7844be59a01SSepherosa Ziehau #define E1000_TSYNCRXCTL_SYSCFI 0x00000020 /* Sys clock frequency */ 7856a5a645eSSepherosa Ziehau 78665aebe9fSSepherosa Ziehau #define E1000_RXMTRL_PTP_V1_SYNC_MESSAGE 0x00000000 78765aebe9fSSepherosa Ziehau #define E1000_RXMTRL_PTP_V1_DELAY_REQ_MESSAGE 0x00010000 78865aebe9fSSepherosa Ziehau 78965aebe9fSSepherosa Ziehau #define E1000_RXMTRL_PTP_V2_SYNC_MESSAGE 0x00000000 79065aebe9fSSepherosa Ziehau #define E1000_RXMTRL_PTP_V2_DELAY_REQ_MESSAGE 0x01000000 79165aebe9fSSepherosa Ziehau 7926a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_CTRLT_MASK 0x000000FF 7936a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE 0x00 7946a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE 0x01 7956a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE 0x02 7966a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE 0x03 7976a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE 0x04 7986a5a645eSSepherosa Ziehau 7996a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_MSGID_MASK 0x00000F00 8006a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE 0x0000 8016a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE 0x0100 8026a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE 0x0200 8036a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE 0x0300 8046a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE 0x0800 8056a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE 0x0900 8066a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE 0x0A00 8076a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE 0x0B00 8086a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE 0x0C00 8096a5a645eSSepherosa Ziehau #define E1000_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE 0x0D00 8106a5a645eSSepherosa Ziehau 8116a5a645eSSepherosa Ziehau #define E1000_TIMINCA_16NS_SHIFT 24 8124be59a01SSepherosa Ziehau #define E1000_TIMINCA_INCPERIOD_SHIFT 24 8134be59a01SSepherosa Ziehau #define E1000_TIMINCA_INCVALUE_MASK 0x00FFFFFF 8144be59a01SSepherosa Ziehau 8154be59a01SSepherosa Ziehau #define E1000_TSICR_TXTS 0x00000002 8164be59a01SSepherosa Ziehau #define E1000_TSIM_TXTS 0x00000002 8176a5a645eSSepherosa Ziehau /* TUPLE Filtering Configuration */ 8186a5a645eSSepherosa Ziehau #define E1000_TTQF_DISABLE_MASK 0xF0008000 /* TTQF Disable Mask */ 8196a5a645eSSepherosa Ziehau #define E1000_TTQF_QUEUE_ENABLE 0x100 /* TTQF Queue Enable Bit */ 8206a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_MASK 0xFF /* TTQF Protocol Mask */ 8216a5a645eSSepherosa Ziehau /* TTQF TCP Bit, shift with E1000_TTQF_PROTOCOL SHIFT */ 8226a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_TCP 0x0 8236a5a645eSSepherosa Ziehau /* TTQF UDP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */ 8246a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_UDP 0x1 8256a5a645eSSepherosa Ziehau /* TTQF SCTP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */ 8266a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_SCTP 0x2 8276a5a645eSSepherosa Ziehau #define E1000_TTQF_PROTOCOL_SHIFT 5 /* TTQF Protocol Shift */ 8286a5a645eSSepherosa Ziehau #define E1000_TTQF_QUEUE_SHIFT 16 /* TTQF Queue Shfit */ 8296a5a645eSSepherosa Ziehau #define E1000_TTQF_RX_QUEUE_MASK 0x70000 /* TTQF Queue Mask */ 8306a5a645eSSepherosa Ziehau #define E1000_TTQF_MASK_ENABLE 0x10000000 /* TTQF Mask Enable Bit */ 8316a5a645eSSepherosa Ziehau #define E1000_IMIR_CLEAR_MASK 0xF001FFFF /* IMIR Reg Clear Mask */ 8326a5a645eSSepherosa Ziehau #define E1000_IMIR_PORT_BYPASS 0x20000 /* IMIR Port Bypass Bit */ 8336a5a645eSSepherosa Ziehau #define E1000_IMIR_PRIORITY_SHIFT 29 /* IMIR Priority Shift */ 8346a5a645eSSepherosa Ziehau #define E1000_IMIREXT_CLEAR_MASK 0x7FFFF /* IMIREXT Reg Clear Mask */ 8356a5a645eSSepherosa Ziehau 8366a5a645eSSepherosa Ziehau #define E1000_MDICNFG_EXT_MDIO 0x80000000 /* MDI ext/int destination */ 8376a5a645eSSepherosa Ziehau #define E1000_MDICNFG_COM_MDIO 0x40000000 /* MDI shared w/ lan 0 */ 8386a5a645eSSepherosa Ziehau #define E1000_MDICNFG_PHY_MASK 0x03E00000 8396a5a645eSSepherosa Ziehau #define E1000_MDICNFG_PHY_SHIFT 21 840ba0123e0SSepherosa Ziehau 841379ebbe7SSepherosa Ziehau #define E1000_MEDIA_PORT_COPPER 1 842379ebbe7SSepherosa Ziehau #define E1000_MEDIA_PORT_OTHER 2 843ba0123e0SSepherosa Ziehau #define E1000_M88E1112_AUTO_COPPER_SGMII 0x2 844ba0123e0SSepherosa Ziehau #define E1000_M88E1112_AUTO_COPPER_BASEX 0x3 845379ebbe7SSepherosa Ziehau #define E1000_M88E1112_STATUS_LINK 0x0004 /* Interface Link Bit */ 846ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1 0x10 847ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1_MODE_MASK 0x0380 /* Mode Select */ 848ba0123e0SSepherosa Ziehau #define E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT 7 849379ebbe7SSepherosa Ziehau #define E1000_M88E1112_PAGE_ADDR 0x16 850379ebbe7SSepherosa Ziehau #define E1000_M88E1112_STATUS 0x01 8516a5a645eSSepherosa Ziehau 85262583d18SSepherosa Ziehau #define E1000_THSTAT_LOW_EVENT 0x20000000 /* Low thermal threshold */ 85362583d18SSepherosa Ziehau #define E1000_THSTAT_MID_EVENT 0x00200000 /* Mid thermal threshold */ 85462583d18SSepherosa Ziehau #define E1000_THSTAT_HIGH_EVENT 0x00002000 /* High thermal threshold */ 85562583d18SSepherosa Ziehau #define E1000_THSTAT_PWR_DOWN 0x00000001 /* Power Down Event */ 8564be59a01SSepherosa Ziehau #define E1000_THSTAT_LINK_THROTTLE 0x00000002 /* Link Spd Throttle Event */ 85762583d18SSepherosa Ziehau 8584be59a01SSepherosa Ziehau /* I350 EEE defines */ 8594be59a01SSepherosa Ziehau #define E1000_IPCNFG_EEE_1G_AN 0x00000008 /* IPCNFG EEE Ena 1G AN */ 8604be59a01SSepherosa Ziehau #define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* IPCNFG EEE Ena 100M AN */ 86162583d18SSepherosa Ziehau #define E1000_EEER_TX_LPI_EN 0x00010000 /* EEER Tx LPI Enable */ 86262583d18SSepherosa Ziehau #define E1000_EEER_RX_LPI_EN 0x00020000 /* EEER Rx LPI Enable */ 8634be59a01SSepherosa Ziehau #define E1000_EEER_LPI_FC 0x00040000 /* EEER Ena on Flow Cntrl */ 86462583d18SSepherosa Ziehau /* EEE status */ 8654be59a01SSepherosa Ziehau #define E1000_EEER_EEE_NEG 0x20000000 /* EEE capability nego */ 86662583d18SSepherosa Ziehau #define E1000_EEER_RX_LPI_STATUS 0x40000000 /* Rx in LPI state */ 86762583d18SSepherosa Ziehau #define E1000_EEER_TX_LPI_STATUS 0x80000000 /* Tx in LPI state */ 868379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_ADDR_I350 0x040F /* EEE LP Advertisement */ 869ba0123e0SSepherosa Ziehau #define E1000_M88E1543_PAGE_ADDR 0x16 /* Page Offset Register */ 870ba0123e0SSepherosa Ziehau #define E1000_M88E1543_EEE_CTRL_1 0x0 871ba0123e0SSepherosa Ziehau #define E1000_M88E1543_EEE_CTRL_1_MS 0x0001 /* EEE Master/Slave */ 872a40fda39SSepherosa Ziehau #define E1000_M88E1543_FIBER_CTRL 0x0 /* Fiber Control Register */ 873379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_DEV_I354 7 874379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_ADDR_I354 60 875379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_100_SUPPORTED (1 << 1) /* 100BaseTx EEE Supported */ 876379ebbe7SSepherosa Ziehau #define E1000_EEE_ADV_1000_SUPPORTED (1 << 2) /* 1000BaseT EEE Supported */ 877379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_DEV_I354 3 878379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_ADDR_I354 1 879379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_RX_LPI_RCVD 0x0400 880379ebbe7SSepherosa Ziehau #define E1000_PCS_STATUS_TX_LPI_RCVD 0x0800 881ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_1 0x0010 882ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_2 0x0011 883ba0123e0SSepherosa Ziehau #define E1000_M88E1512_CFG_REG_3 0x0007 884ba0123e0SSepherosa Ziehau #define E1000_M88E1512_MODE 0x0014 8854be59a01SSepherosa Ziehau #define E1000_EEE_SU_LPI_CLK_STP 0x00800000 /* EEE LPI Clock Stop */ 886379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_DEV_I210 7 /* EEE LP Adv Device */ 887379ebbe7SSepherosa Ziehau #define E1000_EEE_LP_ADV_ADDR_I210 61 /* EEE LP Adv Register */ 888*01a55482SSepherosa Ziehau 889*01a55482SSepherosa Ziehau /* ETQF register bit definitions */ 890*01a55482SSepherosa Ziehau #define E1000_ETQF_1588 (1 << 30) 891*01a55482SSepherosa Ziehau #define E1000_FTQF_VF_BP 0x00008000 892*01a55482SSepherosa Ziehau #define E1000_FTQF_1588_TIME_STAMP 0x08000000 893*01a55482SSepherosa Ziehau #define E1000_FTQF_MASK 0xF0000000 894*01a55482SSepherosa Ziehau #define E1000_FTQF_MASK_PROTO_BP 0x10000000 895*01a55482SSepherosa Ziehau /* Immediate Interrupt Rx (A.K.A. Low Latency Interrupt) */ 896*01a55482SSepherosa Ziehau #define E1000_IMIREXT_CTRL_BP 0x00080000 /* Bypass check of ctrl bits */ 897*01a55482SSepherosa Ziehau #define E1000_IMIREXT_SIZE_BP 0x00001000 /* Packet size bypass */ 898*01a55482SSepherosa Ziehau 899*01a55482SSepherosa Ziehau 9009c80d176SSepherosa Ziehau /* PCI Express Control */ 9019c80d176SSepherosa Ziehau #define E1000_GCR_RXD_NO_SNOOP 0x00000001 9029c80d176SSepherosa Ziehau #define E1000_GCR_RXDSCW_NO_SNOOP 0x00000002 9039c80d176SSepherosa Ziehau #define E1000_GCR_RXDSCR_NO_SNOOP 0x00000004 9049c80d176SSepherosa Ziehau #define E1000_GCR_TXD_NO_SNOOP 0x00000008 9059c80d176SSepherosa Ziehau #define E1000_GCR_TXDSCW_NO_SNOOP 0x00000010 9069c80d176SSepherosa Ziehau #define E1000_GCR_TXDSCR_NO_SNOOP 0x00000020 9076a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_MASK 0x0000F000 9086a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_10ms 0x00001000 9096a5a645eSSepherosa Ziehau #define E1000_GCR_CMPL_TMOUT_RESEND 0x00010000 9106a5a645eSSepherosa Ziehau #define E1000_GCR_CAP_VER2 0x00040000 9119c80d176SSepherosa Ziehau 9129c80d176SSepherosa Ziehau #define PCIE_NO_SNOOP_ALL (E1000_GCR_RXD_NO_SNOOP | \ 9139c80d176SSepherosa Ziehau E1000_GCR_RXDSCW_NO_SNOOP | \ 9149c80d176SSepherosa Ziehau E1000_GCR_RXDSCR_NO_SNOOP | \ 9159c80d176SSepherosa Ziehau E1000_GCR_TXD_NO_SNOOP | \ 9169c80d176SSepherosa Ziehau E1000_GCR_TXDSCW_NO_SNOOP | \ 9179c80d176SSepherosa Ziehau E1000_GCR_TXDSCR_NO_SNOOP) 9189c80d176SSepherosa Ziehau 919379ebbe7SSepherosa Ziehau #define E1000_MMDAC_FUNC_DATA 0x4000 /* Data, no post increment */ 920379ebbe7SSepherosa Ziehau 9214be59a01SSepherosa Ziehau /* mPHY address control and data registers */ 9224be59a01SSepherosa Ziehau #define E1000_MPHY_ADDR_CTL 0x0024 /* Address Control Reg */ 9234be59a01SSepherosa Ziehau #define E1000_MPHY_ADDR_CTL_OFFSET_MASK 0xFFFF0000 9244be59a01SSepherosa Ziehau #define E1000_MPHY_DATA 0x0E10 /* Data Register */ 9254be59a01SSepherosa Ziehau 9264be59a01SSepherosa Ziehau /* AFE CSR Offset for PCS CLK */ 9274be59a01SSepherosa Ziehau #define E1000_MPHY_PCS_CLK_REG_OFFSET 0x0004 9284be59a01SSepherosa Ziehau /* Override for near end digital loopback. */ 9294be59a01SSepherosa Ziehau #define E1000_MPHY_PCS_CLK_REG_DIGINELBEN 0x10 9304be59a01SSepherosa Ziehau 9319c80d176SSepherosa Ziehau /* PHY Control Register */ 9329c80d176SSepherosa Ziehau #define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ 9339c80d176SSepherosa Ziehau #define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ 9349c80d176SSepherosa Ziehau #define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */ 9359c80d176SSepherosa Ziehau #define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */ 9369c80d176SSepherosa Ziehau #define MII_CR_ISOLATE 0x0400 /* Isolate PHY from MII */ 9379c80d176SSepherosa Ziehau #define MII_CR_POWER_DOWN 0x0800 /* Power down */ 9389c80d176SSepherosa Ziehau #define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */ 9399c80d176SSepherosa Ziehau #define MII_CR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */ 9409c80d176SSepherosa Ziehau #define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */ 9419c80d176SSepherosa Ziehau #define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */ 9429c80d176SSepherosa Ziehau #define MII_CR_SPEED_1000 0x0040 9439c80d176SSepherosa Ziehau #define MII_CR_SPEED_100 0x2000 9449c80d176SSepherosa Ziehau #define MII_CR_SPEED_10 0x0000 9459c80d176SSepherosa Ziehau 9469c80d176SSepherosa Ziehau /* PHY Status Register */ 9479c80d176SSepherosa Ziehau #define MII_SR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */ 9489c80d176SSepherosa Ziehau #define MII_SR_JABBER_DETECT 0x0002 /* Jabber Detected */ 9499c80d176SSepherosa Ziehau #define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */ 9509c80d176SSepherosa Ziehau #define MII_SR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */ 9519c80d176SSepherosa Ziehau #define MII_SR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */ 9529c80d176SSepherosa Ziehau #define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */ 9539c80d176SSepherosa Ziehau #define MII_SR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */ 9549c80d176SSepherosa Ziehau #define MII_SR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */ 9559c80d176SSepherosa Ziehau #define MII_SR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */ 9569c80d176SSepherosa Ziehau #define MII_SR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */ 9579c80d176SSepherosa Ziehau #define MII_SR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */ 9589c80d176SSepherosa Ziehau #define MII_SR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */ 9599c80d176SSepherosa Ziehau #define MII_SR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */ 9609c80d176SSepherosa Ziehau #define MII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */ 9619c80d176SSepherosa Ziehau #define MII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */ 9629c80d176SSepherosa Ziehau 9639c80d176SSepherosa Ziehau /* Autoneg Advertisement Register */ 9649c80d176SSepherosa Ziehau #define NWAY_AR_SELECTOR_FIELD 0x0001 /* indicates IEEE 802.3 CSMA/CD */ 9659c80d176SSepherosa Ziehau #define NWAY_AR_10T_HD_CAPS 0x0020 /* 10T Half Duplex Capable */ 9669c80d176SSepherosa Ziehau #define NWAY_AR_10T_FD_CAPS 0x0040 /* 10T Full Duplex Capable */ 9679c80d176SSepherosa Ziehau #define NWAY_AR_100TX_HD_CAPS 0x0080 /* 100TX Half Duplex Capable */ 9689c80d176SSepherosa Ziehau #define NWAY_AR_100TX_FD_CAPS 0x0100 /* 100TX Full Duplex Capable */ 9699c80d176SSepherosa Ziehau #define NWAY_AR_100T4_CAPS 0x0200 /* 100T4 Capable */ 9709c80d176SSepherosa Ziehau #define NWAY_AR_PAUSE 0x0400 /* Pause operation desired */ 9719c80d176SSepherosa Ziehau #define NWAY_AR_ASM_DIR 0x0800 /* Asymmetric Pause Direction bit */ 9729c80d176SSepherosa Ziehau #define NWAY_AR_REMOTE_FAULT 0x2000 /* Remote Fault detected */ 9739c80d176SSepherosa Ziehau #define NWAY_AR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 9749c80d176SSepherosa Ziehau 9759c80d176SSepherosa Ziehau /* Link Partner Ability Register (Base Page) */ 9769c80d176SSepherosa Ziehau #define NWAY_LPAR_SELECTOR_FIELD 0x0000 /* LP protocol selector field */ 9774be59a01SSepherosa Ziehau #define NWAY_LPAR_10T_HD_CAPS 0x0020 /* LP 10T Half Dplx Capable */ 9784be59a01SSepherosa Ziehau #define NWAY_LPAR_10T_FD_CAPS 0x0040 /* LP 10T Full Dplx Capable */ 9794be59a01SSepherosa Ziehau #define NWAY_LPAR_100TX_HD_CAPS 0x0080 /* LP 100TX Half Dplx Capable */ 9804be59a01SSepherosa Ziehau #define NWAY_LPAR_100TX_FD_CAPS 0x0100 /* LP 100TX Full Dplx Capable */ 9819c80d176SSepherosa Ziehau #define NWAY_LPAR_100T4_CAPS 0x0200 /* LP is 100T4 Capable */ 9829c80d176SSepherosa Ziehau #define NWAY_LPAR_PAUSE 0x0400 /* LP Pause operation desired */ 9834be59a01SSepherosa Ziehau #define NWAY_LPAR_ASM_DIR 0x0800 /* LP Asym Pause Direction bit */ 9844be59a01SSepherosa Ziehau #define NWAY_LPAR_REMOTE_FAULT 0x2000 /* LP detected Remote Fault */ 9854be59a01SSepherosa Ziehau #define NWAY_LPAR_ACKNOWLEDGE 0x4000 /* LP rx'd link code word */ 9869c80d176SSepherosa Ziehau #define NWAY_LPAR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 9879c80d176SSepherosa Ziehau 9889c80d176SSepherosa Ziehau /* Autoneg Expansion Register */ 9899c80d176SSepherosa Ziehau #define NWAY_ER_LP_NWAY_CAPS 0x0001 /* LP has Auto Neg Capability */ 9904be59a01SSepherosa Ziehau #define NWAY_ER_PAGE_RXD 0x0002 /* LP 10T Half Dplx Capable */ 9914be59a01SSepherosa Ziehau #define NWAY_ER_NEXT_PAGE_CAPS 0x0004 /* LP 10T Full Dplx Capable */ 9924be59a01SSepherosa Ziehau #define NWAY_ER_LP_NEXT_PAGE_CAPS 0x0008 /* LP 100TX Half Dplx Capable */ 9934be59a01SSepherosa Ziehau #define NWAY_ER_PAR_DETECT_FAULT 0x0010 /* LP 100TX Full Dplx Capable */ 9949c80d176SSepherosa Ziehau 9959c80d176SSepherosa Ziehau /* 1000BASE-T Control Register */ 9969c80d176SSepherosa Ziehau #define CR_1000T_ASYM_PAUSE 0x0080 /* Advertise asymmetric pause bit */ 9979c80d176SSepherosa Ziehau #define CR_1000T_HD_CAPS 0x0100 /* Advertise 1000T HD capability */ 9989c80d176SSepherosa Ziehau #define CR_1000T_FD_CAPS 0x0200 /* Advertise 1000T FD capability */ 9994be59a01SSepherosa Ziehau /* 1=Repeater/switch device port 0=DTE device */ 10004be59a01SSepherosa Ziehau #define CR_1000T_REPEATER_DTE 0x0400 10014be59a01SSepherosa Ziehau /* 1=Configure PHY as Master 0=Configure PHY as Slave */ 10024be59a01SSepherosa Ziehau #define CR_1000T_MS_VALUE 0x0800 10034be59a01SSepherosa Ziehau /* 1=Master/Slave manual config value 0=Automatic Master/Slave config */ 10044be59a01SSepherosa Ziehau #define CR_1000T_MS_ENABLE 0x1000 10059c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_NORMAL 0x0000 /* Normal Operation */ 10069c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_1 0x2000 /* Transmit Waveform test */ 10079c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_2 0x4000 /* Master Transmit Jitter test */ 10089c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_3 0x6000 /* Slave Transmit Jitter test */ 10099c80d176SSepherosa Ziehau #define CR_1000T_TEST_MODE_4 0x8000 /* Transmitter Distortion test */ 10109c80d176SSepherosa Ziehau 10119c80d176SSepherosa Ziehau /* 1000BASE-T Status Register */ 10124be59a01SSepherosa Ziehau #define SR_1000T_IDLE_ERROR_CNT 0x00FF /* Num idle err since last rd */ 10134be59a01SSepherosa Ziehau #define SR_1000T_ASYM_PAUSE_DIR 0x0100 /* LP asym pause direction bit */ 10149c80d176SSepherosa Ziehau #define SR_1000T_LP_HD_CAPS 0x0400 /* LP is 1000T HD capable */ 10159c80d176SSepherosa Ziehau #define SR_1000T_LP_FD_CAPS 0x0800 /* LP is 1000T FD capable */ 10169c80d176SSepherosa Ziehau #define SR_1000T_REMOTE_RX_STATUS 0x1000 /* Remote receiver OK */ 10179c80d176SSepherosa Ziehau #define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */ 10184be59a01SSepherosa Ziehau #define SR_1000T_MS_CONFIG_RES 0x4000 /* 1=Local Tx Master, 0=Slave */ 10199c80d176SSepherosa Ziehau #define SR_1000T_MS_CONFIG_FAULT 0x8000 /* Master/Slave config fault */ 10209c80d176SSepherosa Ziehau 10219c80d176SSepherosa Ziehau #define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT 5 10229c80d176SSepherosa Ziehau 10239c80d176SSepherosa Ziehau /* PHY 1000 MII Register/Bit Definitions */ 10249c80d176SSepherosa Ziehau /* PHY Registers defined by IEEE */ 10259c80d176SSepherosa Ziehau #define PHY_CONTROL 0x00 /* Control Register */ 10269c80d176SSepherosa Ziehau #define PHY_STATUS 0x01 /* Status Register */ 10279c80d176SSepherosa Ziehau #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ 10289c80d176SSepherosa Ziehau #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ 10299c80d176SSepherosa Ziehau #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ 10309c80d176SSepherosa Ziehau #define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */ 10319c80d176SSepherosa Ziehau #define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Reg */ 10329c80d176SSepherosa Ziehau #define PHY_NEXT_PAGE_TX 0x07 /* Next Page Tx */ 10339c80d176SSepherosa Ziehau #define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */ 10349c80d176SSepherosa Ziehau #define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */ 10359c80d176SSepherosa Ziehau #define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */ 10369c80d176SSepherosa Ziehau #define PHY_EXT_STATUS 0x0F /* Extended Status Reg */ 10379c80d176SSepherosa Ziehau 1038*01a55482SSepherosa Ziehau 10396a5a645eSSepherosa Ziehau #define PHY_CONTROL_LB 0x4000 /* PHY Loopback bit */ 10406a5a645eSSepherosa Ziehau 10419c80d176SSepherosa Ziehau /* NVM Control */ 10429c80d176SSepherosa Ziehau #define E1000_EECD_SK 0x00000001 /* NVM Clock */ 10439c80d176SSepherosa Ziehau #define E1000_EECD_CS 0x00000002 /* NVM Chip Select */ 10449c80d176SSepherosa Ziehau #define E1000_EECD_DI 0x00000004 /* NVM Data In */ 10459c80d176SSepherosa Ziehau #define E1000_EECD_DO 0x00000008 /* NVM Data Out */ 10469c80d176SSepherosa Ziehau #define E1000_EECD_REQ 0x00000040 /* NVM Access Request */ 10479c80d176SSepherosa Ziehau #define E1000_EECD_GNT 0x00000080 /* NVM Access Grant */ 10489c80d176SSepherosa Ziehau #define E1000_EECD_PRES 0x00000100 /* NVM Present */ 10499c80d176SSepherosa Ziehau #define E1000_EECD_SIZE 0x00000200 /* NVM Size (0=64 word 1=256 word) */ 10506d5e2922SSepherosa Ziehau #define E1000_EECD_BLOCKED 0x00008000 /* Bit banging access blocked flag */ 10516d5e2922SSepherosa Ziehau #define E1000_EECD_ABORT 0x00010000 /* NVM operation aborted flag */ 10526d5e2922SSepherosa Ziehau #define E1000_EECD_TIMEOUT 0x00020000 /* NVM read operation timeout flag */ 10536d5e2922SSepherosa Ziehau #define E1000_EECD_ERROR_CLR 0x00040000 /* NVM error status clear bit */ 10549c80d176SSepherosa Ziehau /* NVM Addressing bits based on type 0=small, 1=large */ 10559c80d176SSepherosa Ziehau #define E1000_EECD_ADDR_BITS 0x00000400 10569c80d176SSepherosa Ziehau #define E1000_EECD_TYPE 0x00002000 /* NVM Type (1-SPI, 0-Microwire) */ 10579c80d176SSepherosa Ziehau #define E1000_NVM_GRANT_ATTEMPTS 1000 /* NVM # attempts to gain grant */ 10589c80d176SSepherosa Ziehau #define E1000_EECD_AUTO_RD 0x00000200 /* NVM Auto Read done */ 10599c80d176SSepherosa Ziehau #define E1000_EECD_SIZE_EX_MASK 0x00007800 /* NVM Size */ 10609c80d176SSepherosa Ziehau #define E1000_EECD_SIZE_EX_SHIFT 11 10619c80d176SSepherosa Ziehau #define E1000_EECD_FLUPD 0x00080000 /* Update FLASH */ 10624be59a01SSepherosa Ziehau #define E1000_EECD_AUPDEN 0x00100000 /* Ena Auto FLASH update */ 10639c80d176SSepherosa Ziehau #define E1000_EECD_SEC1VAL 0x00400000 /* Sector One Valid */ 10646a5a645eSSepherosa Ziehau #define E1000_EECD_SEC1VAL_VALID_MASK (E1000_EECD_AUTO_RD | E1000_EECD_PRES) 10654be59a01SSepherosa Ziehau #define E1000_EECD_FLUPD_I210 0x00800000 /* Update FLASH */ 10664be59a01SSepherosa Ziehau #define E1000_EECD_FLUDONE_I210 0x04000000 /* Update FLASH done */ 10674be59a01SSepherosa Ziehau #define E1000_EECD_FLASH_DETECTED_I210 0x00080000 /* FLASH detected */ 1068379ebbe7SSepherosa Ziehau #define E1000_EECD_SEC1VAL_I210 0x02000000 /* Sector One Valid */ 10694be59a01SSepherosa Ziehau #define E1000_FLUDONE_ATTEMPTS 20000 10704be59a01SSepherosa Ziehau #define E1000_EERD_EEWR_MAX_COUNT 512 /* buffered EEPROM words rw */ 10714be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_RX 0x00 10724be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_TX_QAV(_i) (0x02 + (_i)) 10734be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_TX_LEGACY E1000_I210_FIFO_SEL_TX_QAV(0) 10744be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_BMC2OS_TX 0x06 10754be59a01SSepherosa Ziehau #define E1000_I210_FIFO_SEL_BMC2OS_RX 0x01 10769c80d176SSepherosa Ziehau 1077379ebbe7SSepherosa Ziehau #define E1000_I210_FLASH_SECTOR_SIZE 0x1000 /* 4KB FLASH sector unit size */ 1078379ebbe7SSepherosa Ziehau /* Secure FLASH mode requires removing MSb */ 1079379ebbe7SSepherosa Ziehau #define E1000_I210_FW_PTR_MASK 0x7FFF 1080379ebbe7SSepherosa Ziehau /* Firmware code revision field word offset*/ 1081379ebbe7SSepherosa Ziehau #define E1000_I210_FW_VER_OFFSET 328 1082379ebbe7SSepherosa Ziehau 10839c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_DATA 16 /* Offset to data in NVM read/write regs */ 10849c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_DONE 2 /* Offset to READ/WRITE done bit */ 10859c80d176SSepherosa Ziehau #define E1000_NVM_RW_REG_START 1 /* Start operation */ 10869c80d176SSepherosa Ziehau #define E1000_NVM_RW_ADDR_SHIFT 2 /* Shift to the address bits */ 10879c80d176SSepherosa Ziehau #define E1000_NVM_POLL_WRITE 1 /* Flag for polling for write complete */ 10889c80d176SSepherosa Ziehau #define E1000_NVM_POLL_READ 0 /* Flag for polling for read complete */ 10899c80d176SSepherosa Ziehau #define E1000_FLASH_UPDATES 2000 10909c80d176SSepherosa Ziehau 10919c80d176SSepherosa Ziehau /* NVM Word Offsets */ 10929c80d176SSepherosa Ziehau #define NVM_COMPAT 0x0003 10939c80d176SSepherosa Ziehau #define NVM_ID_LED_SETTINGS 0x0004 10949c80d176SSepherosa Ziehau #define NVM_SERDES_AMPLITUDE 0x0006 /* SERDES output amplitude */ 10959c80d176SSepherosa Ziehau #define NVM_PHY_CLASS_WORD 0x0007 109665aebe9fSSepherosa Ziehau #define NVM_VERSION 0x0005 1097379ebbe7SSepherosa Ziehau #define E1000_I210_NVM_FW_MODULE_PTR 0x0010 1098379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_MODULE_PTR 0x0051 1099379ebbe7SSepherosa Ziehau #define NVM_FUTURE_INIT_WORD1 0x0019 11004be59a01SSepherosa Ziehau #define NVM_ETRACK_WORD 0x0042 1101379ebbe7SSepherosa Ziehau #define NVM_ETRACK_HIWORD 0x0043 11024be59a01SSepherosa Ziehau #define NVM_COMB_VER_OFF 0x0083 11034be59a01SSepherosa Ziehau #define NVM_COMB_VER_PTR 0x003d 11044be59a01SSepherosa Ziehau 11054be59a01SSepherosa Ziehau /* NVM version defines */ 11064be59a01SSepherosa Ziehau #define NVM_MAJOR_MASK 0xF000 1107379ebbe7SSepherosa Ziehau #define NVM_MINOR_MASK 0x0FF0 1108379ebbe7SSepherosa Ziehau #define NVM_IMAGE_ID_MASK 0x000F 11094be59a01SSepherosa Ziehau #define NVM_COMB_VER_MASK 0x00FF 11104be59a01SSepherosa Ziehau #define NVM_MAJOR_SHIFT 12 1111379ebbe7SSepherosa Ziehau #define NVM_MINOR_SHIFT 4 11124be59a01SSepherosa Ziehau #define NVM_COMB_VER_SHFT 8 11134be59a01SSepherosa Ziehau #define NVM_VER_INVALID 0xFFFF 11144be59a01SSepherosa Ziehau #define NVM_ETRACK_SHIFT 16 1115379ebbe7SSepherosa Ziehau #define NVM_ETRACK_VALID 0x8000 1116379ebbe7SSepherosa Ziehau #define NVM_NEW_DEC_MASK 0x0F00 1117379ebbe7SSepherosa Ziehau #define NVM_HEX_CONV 16 1118379ebbe7SSepherosa Ziehau #define NVM_HEX_TENS 10 1119379ebbe7SSepherosa Ziehau 1120379ebbe7SSepherosa Ziehau /* FW version defines */ 1121379ebbe7SSepherosa Ziehau /* Offset of "Loader patch ptr" in Firmware Header */ 1122379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_LOADER_PATCH_PTR_OFFSET 0x01 1123379ebbe7SSepherosa Ziehau /* Patch generation hour & minutes */ 1124379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD1_OFFSET 0x04 1125379ebbe7SSepherosa Ziehau /* Patch generation month & day */ 1126379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD2_OFFSET 0x05 1127379ebbe7SSepherosa Ziehau /* Patch generation year */ 1128379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD3_OFFSET 0x06 1129379ebbe7SSepherosa Ziehau /* Patch major & minor numbers */ 1130379ebbe7SSepherosa Ziehau #define E1000_I350_NVM_FW_VER_WORD4_OFFSET 0x07 11314be59a01SSepherosa Ziehau 11324be59a01SSepherosa Ziehau #define NVM_MAC_ADDR 0x0000 11334be59a01SSepherosa Ziehau #define NVM_SUB_DEV_ID 0x000B 11344be59a01SSepherosa Ziehau #define NVM_SUB_VEN_ID 0x000C 11354be59a01SSepherosa Ziehau #define NVM_DEV_ID 0x000D 11364be59a01SSepherosa Ziehau #define NVM_VEN_ID 0x000E 11374be59a01SSepherosa Ziehau #define NVM_INIT_CTRL_2 0x000F 11384be59a01SSepherosa Ziehau #define NVM_INIT_CTRL_4 0x0013 11394be59a01SSepherosa Ziehau #define NVM_LED_1_CFG 0x001C 11404be59a01SSepherosa Ziehau #define NVM_LED_0_2_CFG 0x001F 11414be59a01SSepherosa Ziehau 1142379ebbe7SSepherosa Ziehau #define NVM_COMPAT_VALID_CSUM 0x0001 1143379ebbe7SSepherosa Ziehau #define NVM_FUTURE_INIT_WORD1_VALID_CSUM 0x0040 1144379ebbe7SSepherosa Ziehau 11459c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL2_REG 0x000F 11469c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL3_PORT_B 0x0014 11479c80d176SSepherosa Ziehau #define NVM_INIT_3GIO_3 0x001A 11489c80d176SSepherosa Ziehau #define NVM_SWDEF_PINS_CTRL_PORT_0 0x0020 11499c80d176SSepherosa Ziehau #define NVM_INIT_CONTROL3_PORT_A 0x0024 11509c80d176SSepherosa Ziehau #define NVM_CFG 0x0012 11519c80d176SSepherosa Ziehau #define NVM_ALT_MAC_ADDR_PTR 0x0037 11529c80d176SSepherosa Ziehau #define NVM_CHECKSUM_REG 0x003F 11536d5e2922SSepherosa Ziehau #define NVM_COMPATIBILITY_REG_3 0x0003 11546d5e2922SSepherosa Ziehau #define NVM_COMPATIBILITY_BIT_MASK 0x8000 11559c80d176SSepherosa Ziehau 11566a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ 11576a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ 11586a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_2 0x100000 /* ...for third port */ 11596a5a645eSSepherosa Ziehau #define E1000_NVM_CFG_DONE_PORT_3 0x200000 /* ...for fourth port */ 11606a5a645eSSepherosa Ziehau 11614be59a01SSepherosa Ziehau #define NVM_82580_LAN_FUNC_OFFSET(a) ((a) ? (0x40 + (0x40 * (a))) : 0) 11626a5a645eSSepherosa Ziehau 11636a5a645eSSepherosa Ziehau /* Mask bits for fields in Word 0x24 of the NVM */ 11646a5a645eSSepherosa Ziehau #define NVM_WORD24_COM_MDIO 0x0008 /* MDIO interface shared */ 11654be59a01SSepherosa Ziehau #define NVM_WORD24_EXT_MDIO 0x0004 /* MDIO accesses routed extrnl */ 11664be59a01SSepherosa Ziehau /* Offset of Link Mode bits for 82575/82576 */ 11674be59a01SSepherosa Ziehau #define NVM_WORD24_LNK_MODE_OFFSET 8 11684be59a01SSepherosa Ziehau /* Offset of Link Mode bits for 82580 up */ 11694be59a01SSepherosa Ziehau #define NVM_WORD24_82580_LNK_MODE_OFFSET 4 11704be59a01SSepherosa Ziehau 11719c80d176SSepherosa Ziehau 11729c80d176SSepherosa Ziehau /* Mask bits for fields in Word 0x0f of the NVM */ 11739c80d176SSepherosa Ziehau #define NVM_WORD0F_PAUSE_MASK 0x3000 11749c80d176SSepherosa Ziehau #define NVM_WORD0F_PAUSE 0x1000 11759c80d176SSepherosa Ziehau #define NVM_WORD0F_ASM_DIR 0x2000 11769c80d176SSepherosa Ziehau #define NVM_WORD0F_SWPDIO_EXT_MASK 0x00F0 11779c80d176SSepherosa Ziehau 11789c80d176SSepherosa Ziehau /* Mask bits for fields in Word 0x1a of the NVM */ 11799c80d176SSepherosa Ziehau #define NVM_WORD1A_ASPM_MASK 0x000C 11809c80d176SSepherosa Ziehau 11816a5a645eSSepherosa Ziehau /* Mask bits for fields in Word 0x03 of the EEPROM */ 11826a5a645eSSepherosa Ziehau #define NVM_COMPAT_LOM 0x0800 11836a5a645eSSepherosa Ziehau 11846a5a645eSSepherosa Ziehau /* length of string needed to store PBA number */ 11856a5a645eSSepherosa Ziehau #define E1000_PBANUM_LENGTH 11 11866a5a645eSSepherosa Ziehau 11879c80d176SSepherosa Ziehau /* For checksumming, the sum of all words in the NVM should equal 0xBABA. */ 11889c80d176SSepherosa Ziehau #define NVM_SUM 0xBABA 11899c80d176SSepherosa Ziehau 1190379ebbe7SSepherosa Ziehau /* PBA (printed board assembly) number words */ 11919c80d176SSepherosa Ziehau #define NVM_PBA_OFFSET_0 8 11929c80d176SSepherosa Ziehau #define NVM_PBA_OFFSET_1 9 11936a5a645eSSepherosa Ziehau #define NVM_PBA_PTR_GUARD 0xFAFA 11949c80d176SSepherosa Ziehau #define NVM_RESERVED_WORD 0xFFFF 11959c80d176SSepherosa Ziehau #define NVM_PHY_CLASS_A 0x8000 11969c80d176SSepherosa Ziehau #define NVM_SERDES_AMPLITUDE_MASK 0x000F 11979c80d176SSepherosa Ziehau #define NVM_SIZE_MASK 0x1C00 11989c80d176SSepherosa Ziehau #define NVM_SIZE_SHIFT 10 11999c80d176SSepherosa Ziehau #define NVM_WORD_SIZE_BASE_SHIFT 6 12009c80d176SSepherosa Ziehau #define NVM_SWDPIO_EXT_SHIFT 4 12019c80d176SSepherosa Ziehau 12029c80d176SSepherosa Ziehau /* NVM Commands - Microwire */ 12039c80d176SSepherosa Ziehau #define NVM_READ_OPCODE_MICROWIRE 0x6 /* NVM read opcode */ 12049c80d176SSepherosa Ziehau #define NVM_WRITE_OPCODE_MICROWIRE 0x5 /* NVM write opcode */ 12059c80d176SSepherosa Ziehau #define NVM_ERASE_OPCODE_MICROWIRE 0x7 /* NVM erase opcode */ 12069c80d176SSepherosa Ziehau #define NVM_EWEN_OPCODE_MICROWIRE 0x13 /* NVM erase/write enable */ 12079c80d176SSepherosa Ziehau #define NVM_EWDS_OPCODE_MICROWIRE 0x10 /* NVM erase/write disable */ 12089c80d176SSepherosa Ziehau 12099c80d176SSepherosa Ziehau /* NVM Commands - SPI */ 12109c80d176SSepherosa Ziehau #define NVM_MAX_RETRY_SPI 5000 /* Max wait of 5ms, for RDY signal */ 12119c80d176SSepherosa Ziehau #define NVM_READ_OPCODE_SPI 0x03 /* NVM read opcode */ 12129c80d176SSepherosa Ziehau #define NVM_WRITE_OPCODE_SPI 0x02 /* NVM write opcode */ 12139c80d176SSepherosa Ziehau #define NVM_A8_OPCODE_SPI 0x08 /* opcode bit-3 = address bit-8 */ 12149c80d176SSepherosa Ziehau #define NVM_WREN_OPCODE_SPI 0x06 /* NVM set Write Enable latch */ 12159c80d176SSepherosa Ziehau #define NVM_RDSR_OPCODE_SPI 0x05 /* NVM read Status register */ 12169c80d176SSepherosa Ziehau 12179c80d176SSepherosa Ziehau /* SPI NVM Status Register */ 12189c80d176SSepherosa Ziehau #define NVM_STATUS_RDY_SPI 0x01 12199c80d176SSepherosa Ziehau 12209c80d176SSepherosa Ziehau /* Word definitions for ID LED Settings */ 12219c80d176SSepherosa Ziehau #define ID_LED_RESERVED_0000 0x0000 12229c80d176SSepherosa Ziehau #define ID_LED_RESERVED_FFFF 0xFFFF 12239c80d176SSepherosa Ziehau #define ID_LED_DEFAULT ((ID_LED_OFF1_ON2 << 12) | \ 12249c80d176SSepherosa Ziehau (ID_LED_OFF1_OFF2 << 8) | \ 12259c80d176SSepherosa Ziehau (ID_LED_DEF1_DEF2 << 4) | \ 12269c80d176SSepherosa Ziehau (ID_LED_DEF1_DEF2)) 12279c80d176SSepherosa Ziehau #define ID_LED_DEF1_DEF2 0x1 12289c80d176SSepherosa Ziehau #define ID_LED_DEF1_ON2 0x2 12299c80d176SSepherosa Ziehau #define ID_LED_DEF1_OFF2 0x3 12309c80d176SSepherosa Ziehau #define ID_LED_ON1_DEF2 0x4 12319c80d176SSepherosa Ziehau #define ID_LED_ON1_ON2 0x5 12329c80d176SSepherosa Ziehau #define ID_LED_ON1_OFF2 0x6 12339c80d176SSepherosa Ziehau #define ID_LED_OFF1_DEF2 0x7 12349c80d176SSepherosa Ziehau #define ID_LED_OFF1_ON2 0x8 12359c80d176SSepherosa Ziehau #define ID_LED_OFF1_OFF2 0x9 12369c80d176SSepherosa Ziehau 12379c80d176SSepherosa Ziehau #define IGP_ACTIVITY_LED_MASK 0xFFFFF0FF 12389c80d176SSepherosa Ziehau #define IGP_ACTIVITY_LED_ENABLE 0x0300 12399c80d176SSepherosa Ziehau #define IGP_LED3_MODE 0x07000000 12409c80d176SSepherosa Ziehau 12419c80d176SSepherosa Ziehau /* PCI/PCI-X/PCI-EX Config space */ 12429c80d176SSepherosa Ziehau #define PCIX_COMMAND_REGISTER 0xE6 12439c80d176SSepherosa Ziehau #define PCIX_STATUS_REGISTER_LO 0xE8 12449c80d176SSepherosa Ziehau #define PCIX_STATUS_REGISTER_HI 0xEA 12459c80d176SSepherosa Ziehau #define PCI_HEADER_TYPE_REGISTER 0x0E 12469c80d176SSepherosa Ziehau #define PCIE_LINK_STATUS 0x12 12476a5a645eSSepherosa Ziehau #define PCIE_DEVICE_CONTROL2 0x28 12489c80d176SSepherosa Ziehau 12499c80d176SSepherosa Ziehau #define PCIX_COMMAND_MMRBC_MASK 0x000C 12509c80d176SSepherosa Ziehau #define PCIX_COMMAND_MMRBC_SHIFT 0x2 12519c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_MASK 0x0060 12529c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_SHIFT 0x5 12539c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_4K 0x3 12549c80d176SSepherosa Ziehau #define PCIX_STATUS_HI_MMRBC_2K 0x2 12559c80d176SSepherosa Ziehau #define PCIX_STATUS_LO_FUNC_MASK 0x7 12569c80d176SSepherosa Ziehau #define PCI_HEADER_TYPE_MULTIFUNC 0x80 12579c80d176SSepherosa Ziehau #define PCIE_LINK_WIDTH_MASK 0x3F0 12589c80d176SSepherosa Ziehau #define PCIE_LINK_WIDTH_SHIFT 4 12596a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_MASK 0x0F 12606a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_2500 0x01 12616a5a645eSSepherosa Ziehau #define PCIE_LINK_SPEED_5000 0x02 12626a5a645eSSepherosa Ziehau #define PCIE_DEVICE_CONTROL2_16ms 0x0005 12639c80d176SSepherosa Ziehau 12649c80d176SSepherosa Ziehau #ifndef ETH_ADDR_LEN 12659c80d176SSepherosa Ziehau #define ETH_ADDR_LEN 6 12669c80d176SSepherosa Ziehau #endif 12679c80d176SSepherosa Ziehau 12689c80d176SSepherosa Ziehau #define PHY_REVISION_MASK 0xFFFFFFF0 12699c80d176SSepherosa Ziehau #define MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */ 12709c80d176SSepherosa Ziehau #define MAX_PHY_MULTI_PAGE_REG 0xF 12719c80d176SSepherosa Ziehau 1272379ebbe7SSepherosa Ziehau /* Bit definitions for valid PHY IDs. 12739c80d176SSepherosa Ziehau * I = Integrated 12749c80d176SSepherosa Ziehau * E = External 12759c80d176SSepherosa Ziehau */ 12769c80d176SSepherosa Ziehau #define M88E1000_E_PHY_ID 0x01410C50 12779c80d176SSepherosa Ziehau #define M88E1000_I_PHY_ID 0x01410C30 12789c80d176SSepherosa Ziehau #define M88E1011_I_PHY_ID 0x01410C20 12799c80d176SSepherosa Ziehau #define IGP01E1000_I_PHY_ID 0x02A80380 12809c80d176SSepherosa Ziehau #define M88E1111_I_PHY_ID 0x01410CC0 1281ba0123e0SSepherosa Ziehau #define M88E1543_E_PHY_ID 0x01410EA0 1282ba0123e0SSepherosa Ziehau #define M88E1512_E_PHY_ID 0x01410DD0 128362583d18SSepherosa Ziehau #define M88E1112_E_PHY_ID 0x01410C90 128462583d18SSepherosa Ziehau #define I347AT4_E_PHY_ID 0x01410DC0 128562583d18SSepherosa Ziehau #define M88E1340M_E_PHY_ID 0x01410DF0 12869c80d176SSepherosa Ziehau #define GG82563_E_PHY_ID 0x01410CA0 12879c80d176SSepherosa Ziehau #define IGP03E1000_E_PHY_ID 0x02A80390 12889c80d176SSepherosa Ziehau #define IFE_E_PHY_ID 0x02A80330 12899c80d176SSepherosa Ziehau #define IFE_PLUS_E_PHY_ID 0x02A80320 12909c80d176SSepherosa Ziehau #define IFE_C_E_PHY_ID 0x02A80310 12919c80d176SSepherosa Ziehau #define BME1000_E_PHY_ID 0x01410CB0 12929c80d176SSepherosa Ziehau #define BME1000_E_PHY_ID_R2 0x01410CB1 12936a5a645eSSepherosa Ziehau #define I82577_E_PHY_ID 0x01540050 12946a5a645eSSepherosa Ziehau #define I82578_E_PHY_ID 0x004DD040 12956a5a645eSSepherosa Ziehau #define I82579_E_PHY_ID 0x01540090 1296379ebbe7SSepherosa Ziehau #define I217_E_PHY_ID 0x015400A0 12976a5a645eSSepherosa Ziehau #define I82580_I_PHY_ID 0x015403A0 129862583d18SSepherosa Ziehau #define I350_I_PHY_ID 0x015403B0 12994be59a01SSepherosa Ziehau #define I210_I_PHY_ID 0x01410C00 130062583d18SSepherosa Ziehau #define IGP04E1000_E_PHY_ID 0x02A80391 13019c80d176SSepherosa Ziehau #define M88_VENDOR 0x0141 13029c80d176SSepherosa Ziehau 13039c80d176SSepherosa Ziehau /* M88E1000 Specific Registers */ 13044be59a01SSepherosa Ziehau #define M88E1000_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Reg */ 13054be59a01SSepherosa Ziehau #define M88E1000_PHY_SPEC_STATUS 0x11 /* PHY Specific Status Reg */ 13064be59a01SSepherosa Ziehau #define M88E1000_EXT_PHY_SPEC_CTRL 0x14 /* Extended PHY Specific Cntrl */ 13079c80d176SSepherosa Ziehau #define M88E1000_RX_ERR_CNTR 0x15 /* Receive Error Counter */ 13089c80d176SSepherosa Ziehau 13099c80d176SSepherosa Ziehau #define M88E1000_PHY_EXT_CTRL 0x1A /* PHY extend control register */ 13104be59a01SSepherosa Ziehau #define M88E1000_PHY_PAGE_SELECT 0x1D /* Reg 29 for pg number setting */ 13114be59a01SSepherosa Ziehau #define M88E1000_PHY_GEN_CONTROL 0x1E /* meaning depends on reg 29 */ 13129c80d176SSepherosa Ziehau #define M88E1000_PHY_VCO_REG_BIT8 0x100 /* Bits 8 & 11 are adjusted for */ 13139c80d176SSepherosa Ziehau #define M88E1000_PHY_VCO_REG_BIT11 0x800 /* improved BER performance */ 13149c80d176SSepherosa Ziehau 13159c80d176SSepherosa Ziehau /* M88E1000 PHY Specific Control Register */ 13166a5a645eSSepherosa Ziehau #define M88E1000_PSCR_POLARITY_REVERSAL 0x0002 /* 1=Polarity Reverse enabled */ 13174be59a01SSepherosa Ziehau /* MDI Crossover Mode bits 6:5 Manual MDI configuration */ 13184be59a01SSepherosa Ziehau #define M88E1000_PSCR_MDI_MANUAL_MODE 0x0000 13199c80d176SSepherosa Ziehau #define M88E1000_PSCR_MDIX_MANUAL_MODE 0x0020 /* Manual MDIX configuration */ 13209c80d176SSepherosa Ziehau /* 1000BASE-T: Auto crossover, 100BASE-TX/10BASE-T: MDI Mode */ 13219c80d176SSepherosa Ziehau #define M88E1000_PSCR_AUTO_X_1000T 0x0040 13229c80d176SSepherosa Ziehau /* Auto crossover enabled all speeds */ 13239c80d176SSepherosa Ziehau #define M88E1000_PSCR_AUTO_X_MODE 0x0060 13246a5a645eSSepherosa Ziehau #define M88E1000_PSCR_ASSERT_CRS_ON_TX 0x0800 /* 1=Assert CRS on Tx */ 13259c80d176SSepherosa Ziehau 13269c80d176SSepherosa Ziehau /* M88E1000 PHY Specific Status Register */ 13279c80d176SSepherosa Ziehau #define M88E1000_PSSR_REV_POLARITY 0x0002 /* 1=Polarity reversed */ 13289c80d176SSepherosa Ziehau #define M88E1000_PSSR_DOWNSHIFT 0x0020 /* 1=Downshifted */ 13299c80d176SSepherosa Ziehau #define M88E1000_PSSR_MDIX 0x0040 /* 1=MDIX; 0=MDI */ 1330379ebbe7SSepherosa Ziehau /* 0 = <50M 13319c80d176SSepherosa Ziehau * 1 = 50-80M 13329c80d176SSepherosa Ziehau * 2 = 80-110M 13339c80d176SSepherosa Ziehau * 3 = 110-140M 13349c80d176SSepherosa Ziehau * 4 = >140M 13359c80d176SSepherosa Ziehau */ 13369c80d176SSepherosa Ziehau #define M88E1000_PSSR_CABLE_LENGTH 0x0380 13379c80d176SSepherosa Ziehau #define M88E1000_PSSR_LINK 0x0400 /* 1=Link up, 0=Link down */ 13389c80d176SSepherosa Ziehau #define M88E1000_PSSR_SPD_DPLX_RESOLVED 0x0800 /* 1=Speed & Duplex resolved */ 13399c80d176SSepherosa Ziehau #define M88E1000_PSSR_DPLX 0x2000 /* 1=Duplex 0=Half Duplex */ 13409c80d176SSepherosa Ziehau #define M88E1000_PSSR_SPEED 0xC000 /* Speed, bits 14:15 */ 13419c80d176SSepherosa Ziehau #define M88E1000_PSSR_100MBS 0x4000 /* 01=100Mbs */ 13429c80d176SSepherosa Ziehau #define M88E1000_PSSR_1000MBS 0x8000 /* 10=1000Mbs */ 13439c80d176SSepherosa Ziehau 13449c80d176SSepherosa Ziehau #define M88E1000_PSSR_CABLE_LENGTH_SHIFT 7 13459c80d176SSepherosa Ziehau 1346379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 13479c80d176SSepherosa Ziehau * are the master 13489c80d176SSepherosa Ziehau */ 13499c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK 0x0C00 13509c80d176SSepherosa Ziehau #define M88E1000_EPSCR_MASTER_DOWNSHIFT_1X 0x0000 1351379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 13529c80d176SSepherosa Ziehau * are the slave 13539c80d176SSepherosa Ziehau */ 13549c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK 0x0300 13559c80d176SSepherosa Ziehau #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X 0x0100 13569c80d176SSepherosa Ziehau #define M88E1000_EPSCR_TX_CLK_25 0x0070 /* 25 MHz TX_CLK */ 13579c80d176SSepherosa Ziehau 135862583d18SSepherosa Ziehau /* Intel I347AT4 Registers */ 135962583d18SSepherosa Ziehau #define I347AT4_PCDL 0x10 /* PHY Cable Diagnostics Length */ 136062583d18SSepherosa Ziehau #define I347AT4_PCDC 0x15 /* PHY Cable Diagnostics Control */ 136162583d18SSepherosa Ziehau #define I347AT4_PAGE_SELECT 0x16 136262583d18SSepherosa Ziehau 136362583d18SSepherosa Ziehau /* I347AT4 Extended PHY Specific Control Register */ 136462583d18SSepherosa Ziehau 1365379ebbe7SSepherosa Ziehau /* Number of times we will attempt to autonegotiate before downshifting if we 136662583d18SSepherosa Ziehau * are the master 136762583d18SSepherosa Ziehau */ 136862583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_ENABLE 0x0800 136962583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_MASK 0x7000 137062583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_1X 0x0000 137162583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_2X 0x1000 137262583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_3X 0x2000 137362583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_4X 0x3000 137462583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_5X 0x4000 137562583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_6X 0x5000 137662583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_7X 0x6000 137762583d18SSepherosa Ziehau #define I347AT4_PSCR_DOWNSHIFT_8X 0x7000 137862583d18SSepherosa Ziehau 137962583d18SSepherosa Ziehau /* I347AT4 PHY Cable Diagnostics Control */ 138062583d18SSepherosa Ziehau #define I347AT4_PCDC_CABLE_LENGTH_UNIT 0x0400 /* 0=cm 1=meters */ 138162583d18SSepherosa Ziehau 138262583d18SSepherosa Ziehau /* M88E1112 only registers */ 138362583d18SSepherosa Ziehau #define M88E1112_VCT_DSP_DISTANCE 0x001A 13846a5a645eSSepherosa Ziehau 13859c80d176SSepherosa Ziehau /* M88EC018 Rev 2 specific DownShift settings */ 13869c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK 0x0E00 13879c80d176SSepherosa Ziehau #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X 0x0800 13889c80d176SSepherosa Ziehau 13896a5a645eSSepherosa Ziehau #define I82578_EPSCR_DOWNSHIFT_ENABLE 0x0020 13906a5a645eSSepherosa Ziehau #define I82578_EPSCR_DOWNSHIFT_COUNTER_MASK 0x001C 13916a5a645eSSepherosa Ziehau 13929c80d176SSepherosa Ziehau /* BME1000 PHY Specific Control Register */ 13939c80d176SSepherosa Ziehau #define BME1000_PSCR_ENABLE_DOWNSHIFT 0x0800 /* 1 = enable downshift */ 13949c80d176SSepherosa Ziehau 1395379ebbe7SSepherosa Ziehau /* Bits... 13969c80d176SSepherosa Ziehau * 15-5: page 13979c80d176SSepherosa Ziehau * 4-0: register offset 13989c80d176SSepherosa Ziehau */ 13999c80d176SSepherosa Ziehau #define GG82563_PAGE_SHIFT 5 14009c80d176SSepherosa Ziehau #define GG82563_REG(page, reg) \ 14019c80d176SSepherosa Ziehau (((page) << GG82563_PAGE_SHIFT) | ((reg) & MAX_PHY_REG_ADDRESS)) 14029c80d176SSepherosa Ziehau #define GG82563_MIN_ALT_REG 30 14039c80d176SSepherosa Ziehau 14049c80d176SSepherosa Ziehau /* GG82563 Specific Registers */ 14054be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_CTRL GG82563_REG(0, 16) /* PHY Spec Cntrl */ 14064be59a01SSepherosa Ziehau #define GG82563_PHY_PAGE_SELECT GG82563_REG(0, 22) /* Page Select */ 14074be59a01SSepherosa Ziehau #define GG82563_PHY_SPEC_CTRL_2 GG82563_REG(0, 26) /* PHY Spec Cntrl2 */ 14084be59a01SSepherosa Ziehau #define GG82563_PHY_PAGE_SELECT_ALT GG82563_REG(0, 29) /* Alt Page Select */ 14099c80d176SSepherosa Ziehau 14104be59a01SSepherosa Ziehau /* MAC Specific Control Register */ 14114be59a01SSepherosa Ziehau #define GG82563_PHY_MAC_SPEC_CTRL GG82563_REG(2, 21) 14129c80d176SSepherosa Ziehau 14134be59a01SSepherosa Ziehau #define GG82563_PHY_DSP_DISTANCE GG82563_REG(5, 26) /* DSP Distance */ 14149c80d176SSepherosa Ziehau 14159c80d176SSepherosa Ziehau /* Page 193 - Port Control Registers */ 14164be59a01SSepherosa Ziehau /* Kumeran Mode Control */ 14174be59a01SSepherosa Ziehau #define GG82563_PHY_KMRN_MODE_CTRL GG82563_REG(193, 16) 14184be59a01SSepherosa Ziehau #define GG82563_PHY_PWR_MGMT_CTRL GG82563_REG(193, 20) /* Pwr Mgt Ctrl */ 14199c80d176SSepherosa Ziehau 14209c80d176SSepherosa Ziehau /* Page 194 - KMRN Registers */ 14214be59a01SSepherosa Ziehau #define GG82563_PHY_INBAND_CTRL GG82563_REG(194, 18) /* Inband Ctrl */ 14229c80d176SSepherosa Ziehau 14239c80d176SSepherosa Ziehau /* MDI Control */ 14249c80d176SSepherosa Ziehau #define E1000_MDIC_REG_MASK 0x001F0000 14259c80d176SSepherosa Ziehau #define E1000_MDIC_REG_SHIFT 16 14269c80d176SSepherosa Ziehau #define E1000_MDIC_PHY_MASK 0x03E00000 14279c80d176SSepherosa Ziehau #define E1000_MDIC_PHY_SHIFT 21 14289c80d176SSepherosa Ziehau #define E1000_MDIC_OP_WRITE 0x04000000 14299c80d176SSepherosa Ziehau #define E1000_MDIC_OP_READ 0x08000000 14309c80d176SSepherosa Ziehau #define E1000_MDIC_READY 0x10000000 14319c80d176SSepherosa Ziehau #define E1000_MDIC_ERROR 0x40000000 14326a5a645eSSepherosa Ziehau #define E1000_MDIC_DEST 0x80000000 14339c80d176SSepherosa Ziehau 14349c80d176SSepherosa Ziehau /* SerDes Control */ 14359c80d176SSepherosa Ziehau #define E1000_GEN_CTL_READY 0x80000000 14369c80d176SSepherosa Ziehau #define E1000_GEN_CTL_ADDRESS_SHIFT 8 14379c80d176SSepherosa Ziehau #define E1000_GEN_POLL_TIMEOUT 640 14389c80d176SSepherosa Ziehau 143962583d18SSepherosa Ziehau /* LinkSec register fields */ 144062583d18SSepherosa Ziehau #define E1000_LSECTXCAP_SUM_MASK 0x00FF0000 144162583d18SSepherosa Ziehau #define E1000_LSECTXCAP_SUM_SHIFT 16 144262583d18SSepherosa Ziehau #define E1000_LSECRXCAP_SUM_MASK 0x00FF0000 144362583d18SSepherosa Ziehau #define E1000_LSECRXCAP_SUM_SHIFT 16 144462583d18SSepherosa Ziehau 144562583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_EN_MASK 0x00000003 144662583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_DISABLE 0x0 144762583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AUTH 0x1 144862583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AUTH_ENCRYPT 0x2 144962583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_AISCI 0x00000020 145062583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_PNTHRSH_MASK 0xFFFFFF00 145162583d18SSepherosa Ziehau #define E1000_LSECTXCTRL_RSV_MASK 0x000000D8 145262583d18SSepherosa Ziehau 145362583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_EN_MASK 0x0000000C 145462583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_EN_SHIFT 2 145562583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_DISABLE 0x0 145662583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_CHECK 0x1 145762583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_STRICT 0x2 145862583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_DROP 0x3 145962583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_PLSH 0x00000040 146062583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_RP 0x00000080 146162583d18SSepherosa Ziehau #define E1000_LSECRXCTRL_RSV_MASK 0xFFFFFF33 146262583d18SSepherosa Ziehau 146362583d18SSepherosa Ziehau /* Tx Rate-Scheduler Config fields */ 146462583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RS_ENA 0x80000000 146562583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_DEC_MASK 0x00003FFF 146662583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_INT_SHIFT 14 146762583d18SSepherosa Ziehau #define E1000_RTTBCNRC_RF_INT_MASK \ 146862583d18SSepherosa Ziehau (E1000_RTTBCNRC_RF_DEC_MASK << E1000_RTTBCNRC_RF_INT_SHIFT) 146962583d18SSepherosa Ziehau 14706a5a645eSSepherosa Ziehau /* DMA Coalescing register fields */ 14714be59a01SSepherosa Ziehau /* DMA Coalescing Watchdog Timer */ 14724be59a01SSepherosa Ziehau #define E1000_DMACR_DMACWT_MASK 0x00003FFF 14734be59a01SSepherosa Ziehau /* DMA Coalescing Rx Threshold */ 14744be59a01SSepherosa Ziehau #define E1000_DMACR_DMACTHR_MASK 0x00FF0000 14756a5a645eSSepherosa Ziehau #define E1000_DMACR_DMACTHR_SHIFT 16 14764be59a01SSepherosa Ziehau /* Lx when no PCIe transactions */ 14774be59a01SSepherosa Ziehau #define E1000_DMACR_DMAC_LX_MASK 0x30000000 14786a5a645eSSepherosa Ziehau #define E1000_DMACR_DMAC_LX_SHIFT 28 14796a5a645eSSepherosa Ziehau #define E1000_DMACR_DMAC_EN 0x80000000 /* Enable DMA Coalescing */ 14804be59a01SSepherosa Ziehau /* DMA Coalescing BMC-to-OS Watchdog Enable */ 14814be59a01SSepherosa Ziehau #define E1000_DMACR_DC_BMC2OSW_EN 0x00008000 14829c80d176SSepherosa Ziehau 14834be59a01SSepherosa Ziehau /* DMA Coalescing Transmit Threshold */ 14844be59a01SSepherosa Ziehau #define E1000_DMCTXTH_DMCTTHR_MASK 0x00000FFF 14856a5a645eSSepherosa Ziehau 14866a5a645eSSepherosa Ziehau #define E1000_DMCTLX_TTLX_MASK 0x00000FFF /* Time to LX request */ 14876a5a645eSSepherosa Ziehau 14884be59a01SSepherosa Ziehau /* Rx Traffic Rate Threshold */ 14894be59a01SSepherosa Ziehau #define E1000_DMCRTRH_UTRESH_MASK 0x0007FFFF 14904be59a01SSepherosa Ziehau /* Rx packet rate in current window */ 14914be59a01SSepherosa Ziehau #define E1000_DMCRTRH_LRPRCW 0x80000000 14926a5a645eSSepherosa Ziehau 14934be59a01SSepherosa Ziehau /* DMA Coal Rx Traffic Current Count */ 14944be59a01SSepherosa Ziehau #define E1000_DMCCNT_CCOUNT_MASK 0x01FFFFFF 14956a5a645eSSepherosa Ziehau 14964be59a01SSepherosa Ziehau /* Flow ctrl Rx Threshold High val */ 14974be59a01SSepherosa Ziehau #define E1000_FCRTC_RTH_COAL_MASK 0x0003FFF0 14986a5a645eSSepherosa Ziehau #define E1000_FCRTC_RTH_COAL_SHIFT 4 14994be59a01SSepherosa Ziehau /* Lx power decision based on DMA coal */ 15004be59a01SSepherosa Ziehau #define E1000_PCIEMISC_LX_DECISION 0x00000080 15014be59a01SSepherosa Ziehau 15024be59a01SSepherosa Ziehau #define E1000_RXPBS_CFG_TS_EN 0x80000000 /* Timestamp in Rx buffer */ 15034be59a01SSepherosa Ziehau #define E1000_RXPBS_SIZE_I210_MASK 0x0000003F /* Rx packet buffer size */ 15044be59a01SSepherosa Ziehau #define E1000_TXPB0S_SIZE_I210_MASK 0x0000003F /* Tx packet buffer 0 size */ 1505ba0123e0SSepherosa Ziehau #define I210_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */ 1506ba0123e0SSepherosa Ziehau #define I210_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */ 1507ba0123e0SSepherosa Ziehau 15086a5a645eSSepherosa Ziehau 1509379ebbe7SSepherosa Ziehau /* Proxy Filter Control */ 151062583d18SSepherosa Ziehau #define E1000_PROXYFC_D0 0x00000001 /* Enable offload in D0 */ 151162583d18SSepherosa Ziehau #define E1000_PROXYFC_EX 0x00000004 /* Directed exact proxy */ 15124be59a01SSepherosa Ziehau #define E1000_PROXYFC_MC 0x00000008 /* Directed MC Proxy */ 151362583d18SSepherosa Ziehau #define E1000_PROXYFC_BC 0x00000010 /* Broadcast Proxy Enable */ 15144be59a01SSepherosa Ziehau #define E1000_PROXYFC_ARP_DIRECTED 0x00000020 /* Directed ARP Proxy Ena */ 151562583d18SSepherosa Ziehau #define E1000_PROXYFC_IPV4 0x00000040 /* Directed IPv4 Enable */ 151662583d18SSepherosa Ziehau #define E1000_PROXYFC_IPV6 0x00000080 /* Directed IPv6 Enable */ 1517379ebbe7SSepherosa Ziehau #define E1000_PROXYFC_NS 0x00000200 /* IPv6 Neighbor Solicitation */ 15184be59a01SSepherosa Ziehau #define E1000_PROXYFC_ARP 0x00000800 /* ARP Request Proxy Ena */ 151962583d18SSepherosa Ziehau /* Proxy Status */ 152062583d18SSepherosa Ziehau #define E1000_PROXYS_CLEAR 0xFFFFFFFF /* Clear */ 152162583d18SSepherosa Ziehau 152262583d18SSepherosa Ziehau /* Firmware Status */ 15234be59a01SSepherosa Ziehau #define E1000_FWSTS_FWRI 0x80000000 /* FW Reset Indication */ 15244be59a01SSepherosa Ziehau /* VF Control */ 15254be59a01SSepherosa Ziehau #define E1000_VTCTRL_RST 0x04000000 /* Reset VF */ 152662583d18SSepherosa Ziehau 15274be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_ID_MASK 0x00000000C /* Mask for Lan ID field */ 15284be59a01SSepherosa Ziehau /* Lan ID bit field offset in status register */ 15294be59a01SSepherosa Ziehau #define E1000_STATUS_LAN_ID_OFFSET 2 15304be59a01SSepherosa Ziehau #define E1000_VFTA_ENTRIES 128 1531*01a55482SSepherosa Ziehau 1532*01a55482SSepherosa Ziehau 1533379ebbe7SSepherosa Ziehau #define E1000_UNUSEDARG 1534ba0123e0SSepherosa Ziehau #ifndef ERROR_REPORT 15354765c386SMichael Neumann #define ERROR_REPORT(fmt) do { } while (0) 1536ba0123e0SSepherosa Ziehau #endif /* ERROR_REPORT */ 15379c80d176SSepherosa Ziehau #endif /* _E1000_DEFINES_H_ */ 1538