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