xref: /dflybsd-src/sys/dev/netif/ig_hal/e1000_defines.h (revision 01a55482b42bba8de64caeb8c9ede647a9208734)
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