xref: /netbsd-src/sys/dev/pci/if_wmreg.h (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /*	$NetBSD: if_wmreg.h,v 1.56 2014/04/11 04:42:34 msaitoh Exp $	*/
2 
3 /*
4  * Copyright (c) 2001 Wasabi Systems, Inc.
5  * All rights reserved.
6  *
7  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. All advertising materials mentioning features or use of this software
18  *    must display the following acknowledgement:
19  *	This product includes software developed for the NetBSD Project by
20  *	Wasabi Systems, Inc.
21  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22  *    or promote products derived from this software without specific prior
23  *    written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
29  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 /******************************************************************************
39 
40   Copyright (c) 2001-2012, Intel Corporation
41   All rights reserved.
42 
43   Redistribution and use in source and binary forms, with or without
44   modification, are permitted provided that the following conditions are met:
45 
46    1. Redistributions of source code must retain the above copyright notice,
47       this list of conditions and the following disclaimer.
48 
49    2. Redistributions in binary form must reproduce the above copyright
50       notice, this list of conditions and the following disclaimer in the
51       documentation and/or other materials provided with the distribution.
52 
53    3. Neither the name of the Intel Corporation nor the names of its
54       contributors may be used to endorse or promote products derived from
55       this software without specific prior written permission.
56 
57   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
58   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
59   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
60   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
61   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
62   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
63   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
64   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
65   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
66   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
67   POSSIBILITY OF SUCH DAMAGE.
68 
69 ******************************************************************************/
70 
71 /*
72  * Register description for the Intel i82542 (``Wiseman''),
73  * i82543 (``Livengood''), and i82544 (``Cordova'') Gigabit
74  * Ethernet chips.
75  */
76 
77 /*
78  * The wiseman supports 64-bit PCI addressing.  This structure
79  * describes the address in descriptors.
80  */
81 typedef struct wiseman_addr {
82 	uint32_t	wa_low;		/* low-order 32 bits */
83 	uint32_t	wa_high;	/* high-order 32 bits */
84 } __packed wiseman_addr_t;
85 
86 /*
87  * The Wiseman receive descriptor.
88  *
89  * The receive descriptor ring must be aligned to a 4K boundary,
90  * and there must be an even multiple of 8 descriptors in the ring.
91  */
92 typedef struct wiseman_rxdesc {
93 	volatile wiseman_addr_t	wrx_addr;	/* buffer address */
94 
95 	volatile uint16_t	wrx_len;	/* buffer length */
96 	volatile uint16_t	wrx_cksum;	/* checksum (starting at PCSS)*/
97 
98 	volatile uint8_t	wrx_status;	/* Rx status */
99 	volatile uint8_t	wrx_errors;	/* Rx errors */
100 	volatile uint16_t	wrx_special;	/* special field (VLAN, etc.) */
101 } __packed wiseman_rxdesc_t;
102 
103 /* wrx_status bits */
104 #define	WRX_ST_DD	(1U << 0)	/* descriptor done */
105 #define	WRX_ST_EOP	(1U << 1)	/* end of packet */
106 #define	WRX_ST_IXSM	(1U << 2)	/* ignore checksum indication */
107 #define	WRX_ST_VP	(1U << 3)	/* VLAN packet */
108 #define	WRX_ST_BPDU	(1U << 4)	/* ??? */
109 #define	WRX_ST_TCPCS	(1U << 5)	/* TCP checksum performed */
110 #define	WRX_ST_IPCS	(1U << 6)	/* IP checksum performed */
111 #define	WRX_ST_PIF	(1U << 7)	/* passed in-exact filter */
112 
113 /* wrx_error bits */
114 #define	WRX_ER_CE	(1U << 0)	/* CRC error */
115 #define	WRX_ER_SE	(1U << 1)	/* symbol error */
116 #define	WRX_ER_SEQ	(1U << 2)	/* sequence error */
117 #define	WRX_ER_ICE	(1U << 3)	/* ??? */
118 #define	WRX_ER_CXE	(1U << 4)	/* carrier extension error */
119 #define	WRX_ER_TCPE	(1U << 5)	/* TCP checksum error */
120 #define	WRX_ER_IPE	(1U << 6)	/* IP checksum error */
121 #define	WRX_ER_RXE	(1U << 7)	/* Rx data error */
122 
123 /* wrx_special field for VLAN packets */
124 #define	WRX_VLAN_ID(x)	((x) & 0x0fff)	/* VLAN identifier */
125 #define	WRX_VLAN_CFI	(1U << 12)	/* Canonical Form Indicator */
126 #define	WRX_VLAN_PRI(x)	(((x) >> 13) & 7)/* VLAN priority field */
127 
128 /*
129  * The Wiseman transmit descriptor.
130  *
131  * The transmit descriptor ring must be aligned to a 4K boundary,
132  * and there must be an even multiple of 8 descriptors in the ring.
133  */
134 typedef struct wiseman_tx_fields {
135 	uint8_t wtxu_status;		/* Tx status */
136 	uint8_t wtxu_options;		/* options */
137 	uint16_t wtxu_vlan;		/* VLAN info */
138 } __packed wiseman_txfields_t;
139 typedef struct wiseman_txdesc {
140 	wiseman_addr_t	wtx_addr;	/* buffer address */
141 	uint32_t	wtx_cmdlen;	/* command and length */
142 	wiseman_txfields_t wtx_fields;	/* fields; see below */
143 } __packed wiseman_txdesc_t;
144 
145 /* Commands for wtx_cmdlen */
146 #define	WTX_CMD_EOP	(1U << 24)	/* end of packet */
147 #define	WTX_CMD_IFCS	(1U << 25)	/* insert FCS */
148 #define	WTX_CMD_RS	(1U << 27)	/* report status */
149 #define	WTX_CMD_RPS	(1U << 28)	/* report packet sent */
150 #define	WTX_CMD_DEXT	(1U << 29)	/* descriptor extension */
151 #define	WTX_CMD_VLE	(1U << 30)	/* VLAN enable */
152 #define	WTX_CMD_IDE	(1U << 31)	/* interrupt delay enable */
153 
154 /* Descriptor types (if DEXT is set) */
155 #define	WTX_DTYP_C	(0U << 20)	/* context */
156 #define	WTX_DTYP_D	(1U << 20)	/* data */
157 
158 /* wtx_fields status bits */
159 #define	WTX_ST_DD	(1U << 0)	/* descriptor done */
160 #define	WTX_ST_EC	(1U << 1)	/* excessive collisions */
161 #define	WTX_ST_LC	(1U << 2)	/* late collision */
162 #define	WTX_ST_TU	(1U << 3)	/* transmit underrun */
163 
164 /* wtx_fields option bits for IP/TCP/UDP checksum offload */
165 #define	WTX_IXSM	(1U << 0)	/* IP checksum offload */
166 #define	WTX_TXSM	(1U << 1)	/* TCP/UDP checksum offload */
167 
168 /* Maximum payload per Tx descriptor */
169 #define	WTX_MAX_LEN	4096
170 
171 /*
172  * The Livengood TCP/IP context descriptor.
173  */
174 struct livengood_tcpip_ctxdesc {
175 	uint32_t	tcpip_ipcs;	/* IP checksum context */
176 	uint32_t	tcpip_tucs;	/* TCP/UDP checksum context */
177 	uint32_t	tcpip_cmdlen;
178 	uint32_t	tcpip_seg;	/* TCP segmentation context */
179 };
180 
181 /* commands for context descriptors */
182 #define	WTX_TCPIP_CMD_TCP	(1U << 24)	/* 1 = TCP, 0 = UDP */
183 #define	WTX_TCPIP_CMD_IP	(1U << 25)	/* 1 = IPv4, 0 = IPv6 */
184 #define	WTX_TCPIP_CMD_TSE	(1U << 26)	/* segmentation context valid */
185 
186 #define	WTX_TCPIP_IPCSS(x)	((x) << 0)	/* checksum start */
187 #define	WTX_TCPIP_IPCSO(x)	((x) << 8)	/* checksum value offset */
188 #define	WTX_TCPIP_IPCSE(x)	((x) << 16)	/* checksum end */
189 
190 #define	WTX_TCPIP_TUCSS(x)	((x) << 0)	/* checksum start */
191 #define	WTX_TCPIP_TUCSO(x)	((x) << 8)	/* checksum value offset */
192 #define	WTX_TCPIP_TUCSE(x)	((x) << 16)	/* checksum end */
193 
194 #define	WTX_TCPIP_SEG_STATUS(x)	((x) << 0)
195 #define	WTX_TCPIP_SEG_HDRLEN(x)	((x) << 8)
196 #define	WTX_TCPIP_SEG_MSS(x)	((x) << 16)
197 
198 /*
199  * PCI config registers used by the Wiseman.
200  */
201 #define	WM_PCI_MMBA	PCI_MAPREG_START
202 /* registers for FLASH access on ICH8 */
203 #define WM_ICH8_FLASH	0x0014
204 
205 /*
206  * Wiseman Control/Status Registers.
207  */
208 #define	WMREG_CTRL	0x0000	/* Device Control Register */
209 #define	CTRL_FD		(1U << 0)	/* full duplex */
210 #define	CTRL_BEM	(1U << 1)	/* big-endian mode */
211 #define	CTRL_PRIOR	(1U << 2)	/* 0 = receive, 1 = fair */
212 #define	CTRL_GIO_M_DIS	(1U << 2)	/* disabl PCI master access */
213 #define	CTRL_LRST	(1U << 3)	/* link reset */
214 #define	CTRL_ASDE	(1U << 5)	/* auto speed detect enable */
215 #define	CTRL_SLU	(1U << 6)	/* set link up */
216 #define	CTRL_ILOS	(1U << 7)	/* invert loss of signal */
217 #define	CTRL_SPEED(x)	((x) << 8)	/* speed (Livengood) */
218 #define	CTRL_SPEED_10	CTRL_SPEED(0)
219 #define	CTRL_SPEED_100	CTRL_SPEED(1)
220 #define	CTRL_SPEED_1000	CTRL_SPEED(2)
221 #define	CTRL_SPEED_MASK	CTRL_SPEED(3)
222 #define	CTRL_FRCSPD	(1U << 11)	/* force speed (Livengood) */
223 #define	CTRL_FRCFDX	(1U << 12)	/* force full-duplex (Livengood) */
224 #define CTRL_D_UD_EN	(1U << 13)	/* Dock/Undock enable */
225 #define CTRL_D_UD_POL	(1U << 14)	/* Defined polarity of Dock/Undock indication in SDP[0] */
226 #define CTRL_F_PHY_R 	(1U << 15)	/* Reset both PHY ports, through PHYRST_N pin */
227 #define CTRL_EXT_LINK_EN (1U << 16)	/* enable link status from external LINK_0 and LINK_1 pins */
228 #define CTRL_LANPHYPC_OVERRIDE (1U << 16) /* SW control of LANPHYPC */
229 #define CTRL_LANPHYPC_VALUE (1U << 17)	/* SW value of LANPHYPC */
230 #define	CTRL_SWDPINS_SHIFT	18
231 #define	CTRL_SWDPINS_MASK	0x0f
232 #define	CTRL_SWDPIN(x)		(1U << (CTRL_SWDPINS_SHIFT + (x)))
233 #define	CTRL_SWDPIO_SHIFT	22
234 #define	CTRL_SWDPIO_MASK	0x0f
235 #define	CTRL_SWDPIO(x)		(1U << (CTRL_SWDPIO_SHIFT + (x)))
236 #define CTRL_MEHE	(1U << 17)	/* Memory Error Handling Enable(I217)*/
237 #define	CTRL_RST	(1U << 26)	/* device reset */
238 #define	CTRL_RFCE	(1U << 27)	/* Rx flow control enable */
239 #define	CTRL_TFCE	(1U << 28)	/* Tx flow control enable */
240 #define	CTRL_VME	(1U << 30)	/* VLAN Mode Enable */
241 #define	CTRL_PHY_RESET	(1U << 31)	/* PHY reset (Cordova) */
242 
243 #define	WMREG_CTRL_SHADOW 0x0004	/* Device Control Register (shadow) */
244 
245 #define	WMREG_STATUS	0x0008	/* Device Status Register */
246 #define	STATUS_FD	(1U << 0)	/* full duplex */
247 #define	STATUS_LU	(1U << 1)	/* link up */
248 #define	STATUS_TCKOK	(1U << 2)	/* Tx clock running */
249 #define	STATUS_RBCOK	(1U << 3)	/* Rx clock running */
250 #define	STATUS_FUNCID_SHIFT 2		/* 82546 function ID */
251 #define	STATUS_FUNCID_MASK  3		/* ... */
252 #define	STATUS_TXOFF	(1U << 4)	/* Tx paused */
253 #define	STATUS_TBIMODE	(1U << 5)	/* fiber mode (Livengood) */
254 #define	STATUS_SPEED(x)	((x) << 6)	/* speed indication */
255 #define	STATUS_SPEED_10	  STATUS_SPEED(0)
256 #define	STATUS_SPEED_100  STATUS_SPEED(1)
257 #define	STATUS_SPEED_1000 STATUS_SPEED(2)
258 #define	STATUS_ASDV(x)	((x) << 8)	/* auto speed det. val. (Livengood) */
259 #define	STATUS_LAN_INIT_DONE (1U << 9)	/* Lan Init Completion by NVM */
260 #define	STATUS_MTXCKOK	(1U << 10)	/* MTXD clock running */
261 #define	STATUS_PHYRA	(1U << 10)	/* PHY Reset Asserted (PCH) */
262 #define	STATUS_PCI66	(1U << 11)	/* 66MHz bus (Livengood) */
263 #define	STATUS_BUS64	(1U << 12)	/* 64-bit bus (Livengood) */
264 #define	STATUS_PCIX_MODE (1U << 13)	/* PCIX mode (Cordova) */
265 #define	STATUS_PCIXSPD(x) ((x) << 14)	/* PCIX speed indication (Cordova) */
266 #define	STATUS_PCIXSPD_50_66   STATUS_PCIXSPD(0)
267 #define	STATUS_PCIXSPD_66_100  STATUS_PCIXSPD(1)
268 #define	STATUS_PCIXSPD_100_133 STATUS_PCIXSPD(2)
269 #define	STATUS_PCIXSPD_MASK    STATUS_PCIXSPD(3)
270 #define	STATUS_GIO_M_ENA (1U << 19)	/* GIO master enable */
271 #define	STATUS_DEV_RST_SET (1U << 20)	/* Device Reset Set */
272 
273 #define	WMREG_EECD	0x0010	/* EEPROM Control Register */
274 #define	EECD_SK		(1U << 0)	/* clock */
275 #define	EECD_CS		(1U << 1)	/* chip select */
276 #define	EECD_DI		(1U << 2)	/* data in */
277 #define	EECD_DO		(1U << 3)	/* data out */
278 #define	EECD_FWE(x)	((x) << 4)	/* flash write enable control */
279 #define	EECD_FWE_DISABLED EECD_FWE(1)
280 #define	EECD_FWE_ENABLED  EECD_FWE(2)
281 #define	EECD_EE_REQ	(1U << 6)	/* (shared) EEPROM request */
282 #define	EECD_EE_GNT	(1U << 7)	/* (shared) EEPROM grant */
283 #define	EECD_EE_PRES	(1U << 8)	/* EEPROM present */
284 #define	EECD_EE_SIZE	(1U << 9)	/* EEPROM size
285 					   (0 = 64 word, 1 = 256 word) */
286 #define	EECD_EE_AUTORD	(1U << 9)	/* auto read done */
287 #define	EECD_EE_ABITS	(1U << 10)	/* EEPROM address bits
288 					   (based on type) */
289 #define	EECD_EE_TYPE	(1U << 13)	/* EEPROM type
290 					   (0 = Microwire, 1 = SPI) */
291 #define EECD_SEC1VAL	(1U << 22)	/* Sector One Valid */
292 #define EECD_SEC1VAL_VALMASK (EECD_EE_AUTORD | EECD_EE_PRES) /* Valid Mask */
293 
294 #define	UWIRE_OPC_ERASE	0x04		/* MicroWire "erase" opcode */
295 #define	UWIRE_OPC_WRITE	0x05		/* MicroWire "write" opcode */
296 #define	UWIRE_OPC_READ	0x06		/* MicroWire "read" opcode */
297 
298 #define	SPI_OPC_WRITE	0x02		/* SPI "write" opcode */
299 #define	SPI_OPC_READ	0x03		/* SPI "read" opcode */
300 #define	SPI_OPC_A8	0x08		/* opcode bit 3 == address bit 8 */
301 #define	SPI_OPC_WREN	0x06		/* SPI "set write enable" opcode */
302 #define	SPI_OPC_WRDI	0x04		/* SPI "clear write enable" opcode */
303 #define	SPI_OPC_RDSR	0x05		/* SPI "read status" opcode */
304 #define	SPI_OPC_WRSR	0x01		/* SPI "write status" opcode */
305 #define	SPI_MAX_RETRIES	5000		/* max wait of 5ms for RDY signal */
306 
307 #define	SPI_SR_RDY	0x01
308 #define	SPI_SR_WEN	0x02
309 #define	SPI_SR_BP0	0x04
310 #define	SPI_SR_BP1	0x08
311 #define	SPI_SR_WPEN	0x80
312 
313 #define	EEPROM_OFF_MACADDR	0x00	/* MAC address offset */
314 #define	EEPROM_OFF_CFG1		0x0a	/* config word 1 */
315 #define	EEPROM_OFF_CFG2		0x0f	/* config word 2 */
316 #define	EEPROM_OFF_CFG3_PORTB	0x14	/* config word 3 */
317 #define	EEPROM_INIT_3GIO_3	0x1a	/* PCIe Initial Configuration Word 3 */
318 #define	EEPROM_OFF_K1_CONFIG	0x1b	/* NVM K1 Config */
319 #define	EEPROM_OFF_SWDPIN	0x20	/* SWD Pins (Cordova) */
320 #define	EEPROM_OFF_CFG3_PORTA	0x24	/* config word 3 */
321 #define EEPROM_ALT_MAC_ADDR_PTR	0x37	/* to the alternative MAC addresses */
322 
323 #define	EEPROM_CFG1_LVDID	(1U << 0)
324 #define	EEPROM_CFG1_LSSID	(1U << 1)
325 #define	EEPROM_CFG1_PME_CLOCK	(1U << 2)
326 #define	EEPROM_CFG1_PM		(1U << 3)
327 #define	EEPROM_CFG1_ILOS	(1U << 4)
328 #define	EEPROM_CFG1_SWDPIO_SHIFT 5
329 #define	EEPROM_CFG1_SWDPIO_MASK	(0xf << EEPROM_CFG1_SWDPIO_SHIFT)
330 #define	EEPROM_CFG1_IPS1	(1U << 8)
331 #define	EEPROM_CFG1_LRST	(1U << 9)
332 #define	EEPROM_CFG1_FD		(1U << 10)
333 #define	EEPROM_CFG1_FRCSPD	(1U << 11)
334 #define	EEPROM_CFG1_IPS0	(1U << 12)
335 #define	EEPROM_CFG1_64_32_BAR	(1U << 13)
336 
337 #define	EEPROM_CFG2_CSR_RD_SPLIT (1U << 1)
338 #define	EEPROM_CFG2_82544_APM_EN (1U << 2)
339 #define	EEPROM_CFG2_64_BIT	(1U << 3)
340 #define	EEPROM_CFG2_MAX_READ	(1U << 4)
341 #define	EEPROM_CFG2_DMCR_MAP	(1U << 5)
342 #define	EEPROM_CFG2_133_CAP	(1U << 6)
343 #define	EEPROM_CFG2_MSI_DIS	(1U << 7)
344 #define	EEPROM_CFG2_FLASH_DIS	(1U << 8)
345 #define	EEPROM_CFG2_FLASH_SIZE(x) (((x) & 3) >> 9)
346 #define	EEPROM_CFG2_APM_EN (1U << 10)
347 #define	EEPROM_CFG2_ANE		(1U << 11)
348 #define	EEPROM_CFG2_PAUSE(x)	(((x) & 3) >> 12)
349 #define	EEPROM_CFG2_ASDE	(1U << 14)
350 #define	EEPROM_CFG2_APM_PME	(1U << 15)
351 #define	EEPROM_CFG2_SWDPIO_SHIFT 4
352 #define	EEPROM_CFG2_SWDPIO_MASK	(0xf << EEPROM_CFG2_SWDPIO_SHIFT)
353 #define	EEPROM_CFG2_MNGM_SHIFT	13	/* Manageability Operation mode */
354 #define	EEPROM_CFG2_MNGM_MASK	(3U << EEPROM_CFG2_MNGM_SHIFT)
355 #define	EEPROM_CFG2_MNGM_DIS	0
356 #define	EEPROM_CFG2_MNGM_NCSI	1
357 #define	EEPROM_CFG2_MNGM_PT	2
358 
359 #define	EEPROM_K1_CONFIG_ENABLE	0x01
360 
361 #define	EEPROM_SWDPIN_MASK	0xdf
362 #define	EEPROM_SWDPIN_SWDPIN_SHIFT 0
363 #define	EEPROM_SWDPIN_SWDPIO_SHIFT 8
364 
365 #define EEPROM_3GIO_3_ASPM_MASK	(0x3 << 2)	/* Active State PM Support */
366 
367 #define EEPROM_CFG3_APME	(1U << 10)
368 
369 #define	EEPROM_OFF_MACADDR_LAN1	3	/* macaddr offset from PTR (port 1) */
370 #define	EEPROM_OFF_MACADDR_LAN2	6	/* macaddr offset from PTR (port 2) */
371 #define	EEPROM_OFF_MACADDR_LAN3	9	/* macaddr offset from PTR (port 3) */
372 
373 /*
374  * EEPROM Partitioning. See Table 6-1, "EEPROM Top Level Partitioning"
375  * in 82580's datasheet.
376  */
377 #define EEPROM_OFF_LAN1	0x0080	/* Offset for LAN1 (82580)*/
378 #define EEPROM_OFF_LAN2	0x00c0	/* Offset for LAN2 (82580)*/
379 #define EEPROM_OFF_LAN3	0x0100	/* Offset for LAN3 (82580)*/
380 
381 #define	WMREG_EERD	0x0014	/* EEPROM read */
382 #define	EERD_DONE	0x02    /* done bit */
383 #define	EERD_START	0x01	/* First bit for telling part to start operation */
384 #define	EERD_ADDR_SHIFT	2	/* Shift to the address bits */
385 #define	EERD_DATA_SHIFT	16	/* Offset to data in EEPROM read/write registers */
386 
387 #define	WMREG_CTRL_EXT	0x0018	/* Extended Device Control Register */
388 #define	CTRL_EXT_GPI_EN(x)	(1U << (x)) /* gpin interrupt enable */
389 #define	CTRL_EXT_SWDPINS_SHIFT	4
390 #define	CTRL_EXT_SWDPINS_MASK	0x0d
391 /* The bit order of the SW Definable pin is not 6543 but 3654! */
392 #define	CTRL_EXT_SWDPIN(x)	(1U << (CTRL_EXT_SWDPINS_SHIFT \
393 		+ ((x) == 3 ? 3 : ((x) - 4))))
394 #define	CTRL_EXT_SWDPIO_SHIFT	8
395 #define	CTRL_EXT_SWDPIO_MASK	0x0d
396 #define	CTRL_EXT_SWDPIO(x)	(1U << (CTRL_EXT_SWDPIO_SHIFT \
397 		+ ((x) == 3 ? 3 : ((x) - 4))))
398 #define	CTRL_EXT_ASDCHK		(1U << 12) /* ASD check */
399 #define	CTRL_EXT_EE_RST		(1U << 13) /* EEPROM reset */
400 #define	CTRL_EXT_IPS		(1U << 14) /* invert power state bit 0 */
401 #define	CTRL_EXT_SPD_BYPS	(1U << 15) /* speed select bypass */
402 #define	CTRL_EXT_IPS1		(1U << 16) /* invert power state bit 1 */
403 #define	CTRL_EXT_RO_DIS		(1U << 17) /* relaxed ordering disabled */
404 #define	CTRL_EXT_LINK_MODE_MASK		0x00C00000
405 #define	CTRL_EXT_LINK_MODE_GMII		0x00000000
406 #define	CTRL_EXT_LINK_MODE_KMRN		0x00000000
407 #define	CTRL_EXT_LINK_MODE_1000KX	0x00400000
408 #define	CTRL_EXT_LINK_MODE_SGMII	0x00800000
409 #define	CTRL_EXT_LINK_MODE_PCIX_SERDES	0x00800000
410 #define	CTRL_EXT_LINK_MODE_TBI		0x00C00000
411 #define	CTRL_EXT_LINK_MODE_PCIE_SERDES	0x00C00000
412 #define	CTRL_EXT_PHYPDEN	0x00100000
413 #define CTRL_EXT_I2C_ENA	0x02000000  /* I2C enable */
414 #define	CTRL_EXT_DRV_LOAD	0x10000000
415 
416 
417 #define	WMREG_MDIC	0x0020	/* MDI Control Register */
418 #define	MDIC_DATA(x)	((x) & 0xffff)
419 #define	MDIC_REGADD(x)	((x) << 16)
420 #define	MDIC_PHY_SHIFT	21
421 #define	MDIC_PHY_MASK	__BITS(25, 21)
422 #define	MDIC_PHYADD(x)	((x) << 21)
423 #define	MDIC_OP_WRITE	(1U << 26)
424 #define	MDIC_OP_READ	(2U << 26)
425 #define	MDIC_READY	(1U << 28)
426 #define	MDIC_I		(1U << 29)	/* interrupt on MDI complete */
427 #define	MDIC_E		(1U << 30)	/* MDI error */
428 #define	MDIC_DEST	(1U << 31)	/* Destination */
429 
430 #define WMREG_SCTL	0x0024	/* SerDes Control - RW */
431 /*
432  * These 4 macros are also used for other 8bit control registers on the
433  * 82575
434  */
435 #define SCTL_CTL_READY  (1U << 31)
436 #define SCTL_CTL_DATA_MASK 0x000000ff
437 #define SCTL_CTL_ADDR_SHIFT 8
438 #define SCTL_CTL_POLL_TIMEOUT 640
439 
440 #define	WMREG_FCAL	0x0028	/* Flow Control Address Low */
441 #define	FCAL_CONST	0x00c28001	/* Flow Control MAC addr low */
442 
443 #define	WMREG_FCAH	0x002c	/* Flow Control Address High */
444 #define	FCAH_CONST	0x00000100	/* Flow Control MAC addr high */
445 
446 #define	WMREG_FCT	0x0030	/* Flow Control Type */
447 
448 #define	WMREG_VET	0x0038	/* VLAN Ethertype */
449 
450 #define	WMREG_RAL_BASE	0x0040	/* Receive Address List */
451 #define	WMREG_CORDOVA_RAL_BASE 0x5400
452 #define	WMREG_RAL_LO(b, x) ((b) + ((x) << 3))
453 #define	WMREG_RAL_HI(b, x) (WMREG_RAL_LO(b, x) + 4)
454 	/*
455 	 * Receive Address List: The LO part is the low-order 32-bits
456 	 * of the MAC address.  The HI part is the high-order 16-bits
457 	 * along with a few control bits.
458 	 */
459 #define	RAL_AS(x)	((x) << 16)	/* address select */
460 #define	RAL_AS_DEST	RAL_AS(0)	/* (cordova?) */
461 #define	RAL_AS_SOURCE	RAL_AS(1)	/* (cordova?) */
462 #define	RAL_RDR1	(1U << 30)	/* put packet in alt. rx ring */
463 #define	RAL_AV		(1U << 31)	/* entry is valid */
464 
465 #define	WM_RAL_TABSIZE		15	/* RAL size for old devices */
466 #define	WM_RAL_TABSIZE_ICH8	7	/* RAL size for ICH* and PCH* */
467 #define	WM_RAL_TABSIZE_82575	16	/* RAL size for 82575 */
468 #define	WM_RAL_TABSIZE_82576	24	/* RAL size for 82576 and 82580 */
469 #define	WM_RAL_TABSIZE_I350	32	/* RAL size for I350 */
470 
471 #define	WMREG_ICR	0x00c0	/* Interrupt Cause Register */
472 #define	ICR_TXDW	(1U << 0)	/* Tx desc written back */
473 #define	ICR_TXQE	(1U << 1)	/* Tx queue empty */
474 #define	ICR_LSC		(1U << 2)	/* link status change */
475 #define	ICR_RXSEQ	(1U << 3)	/* receive sequence error */
476 #define	ICR_RXDMT0	(1U << 4)	/* Rx ring 0 nearly empty */
477 #define	ICR_RXO		(1U << 6)	/* Rx overrun */
478 #define	ICR_RXT0	(1U << 7)	/* Rx ring 0 timer */
479 #define	ICR_MDAC	(1U << 9)	/* MDIO access complete */
480 #define	ICR_RXCFG	(1U << 10)	/* Receiving /C/ */
481 #define	ICR_GPI(x)	(1U << (x))	/* general purpose interrupts */
482 #define	ICR_INT		(1U << 31)	/* device generated an interrupt */
483 
484 #define WMREG_ITR	0x00c4	/* Interrupt Throttling Register */
485 #define ITR_IVAL_MASK	0xffff		/* Interval mask */
486 #define ITR_IVAL_SHIFT	0		/* Interval shift */
487 
488 #define	WMREG_ICS	0x00c8	/* Interrupt Cause Set Register */
489 	/* See ICR bits. */
490 
491 #define	WMREG_IMS	0x00d0	/* Interrupt Mask Set Register */
492 	/* See ICR bits. */
493 
494 #define	WMREG_IMC	0x00d8	/* Interrupt Mask Clear Register */
495 	/* See ICR bits. */
496 
497 #define	WMREG_RCTL	0x0100	/* Receive Control */
498 #define	RCTL_EN		(1U << 1)	/* receiver enable */
499 #define	RCTL_SBP	(1U << 2)	/* store bad packets */
500 #define	RCTL_UPE	(1U << 3)	/* unicast promisc. enable */
501 #define	RCTL_MPE	(1U << 4)	/* multicast promisc. enable */
502 #define	RCTL_LPE	(1U << 5)	/* large packet enable */
503 #define	RCTL_LBM(x)	((x) << 6)	/* loopback mode */
504 #define	RCTL_LBM_NONE	RCTL_LBM(0)
505 #define	RCTL_LBM_PHY	RCTL_LBM(3)
506 #define	RCTL_RDMTS(x)	((x) << 8)	/* receive desc. min thresh size */
507 #define	RCTL_RDMTS_1_2	RCTL_RDMTS(0)
508 #define	RCTL_RDMTS_1_4	RCTL_RDMTS(1)
509 #define	RCTL_RDMTS_1_8	RCTL_RDMTS(2)
510 #define	RCTL_RDMTS_MASK	RCTL_RDMTS(3)
511 #define	RCTL_MO(x)	((x) << 12)	/* multicast offset */
512 #define	RCTL_BAM	(1U << 15)	/* broadcast accept mode */
513 #define	RCTL_2k		(0 << 16)	/* 2k Rx buffers */
514 #define	RCTL_1k		(1 << 16)	/* 1k Rx buffers */
515 #define	RCTL_512	(2 << 16)	/* 512 byte Rx buffers */
516 #define	RCTL_256	(3 << 16)	/* 256 byte Rx buffers */
517 #define	RCTL_BSEX_16k	(1 << 16)	/* 16k Rx buffers (BSEX) */
518 #define	RCTL_BSEX_8k	(2 << 16)	/* 8k Rx buffers (BSEX) */
519 #define	RCTL_BSEX_4k	(3 << 16)	/* 4k Rx buffers (BSEX) */
520 #define	RCTL_DPF	(1U << 22)	/* discard pause frames */
521 #define	RCTL_PMCF	(1U << 23)	/* pass MAC control frames */
522 #define	RCTL_BSEX	(1U << 25)	/* buffer size extension (Livengood) */
523 #define	RCTL_SECRC	(1U << 26)	/* strip Ethernet CRC */
524 
525 #define	WMREG_OLD_RDTR0	0x0108	/* Receive Delay Timer (ring 0) */
526 #define	WMREG_RDTR	0x2820
527 #define	RDTR_FPD	(1U << 31)	/* flush partial descriptor */
528 
529 #define	WMREG_RADV	0x282c	/* Receive Interrupt Absolute Delay Timer */
530 
531 #define	WMREG_OLD_RDBAL0 0x0110	/* Receive Descriptor Base Low (ring 0) */
532 #define	WMREG_RDBAL	0x2800
533 #define	WMREG_RDBAL_2	0x0c00	/* for 82576 ... */
534 
535 #define	WMREG_OLD_RDBAH0 0x0114	/* Receive Descriptor Base High (ring 0) */
536 #define	WMREG_RDBAH	0x2804
537 #define	WMREG_RDBAH_2	0x0c04	/* for 82576 ... */
538 
539 #define	WMREG_OLD_RDLEN0 0x0118	/* Receive Descriptor Length (ring 0) */
540 #define	WMREG_RDLEN	0x2808
541 #define	WMREG_RDLEN_2	0x0c08	/* for 82576 ... */
542 
543 #define WMREG_SRRCTL	0x280c	/* additional recieve control used in 82575 ... */
544 #define WMREG_SRRCTL_2	0x0c0c	/* for 82576 ... */
545 #define SRRCTL_BSIZEPKT_MASK				0x0000007f
546 #define SRRCTL_BSIZEPKT_SHIFT		10	/* Shift _right_ */
547 #define SRRCTL_BSIZEHDRSIZE_MASK			0x00000f00
548 #define SRRCTL_BSIZEHDRSIZE_SHIFT	2	/* Shift _left_ */
549 #define SRRCTL_DESCTYPE_LEGACY				0x00000000
550 #define SRRCTL_DESCTYPE_ADV_ONEBUF			(1U << 25)
551 #define SRRCTL_DESCTYPE_HDR_SPLIT			(2U << 25)
552 #define SRRCTL_DESCTYPE_HDR_REPLICATION			(3U << 25)
553 #define SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT	(4U << 25)
554 #define SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS		(5U << 25) /* 82575 only */
555 #define SRRCTL_DESCTYPE_MASK				(7U << 25)
556 #define SRRCTL_DROP_EN					0x80000000
557 
558 #define	WMREG_OLD_RDH0	0x0120	/* Receive Descriptor Head (ring 0) */
559 #define	WMREG_RDH	0x2810
560 #define	WMREG_RDH_2	0x0c10	/* for 82576 ... */
561 
562 #define	WMREG_OLD_RDT0	0x0128	/* Receive Descriptor Tail (ring 0) */
563 #define	WMREG_RDT	0x2818
564 #define	WMREG_RDT_2	0x0c18	/* for 82576 ... */
565 
566 #define	WMREG_RXDCTL	0x2828	/* Receive Descriptor Control */
567 #define	WMREG_RXDCTL_2	0x0c28	/* for 82576 ... */
568 #define	RXDCTL_PTHRESH(x) ((x) << 0)	/* prefetch threshold */
569 #define	RXDCTL_HTHRESH(x) ((x) << 8)	/* host threshold */
570 #define	RXDCTL_WTHRESH(x) ((x) << 16)	/* write back threshold */
571 #define	RXDCTL_GRAN	(1U << 24)	/* 0 = cacheline, 1 = descriptor */
572 /* flags used starting with 82575 ... */
573 #define RXDCTL_QUEUE_ENABLE  0x02000000 /* Enable specific Tx Queue */
574 #define RXDCTL_SWFLSH        0x04000000 /* Rx Desc. write-back flushing */
575 
576 #define	WMREG_OLD_RDTR1	0x0130	/* Receive Delay Timer (ring 1) */
577 
578 #define	WMREG_OLD_RDBA1_LO 0x0138 /* Receive Descriptor Base Low (ring 1) */
579 
580 #define	WMREG_OLD_RDBA1_HI 0x013c /* Receive Descriptor Base High (ring 1) */
581 
582 #define	WMREG_OLD_RDLEN1 0x0140	/* Receive Drscriptor Length (ring 1) */
583 
584 #define	WMREG_OLD_RDH1	0x0148
585 
586 #define	WMREG_OLD_RDT1	0x0150
587 
588 #define	WMREG_OLD_FCRTH 0x0160	/* Flow Control Rx Threshold Hi (OLD) */
589 #define	WMREG_FCRTL	0x2160	/* Flow Control Rx Threshold Lo */
590 #define	FCRTH_DFLT	0x00008000
591 
592 #define	WMREG_OLD_FCRTL 0x0168	/* Flow Control Rx Threshold Lo (OLD) */
593 #define	WMREG_FCRTH	0x2168	/* Flow Control Rx Threhsold Hi */
594 #define	FCRTL_DFLT	0x00004000
595 #define	FCRTL_XONE	0x80000000	/* Enable XON frame transmission */
596 
597 #define	WMREG_FCTTV	0x0170	/* Flow Control Transmit Timer Value */
598 #define	FCTTV_DFLT	0x00000600
599 
600 #define	WMREG_TXCW	0x0178	/* Transmit Configuration Word (TBI mode) */
601 	/* See MII ANAR_X bits. */
602 #define	TXCW_SYM_PAUSE	(1U << 7)	/* sym pause request */
603 #define	TXCW_ASYM_PAUSE	(1U << 8)	/* asym pause request */
604 #define	TXCW_TxConfig	(1U << 30)	/* Tx Config */
605 #define	TXCW_ANE	(1U << 31)	/* Autonegotiate */
606 
607 #define	WMREG_RXCW	0x0180	/* Receive Configuration Word (TBI mode) */
608 	/* See MII ANLPAR_X bits. */
609 #define	RXCW_NC		(1U << 26)	/* no carrier */
610 #define	RXCW_IV		(1U << 27)	/* config invalid */
611 #define	RXCW_CC		(1U << 28)	/* config change */
612 #define	RXCW_C		(1U << 29)	/* /C/ reception */
613 #define	RXCW_SYNCH	(1U << 30)	/* synchronized */
614 #define	RXCW_ANC	(1U << 31)	/* autonegotiation complete */
615 
616 #define	WMREG_MTA	0x0200	/* Multicast Table Array */
617 #define	WMREG_CORDOVA_MTA 0x5200
618 
619 #define	WMREG_TCTL	0x0400	/* Transmit Control Register */
620 #define	TCTL_EN		(1U << 1)	/* transmitter enable */
621 #define	TCTL_PSP	(1U << 3)	/* pad short packets */
622 #define	TCTL_CT(x)	(((x) & 0xff) << 4)   /* 4:11 - collision threshold */
623 #define	TCTL_COLD(x)	(((x) & 0x3ff) << 12) /* 12:21 - collision distance */
624 #define	TCTL_SWXOFF	(1U << 22)	/* software XOFF */
625 #define	TCTL_RTLC	(1U << 24)	/* retransmit on late collision */
626 #define	TCTL_NRTU	(1U << 25)	/* no retransmit on underrun */
627 #define	TCTL_MULR	(1U << 28)	/* multiple request */
628 
629 #define	TX_COLLISION_THRESHOLD		15
630 #define	TX_COLLISION_DISTANCE_HDX	512
631 #define	TX_COLLISION_DISTANCE_FDX	64
632 
633 #define	WMREG_TCTL_EXT	0x0404	/* Transmit Control Register */
634 #define	TCTL_EXT_BST_MASK	0x000003FF /* Backoff Slot Time */
635 #define	TCTL_EXT_GCEX_MASK	0x000FFC00 /* Gigabit Carry Extend Padding */
636 
637 #define	DEFAULT_80003ES2LAN_TCTL_EXT_GCEX 0x00010000
638 
639 #define	WMREG_TQSA_LO	0x0408
640 
641 #define	WMREG_TQSA_HI	0x040c
642 
643 #define	WMREG_TIPG	0x0410	/* Transmit IPG Register */
644 #define	TIPG_IPGT(x)	(x)		/* IPG transmit time */
645 #define	TIPG_IPGR1(x)	((x) << 10)	/* IPG receive time 1 */
646 #define	TIPG_IPGR2(x)	((x) << 20)	/* IPG receive time 2 */
647 
648 #define	TIPG_WM_DFLT	(TIPG_IPGT(0x0a) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x0a))
649 #define	TIPG_LG_DFLT	(TIPG_IPGT(0x06) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
650 #define	TIPG_1000T_DFLT	(TIPG_IPGT(0x08) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
651 #define	TIPG_1000T_80003_DFLT \
652     (TIPG_IPGT(0x08) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x07))
653 #define	TIPG_10_100_80003_DFLT \
654     (TIPG_IPGT(0x09) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x07))
655 
656 #define	WMREG_TQC	0x0418
657 
658 #define	WMREG_EEWR	0x102c	/* EEPROM write */
659 
660 #define	WMREG_RDFH	0x2410	/* Receive Data FIFO Head */
661 
662 #define	WMREG_RDFT	0x2418	/* Receive Data FIFO Tail */
663 
664 #define	WMREG_RDFHS	0x2420	/* Receive Data FIFO Head Saved */
665 
666 #define	WMREG_RDFTS	0x2428	/* Receive Data FIFO Tail Saved */
667 
668 #define	WMREG_TDFH	0x3410	/* Transmit Data FIFO Head */
669 
670 #define	WMREG_TDFT	0x3418	/* Transmit Data FIFO Tail */
671 
672 #define	WMREG_TDFHS	0x3420	/* Transmit Data FIFO Head Saved */
673 
674 #define	WMREG_TDFTS	0x3428	/* Transmit Data FIFO Tail Saved */
675 
676 #define	WMREG_TDFPC	0x3430	/* Transmit Data FIFO Packet Count */
677 
678 #define	WMREG_OLD_TDBAL	0x0420	/* Transmit Descriptor Base Lo */
679 #define	WMREG_TDBAL	0x3800
680 
681 #define	WMREG_OLD_TDBAH	0x0424	/* Transmit Descriptor Base Hi */
682 #define	WMREG_TDBAH	0x3804
683 
684 #define	WMREG_OLD_TDLEN	0x0428	/* Transmit Descriptor Length */
685 #define	WMREG_TDLEN	0x3808
686 
687 #define	WMREG_OLD_TDH	0x0430	/* Transmit Descriptor Head */
688 #define	WMREG_TDH	0x3810
689 
690 #define	WMREG_OLD_TDT	0x0438	/* Transmit Descriptor Tail */
691 #define	WMREG_TDT	0x3818
692 
693 #define	WMREG_OLD_TIDV	0x0440	/* Transmit Delay Interrupt Value */
694 #define	WMREG_TIDV	0x3820
695 
696 #define	WMREG_TXDCTL	0x3828	/* Trandmit Descriptor Control */
697 #define	TXDCTL_PTHRESH(x) ((x) << 0)	/* prefetch threshold */
698 #define	TXDCTL_HTHRESH(x) ((x) << 8)	/* host threshold */
699 #define	TXDCTL_WTHRESH(x) ((x) << 16)	/* write back threshold */
700 /* flags used starting with 82575 ... */
701 #define TXDCTL_QUEUE_ENABLE  0x02000000 /* Enable specific Tx Queue */
702 #define TXDCTL_SWFLSH        0x04000000 /* Tx Desc. write-back flushing */
703 #define TXDCTL_PRIORITY      0x08000000
704 
705 #define	WMREG_TADV	0x382c	/* Transmit Absolute Interrupt Delay Timer */
706 
707 #define	WMREG_AIT	0x0458	/* Adaptive IFS Throttle */
708 
709 #define	WMREG_VFTA	0x0600
710 
711 #define	WMREG_MDICNFG	0x0e04	/* MDC/MDIO Configuration Register */
712 #define MDICNFG_PHY_SHIFT	21
713 #define MDICNFG_PHY_MASK	__BITS(25, 21)
714 #define MDICNFG_COM_MDIO	__BIT(30)
715 #define MDICNFG_DEST		__BIT(31)
716 
717 #define	WM_MC_TABSIZE	128
718 #define	WM_ICH8_MC_TABSIZE 32
719 #define	WM_VLAN_TABSIZE	128
720 
721 #define	WMREG_PBA	0x1000	/* Packet Buffer Allocation */
722 #define	PBA_BYTE_SHIFT	10		/* KB -> bytes */
723 #define	PBA_ADDR_SHIFT	7		/* KB -> quadwords */
724 #define	PBA_8K		0x0008
725 #define	PBA_10K		0x000a
726 #define	PBA_12K		0x000c
727 #define	PBA_16K		0x0010		/* 16K, default Tx allocation */
728 #define	PBA_20K		0x0014
729 #define	PBA_22K		0x0016
730 #define	PBA_24K		0x0018
731 #define	PBA_26K		0x001a
732 #define	PBA_30K		0x001e
733 #define	PBA_32K		0x0020
734 #define	PBA_34K		0x0022
735 #define	PBA_35K		0x0023
736 #define	PBA_40K		0x0028
737 #define	PBA_48K		0x0030		/* 48K, default Rx allocation */
738 #define	PBA_64K		0x0040
739 
740 #define	WMREG_PBS	0x1008	/* Packet Buffer Size (ICH) */
741 
742 #define	WMREG_PBECCSTS	0x100c	/* Packet Buffer ECC Status (PCH_LPT) */
743 #define	PBECCSTS_CORR_ERR_CNT_MASK	0x000000ff
744 #define	PBECCSTS_UNCORR_ERR_CNT_MASK	0x0000ff00
745 #define	PBECCSTS_UNCORR_ECC_ENABLE	0x00010000
746 
747 #define WMREG_EEMNGCTL	0x1010	/* MNG EEprom Control */
748 #define EEMNGCTL_CFGDONE_0 0x040000	/* MNG config cycle done */
749 #define EEMNGCTL_CFGDONE_1 0x080000	/*  2nd port */
750 
751 #define WMREG_I2CCMD	0x1028	/* SFPI2C Command Register - RW */
752 #define I2CCMD_REG_ADDR_SHIFT	16
753 #define I2CCMD_REG_ADDR		0x00ff0000
754 #define I2CCMD_PHY_ADDR_SHIFT	24
755 #define I2CCMD_PHY_ADDR		0x07000000
756 #define I2CCMD_OPCODE_READ	0x08000000
757 #define I2CCMD_OPCODE_WRITE	0x00000000
758 #define I2CCMD_RESET		0x10000000
759 #define I2CCMD_READY		0x20000000
760 #define I2CCMD_INTERRUPT_ENA	0x40000000
761 #define I2CCMD_ERROR		0x80000000
762 #define MAX_SGMII_PHY_REG_ADDR	255
763 #define I2CCMD_PHY_TIMEOUT	200
764 
765 #define WMREG_PBA_ECC	0x01100	/* PBA ECC */
766 #define PBA_ECC_COUNTER_MASK	0xfff00000 /* ECC counter mask */
767 #define PBA_ECC_COUNTER_SHIFT	20	   /* ECC counter shift value */
768 #define	PBA_ECC_CORR_EN		0x00000001 /* Enable ECC error correction */
769 #define	PBA_ECC_STAT_CLR	0x00000002 /* Clear ECC error counter */
770 #define	PBA_ECC_INT_EN		0x00000004 /* Enable ICR bit 5 on ECC error */
771 
772 #define WMREG_EICS	0x01520  /* Ext. Interrupt Cause Set - WO */
773 #define WMREG_EIMS	0x01524  /* Ext. Interrupt Mask Set/Read - RW */
774 #define WMREG_EIMC	0x01528  /* Ext. Interrupt Mask Clear - WO */
775 #define WMREG_EIAC	0x0152C  /* Ext. Interrupt Auto Clear - RW */
776 #define WMREG_EIAM	0x01530  /* Ext. Interrupt Ack Auto Clear Mask - RW */
777 
778 #define WMREG_EICR	0x01580  /* Ext. Interrupt Cause Read - R/clr */
779 
780 #define EITR_RX_QUEUE0	0x00000001 /* Rx Queue 0 Interrupt */
781 #define EITR_RX_QUEUE1	0x00000002 /* Rx Queue 1 Interrupt */
782 #define EITR_RX_QUEUE2	0x00000004 /* Rx Queue 2 Interrupt */
783 #define EITR_RX_QUEUE3	0x00000008 /* Rx Queue 3 Interrupt */
784 #define EITR_TX_QUEUE0	0x00000100 /* Tx Queue 0 Interrupt */
785 #define EITR_TX_QUEUE1	0x00000200 /* Tx Queue 1 Interrupt */
786 #define EITR_TX_QUEUE2	0x00000400 /* Tx Queue 2 Interrupt */
787 #define EITR_TX_QUEUE3	0x00000800 /* Tx Queue 3 Interrupt */
788 #define EITR_TCP_TIMER	0x40000000 /* TCP Timer */
789 #define EITR_OTHER	0x80000000 /* Interrupt Cause Active */
790 
791 #define WMREG_EITR(x)	(0x01680 + (0x4 * (x)))
792 #define EITR_ITR_INT_MASK	0x0000ffff
793 
794 #define	WMREG_TXDMAC	0x3000	/* Transfer DMA Control */
795 #define	TXDMAC_DPP	(1U << 0)	/* disable packet prefetch */
796 
797 #define WMREG_KABGTXD	0x3004	/* AFE and Gap Transmit Ref Data */
798 #define	KABGTXD_BGSQLBIAS 0x00050000
799 
800 #define	WMREG_TSPMT	0x3830	/* TCP Segmentation Pad and Minimum
801 				   Threshold (Cordova) */
802 
803 #define	WMREG_TARC0	0x3840	/* Tx arbitration count */
804 
805 #define	TSPMT_TSMT(x)	(x)		/* TCP seg min transfer */
806 #define	TSPMT_TSPBP(x)	((x) << 16)	/* TCP seg pkt buf padding */
807 
808 #define	WMREG_CRCERRS	0x4000	/* CRC Error Count */
809 #define	WMREG_ALGNERRC	0x4004	/* Alignment Error Count */
810 #define	WMREG_SYMERRC	0x4008	/* Symbol Error Count */
811 #define	WMREG_RXERRC	0x400c	/* receive error Count - R/clr */
812 #define	WMREG_MPC	0x4010	/* Missed Packets Count - R/clr */
813 #define	WMREG_COLC	0x4028	/* collision Count - R/clr */
814 #define	WMREG_SEC	0x4038	/* Sequence Error Count */
815 #define	WMREG_CEXTERR	0x403c	/* Carrier Extension Error Count */
816 #define	WMREG_RLEC	0x4040	/* Receive Length Error Count */
817 #define	WMREG_XONRXC	0x4048	/* XON Rx Count - R/clr */
818 #define	WMREG_XONTXC	0x404c	/* XON Tx Count - R/clr */
819 #define	WMREG_XOFFRXC	0x4050	/* XOFF Rx Count - R/clr */
820 #define	WMREG_XOFFTXC	0x4054	/* XOFF Tx Count - R/clr */
821 #define	WMREG_FCRUC	0x4058	/* Flow Control Rx Unsupported Count - R/clr */
822 #define WMREG_RNBC	0x40a0	/* Receive No Buffers Count */
823 
824 #define	WMREG_KUMCTRLSTA 0x0034	/* MAC-PHY interface - RW */
825 #define	KUMCTRLSTA_MASK			0x0000FFFF
826 #define	KUMCTRLSTA_OFFSET		0x001F0000
827 #define	KUMCTRLSTA_OFFSET_SHIFT		16
828 #define	KUMCTRLSTA_REN			0x00200000
829 
830 #define	KUMCTRLSTA_OFFSET_FIFO_CTRL	0x00000000
831 #define	KUMCTRLSTA_OFFSET_CTRL		0x00000001
832 #define	KUMCTRLSTA_OFFSET_INB_CTRL	0x00000002
833 #define	KUMCTRLSTA_OFFSET_DIAG		0x00000003
834 #define	KUMCTRLSTA_OFFSET_TIMEOUTS	0x00000004
835 #define	KUMCTRLSTA_OFFSET_K1_CONFIG	0x00000007
836 #define	KUMCTRLSTA_OFFSET_INB_PARAM	0x00000009
837 #define	KUMCTRLSTA_OFFSET_HD_CTRL	0x00000010
838 #define	KUMCTRLSTA_OFFSET_M2P_SERDES	0x0000001E
839 #define	KUMCTRLSTA_OFFSET_M2P_MODES	0x0000001F
840 
841 /* FIFO Control */
842 #define	KUMCTRLSTA_FIFO_CTRL_RX_BYPASS	0x00000008
843 #define	KUMCTRLSTA_FIFO_CTRL_TX_BYPASS	0x00000800
844 
845 /* In-Band Control */
846 #define	KUMCTRLSTA_INB_CTRL_LINK_TMOUT_DFLT 0x00000500
847 #define	KUMCTRLSTA_INB_CTRL_DIS_PADDING	0x00000010
848 
849 /* Diag */
850 #define	KUMCTRLSTA_DIAG_NELPBK	0x1000
851 
852 /* K1 Config */
853 #define	KUMCTRLSTA_K1_ENABLE	0x0002
854 
855 /* Half-Duplex Control */
856 #define	KUMCTRLSTA_HD_CTRL_10_100_DEFAULT 0x00000004
857 #define	KUMCTRLSTA_HD_CTRL_1000_DEFAULT	0x00000000
858 
859 #define	WMREG_MDPHYA	0x003C	/* PHY address - RW */
860 
861 #define	WMREG_RXCSUM	0x5000	/* Receive Checksum register */
862 #define	RXCSUM_PCSS	0x000000ff	/* Packet Checksum Start */
863 #define	RXCSUM_IPOFL	(1U << 8)	/* IP checksum offload */
864 #define	RXCSUM_TUOFL	(1U << 9)	/* TCP/UDP checksum offload */
865 #define	RXCSUM_IPV6OFL	(1U << 10)	/* IPv6 checksum offload */
866 
867 #define WMREG_RLPML	0x5004	/* Rx Long Packet Max Length */
868 
869 #define	WMREG_WUC	0x5800	/* Wakeup Control */
870 #define	WUC_APME		0x00000001 /* APM Enable */
871 #define	WUC_PME_EN		0x00000002 /* PME Enable */
872 
873 #define	WMREG_WUFC	0x5808	/* Wakeup Filter COntrol */
874 #define WUFC_MAG		0x00000002 /* Magic Packet Wakeup Enable */
875 #define WUFC_EX			0x00000004 /* Directed Exact Wakeup Enable */
876 #define WUFC_MC			0x00000008 /* Directed Multicast Wakeup En */
877 #define WUFC_BC			0x00000010 /* Broadcast Wakeup Enable */
878 #define WUFC_ARP		0x00000020 /* ARP Request Packet Wakeup En */
879 #define WUFC_IPV4		0x00000040 /* Directed IPv4 Packet Wakeup En */
880 #define WUFC_IPV6		0x00000080 /* Directed IPv6 Packet Wakeup En */
881 
882 #define	WMREG_MANC	0x5820	/* Management Control */
883 #define	MANC_SMBUS_EN		0x00000001
884 #define	MANC_ASF_EN		0x00000002
885 #define	MANC_ARP_EN		0x00002000
886 #define	MANC_RECV_TCO_RESET	0x00010000
887 #define	MANC_RECV_TCO_EN	0x00020000
888 #define	MANC_BLK_PHY_RST_ON_IDE	0x00040000
889 #define	MANC_RECV_ALL		0x00080000
890 #define	MANC_EN_MAC_ADDR_FILTER	0x00100000
891 #define	MANC_EN_MNG2HOST	0x00200000
892 
893 #define	WMREG_MANC2H	0x5860	/* Manaegment Control To Host - RW */
894 #define MANC2H_PORT_623		(1 << 5)
895 #define MANC2H_PORT_624		(1 << 6)
896 
897 #define WMREG_GCR	0x5b00	/* PCIe Control */
898 #define GCR_RXD_NO_SNOOP	0x00000001
899 #define GCR_RXDSCW_NO_SNOOP	0x00000002
900 #define GCR_RXDSCR_NO_SNOOP	0x00000004
901 #define GCR_TXD_NO_SNOOP	0x00000008
902 #define GCR_TXDSCW_NO_SNOOP	0x00000010
903 #define GCR_TXDSCR_NO_SNOOP	0x00000020
904 #define GCR_CMPL_TMOUT_MASK	0x0000f000
905 #define GCR_CMPL_TMOUT_10MS	0x00001000
906 #define GCR_CMPL_TMOUT_RESEND	0x00010000
907 #define GCR_CAP_VER2		0x00040000
908 
909 #define WMREG_FACTPS	0x5b30	/* Function Active and Power State to MNG */
910 #define FACTPS_MNGCG		0x20000000
911 #define FACTPS_LFS		0x40000000	/* LAN Function Select */
912 
913 #define WMREG_GIOCTL	0x5b44	/* GIO Analog Control Register */
914 #define WMREG_CCMCTL	0x5b48	/* CCM Control Register */
915 #define WMREG_SCCTL	0x5b4c	/* PCIc PLL Configuration Register */
916 
917 #define	WMREG_SWSM	0x5b50	/* SW Semaphore */
918 #define	SWSM_SMBI	0x00000001	/* Driver Semaphore bit */
919 #define	SWSM_SWESMBI	0x00000002	/* FW Semaphore bit */
920 #define	SWSM_WMNG	0x00000004	/* Wake MNG Clock */
921 #define	SWSM_DRV_LOAD	0x00000008	/* Driver Loaded Bit */
922 
923 #define	WMREG_FWSM	0x5b54	/* FW Semaphore */
924 #define	FWSM_MODE_MASK		0xe
925 #define	FWSM_MODE_SHIFT		0x1
926 #define	MNG_ICH_IAMT_MODE	0x2	/* PT mode? */
927 #define	MNG_IAMT_MODE		0x3
928 #define FWSM_RSPCIPHY		0x00000040	/* Reset PHY on PCI reset */
929 #define FWSM_FW_VALID		0x00008000 /* FW established a valid mode */
930 
931 #define	WMREG_SW_FW_SYNC 0x5b5c	/* software-firmware semaphore */
932 #define	SWFW_EEP_SM		0x0001 /* eeprom access */
933 #define	SWFW_PHY0_SM		0x0002 /* first ctrl phy access */
934 #define	SWFW_PHY1_SM		0x0004 /* second ctrl phy access */
935 #define	SWFW_MAC_CSR_SM		0x0008
936 #define	SWFW_PHY2_SM		0x0020 /* first ctrl phy access */
937 #define	SWFW_PHY3_SM		0x0040 /* first ctrl phy access */
938 #define	SWFW_SOFT_SHIFT		0	/* software semaphores */
939 #define	SWFW_FIRM_SHIFT		16	/* firmware semaphores */
940 
941 #define WMREG_CRC_OFFSET	0x5f50
942 
943 #define WMREG_EXTCNFCTR		0x0f00  /* Extended Configuration Control */
944 #define EXTCNFCTR_PCIE_WRITE_ENABLE	0x00000001
945 #define EXTCNFCTR_PHY_WRITE_ENABLE	0x00000002
946 #define EXTCNFCTR_D_UD_ENABLE		0x00000004
947 #define EXTCNFCTR_D_UD_LATENCY		0x00000008
948 #define EXTCNFCTR_D_UD_OWNER		0x00000010
949 #define EXTCNFCTR_MDIO_SW_OWNERSHIP	0x00000020
950 #define EXTCNFCTR_MDIO_HW_OWNERSHIP	0x00000040
951 #define EXTCNFCTR_GATE_PHY_CFG		0x00000080
952 #define EXTCNFCTR_EXT_CNF_POINTER	0x0FFF0000
953 #define E1000_EXTCNF_CTRL_SWFLAG	EXTCNFCTR_MDIO_SW_OWNERSHIP
954 
955 #define	WMREG_PHY_CTRL	0x0f10	/* PHY control */
956 #define	PHY_CTRL_SPD_EN		(1 << 0)
957 #define	PHY_CTRL_D0A_LPLU	(1 << 1)
958 #define	PHY_CTRL_NOND0A_LPLU	(1 << 2)
959 #define	PHY_CTRL_NOND0A_GBE_DIS	(1 << 3)
960 #define	PHY_CTRL_GBE_DIS	(1 << 4)
961 
962 /* Energy Efficient Ethernet "EEE" registers */
963 #define WMREG_LTRC	0x01a0	/* Latency Tolerance Reportiong Control */
964 #define WMREG_EEER	0x0e30	/* Energy Efficiency Ethernet "EEE" */
965 #define EEER_TX_LPI_EN		0x00010000 /* EEER Tx LPI Enable */
966 #define EEER_RX_LPI_EN		0x00020000 /* EEER Rx LPI Enable */
967 #define EEER_LPI_FC		0x00040000 /* EEER Ena on Flow Cntrl */
968 #define EEER_EEER_NEG		0x20000000 /* EEER capability nego */
969 #define EEER_EEER_RX_LPI_STATUS	0x40000000 /* EEER Rx in LPI state */
970 #define EEER_EEER_TX_LPI_STATUS	0x80000000 /* EEER Tx in LPI state */
971 #define WMREG_EEE_SU	0x0e34	/* EEE Setup */
972 #define WMREG_IPCNFG	0x0e38	/* Internal PHY Configuration */
973 #define IPCNFG_EEE_100M_AN	0x00000004 /* IPCNFG EEE Ena 100M AN */
974 #define IPCNFG_EEE_1G_AN	0x00000008 /* IPCNFG EEE Ena 1G AN */
975 #define WMREG_TLPIC	0x4148	/* EEE Tx LPI Count */
976 #define WMREG_RLPIC	0x414c	/* EEE Rx LPI Count */
977 
978 /* ich8 flash control */
979 #define ICH_FLASH_COMMAND_TIMEOUT            5000    /* 5000 uSecs - adjusted */
980 #define ICH_FLASH_ERASE_TIMEOUT              3000000 /* Up to 3 seconds - worst case */
981 #define ICH_FLASH_CYCLE_REPEAT_COUNT         10      /* 10 cycles */
982 #define ICH_FLASH_SEG_SIZE_256               256
983 #define ICH_FLASH_SEG_SIZE_4K                4096
984 #define ICH_FLASH_SEG_SIZE_64K               65536
985 
986 #define ICH_CYCLE_READ                       0x0
987 #define ICH_CYCLE_RESERVED                   0x1
988 #define ICH_CYCLE_WRITE                      0x2
989 #define ICH_CYCLE_ERASE                      0x3
990 
991 #define ICH_FLASH_GFPREG   0x0000
992 #define ICH_FLASH_HSFSTS   0x0004 /* Flash Status Register */
993 #define HSFSTS_DONE		0x0001 /* Flash Cycle Done */
994 #define HSFSTS_ERR		0x0002 /* Flash Cycle Error */
995 #define HSFSTS_DAEL		0x0004 /* Direct Access error Log */
996 #define HSFSTS_ERSZ_MASK	0x0018 /* Block/Sector Erase Size */
997 #define HSFSTS_ERSZ_SHIFT	3
998 #define HSFSTS_FLINPRO		0x0020 /* flash SPI cycle in Progress */
999 #define HSFSTS_FLDVAL		0x4000 /* Flash Descriptor Valid */
1000 #define HSFSTS_FLLK		0x8000 /* Flash Configuration Lock-Down */
1001 #define ICH_FLASH_HSFCTL   0x0006 /* Flash control Register */
1002 #define HSFCTL_GO		0x0001 /* Flash Cycle Go */
1003 #define HSFCTL_CYCLE_MASK	0x0006 /* Flash Cycle */
1004 #define HSFCTL_CYCLE_SHIFT	1
1005 #define HSFCTL_BCOUNT_MASK	0x0300 /* Data Byte Count */
1006 #define HSFCTL_BCOUNT_SHIFT	8
1007 #define ICH_FLASH_FADDR    0x0008
1008 #define ICH_FLASH_FDATA0   0x0010
1009 #define ICH_FLASH_FRACC    0x0050
1010 #define ICH_FLASH_FREG0    0x0054
1011 #define ICH_FLASH_FREG1    0x0058
1012 #define ICH_FLASH_FREG2    0x005C
1013 #define ICH_FLASH_FREG3    0x0060
1014 #define ICH_FLASH_FPR0     0x0074
1015 #define ICH_FLASH_FPR1     0x0078
1016 #define ICH_FLASH_SSFSTS   0x0090
1017 #define ICH_FLASH_SSFCTL   0x0092
1018 #define ICH_FLASH_PREOP    0x0094
1019 #define ICH_FLASH_OPTYPE   0x0096
1020 #define ICH_FLASH_OPMENU   0x0098
1021 
1022 #define ICH_FLASH_REG_MAPSIZE      0x00A0
1023 #define ICH_FLASH_SECTOR_SIZE      4096
1024 #define ICH_GFPREG_BASE_MASK       0x1FFF
1025 #define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
1026 
1027 #define ICH_NVM_SIG_WORD	0x13
1028 #define ICH_NVM_SIG_MASK	0xc000
1029 #define ICH_NVM_VALID_SIG_MASK	0xc0
1030 #define ICH_NVM_SIG_VALUE	0x80
1031 
1032 /* for PCI express Capability registers */
1033 #define	WM_PCIE_DCSR2_16MS	0x00000005
1034 
1035 /* advanced TX descriptor for 82575 and newer */
1036 typedef union nq_txdesc {
1037 	struct {
1038 		uint64_t nqtxd_addr;
1039 		uint32_t nqtxd_cmdlen;
1040 		uint32_t nqtxd_fields;
1041 	} nqtx_data;
1042 	struct {
1043 		uint32_t nqtxc_vl_len;
1044 		uint32_t nqtxc_sn;
1045 		uint32_t nqtxc_cmd;
1046 		uint32_t nqtxc_mssidx;
1047 	} nqrx_ctx;
1048 } __packed nq_txdesc_t;
1049 
1050 
1051 /* Commands for nqtxd_cmdlen and nqtxc_cmd */
1052 #define	NQTX_CMD_EOP	(1U << 24)	/* end of packet */
1053 #define	NQTX_CMD_IFCS	(1U << 25)	/* insert FCS */
1054 #define	NQTX_CMD_RS	(1U << 27)	/* report status */
1055 #define	NQTX_CMD_DEXT	(1U << 29)	/* descriptor extension */
1056 #define	NQTX_CMD_VLE	(1U << 30)	/* VLAN enable */
1057 #define	NQTX_CMD_TSE	(1U << 31)	/* TCP segmentation enable */
1058 
1059 /* Descriptor types (if DEXT is set) */
1060 #define	NQTX_DTYP_C	(2U << 20)	/* context */
1061 #define	NQTX_DTYP_D	(3U << 20)	/* data */
1062 
1063 #define NQTXD_FIELDS_IDX_SHIFT		4	/* context index shift */
1064 #define NQTXD_FIELDS_IDX_MASK		0xf
1065 #define NQTXD_FIELDS_PAYLEN_SHIFT	14	/* payload len shift */
1066 #define NQTXD_FIELDS_PAYLEN_MASK	0x3ffff
1067 
1068 #define NQTXD_FIELDS_IXSM		(1U << 8) /* do IP checksum */
1069 #define NQTXD_FIELDS_TUXSM		(1U << 9) /* do TCP/UDP checksum */
1070 
1071 #define NQTXC_VLLEN_IPLEN_SHIFT		0	/* IP header len */
1072 #define NQTXC_VLLEN_IPLEN_MASK		0x1ff
1073 #define NQTXC_VLLEN_MACLEN_SHIFT	9	/* MAC header len */
1074 #define NQTXC_VLLEN_MACLEN_MASK		0x7f
1075 #define NQTXC_VLLEN_VLAN_SHIFT		16	/* vlan number */
1076 #define NQTXC_VLLEN_VLAN_MASK		0xffff
1077 
1078 #define NQTXC_CMD_MKRLOC_SHIFT		0	/* IP checksum offset */
1079 #define NQTXC_CMD_MKRLOC_MASK		0x1ff
1080 #define NQTXC_CMD_SNAP			(1U << 9)
1081 #define NQTXC_CMD_IP4			(1U << 10)
1082 #define NQTXC_CMD_IP6			(0U << 10)
1083 #define NQTXC_CMD_TCP			(1U << 11)
1084 #define NQTXC_CMD_UDP			(0U << 11)
1085 #define NQTXC_MSSIDX_IDX_SHIFT		4	/* context index shift */
1086 #define NQTXC_MSSIDX_IDX_MASK		0xf
1087 #define NQTXC_MSSIDX_L4LEN_SHIFT	8	/* L4 header len shift */
1088 #define NQTXC_MSSIDX_L4LEN_MASK		0xff
1089 #define NQTXC_MSSIDX_MSS_SHIFT		16	/* MSS */
1090 #define NQTXC_MSSIDX_MSS_MASK		0xffff
1091