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