if_wm.c revision 1.225 1 /* $NetBSD: if_wm.c,v 1.225 2011/11/28 18:21:46 bouyer Exp $ */
2
3 /*
4 * Copyright (c) 2001, 2002, 2003, 2004 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-2005, 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 * Device driver for the Intel i8254x family of Gigabit Ethernet chips.
72 *
73 * TODO (in order of importance):
74 *
75 * - Rework how parameters are loaded from the EEPROM.
76 */
77
78 #include <sys/cdefs.h>
79 __KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.225 2011/11/28 18:21:46 bouyer Exp $");
80
81 #include "rnd.h"
82
83 #include <sys/param.h>
84 #include <sys/systm.h>
85 #include <sys/callout.h>
86 #include <sys/mbuf.h>
87 #include <sys/malloc.h>
88 #include <sys/kernel.h>
89 #include <sys/socket.h>
90 #include <sys/ioctl.h>
91 #include <sys/errno.h>
92 #include <sys/device.h>
93 #include <sys/queue.h>
94 #include <sys/syslog.h>
95
96 #if NRND > 0
97 #include <sys/rnd.h>
98 #endif
99
100 #include <net/if.h>
101 #include <net/if_dl.h>
102 #include <net/if_media.h>
103 #include <net/if_ether.h>
104
105 #include <net/bpf.h>
106
107 #include <netinet/in.h> /* XXX for struct ip */
108 #include <netinet/in_systm.h> /* XXX for struct ip */
109 #include <netinet/ip.h> /* XXX for struct ip */
110 #include <netinet/ip6.h> /* XXX for struct ip6_hdr */
111 #include <netinet/tcp.h> /* XXX for struct tcphdr */
112
113 #include <sys/bus.h>
114 #include <sys/intr.h>
115 #include <machine/endian.h>
116
117 #include <dev/mii/mii.h>
118 #include <dev/mii/miivar.h>
119 #include <dev/mii/miidevs.h>
120 #include <dev/mii/mii_bitbang.h>
121 #include <dev/mii/ikphyreg.h>
122 #include <dev/mii/igphyreg.h>
123 #include <dev/mii/igphyvar.h>
124 #include <dev/mii/inbmphyreg.h>
125
126 #include <dev/pci/pcireg.h>
127 #include <dev/pci/pcivar.h>
128 #include <dev/pci/pcidevs.h>
129
130 #include <dev/pci/if_wmreg.h>
131 #include <dev/pci/if_wmvar.h>
132
133 #ifdef WM_DEBUG
134 #define WM_DEBUG_LINK 0x01
135 #define WM_DEBUG_TX 0x02
136 #define WM_DEBUG_RX 0x04
137 #define WM_DEBUG_GMII 0x08
138 #define WM_DEBUG_MANAGE 0x10
139 int wm_debug = WM_DEBUG_TX | WM_DEBUG_RX | WM_DEBUG_LINK | WM_DEBUG_GMII
140 | WM_DEBUG_MANAGE;
141
142 #define DPRINTF(x, y) if (wm_debug & (x)) printf y
143 #else
144 #define DPRINTF(x, y) /* nothing */
145 #endif /* WM_DEBUG */
146
147 /*
148 * Transmit descriptor list size. Due to errata, we can only have
149 * 256 hardware descriptors in the ring on < 82544, but we use 4096
150 * on >= 82544. We tell the upper layers that they can queue a lot
151 * of packets, and we go ahead and manage up to 64 (16 for the i82547)
152 * of them at a time.
153 *
154 * We allow up to 256 (!) DMA segments per packet. Pathological packet
155 * chains containing many small mbufs have been observed in zero-copy
156 * situations with jumbo frames.
157 */
158 #define WM_NTXSEGS 256
159 #define WM_IFQUEUELEN 256
160 #define WM_TXQUEUELEN_MAX 64
161 #define WM_TXQUEUELEN_MAX_82547 16
162 #define WM_TXQUEUELEN(sc) ((sc)->sc_txnum)
163 #define WM_TXQUEUELEN_MASK(sc) (WM_TXQUEUELEN(sc) - 1)
164 #define WM_TXQUEUE_GC(sc) (WM_TXQUEUELEN(sc) / 8)
165 #define WM_NTXDESC_82542 256
166 #define WM_NTXDESC_82544 4096
167 #define WM_NTXDESC(sc) ((sc)->sc_ntxdesc)
168 #define WM_NTXDESC_MASK(sc) (WM_NTXDESC(sc) - 1)
169 #define WM_TXDESCSIZE(sc) (WM_NTXDESC(sc) * sizeof(wiseman_txdesc_t))
170 #define WM_NEXTTX(sc, x) (((x) + 1) & WM_NTXDESC_MASK(sc))
171 #define WM_NEXTTXS(sc, x) (((x) + 1) & WM_TXQUEUELEN_MASK(sc))
172
173 #define WM_MAXTXDMA round_page(IP_MAXPACKET) /* for TSO */
174
175 /*
176 * Receive descriptor list size. We have one Rx buffer for normal
177 * sized packets. Jumbo packets consume 5 Rx buffers for a full-sized
178 * packet. We allocate 256 receive descriptors, each with a 2k
179 * buffer (MCLBYTES), which gives us room for 50 jumbo packets.
180 */
181 #define WM_NRXDESC 256
182 #define WM_NRXDESC_MASK (WM_NRXDESC - 1)
183 #define WM_NEXTRX(x) (((x) + 1) & WM_NRXDESC_MASK)
184 #define WM_PREVRX(x) (((x) - 1) & WM_NRXDESC_MASK)
185
186 /*
187 * Control structures are DMA'd to the i82542 chip. We allocate them in
188 * a single clump that maps to a single DMA segment to make several things
189 * easier.
190 */
191 struct wm_control_data_82544 {
192 /*
193 * The receive descriptors.
194 */
195 wiseman_rxdesc_t wcd_rxdescs[WM_NRXDESC];
196
197 /*
198 * The transmit descriptors. Put these at the end, because
199 * we might use a smaller number of them.
200 */
201 wiseman_txdesc_t wcd_txdescs[WM_NTXDESC_82544];
202 };
203
204 struct wm_control_data_82542 {
205 wiseman_rxdesc_t wcd_rxdescs[WM_NRXDESC];
206 wiseman_txdesc_t wcd_txdescs[WM_NTXDESC_82542];
207 };
208
209 #define WM_CDOFF(x) offsetof(struct wm_control_data_82544, x)
210 #define WM_CDTXOFF(x) WM_CDOFF(wcd_txdescs[(x)])
211 #define WM_CDRXOFF(x) WM_CDOFF(wcd_rxdescs[(x)])
212
213 /*
214 * Software state for transmit jobs.
215 */
216 struct wm_txsoft {
217 struct mbuf *txs_mbuf; /* head of our mbuf chain */
218 bus_dmamap_t txs_dmamap; /* our DMA map */
219 int txs_firstdesc; /* first descriptor in packet */
220 int txs_lastdesc; /* last descriptor in packet */
221 int txs_ndesc; /* # of descriptors used */
222 };
223
224 /*
225 * Software state for receive buffers. Each descriptor gets a
226 * 2k (MCLBYTES) buffer and a DMA map. For packets which fill
227 * more than one buffer, we chain them together.
228 */
229 struct wm_rxsoft {
230 struct mbuf *rxs_mbuf; /* head of our mbuf chain */
231 bus_dmamap_t rxs_dmamap; /* our DMA map */
232 };
233
234 #define WM_LINKUP_TIMEOUT 50
235
236 static uint16_t swfwphysem[] = {
237 SWFW_PHY0_SM,
238 SWFW_PHY1_SM,
239 SWFW_PHY2_SM,
240 SWFW_PHY3_SM
241 };
242
243 /*
244 * Software state per device.
245 */
246 struct wm_softc {
247 device_t sc_dev; /* generic device information */
248 bus_space_tag_t sc_st; /* bus space tag */
249 bus_space_handle_t sc_sh; /* bus space handle */
250 bus_size_t sc_ss; /* bus space size */
251 bus_space_tag_t sc_iot; /* I/O space tag */
252 bus_space_handle_t sc_ioh; /* I/O space handle */
253 bus_size_t sc_ios; /* I/O space size */
254 bus_space_tag_t sc_flasht; /* flash registers space tag */
255 bus_space_handle_t sc_flashh; /* flash registers space handle */
256 bus_dma_tag_t sc_dmat; /* bus DMA tag */
257
258 struct ethercom sc_ethercom; /* ethernet common data */
259 struct mii_data sc_mii; /* MII/media information */
260
261 pci_chipset_tag_t sc_pc;
262 pcitag_t sc_pcitag;
263 int sc_bus_speed; /* PCI/PCIX bus speed */
264 int sc_pcixe_capoff; /* PCI[Xe] capability register offset */
265
266 const struct wm_product *sc_wmp; /* Pointer to the wm_product entry */
267 wm_chip_type sc_type; /* MAC type */
268 int sc_rev; /* MAC revision */
269 wm_phy_type sc_phytype; /* PHY type */
270 int sc_funcid; /* unit number of the chip (0 to 3) */
271 int sc_flags; /* flags; see below */
272 int sc_if_flags; /* last if_flags */
273 int sc_flowflags; /* 802.3x flow control flags */
274 int sc_align_tweak;
275
276 void *sc_ih; /* interrupt cookie */
277 callout_t sc_tick_ch; /* tick callout */
278
279 int sc_ee_addrbits; /* EEPROM address bits */
280 int sc_ich8_flash_base;
281 int sc_ich8_flash_bank_size;
282 int sc_nvm_k1_enabled;
283
284 /*
285 * Software state for the transmit and receive descriptors.
286 */
287 int sc_txnum; /* must be a power of two */
288 struct wm_txsoft sc_txsoft[WM_TXQUEUELEN_MAX];
289 struct wm_rxsoft sc_rxsoft[WM_NRXDESC];
290
291 /*
292 * Control data structures.
293 */
294 int sc_ntxdesc; /* must be a power of two */
295 struct wm_control_data_82544 *sc_control_data;
296 bus_dmamap_t sc_cddmamap; /* control data DMA map */
297 bus_dma_segment_t sc_cd_seg; /* control data segment */
298 int sc_cd_rseg; /* real number of control segment */
299 size_t sc_cd_size; /* control data size */
300 #define sc_cddma sc_cddmamap->dm_segs[0].ds_addr
301 #define sc_txdescs sc_control_data->wcd_txdescs
302 #define sc_rxdescs sc_control_data->wcd_rxdescs
303
304 #ifdef WM_EVENT_COUNTERS
305 /* Event counters. */
306 struct evcnt sc_ev_txsstall; /* Tx stalled due to no txs */
307 struct evcnt sc_ev_txdstall; /* Tx stalled due to no txd */
308 struct evcnt sc_ev_txfifo_stall;/* Tx FIFO stalls (82547) */
309 struct evcnt sc_ev_txdw; /* Tx descriptor interrupts */
310 struct evcnt sc_ev_txqe; /* Tx queue empty interrupts */
311 struct evcnt sc_ev_rxintr; /* Rx interrupts */
312 struct evcnt sc_ev_linkintr; /* Link interrupts */
313
314 struct evcnt sc_ev_rxipsum; /* IP checksums checked in-bound */
315 struct evcnt sc_ev_rxtusum; /* TCP/UDP cksums checked in-bound */
316 struct evcnt sc_ev_txipsum; /* IP checksums comp. out-bound */
317 struct evcnt sc_ev_txtusum; /* TCP/UDP cksums comp. out-bound */
318 struct evcnt sc_ev_txtusum6; /* TCP/UDP v6 cksums comp. out-bound */
319 struct evcnt sc_ev_txtso; /* TCP seg offload out-bound (IPv4) */
320 struct evcnt sc_ev_txtso6; /* TCP seg offload out-bound (IPv6) */
321 struct evcnt sc_ev_txtsopain; /* painful header manip. for TSO */
322
323 struct evcnt sc_ev_txseg[WM_NTXSEGS]; /* Tx packets w/ N segments */
324 struct evcnt sc_ev_txdrop; /* Tx packets dropped (too many segs) */
325
326 struct evcnt sc_ev_tu; /* Tx underrun */
327
328 struct evcnt sc_ev_tx_xoff; /* Tx PAUSE(!0) frames */
329 struct evcnt sc_ev_tx_xon; /* Tx PAUSE(0) frames */
330 struct evcnt sc_ev_rx_xoff; /* Rx PAUSE(!0) frames */
331 struct evcnt sc_ev_rx_xon; /* Rx PAUSE(0) frames */
332 struct evcnt sc_ev_rx_macctl; /* Rx Unsupported */
333 #endif /* WM_EVENT_COUNTERS */
334
335 bus_addr_t sc_tdt_reg; /* offset of TDT register */
336
337 int sc_txfree; /* number of free Tx descriptors */
338 int sc_txnext; /* next ready Tx descriptor */
339
340 int sc_txsfree; /* number of free Tx jobs */
341 int sc_txsnext; /* next free Tx job */
342 int sc_txsdirty; /* dirty Tx jobs */
343
344 /* These 5 variables are used only on the 82547. */
345 int sc_txfifo_size; /* Tx FIFO size */
346 int sc_txfifo_head; /* current head of FIFO */
347 uint32_t sc_txfifo_addr; /* internal address of start of FIFO */
348 int sc_txfifo_stall; /* Tx FIFO is stalled */
349 callout_t sc_txfifo_ch; /* Tx FIFO stall work-around timer */
350
351 bus_addr_t sc_rdt_reg; /* offset of RDT register */
352
353 int sc_rxptr; /* next ready Rx descriptor/queue ent */
354 int sc_rxdiscard;
355 int sc_rxlen;
356 struct mbuf *sc_rxhead;
357 struct mbuf *sc_rxtail;
358 struct mbuf **sc_rxtailp;
359
360 uint32_t sc_ctrl; /* prototype CTRL register */
361 #if 0
362 uint32_t sc_ctrl_ext; /* prototype CTRL_EXT register */
363 #endif
364 uint32_t sc_icr; /* prototype interrupt bits */
365 uint32_t sc_itr; /* prototype intr throttling reg */
366 uint32_t sc_tctl; /* prototype TCTL register */
367 uint32_t sc_rctl; /* prototype RCTL register */
368 uint32_t sc_txcw; /* prototype TXCW register */
369 uint32_t sc_tipg; /* prototype TIPG register */
370 uint32_t sc_fcrtl; /* prototype FCRTL register */
371 uint32_t sc_pba; /* prototype PBA register */
372
373 int sc_tbi_linkup; /* TBI link status */
374 int sc_tbi_anegticks; /* autonegotiation ticks */
375 int sc_tbi_ticks; /* tbi ticks */
376 int sc_tbi_nrxcfg; /* count of ICR_RXCFG */
377 int sc_tbi_lastnrxcfg; /* count of ICR_RXCFG (on last tick) */
378
379 int sc_mchash_type; /* multicast filter offset */
380
381 #if NRND > 0
382 krndsource_t rnd_source; /* random source */
383 #endif
384 };
385
386 #define WM_RXCHAIN_RESET(sc) \
387 do { \
388 (sc)->sc_rxtailp = &(sc)->sc_rxhead; \
389 *(sc)->sc_rxtailp = NULL; \
390 (sc)->sc_rxlen = 0; \
391 } while (/*CONSTCOND*/0)
392
393 #define WM_RXCHAIN_LINK(sc, m) \
394 do { \
395 *(sc)->sc_rxtailp = (sc)->sc_rxtail = (m); \
396 (sc)->sc_rxtailp = &(m)->m_next; \
397 } while (/*CONSTCOND*/0)
398
399 #ifdef WM_EVENT_COUNTERS
400 #define WM_EVCNT_INCR(ev) (ev)->ev_count++
401 #define WM_EVCNT_ADD(ev, val) (ev)->ev_count += (val)
402 #else
403 #define WM_EVCNT_INCR(ev) /* nothing */
404 #define WM_EVCNT_ADD(ev, val) /* nothing */
405 #endif
406
407 #define CSR_READ(sc, reg) \
408 bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
409 #define CSR_WRITE(sc, reg, val) \
410 bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
411 #define CSR_WRITE_FLUSH(sc) \
412 (void) CSR_READ((sc), WMREG_STATUS)
413
414 #define ICH8_FLASH_READ32(sc, reg) \
415 bus_space_read_4((sc)->sc_flasht, (sc)->sc_flashh, (reg))
416 #define ICH8_FLASH_WRITE32(sc, reg, data) \
417 bus_space_write_4((sc)->sc_flasht, (sc)->sc_flashh, (reg), (data))
418
419 #define ICH8_FLASH_READ16(sc, reg) \
420 bus_space_read_2((sc)->sc_flasht, (sc)->sc_flashh, (reg))
421 #define ICH8_FLASH_WRITE16(sc, reg, data) \
422 bus_space_write_2((sc)->sc_flasht, (sc)->sc_flashh, (reg), (data))
423
424 #define WM_CDTXADDR(sc, x) ((sc)->sc_cddma + WM_CDTXOFF((x)))
425 #define WM_CDRXADDR(sc, x) ((sc)->sc_cddma + WM_CDRXOFF((x)))
426
427 #define WM_CDTXADDR_LO(sc, x) (WM_CDTXADDR((sc), (x)) & 0xffffffffU)
428 #define WM_CDTXADDR_HI(sc, x) \
429 (sizeof(bus_addr_t) == 8 ? \
430 (uint64_t)WM_CDTXADDR((sc), (x)) >> 32 : 0)
431
432 #define WM_CDRXADDR_LO(sc, x) (WM_CDRXADDR((sc), (x)) & 0xffffffffU)
433 #define WM_CDRXADDR_HI(sc, x) \
434 (sizeof(bus_addr_t) == 8 ? \
435 (uint64_t)WM_CDRXADDR((sc), (x)) >> 32 : 0)
436
437 #define WM_CDTXSYNC(sc, x, n, ops) \
438 do { \
439 int __x, __n; \
440 \
441 __x = (x); \
442 __n = (n); \
443 \
444 /* If it will wrap around, sync to the end of the ring. */ \
445 if ((__x + __n) > WM_NTXDESC(sc)) { \
446 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \
447 WM_CDTXOFF(__x), sizeof(wiseman_txdesc_t) * \
448 (WM_NTXDESC(sc) - __x), (ops)); \
449 __n -= (WM_NTXDESC(sc) - __x); \
450 __x = 0; \
451 } \
452 \
453 /* Now sync whatever is left. */ \
454 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \
455 WM_CDTXOFF(__x), sizeof(wiseman_txdesc_t) * __n, (ops)); \
456 } while (/*CONSTCOND*/0)
457
458 #define WM_CDRXSYNC(sc, x, ops) \
459 do { \
460 bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap, \
461 WM_CDRXOFF((x)), sizeof(wiseman_rxdesc_t), (ops)); \
462 } while (/*CONSTCOND*/0)
463
464 #define WM_INIT_RXDESC(sc, x) \
465 do { \
466 struct wm_rxsoft *__rxs = &(sc)->sc_rxsoft[(x)]; \
467 wiseman_rxdesc_t *__rxd = &(sc)->sc_rxdescs[(x)]; \
468 struct mbuf *__m = __rxs->rxs_mbuf; \
469 \
470 /* \
471 * Note: We scoot the packet forward 2 bytes in the buffer \
472 * so that the payload after the Ethernet header is aligned \
473 * to a 4-byte boundary. \
474 * \
475 * XXX BRAINDAMAGE ALERT! \
476 * The stupid chip uses the same size for every buffer, which \
477 * is set in the Receive Control register. We are using the 2K \
478 * size option, but what we REALLY want is (2K - 2)! For this \
479 * reason, we can't "scoot" packets longer than the standard \
480 * Ethernet MTU. On strict-alignment platforms, if the total \
481 * size exceeds (2K - 2) we set align_tweak to 0 and let \
482 * the upper layer copy the headers. \
483 */ \
484 __m->m_data = __m->m_ext.ext_buf + (sc)->sc_align_tweak; \
485 \
486 wm_set_dma_addr(&__rxd->wrx_addr, \
487 __rxs->rxs_dmamap->dm_segs[0].ds_addr + (sc)->sc_align_tweak); \
488 __rxd->wrx_len = 0; \
489 __rxd->wrx_cksum = 0; \
490 __rxd->wrx_status = 0; \
491 __rxd->wrx_errors = 0; \
492 __rxd->wrx_special = 0; \
493 WM_CDRXSYNC((sc), (x), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); \
494 \
495 CSR_WRITE((sc), (sc)->sc_rdt_reg, (x)); \
496 } while (/*CONSTCOND*/0)
497
498 static void wm_start(struct ifnet *);
499 static void wm_watchdog(struct ifnet *);
500 static int wm_ifflags_cb(struct ethercom *);
501 static int wm_ioctl(struct ifnet *, u_long, void *);
502 static int wm_init(struct ifnet *);
503 static void wm_stop(struct ifnet *, int);
504 static bool wm_suspend(device_t, const pmf_qual_t *);
505 static bool wm_resume(device_t, const pmf_qual_t *);
506
507 static void wm_reset(struct wm_softc *);
508 static void wm_rxdrain(struct wm_softc *);
509 static int wm_add_rxbuf(struct wm_softc *, int);
510 static int wm_read_eeprom(struct wm_softc *, int, int, u_int16_t *);
511 static int wm_read_eeprom_eerd(struct wm_softc *, int, int, u_int16_t *);
512 static int wm_validate_eeprom_checksum(struct wm_softc *);
513 static int wm_check_alt_mac_addr(struct wm_softc *);
514 static int wm_read_mac_addr(struct wm_softc *, uint8_t *);
515 static void wm_tick(void *);
516
517 static void wm_set_filter(struct wm_softc *);
518 static void wm_set_vlan(struct wm_softc *);
519
520 static int wm_intr(void *);
521 static void wm_txintr(struct wm_softc *);
522 static void wm_rxintr(struct wm_softc *);
523 static void wm_linkintr(struct wm_softc *, uint32_t);
524
525 static void wm_tbi_mediainit(struct wm_softc *);
526 static int wm_tbi_mediachange(struct ifnet *);
527 static void wm_tbi_mediastatus(struct ifnet *, struct ifmediareq *);
528
529 static void wm_tbi_set_linkled(struct wm_softc *);
530 static void wm_tbi_check_link(struct wm_softc *);
531
532 static void wm_gmii_reset(struct wm_softc *);
533
534 static int wm_gmii_i82543_readreg(device_t, int, int);
535 static void wm_gmii_i82543_writereg(device_t, int, int, int);
536
537 static int wm_gmii_i82544_readreg(device_t, int, int);
538 static void wm_gmii_i82544_writereg(device_t, int, int, int);
539
540 static int wm_gmii_i80003_readreg(device_t, int, int);
541 static void wm_gmii_i80003_writereg(device_t, int, int, int);
542 static int wm_gmii_bm_readreg(device_t, int, int);
543 static void wm_gmii_bm_writereg(device_t, int, int, int);
544 static int wm_gmii_hv_readreg(device_t, int, int);
545 static void wm_gmii_hv_writereg(device_t, int, int, int);
546 static int wm_sgmii_readreg(device_t, int, int);
547 static void wm_sgmii_writereg(device_t, int, int, int);
548
549 static void wm_gmii_statchg(device_t);
550
551 static void wm_gmii_mediainit(struct wm_softc *, pci_product_id_t);
552 static int wm_gmii_mediachange(struct ifnet *);
553 static void wm_gmii_mediastatus(struct ifnet *, struct ifmediareq *);
554
555 static int wm_kmrn_readreg(struct wm_softc *, int);
556 static void wm_kmrn_writereg(struct wm_softc *, int, int);
557
558 static void wm_set_spiaddrbits(struct wm_softc *);
559 static int wm_match(device_t, cfdata_t, void *);
560 static void wm_attach(device_t, device_t, void *);
561 static int wm_detach(device_t, int);
562 static int wm_is_onboard_nvm_eeprom(struct wm_softc *);
563 static void wm_get_auto_rd_done(struct wm_softc *);
564 static void wm_lan_init_done(struct wm_softc *);
565 static void wm_get_cfg_done(struct wm_softc *);
566 static int wm_get_swsm_semaphore(struct wm_softc *);
567 static void wm_put_swsm_semaphore(struct wm_softc *);
568 static int wm_poll_eerd_eewr_done(struct wm_softc *, int);
569 static int wm_get_swfw_semaphore(struct wm_softc *, uint16_t);
570 static void wm_put_swfw_semaphore(struct wm_softc *, uint16_t);
571 static int wm_get_swfwhw_semaphore(struct wm_softc *);
572 static void wm_put_swfwhw_semaphore(struct wm_softc *);
573
574 static int wm_read_eeprom_ich8(struct wm_softc *, int, int, uint16_t *);
575 static int32_t wm_ich8_cycle_init(struct wm_softc *);
576 static int32_t wm_ich8_flash_cycle(struct wm_softc *, uint32_t);
577 static int32_t wm_read_ich8_data(struct wm_softc *, uint32_t,
578 uint32_t, uint16_t *);
579 static int32_t wm_read_ich8_byte(struct wm_softc *, uint32_t, uint8_t *);
580 static int32_t wm_read_ich8_word(struct wm_softc *, uint32_t, uint16_t *);
581 static void wm_82547_txfifo_stall(void *);
582 static void wm_gate_hw_phy_config_ich8lan(struct wm_softc *, int);
583 static int wm_check_mng_mode(struct wm_softc *);
584 static int wm_check_mng_mode_ich8lan(struct wm_softc *);
585 static int wm_check_mng_mode_82574(struct wm_softc *);
586 static int wm_check_mng_mode_generic(struct wm_softc *);
587 static int wm_enable_mng_pass_thru(struct wm_softc *);
588 static int wm_check_reset_block(struct wm_softc *);
589 static void wm_get_hw_control(struct wm_softc *);
590 static int wm_check_for_link(struct wm_softc *);
591 static void wm_kmrn_lock_loss_workaround_ich8lan(struct wm_softc *);
592 static void wm_gig_downshift_workaround_ich8lan(struct wm_softc *);
593 #ifdef WM_WOL
594 static void wm_igp3_phy_powerdown_workaround_ich8lan(struct wm_softc *);
595 #endif
596 static void wm_hv_phy_workaround_ich8lan(struct wm_softc *);
597 static void wm_lv_phy_workaround_ich8lan(struct wm_softc *);
598 static void wm_k1_gig_workaround_hv(struct wm_softc *, int);
599 static void wm_set_mdio_slow_mode_hv(struct wm_softc *);
600 static void wm_configure_k1_ich8lan(struct wm_softc *, int);
601 static void wm_smbustopci(struct wm_softc *);
602 static void wm_set_pcie_completion_timeout(struct wm_softc *);
603 static void wm_reset_init_script_82575(struct wm_softc *);
604 static void wm_release_manageability(struct wm_softc *);
605 static void wm_release_hw_control(struct wm_softc *);
606 static void wm_get_wakeup(struct wm_softc *);
607 #ifdef WM_WOL
608 static void wm_enable_phy_wakeup(struct wm_softc *);
609 static void wm_enable_wakeup(struct wm_softc *);
610 #endif
611 static void wm_init_manageability(struct wm_softc *);
612
613 CFATTACH_DECL3_NEW(wm, sizeof(struct wm_softc),
614 wm_match, wm_attach, wm_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
615
616 /*
617 * Devices supported by this driver.
618 */
619 static const struct wm_product {
620 pci_vendor_id_t wmp_vendor;
621 pci_product_id_t wmp_product;
622 const char *wmp_name;
623 wm_chip_type wmp_type;
624 int wmp_flags;
625 #define WMP_F_1000X 0x01
626 #define WMP_F_1000T 0x02
627 #define WMP_F_SERDES 0x04
628 } wm_products[] = {
629 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82542,
630 "Intel i82542 1000BASE-X Ethernet",
631 WM_T_82542_2_1, WMP_F_1000X },
632
633 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_FIBER,
634 "Intel i82543GC 1000BASE-X Ethernet",
635 WM_T_82543, WMP_F_1000X },
636
637 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_COPPER,
638 "Intel i82543GC 1000BASE-T Ethernet",
639 WM_T_82543, WMP_F_1000T },
640
641 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_COPPER,
642 "Intel i82544EI 1000BASE-T Ethernet",
643 WM_T_82544, WMP_F_1000T },
644
645 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_FIBER,
646 "Intel i82544EI 1000BASE-X Ethernet",
647 WM_T_82544, WMP_F_1000X },
648
649 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_COPPER,
650 "Intel i82544GC 1000BASE-T Ethernet",
651 WM_T_82544, WMP_F_1000T },
652
653 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_LOM,
654 "Intel i82544GC (LOM) 1000BASE-T Ethernet",
655 WM_T_82544, WMP_F_1000T },
656
657 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM,
658 "Intel i82540EM 1000BASE-T Ethernet",
659 WM_T_82540, WMP_F_1000T },
660
661 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM_LOM,
662 "Intel i82540EM (LOM) 1000BASE-T Ethernet",
663 WM_T_82540, WMP_F_1000T },
664
665 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LOM,
666 "Intel i82540EP 1000BASE-T Ethernet",
667 WM_T_82540, WMP_F_1000T },
668
669 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP,
670 "Intel i82540EP 1000BASE-T Ethernet",
671 WM_T_82540, WMP_F_1000T },
672
673 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LP,
674 "Intel i82540EP 1000BASE-T Ethernet",
675 WM_T_82540, WMP_F_1000T },
676
677 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_COPPER,
678 "Intel i82545EM 1000BASE-T Ethernet",
679 WM_T_82545, WMP_F_1000T },
680
681 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_COPPER,
682 "Intel i82545GM 1000BASE-T Ethernet",
683 WM_T_82545_3, WMP_F_1000T },
684
685 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_FIBER,
686 "Intel i82545GM 1000BASE-X Ethernet",
687 WM_T_82545_3, WMP_F_1000X },
688 #if 0
689 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_SERDES,
690 "Intel i82545GM Gigabit Ethernet (SERDES)",
691 WM_T_82545_3, WMP_F_SERDES },
692 #endif
693 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_COPPER,
694 "Intel i82546EB 1000BASE-T Ethernet",
695 WM_T_82546, WMP_F_1000T },
696
697 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_QUAD,
698 "Intel i82546EB 1000BASE-T Ethernet",
699 WM_T_82546, WMP_F_1000T },
700
701 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_FIBER,
702 "Intel i82545EM 1000BASE-X Ethernet",
703 WM_T_82545, WMP_F_1000X },
704
705 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_FIBER,
706 "Intel i82546EB 1000BASE-X Ethernet",
707 WM_T_82546, WMP_F_1000X },
708
709 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_COPPER,
710 "Intel i82546GB 1000BASE-T Ethernet",
711 WM_T_82546_3, WMP_F_1000T },
712
713 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_FIBER,
714 "Intel i82546GB 1000BASE-X Ethernet",
715 WM_T_82546_3, WMP_F_1000X },
716 #if 0
717 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_SERDES,
718 "Intel i82546GB Gigabit Ethernet (SERDES)",
719 WM_T_82546_3, WMP_F_SERDES },
720 #endif
721 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER,
722 "i82546GB quad-port Gigabit Ethernet",
723 WM_T_82546_3, WMP_F_1000T },
724
725 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER_KSP3,
726 "i82546GB quad-port Gigabit Ethernet (KSP3)",
727 WM_T_82546_3, WMP_F_1000T },
728
729 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_PCIE,
730 "Intel PRO/1000MT (82546GB)",
731 WM_T_82546_3, WMP_F_1000T },
732
733 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI,
734 "Intel i82541EI 1000BASE-T Ethernet",
735 WM_T_82541, WMP_F_1000T },
736
737 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER_LOM,
738 "Intel i82541ER (LOM) 1000BASE-T Ethernet",
739 WM_T_82541, WMP_F_1000T },
740
741 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI_MOBILE,
742 "Intel i82541EI Mobile 1000BASE-T Ethernet",
743 WM_T_82541, WMP_F_1000T },
744
745 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER,
746 "Intel i82541ER 1000BASE-T Ethernet",
747 WM_T_82541_2, WMP_F_1000T },
748
749 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI,
750 "Intel i82541GI 1000BASE-T Ethernet",
751 WM_T_82541_2, WMP_F_1000T },
752
753 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI_MOBILE,
754 "Intel i82541GI Mobile 1000BASE-T Ethernet",
755 WM_T_82541_2, WMP_F_1000T },
756
757 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541PI,
758 "Intel i82541PI 1000BASE-T Ethernet",
759 WM_T_82541_2, WMP_F_1000T },
760
761 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI,
762 "Intel i82547EI 1000BASE-T Ethernet",
763 WM_T_82547, WMP_F_1000T },
764
765 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI_MOBILE,
766 "Intel i82547EI Mobile 1000BASE-T Ethernet",
767 WM_T_82547, WMP_F_1000T },
768
769 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547GI,
770 "Intel i82547GI 1000BASE-T Ethernet",
771 WM_T_82547_2, WMP_F_1000T },
772
773 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_COPPER,
774 "Intel PRO/1000 PT (82571EB)",
775 WM_T_82571, WMP_F_1000T },
776
777 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_FIBER,
778 "Intel PRO/1000 PF (82571EB)",
779 WM_T_82571, WMP_F_1000X },
780 #if 0
781 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_SERDES,
782 "Intel PRO/1000 PB (82571EB)",
783 WM_T_82571, WMP_F_SERDES },
784 #endif
785 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_COPPER,
786 "Intel PRO/1000 QT (82571EB)",
787 WM_T_82571, WMP_F_1000T },
788
789 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_COPPER,
790 "Intel i82572EI 1000baseT Ethernet",
791 WM_T_82572, WMP_F_1000T },
792
793 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571GB_QUAD_COPPER,
794 "Intel PRO/1000 PT Quad Port Server Adapter",
795 WM_T_82571, WMP_F_1000T, },
796
797 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_FIBER,
798 "Intel i82572EI 1000baseX Ethernet",
799 WM_T_82572, WMP_F_1000X },
800 #if 0
801 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_SERDES,
802 "Intel i82572EI Gigabit Ethernet (SERDES)",
803 WM_T_82572, WMP_F_SERDES },
804 #endif
805
806 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI,
807 "Intel i82572EI 1000baseT Ethernet",
808 WM_T_82572, WMP_F_1000T },
809
810 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E,
811 "Intel i82573E",
812 WM_T_82573, WMP_F_1000T },
813
814 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E_IAMT,
815 "Intel i82573E IAMT",
816 WM_T_82573, WMP_F_1000T },
817
818 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573L,
819 "Intel i82573L Gigabit Ethernet",
820 WM_T_82573, WMP_F_1000T },
821
822 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82574L,
823 "Intel i82574L",
824 WM_T_82574, WMP_F_1000T },
825
826 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82583V,
827 "Intel i82583V",
828 WM_T_82583, WMP_F_1000T },
829
830 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_CPR_DPT,
831 "i80003 dual 1000baseT Ethernet",
832 WM_T_80003, WMP_F_1000T },
833
834 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_FIB_DPT,
835 "i80003 dual 1000baseX Ethernet",
836 WM_T_80003, WMP_F_1000T },
837 #if 0
838 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_SDS_DPT,
839 "Intel i80003ES2 dual Gigabit Ethernet (SERDES)",
840 WM_T_80003, WMP_F_SERDES },
841 #endif
842
843 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_CPR_SPT,
844 "Intel i80003 1000baseT Ethernet",
845 WM_T_80003, WMP_F_1000T },
846 #if 0
847 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_SDS_SPT,
848 "Intel i80003 Gigabit Ethernet (SERDES)",
849 WM_T_80003, WMP_F_SERDES },
850 #endif
851 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_M_AMT,
852 "Intel i82801H (M_AMT) LAN Controller",
853 WM_T_ICH8, WMP_F_1000T },
854 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_AMT,
855 "Intel i82801H (AMT) LAN Controller",
856 WM_T_ICH8, WMP_F_1000T },
857 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_LAN,
858 "Intel i82801H LAN Controller",
859 WM_T_ICH8, WMP_F_1000T },
860 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_LAN,
861 "Intel i82801H (IFE) LAN Controller",
862 WM_T_ICH8, WMP_F_1000T },
863 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_M_LAN,
864 "Intel i82801H (M) LAN Controller",
865 WM_T_ICH8, WMP_F_1000T },
866 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_GT,
867 "Intel i82801H IFE (GT) LAN Controller",
868 WM_T_ICH8, WMP_F_1000T },
869 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_G,
870 "Intel i82801H IFE (G) LAN Controller",
871 WM_T_ICH8, WMP_F_1000T },
872 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_AMT,
873 "82801I (AMT) LAN Controller",
874 WM_T_ICH9, WMP_F_1000T },
875 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE,
876 "82801I LAN Controller",
877 WM_T_ICH9, WMP_F_1000T },
878 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE_G,
879 "82801I (G) LAN Controller",
880 WM_T_ICH9, WMP_F_1000T },
881 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE_GT,
882 "82801I (GT) LAN Controller",
883 WM_T_ICH9, WMP_F_1000T },
884 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_C,
885 "82801I (C) LAN Controller",
886 WM_T_ICH9, WMP_F_1000T },
887 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_M,
888 "82801I mobile LAN Controller",
889 WM_T_ICH9, WMP_F_1000T },
890 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IGP_M_V,
891 "82801I mobile (V) LAN Controller",
892 WM_T_ICH9, WMP_F_1000T },
893 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_M_AMT,
894 "82801I mobile (AMT) LAN Controller",
895 WM_T_ICH9, WMP_F_1000T },
896 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_BM,
897 "82567LM-4 LAN Controller",
898 WM_T_ICH9, WMP_F_1000T },
899 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_82567V_3,
900 "82567V-3 LAN Controller",
901 WM_T_ICH9, WMP_F_1000T },
902 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_LM,
903 "82567LM-2 LAN Controller",
904 WM_T_ICH10, WMP_F_1000T },
905 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_LF,
906 "82567LF-2 LAN Controller",
907 WM_T_ICH10, WMP_F_1000T },
908 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_LM,
909 "82567LM-3 LAN Controller",
910 WM_T_ICH10, WMP_F_1000T },
911 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_LF,
912 "82567LF-3 LAN Controller",
913 WM_T_ICH10, WMP_F_1000T },
914 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_V,
915 "82567V-2 LAN Controller",
916 WM_T_ICH10, WMP_F_1000T },
917 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_V,
918 "82567V-3? LAN Controller",
919 WM_T_ICH10, WMP_F_1000T },
920 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_HANKSVILLE,
921 "HANKSVILLE LAN Controller",
922 WM_T_ICH10, WMP_F_1000T },
923 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_M_LM,
924 "PCH LAN (82577LM) Controller",
925 WM_T_PCH, WMP_F_1000T },
926 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_M_LC,
927 "PCH LAN (82577LC) Controller",
928 WM_T_PCH, WMP_F_1000T },
929 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_D_DM,
930 "PCH LAN (82578DM) Controller",
931 WM_T_PCH, WMP_F_1000T },
932 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_D_DC,
933 "PCH LAN (82578DC) Controller",
934 WM_T_PCH2, WMP_F_1000T },
935 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH2_LV_LM,
936 "PCH2 LAN (82579LM) Controller",
937 WM_T_PCH2, WMP_F_1000T },
938 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH2_LV_V,
939 "PCH2 LAN (82579V) Controller",
940 WM_T_PCH, WMP_F_1000T },
941 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575EB_COPPER,
942 "82575EB dual-1000baseT Ethernet",
943 WM_T_82575, WMP_F_1000T },
944 #if 0
945 /*
946 * not sure if WMP_F_1000X or WMP_F_SERDES - we do not have it - so
947 * disabled for now ...
948 */
949 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575EB_FIBER_SERDES,
950 "82575EB dual-1000baseX Ethernet (SERDES)",
951 WM_T_82575, WMP_F_SERDES },
952 #endif
953 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575GB_QUAD_COPPER,
954 "82575GB quad-1000baseT Ethernet",
955 WM_T_82575, WMP_F_1000T },
956 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575GB_QUAD_COPPER_PM,
957 "82575GB quad-1000baseT Ethernet (PM)",
958 WM_T_82575, WMP_F_1000T },
959 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_COPPER,
960 "82576 1000BaseT Ethernet",
961 WM_T_82576, WMP_F_1000T },
962 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_FIBER,
963 "82576 1000BaseX Ethernet",
964 WM_T_82576, WMP_F_1000X },
965 #if 0
966 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_SERDES,
967 "82576 gigabit Ethernet (SERDES)",
968 WM_T_82576, WMP_F_SERDES },
969 #endif
970 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_QUAD_COPPER,
971 "82576 quad-1000BaseT Ethernet",
972 WM_T_82576, WMP_F_1000T },
973 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_NS,
974 "82576 gigabit Ethernet",
975 WM_T_82576, WMP_F_1000T },
976 #if 0
977 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_NS_SERDES,
978 "82576 gigabit Ethernet (SERDES)",
979 WM_T_82576, WMP_F_SERDES },
980 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_SERDES_QUAD,
981 "82576 quad-gigabit Ethernet (SERDES)",
982 WM_T_82576, WMP_F_SERDES },
983 #endif
984 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_COPPER,
985 "82580 1000BaseT Ethernet",
986 WM_T_82580, WMP_F_1000T },
987 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_FIBER,
988 "82580 1000BaseX Ethernet",
989 WM_T_82580, WMP_F_1000X },
990 #if 0
991 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_SERDES,
992 "82580 1000BaseT Ethernet (SERDES)",
993 WM_T_82580, WMP_F_SERDES },
994 #endif
995 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_SGMII,
996 "82580 gigabit Ethernet (SGMII)",
997 WM_T_82580, WMP_F_1000T },
998 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_COPPER_DUAL,
999 "82580 dual-1000BaseT Ethernet",
1000 WM_T_82580, WMP_F_1000T },
1001 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_ER,
1002 "82580 1000BaseT Ethernet",
1003 WM_T_82580ER, WMP_F_1000T },
1004 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_ER_DUAL,
1005 "82580 dual-1000BaseT Ethernet",
1006 WM_T_82580ER, WMP_F_1000T },
1007 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_QUAD_FIBER,
1008 "82580 quad-1000BaseX Ethernet",
1009 WM_T_82580, WMP_F_1000X },
1010 { 0, 0,
1011 NULL,
1012 0, 0 },
1013 };
1014
1015 #ifdef WM_EVENT_COUNTERS
1016 static char wm_txseg_evcnt_names[WM_NTXSEGS][sizeof("txsegXXX")];
1017 #endif /* WM_EVENT_COUNTERS */
1018
1019 #if 0 /* Not currently used */
1020 static inline uint32_t
1021 wm_io_read(struct wm_softc *sc, int reg)
1022 {
1023
1024 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 0, reg);
1025 return (bus_space_read_4(sc->sc_iot, sc->sc_ioh, 4));
1026 }
1027 #endif
1028
1029 static inline void
1030 wm_io_write(struct wm_softc *sc, int reg, uint32_t val)
1031 {
1032
1033 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 0, reg);
1034 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 4, val);
1035 }
1036
1037 static inline void
1038 wm_82575_write_8bit_ctlr_reg(struct wm_softc *sc, uint32_t reg, uint32_t off,
1039 uint32_t data)
1040 {
1041 uint32_t regval;
1042 int i;
1043
1044 regval = (data & SCTL_CTL_DATA_MASK) | (off << SCTL_CTL_ADDR_SHIFT);
1045
1046 CSR_WRITE(sc, reg, regval);
1047
1048 for (i = 0; i < SCTL_CTL_POLL_TIMEOUT; i++) {
1049 delay(5);
1050 if (CSR_READ(sc, reg) & SCTL_CTL_READY)
1051 break;
1052 }
1053 if (i == SCTL_CTL_POLL_TIMEOUT) {
1054 aprint_error("%s: WARNING: i82575 reg 0x%08x setup did not indicate ready\n",
1055 device_xname(sc->sc_dev), reg);
1056 }
1057 }
1058
1059 static inline void
1060 wm_set_dma_addr(volatile wiseman_addr_t *wa, bus_addr_t v)
1061 {
1062 wa->wa_low = htole32(v & 0xffffffffU);
1063 if (sizeof(bus_addr_t) == 8)
1064 wa->wa_high = htole32((uint64_t) v >> 32);
1065 else
1066 wa->wa_high = 0;
1067 }
1068
1069 static void
1070 wm_set_spiaddrbits(struct wm_softc *sc)
1071 {
1072 uint32_t reg;
1073
1074 sc->sc_flags |= WM_F_EEPROM_SPI;
1075 reg = CSR_READ(sc, WMREG_EECD);
1076 sc->sc_ee_addrbits = (reg & EECD_EE_ABITS) ? 16 : 8;
1077 }
1078
1079 static const struct wm_product *
1080 wm_lookup(const struct pci_attach_args *pa)
1081 {
1082 const struct wm_product *wmp;
1083
1084 for (wmp = wm_products; wmp->wmp_name != NULL; wmp++) {
1085 if (PCI_VENDOR(pa->pa_id) == wmp->wmp_vendor &&
1086 PCI_PRODUCT(pa->pa_id) == wmp->wmp_product)
1087 return wmp;
1088 }
1089 return NULL;
1090 }
1091
1092 static int
1093 wm_match(device_t parent, cfdata_t cf, void *aux)
1094 {
1095 struct pci_attach_args *pa = aux;
1096
1097 if (wm_lookup(pa) != NULL)
1098 return 1;
1099
1100 return 0;
1101 }
1102
1103 static void
1104 wm_attach(device_t parent, device_t self, void *aux)
1105 {
1106 struct wm_softc *sc = device_private(self);
1107 struct pci_attach_args *pa = aux;
1108 prop_dictionary_t dict;
1109 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
1110 pci_chipset_tag_t pc = pa->pa_pc;
1111 pci_intr_handle_t ih;
1112 const char *intrstr = NULL;
1113 const char *eetype, *xname;
1114 bus_space_tag_t memt;
1115 bus_space_handle_t memh;
1116 bus_size_t memsize;
1117 int memh_valid;
1118 int i, error;
1119 const struct wm_product *wmp;
1120 prop_data_t ea;
1121 prop_number_t pn;
1122 uint8_t enaddr[ETHER_ADDR_LEN];
1123 uint16_t cfg1, cfg2, swdpin, io3;
1124 pcireg_t preg, memtype;
1125 uint16_t eeprom_data, apme_mask;
1126 uint32_t reg;
1127
1128 sc->sc_dev = self;
1129 callout_init(&sc->sc_tick_ch, 0);
1130
1131 sc->sc_wmp = wmp = wm_lookup(pa);
1132 if (wmp == NULL) {
1133 printf("\n");
1134 panic("wm_attach: impossible");
1135 }
1136
1137 sc->sc_pc = pa->pa_pc;
1138 sc->sc_pcitag = pa->pa_tag;
1139
1140 if (pci_dma64_available(pa))
1141 sc->sc_dmat = pa->pa_dmat64;
1142 else
1143 sc->sc_dmat = pa->pa_dmat;
1144
1145 sc->sc_rev = PCI_REVISION(pci_conf_read(pc, pa->pa_tag, PCI_CLASS_REG));
1146 aprint_naive(": Ethernet controller\n");
1147 aprint_normal(": %s, rev. %d\n", wmp->wmp_name, sc->sc_rev);
1148
1149 sc->sc_type = wmp->wmp_type;
1150 if (sc->sc_type < WM_T_82543) {
1151 if (sc->sc_rev < 2) {
1152 aprint_error_dev(sc->sc_dev,
1153 "i82542 must be at least rev. 2\n");
1154 return;
1155 }
1156 if (sc->sc_rev < 3)
1157 sc->sc_type = WM_T_82542_2_0;
1158 }
1159
1160 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576)
1161 || (sc->sc_type == WM_T_82580) || (sc->sc_type == WM_T_82580ER))
1162 sc->sc_flags |= WM_F_NEWQUEUE;
1163
1164 /* Set device properties (mactype) */
1165 dict = device_properties(sc->sc_dev);
1166 prop_dictionary_set_uint32(dict, "mactype", sc->sc_type);
1167
1168 /*
1169 * Map the device. All devices support memory-mapped acccess,
1170 * and it is really required for normal operation.
1171 */
1172 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, WM_PCI_MMBA);
1173 switch (memtype) {
1174 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT:
1175 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_64BIT:
1176 memh_valid = (pci_mapreg_map(pa, WM_PCI_MMBA,
1177 memtype, 0, &memt, &memh, NULL, &memsize) == 0);
1178 break;
1179 default:
1180 memh_valid = 0;
1181 break;
1182 }
1183
1184 if (memh_valid) {
1185 sc->sc_st = memt;
1186 sc->sc_sh = memh;
1187 sc->sc_ss = memsize;
1188 } else {
1189 aprint_error_dev(sc->sc_dev,
1190 "unable to map device registers\n");
1191 return;
1192 }
1193
1194 wm_get_wakeup(sc);
1195
1196 /*
1197 * In addition, i82544 and later support I/O mapped indirect
1198 * register access. It is not desirable (nor supported in
1199 * this driver) to use it for normal operation, though it is
1200 * required to work around bugs in some chip versions.
1201 */
1202 if (sc->sc_type >= WM_T_82544) {
1203 /* First we have to find the I/O BAR. */
1204 for (i = PCI_MAPREG_START; i < PCI_MAPREG_END; i += 4) {
1205 if (pci_mapreg_type(pa->pa_pc, pa->pa_tag, i) ==
1206 PCI_MAPREG_TYPE_IO)
1207 break;
1208 }
1209 if (i != PCI_MAPREG_END) {
1210 /*
1211 * We found PCI_MAPREG_TYPE_IO. Note that 82580
1212 * (and newer?) chip has no PCI_MAPREG_TYPE_IO.
1213 * It's no problem because newer chips has no this
1214 * bug.
1215 *
1216 * The i8254x doesn't apparently respond when the
1217 * I/O BAR is 0, which looks somewhat like it's not
1218 * been configured.
1219 */
1220 preg = pci_conf_read(pc, pa->pa_tag, i);
1221 if (PCI_MAPREG_MEM_ADDR(preg) == 0) {
1222 aprint_error_dev(sc->sc_dev,
1223 "WARNING: I/O BAR at zero.\n");
1224 } else if (pci_mapreg_map(pa, i, PCI_MAPREG_TYPE_IO,
1225 0, &sc->sc_iot, &sc->sc_ioh,
1226 NULL, &sc->sc_ios) == 0) {
1227 sc->sc_flags |= WM_F_IOH_VALID;
1228 } else {
1229 aprint_error_dev(sc->sc_dev,
1230 "WARNING: unable to map I/O space\n");
1231 }
1232 }
1233
1234 }
1235
1236 /* Enable bus mastering. Disable MWI on the i82542 2.0. */
1237 preg = pci_conf_read(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG);
1238 preg |= PCI_COMMAND_MASTER_ENABLE;
1239 if (sc->sc_type < WM_T_82542_2_1)
1240 preg &= ~PCI_COMMAND_INVALIDATE_ENABLE;
1241 pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, preg);
1242
1243 /* power up chip */
1244 if ((error = pci_activate(pa->pa_pc, pa->pa_tag, self,
1245 NULL)) && error != EOPNOTSUPP) {
1246 aprint_error_dev(sc->sc_dev, "cannot activate %d\n", error);
1247 return;
1248 }
1249
1250 /*
1251 * Map and establish our interrupt.
1252 */
1253 if (pci_intr_map(pa, &ih)) {
1254 aprint_error_dev(sc->sc_dev, "unable to map interrupt\n");
1255 return;
1256 }
1257 intrstr = pci_intr_string(pc, ih);
1258 sc->sc_ih = pci_intr_establish(pc, ih, IPL_NET, wm_intr, sc);
1259 if (sc->sc_ih == NULL) {
1260 aprint_error_dev(sc->sc_dev, "unable to establish interrupt");
1261 if (intrstr != NULL)
1262 aprint_error(" at %s", intrstr);
1263 aprint_error("\n");
1264 return;
1265 }
1266 aprint_normal_dev(sc->sc_dev, "interrupting at %s\n", intrstr);
1267
1268 /*
1269 * Check the function ID (unit number of the chip).
1270 */
1271 if ((sc->sc_type == WM_T_82546) || (sc->sc_type == WM_T_82546_3)
1272 || (sc->sc_type == WM_T_82571) || (sc->sc_type == WM_T_80003)
1273 || (sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576)
1274 || (sc->sc_type == WM_T_82580) || (sc->sc_type == WM_T_82580ER))
1275 sc->sc_funcid = (CSR_READ(sc, WMREG_STATUS)
1276 >> STATUS_FUNCID_SHIFT) & STATUS_FUNCID_MASK;
1277 else
1278 sc->sc_funcid = 0;
1279
1280 /*
1281 * Determine a few things about the bus we're connected to.
1282 */
1283 if (sc->sc_type < WM_T_82543) {
1284 /* We don't really know the bus characteristics here. */
1285 sc->sc_bus_speed = 33;
1286 } else if (sc->sc_type == WM_T_82547 || sc->sc_type == WM_T_82547_2) {
1287 /*
1288 * CSA (Communication Streaming Architecture) is about as fast
1289 * a 32-bit 66MHz PCI Bus.
1290 */
1291 sc->sc_flags |= WM_F_CSA;
1292 sc->sc_bus_speed = 66;
1293 aprint_verbose_dev(sc->sc_dev,
1294 "Communication Streaming Architecture\n");
1295 if (sc->sc_type == WM_T_82547) {
1296 callout_init(&sc->sc_txfifo_ch, 0);
1297 callout_setfunc(&sc->sc_txfifo_ch,
1298 wm_82547_txfifo_stall, sc);
1299 aprint_verbose_dev(sc->sc_dev,
1300 "using 82547 Tx FIFO stall work-around\n");
1301 }
1302 } else if (sc->sc_type >= WM_T_82571) {
1303 sc->sc_flags |= WM_F_PCIE;
1304 if ((sc->sc_type != WM_T_ICH8) && (sc->sc_type != WM_T_ICH9)
1305 && (sc->sc_type != WM_T_ICH10)
1306 && (sc->sc_type != WM_T_PCH)
1307 && (sc->sc_type != WM_T_PCH2)) {
1308 sc->sc_flags |= WM_F_EEPROM_SEMAPHORE;
1309 /* ICH* and PCH* have no PCIe capability registers */
1310 if (pci_get_capability(pa->pa_pc, pa->pa_tag,
1311 PCI_CAP_PCIEXPRESS, &sc->sc_pcixe_capoff,
1312 NULL) == 0)
1313 aprint_error_dev(sc->sc_dev,
1314 "unable to find PCIe capability\n");
1315 }
1316 aprint_verbose_dev(sc->sc_dev, "PCI-Express bus\n");
1317 } else {
1318 reg = CSR_READ(sc, WMREG_STATUS);
1319 if (reg & STATUS_BUS64)
1320 sc->sc_flags |= WM_F_BUS64;
1321 if ((reg & STATUS_PCIX_MODE) != 0) {
1322 pcireg_t pcix_cmd, pcix_sts, bytecnt, maxb;
1323
1324 sc->sc_flags |= WM_F_PCIX;
1325 if (pci_get_capability(pa->pa_pc, pa->pa_tag,
1326 PCI_CAP_PCIX, &sc->sc_pcixe_capoff, NULL) == 0)
1327 aprint_error_dev(sc->sc_dev,
1328 "unable to find PCIX capability\n");
1329 else if (sc->sc_type != WM_T_82545_3 &&
1330 sc->sc_type != WM_T_82546_3) {
1331 /*
1332 * Work around a problem caused by the BIOS
1333 * setting the max memory read byte count
1334 * incorrectly.
1335 */
1336 pcix_cmd = pci_conf_read(pa->pa_pc, pa->pa_tag,
1337 sc->sc_pcixe_capoff + PCI_PCIX_CMD);
1338 pcix_sts = pci_conf_read(pa->pa_pc, pa->pa_tag,
1339 sc->sc_pcixe_capoff + PCI_PCIX_STATUS);
1340
1341 bytecnt =
1342 (pcix_cmd & PCI_PCIX_CMD_BYTECNT_MASK) >>
1343 PCI_PCIX_CMD_BYTECNT_SHIFT;
1344 maxb =
1345 (pcix_sts & PCI_PCIX_STATUS_MAXB_MASK) >>
1346 PCI_PCIX_STATUS_MAXB_SHIFT;
1347 if (bytecnt > maxb) {
1348 aprint_verbose_dev(sc->sc_dev,
1349 "resetting PCI-X MMRBC: %d -> %d\n",
1350 512 << bytecnt, 512 << maxb);
1351 pcix_cmd = (pcix_cmd &
1352 ~PCI_PCIX_CMD_BYTECNT_MASK) |
1353 (maxb << PCI_PCIX_CMD_BYTECNT_SHIFT);
1354 pci_conf_write(pa->pa_pc, pa->pa_tag,
1355 sc->sc_pcixe_capoff + PCI_PCIX_CMD,
1356 pcix_cmd);
1357 }
1358 }
1359 }
1360 /*
1361 * The quad port adapter is special; it has a PCIX-PCIX
1362 * bridge on the board, and can run the secondary bus at
1363 * a higher speed.
1364 */
1365 if (wmp->wmp_product == PCI_PRODUCT_INTEL_82546EB_QUAD) {
1366 sc->sc_bus_speed = (sc->sc_flags & WM_F_PCIX) ? 120
1367 : 66;
1368 } else if (sc->sc_flags & WM_F_PCIX) {
1369 switch (reg & STATUS_PCIXSPD_MASK) {
1370 case STATUS_PCIXSPD_50_66:
1371 sc->sc_bus_speed = 66;
1372 break;
1373 case STATUS_PCIXSPD_66_100:
1374 sc->sc_bus_speed = 100;
1375 break;
1376 case STATUS_PCIXSPD_100_133:
1377 sc->sc_bus_speed = 133;
1378 break;
1379 default:
1380 aprint_error_dev(sc->sc_dev,
1381 "unknown PCIXSPD %d; assuming 66MHz\n",
1382 reg & STATUS_PCIXSPD_MASK);
1383 sc->sc_bus_speed = 66;
1384 break;
1385 }
1386 } else
1387 sc->sc_bus_speed = (reg & STATUS_PCI66) ? 66 : 33;
1388 aprint_verbose_dev(sc->sc_dev, "%d-bit %dMHz %s bus\n",
1389 (sc->sc_flags & WM_F_BUS64) ? 64 : 32, sc->sc_bus_speed,
1390 (sc->sc_flags & WM_F_PCIX) ? "PCIX" : "PCI");
1391 }
1392
1393 /*
1394 * Allocate the control data structures, and create and load the
1395 * DMA map for it.
1396 *
1397 * NOTE: All Tx descriptors must be in the same 4G segment of
1398 * memory. So must Rx descriptors. We simplify by allocating
1399 * both sets within the same 4G segment.
1400 */
1401 WM_NTXDESC(sc) = sc->sc_type < WM_T_82544 ?
1402 WM_NTXDESC_82542 : WM_NTXDESC_82544;
1403 sc->sc_cd_size = sc->sc_type < WM_T_82544 ?
1404 sizeof(struct wm_control_data_82542) :
1405 sizeof(struct wm_control_data_82544);
1406 if ((error = bus_dmamem_alloc(sc->sc_dmat, sc->sc_cd_size, PAGE_SIZE,
1407 (bus_size_t) 0x100000000ULL, &sc->sc_cd_seg, 1,
1408 &sc->sc_cd_rseg, 0)) != 0) {
1409 aprint_error_dev(sc->sc_dev,
1410 "unable to allocate control data, error = %d\n",
1411 error);
1412 goto fail_0;
1413 }
1414
1415 if ((error = bus_dmamem_map(sc->sc_dmat, &sc->sc_cd_seg,
1416 sc->sc_cd_rseg, sc->sc_cd_size,
1417 (void **)&sc->sc_control_data, BUS_DMA_COHERENT)) != 0) {
1418 aprint_error_dev(sc->sc_dev,
1419 "unable to map control data, error = %d\n", error);
1420 goto fail_1;
1421 }
1422
1423 if ((error = bus_dmamap_create(sc->sc_dmat, sc->sc_cd_size, 1,
1424 sc->sc_cd_size, 0, 0, &sc->sc_cddmamap)) != 0) {
1425 aprint_error_dev(sc->sc_dev,
1426 "unable to create control data DMA map, error = %d\n",
1427 error);
1428 goto fail_2;
1429 }
1430
1431 if ((error = bus_dmamap_load(sc->sc_dmat, sc->sc_cddmamap,
1432 sc->sc_control_data, sc->sc_cd_size, NULL, 0)) != 0) {
1433 aprint_error_dev(sc->sc_dev,
1434 "unable to load control data DMA map, error = %d\n",
1435 error);
1436 goto fail_3;
1437 }
1438
1439 /*
1440 * Create the transmit buffer DMA maps.
1441 */
1442 WM_TXQUEUELEN(sc) =
1443 (sc->sc_type == WM_T_82547 || sc->sc_type == WM_T_82547_2) ?
1444 WM_TXQUEUELEN_MAX_82547 : WM_TXQUEUELEN_MAX;
1445 for (i = 0; i < WM_TXQUEUELEN(sc); i++) {
1446 if ((error = bus_dmamap_create(sc->sc_dmat, WM_MAXTXDMA,
1447 WM_NTXSEGS, WTX_MAX_LEN, 0, 0,
1448 &sc->sc_txsoft[i].txs_dmamap)) != 0) {
1449 aprint_error_dev(sc->sc_dev,
1450 "unable to create Tx DMA map %d, error = %d\n",
1451 i, error);
1452 goto fail_4;
1453 }
1454 }
1455
1456 /*
1457 * Create the receive buffer DMA maps.
1458 */
1459 for (i = 0; i < WM_NRXDESC; i++) {
1460 if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES, 1,
1461 MCLBYTES, 0, 0,
1462 &sc->sc_rxsoft[i].rxs_dmamap)) != 0) {
1463 aprint_error_dev(sc->sc_dev,
1464 "unable to create Rx DMA map %d error = %d\n",
1465 i, error);
1466 goto fail_5;
1467 }
1468 sc->sc_rxsoft[i].rxs_mbuf = NULL;
1469 }
1470
1471 /* clear interesting stat counters */
1472 CSR_READ(sc, WMREG_COLC);
1473 CSR_READ(sc, WMREG_RXERRC);
1474
1475 /* get PHY control from SMBus to PCIe */
1476 if ((sc->sc_type == WM_T_PCH) || (sc->sc_type == WM_T_PCH2))
1477 wm_smbustopci(sc);
1478
1479 /*
1480 * Reset the chip to a known state.
1481 */
1482 wm_reset(sc);
1483
1484 switch (sc->sc_type) {
1485 case WM_T_82571:
1486 case WM_T_82572:
1487 case WM_T_82573:
1488 case WM_T_82574:
1489 case WM_T_82583:
1490 case WM_T_80003:
1491 case WM_T_ICH8:
1492 case WM_T_ICH9:
1493 case WM_T_ICH10:
1494 case WM_T_PCH:
1495 case WM_T_PCH2:
1496 if (wm_check_mng_mode(sc) != 0)
1497 wm_get_hw_control(sc);
1498 break;
1499 default:
1500 break;
1501 }
1502
1503 /*
1504 * Get some information about the EEPROM.
1505 */
1506 switch (sc->sc_type) {
1507 case WM_T_82542_2_0:
1508 case WM_T_82542_2_1:
1509 case WM_T_82543:
1510 case WM_T_82544:
1511 /* Microwire */
1512 sc->sc_ee_addrbits = 6;
1513 break;
1514 case WM_T_82540:
1515 case WM_T_82545:
1516 case WM_T_82545_3:
1517 case WM_T_82546:
1518 case WM_T_82546_3:
1519 /* Microwire */
1520 reg = CSR_READ(sc, WMREG_EECD);
1521 if (reg & EECD_EE_SIZE)
1522 sc->sc_ee_addrbits = 8;
1523 else
1524 sc->sc_ee_addrbits = 6;
1525 sc->sc_flags |= WM_F_EEPROM_HANDSHAKE;
1526 break;
1527 case WM_T_82541:
1528 case WM_T_82541_2:
1529 case WM_T_82547:
1530 case WM_T_82547_2:
1531 reg = CSR_READ(sc, WMREG_EECD);
1532 if (reg & EECD_EE_TYPE) {
1533 /* SPI */
1534 wm_set_spiaddrbits(sc);
1535 } else
1536 /* Microwire */
1537 sc->sc_ee_addrbits = (reg & EECD_EE_ABITS) ? 8 : 6;
1538 sc->sc_flags |= WM_F_EEPROM_HANDSHAKE;
1539 break;
1540 case WM_T_82571:
1541 case WM_T_82572:
1542 /* SPI */
1543 wm_set_spiaddrbits(sc);
1544 sc->sc_flags |= WM_F_EEPROM_HANDSHAKE;
1545 break;
1546 case WM_T_82573:
1547 case WM_T_82574:
1548 case WM_T_82583:
1549 if (wm_is_onboard_nvm_eeprom(sc) == 0)
1550 sc->sc_flags |= WM_F_EEPROM_FLASH;
1551 else {
1552 /* SPI */
1553 wm_set_spiaddrbits(sc);
1554 }
1555 sc->sc_flags |= WM_F_EEPROM_EERDEEWR;
1556 break;
1557 case WM_T_82575:
1558 case WM_T_82576:
1559 case WM_T_82580:
1560 case WM_T_82580ER:
1561 case WM_T_80003:
1562 /* SPI */
1563 wm_set_spiaddrbits(sc);
1564 sc->sc_flags |= WM_F_EEPROM_EERDEEWR | WM_F_SWFW_SYNC;
1565 break;
1566 case WM_T_ICH8:
1567 case WM_T_ICH9:
1568 case WM_T_ICH10:
1569 case WM_T_PCH:
1570 case WM_T_PCH2:
1571 /* FLASH */
1572 sc->sc_flags |= WM_F_EEPROM_FLASH | WM_F_SWFWHW_SYNC;
1573 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, WM_ICH8_FLASH);
1574 if (pci_mapreg_map(pa, WM_ICH8_FLASH, memtype, 0,
1575 &sc->sc_flasht, &sc->sc_flashh, NULL, NULL)) {
1576 aprint_error_dev(sc->sc_dev,
1577 "can't map FLASH registers\n");
1578 return;
1579 }
1580 reg = ICH8_FLASH_READ32(sc, ICH_FLASH_GFPREG);
1581 sc->sc_ich8_flash_base = (reg & ICH_GFPREG_BASE_MASK) *
1582 ICH_FLASH_SECTOR_SIZE;
1583 sc->sc_ich8_flash_bank_size =
1584 ((reg >> 16) & ICH_GFPREG_BASE_MASK) + 1;
1585 sc->sc_ich8_flash_bank_size -=
1586 (reg & ICH_GFPREG_BASE_MASK);
1587 sc->sc_ich8_flash_bank_size *= ICH_FLASH_SECTOR_SIZE;
1588 sc->sc_ich8_flash_bank_size /= 2 * sizeof(uint16_t);
1589 break;
1590 default:
1591 break;
1592 }
1593
1594 /*
1595 * Defer printing the EEPROM type until after verifying the checksum
1596 * This allows the EEPROM type to be printed correctly in the case
1597 * that no EEPROM is attached.
1598 */
1599 /*
1600 * Validate the EEPROM checksum. If the checksum fails, flag
1601 * this for later, so we can fail future reads from the EEPROM.
1602 */
1603 if (wm_validate_eeprom_checksum(sc)) {
1604 /*
1605 * Read twice again because some PCI-e parts fail the
1606 * first check due to the link being in sleep state.
1607 */
1608 if (wm_validate_eeprom_checksum(sc))
1609 sc->sc_flags |= WM_F_EEPROM_INVALID;
1610 }
1611
1612 /* Set device properties (macflags) */
1613 prop_dictionary_set_uint32(dict, "macflags", sc->sc_flags);
1614
1615 if (sc->sc_flags & WM_F_EEPROM_INVALID)
1616 aprint_verbose_dev(sc->sc_dev, "No EEPROM\n");
1617 else if (sc->sc_flags & WM_F_EEPROM_FLASH) {
1618 aprint_verbose_dev(sc->sc_dev, "FLASH\n");
1619 } else {
1620 if (sc->sc_flags & WM_F_EEPROM_SPI)
1621 eetype = "SPI";
1622 else
1623 eetype = "MicroWire";
1624 aprint_verbose_dev(sc->sc_dev,
1625 "%u word (%d address bits) %s EEPROM\n",
1626 1U << sc->sc_ee_addrbits,
1627 sc->sc_ee_addrbits, eetype);
1628 }
1629
1630 /*
1631 * Read the Ethernet address from the EEPROM, if not first found
1632 * in device properties.
1633 */
1634 ea = prop_dictionary_get(dict, "mac-address");
1635 if (ea != NULL) {
1636 KASSERT(prop_object_type(ea) == PROP_TYPE_DATA);
1637 KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN);
1638 memcpy(enaddr, prop_data_data_nocopy(ea), ETHER_ADDR_LEN);
1639 } else {
1640 if (wm_read_mac_addr(sc, enaddr) != 0) {
1641 aprint_error_dev(sc->sc_dev,
1642 "unable to read Ethernet address\n");
1643 return;
1644 }
1645 }
1646
1647 aprint_normal_dev(sc->sc_dev, "Ethernet address %s\n",
1648 ether_sprintf(enaddr));
1649
1650 /*
1651 * Read the config info from the EEPROM, and set up various
1652 * bits in the control registers based on their contents.
1653 */
1654 pn = prop_dictionary_get(dict, "i82543-cfg1");
1655 if (pn != NULL) {
1656 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER);
1657 cfg1 = (uint16_t) prop_number_integer_value(pn);
1658 } else {
1659 if (wm_read_eeprom(sc, EEPROM_OFF_CFG1, 1, &cfg1)) {
1660 aprint_error_dev(sc->sc_dev, "unable to read CFG1\n");
1661 return;
1662 }
1663 }
1664
1665 pn = prop_dictionary_get(dict, "i82543-cfg2");
1666 if (pn != NULL) {
1667 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER);
1668 cfg2 = (uint16_t) prop_number_integer_value(pn);
1669 } else {
1670 if (wm_read_eeprom(sc, EEPROM_OFF_CFG2, 1, &cfg2)) {
1671 aprint_error_dev(sc->sc_dev, "unable to read CFG2\n");
1672 return;
1673 }
1674 }
1675
1676 /* check for WM_F_WOL */
1677 switch (sc->sc_type) {
1678 case WM_T_82542_2_0:
1679 case WM_T_82542_2_1:
1680 case WM_T_82543:
1681 /* dummy? */
1682 eeprom_data = 0;
1683 apme_mask = EEPROM_CFG3_APME;
1684 break;
1685 case WM_T_82544:
1686 apme_mask = EEPROM_CFG2_82544_APM_EN;
1687 eeprom_data = cfg2;
1688 break;
1689 case WM_T_82546:
1690 case WM_T_82546_3:
1691 case WM_T_82571:
1692 case WM_T_82572:
1693 case WM_T_82573:
1694 case WM_T_82574:
1695 case WM_T_82583:
1696 case WM_T_80003:
1697 default:
1698 apme_mask = EEPROM_CFG3_APME;
1699 wm_read_eeprom(sc, (sc->sc_funcid == 1) ? EEPROM_OFF_CFG3_PORTB
1700 : EEPROM_OFF_CFG3_PORTA, 1, &eeprom_data);
1701 break;
1702 case WM_T_82575:
1703 case WM_T_82576:
1704 case WM_T_82580:
1705 case WM_T_82580ER:
1706 case WM_T_ICH8:
1707 case WM_T_ICH9:
1708 case WM_T_ICH10:
1709 case WM_T_PCH:
1710 case WM_T_PCH2:
1711 apme_mask = WUC_APME;
1712 eeprom_data = CSR_READ(sc, WMREG_WUC);
1713 break;
1714 }
1715
1716 /* Check for WM_F_WOL flag after the setting of the EEPROM stuff */
1717 if ((eeprom_data & apme_mask) != 0)
1718 sc->sc_flags |= WM_F_WOL;
1719 #ifdef WM_DEBUG
1720 if ((sc->sc_flags & WM_F_WOL) != 0)
1721 printf("WOL\n");
1722 #endif
1723
1724 /*
1725 * XXX need special handling for some multiple port cards
1726 * to disable a paticular port.
1727 */
1728
1729 if (sc->sc_type >= WM_T_82544) {
1730 pn = prop_dictionary_get(dict, "i82543-swdpin");
1731 if (pn != NULL) {
1732 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER);
1733 swdpin = (uint16_t) prop_number_integer_value(pn);
1734 } else {
1735 if (wm_read_eeprom(sc, EEPROM_OFF_SWDPIN, 1, &swdpin)) {
1736 aprint_error_dev(sc->sc_dev,
1737 "unable to read SWDPIN\n");
1738 return;
1739 }
1740 }
1741 }
1742
1743 if (cfg1 & EEPROM_CFG1_ILOS)
1744 sc->sc_ctrl |= CTRL_ILOS;
1745 if (sc->sc_type >= WM_T_82544) {
1746 sc->sc_ctrl |=
1747 ((swdpin >> EEPROM_SWDPIN_SWDPIO_SHIFT) & 0xf) <<
1748 CTRL_SWDPIO_SHIFT;
1749 sc->sc_ctrl |=
1750 ((swdpin >> EEPROM_SWDPIN_SWDPIN_SHIFT) & 0xf) <<
1751 CTRL_SWDPINS_SHIFT;
1752 } else {
1753 sc->sc_ctrl |=
1754 ((cfg1 >> EEPROM_CFG1_SWDPIO_SHIFT) & 0xf) <<
1755 CTRL_SWDPIO_SHIFT;
1756 }
1757
1758 #if 0
1759 if (sc->sc_type >= WM_T_82544) {
1760 if (cfg1 & EEPROM_CFG1_IPS0)
1761 sc->sc_ctrl_ext |= CTRL_EXT_IPS;
1762 if (cfg1 & EEPROM_CFG1_IPS1)
1763 sc->sc_ctrl_ext |= CTRL_EXT_IPS1;
1764 sc->sc_ctrl_ext |=
1765 ((swdpin >> (EEPROM_SWDPIN_SWDPIO_SHIFT + 4)) & 0xd) <<
1766 CTRL_EXT_SWDPIO_SHIFT;
1767 sc->sc_ctrl_ext |=
1768 ((swdpin >> (EEPROM_SWDPIN_SWDPIN_SHIFT + 4)) & 0xd) <<
1769 CTRL_EXT_SWDPINS_SHIFT;
1770 } else {
1771 sc->sc_ctrl_ext |=
1772 ((cfg2 >> EEPROM_CFG2_SWDPIO_SHIFT) & 0xf) <<
1773 CTRL_EXT_SWDPIO_SHIFT;
1774 }
1775 #endif
1776
1777 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
1778 #if 0
1779 CSR_WRITE(sc, WMREG_CTRL_EXT, sc->sc_ctrl_ext);
1780 #endif
1781
1782 /*
1783 * Set up some register offsets that are different between
1784 * the i82542 and the i82543 and later chips.
1785 */
1786 if (sc->sc_type < WM_T_82543) {
1787 sc->sc_rdt_reg = WMREG_OLD_RDT0;
1788 sc->sc_tdt_reg = WMREG_OLD_TDT;
1789 } else {
1790 sc->sc_rdt_reg = WMREG_RDT;
1791 sc->sc_tdt_reg = WMREG_TDT;
1792 }
1793
1794 if (sc->sc_type == WM_T_PCH) {
1795 uint16_t val;
1796
1797 /* Save the NVM K1 bit setting */
1798 wm_read_eeprom(sc, EEPROM_OFF_K1_CONFIG, 1, &val);
1799
1800 if ((val & EEPROM_K1_CONFIG_ENABLE) != 0)
1801 sc->sc_nvm_k1_enabled = 1;
1802 else
1803 sc->sc_nvm_k1_enabled = 0;
1804 }
1805
1806 /*
1807 * Determine if we're TBI,GMII or SGMII mode, and initialize the
1808 * media structures accordingly.
1809 */
1810 if (sc->sc_type == WM_T_ICH8 || sc->sc_type == WM_T_ICH9
1811 || sc->sc_type == WM_T_ICH10 || sc->sc_type == WM_T_PCH
1812 || sc->sc_type == WM_T_PCH2 || sc->sc_type == WM_T_82573
1813 || sc->sc_type == WM_T_82574 || sc->sc_type == WM_T_82583) {
1814 /* STATUS_TBIMODE reserved/reused, can't rely on it */
1815 wm_gmii_mediainit(sc, wmp->wmp_product);
1816 } else if (sc->sc_type < WM_T_82543 ||
1817 (CSR_READ(sc, WMREG_STATUS) & STATUS_TBIMODE) != 0) {
1818 if (wmp->wmp_flags & WMP_F_1000T)
1819 aprint_error_dev(sc->sc_dev,
1820 "WARNING: TBIMODE set on 1000BASE-T product!\n");
1821 wm_tbi_mediainit(sc);
1822 } else {
1823 switch (sc->sc_type) {
1824 case WM_T_82575:
1825 case WM_T_82576:
1826 case WM_T_82580:
1827 case WM_T_82580ER:
1828 reg = CSR_READ(sc, WMREG_CTRL_EXT);
1829 switch (reg & CTRL_EXT_LINK_MODE_MASK) {
1830 case CTRL_EXT_LINK_MODE_SGMII:
1831 aprint_verbose_dev(sc->sc_dev, "SGMII\n");
1832 sc->sc_flags |= WM_F_SGMII;
1833 CSR_WRITE(sc, WMREG_CTRL_EXT,
1834 reg | CTRL_EXT_I2C_ENA);
1835 wm_gmii_mediainit(sc, wmp->wmp_product);
1836 break;
1837 case CTRL_EXT_LINK_MODE_1000KX:
1838 case CTRL_EXT_LINK_MODE_PCIE_SERDES:
1839 aprint_verbose_dev(sc->sc_dev, "1000KX or SERDES\n");
1840 CSR_WRITE(sc, WMREG_CTRL_EXT,
1841 reg | CTRL_EXT_I2C_ENA);
1842 panic("not supported yet\n");
1843 break;
1844 case CTRL_EXT_LINK_MODE_GMII:
1845 default:
1846 CSR_WRITE(sc, WMREG_CTRL_EXT,
1847 reg & ~CTRL_EXT_I2C_ENA);
1848 wm_gmii_mediainit(sc, wmp->wmp_product);
1849 break;
1850 }
1851 break;
1852 default:
1853 if (wmp->wmp_flags & WMP_F_1000X)
1854 aprint_error_dev(sc->sc_dev,
1855 "WARNING: TBIMODE clear on 1000BASE-X product!\n");
1856 wm_gmii_mediainit(sc, wmp->wmp_product);
1857 }
1858 }
1859
1860 ifp = &sc->sc_ethercom.ec_if;
1861 xname = device_xname(sc->sc_dev);
1862 strlcpy(ifp->if_xname, xname, IFNAMSIZ);
1863 ifp->if_softc = sc;
1864 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1865 ifp->if_ioctl = wm_ioctl;
1866 ifp->if_start = wm_start;
1867 ifp->if_watchdog = wm_watchdog;
1868 ifp->if_init = wm_init;
1869 ifp->if_stop = wm_stop;
1870 IFQ_SET_MAXLEN(&ifp->if_snd, max(WM_IFQUEUELEN, IFQ_MAXLEN));
1871 IFQ_SET_READY(&ifp->if_snd);
1872
1873 /* Check for jumbo frame */
1874 switch (sc->sc_type) {
1875 case WM_T_82573:
1876 /* XXX limited to 9234 if ASPM is disabled */
1877 wm_read_eeprom(sc, EEPROM_INIT_3GIO_3, 1, &io3);
1878 if ((io3 & EEPROM_3GIO_3_ASPM_MASK) != 0)
1879 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
1880 break;
1881 case WM_T_82571:
1882 case WM_T_82572:
1883 case WM_T_82574:
1884 case WM_T_82575:
1885 case WM_T_82576:
1886 case WM_T_82580:
1887 case WM_T_82580ER:
1888 case WM_T_80003:
1889 case WM_T_ICH9:
1890 case WM_T_ICH10:
1891 case WM_T_PCH2: /* PCH2 supports 9K frame size */
1892 /* XXX limited to 9234 */
1893 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
1894 break;
1895 case WM_T_PCH:
1896 /* XXX limited to 4096 */
1897 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
1898 break;
1899 case WM_T_82542_2_0:
1900 case WM_T_82542_2_1:
1901 case WM_T_82583:
1902 case WM_T_ICH8:
1903 /* No support for jumbo frame */
1904 break;
1905 default:
1906 /* ETHER_MAX_LEN_JUMBO */
1907 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
1908 break;
1909 }
1910
1911 /*
1912 * If we're a i82543 or greater, we can support VLANs.
1913 */
1914 if (sc->sc_type == WM_T_82575 || sc->sc_type == WM_T_82576)
1915 sc->sc_ethercom.ec_capabilities |= ETHERCAP_VLAN_MTU;
1916 else if (sc->sc_type >= WM_T_82543)
1917 sc->sc_ethercom.ec_capabilities |=
1918 ETHERCAP_VLAN_MTU | ETHERCAP_VLAN_HWTAGGING;
1919
1920 /*
1921 * We can perform TCPv4 and UDPv4 checkums in-bound. Only
1922 * on i82543 and later.
1923 */
1924 if (sc->sc_type >= WM_T_82543) {
1925 ifp->if_capabilities |=
1926 IFCAP_CSUM_IPv4_Tx | IFCAP_CSUM_IPv4_Rx |
1927 IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_TCPv4_Rx |
1928 IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_UDPv4_Rx |
1929 IFCAP_CSUM_TCPv6_Tx |
1930 IFCAP_CSUM_UDPv6_Tx;
1931 }
1932
1933 /*
1934 * XXXyamt: i'm not sure which chips support RXCSUM_IPV6OFL.
1935 *
1936 * 82541GI (8086:1076) ... no
1937 * 82572EI (8086:10b9) ... yes
1938 */
1939 if (sc->sc_type >= WM_T_82571) {
1940 ifp->if_capabilities |=
1941 IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx;
1942 }
1943
1944 /*
1945 * If we're a i82544 or greater (except i82547), we can do
1946 * TCP segmentation offload.
1947 */
1948 if (sc->sc_type >= WM_T_82544 && sc->sc_type != WM_T_82547) {
1949 ifp->if_capabilities |= IFCAP_TSOv4;
1950 }
1951
1952 if (sc->sc_type >= WM_T_82571) {
1953 ifp->if_capabilities |= IFCAP_TSOv6;
1954 }
1955
1956 /*
1957 * Attach the interface.
1958 */
1959 if_attach(ifp);
1960 ether_ifattach(ifp, enaddr);
1961 ether_set_ifflags_cb(&sc->sc_ethercom, wm_ifflags_cb);
1962 #if NRND > 0
1963 rnd_attach_source(&sc->rnd_source, xname, RND_TYPE_NET, 0);
1964 #endif
1965
1966 #ifdef WM_EVENT_COUNTERS
1967 /* Attach event counters. */
1968 evcnt_attach_dynamic(&sc->sc_ev_txsstall, EVCNT_TYPE_MISC,
1969 NULL, xname, "txsstall");
1970 evcnt_attach_dynamic(&sc->sc_ev_txdstall, EVCNT_TYPE_MISC,
1971 NULL, xname, "txdstall");
1972 evcnt_attach_dynamic(&sc->sc_ev_txfifo_stall, EVCNT_TYPE_MISC,
1973 NULL, xname, "txfifo_stall");
1974 evcnt_attach_dynamic(&sc->sc_ev_txdw, EVCNT_TYPE_INTR,
1975 NULL, xname, "txdw");
1976 evcnt_attach_dynamic(&sc->sc_ev_txqe, EVCNT_TYPE_INTR,
1977 NULL, xname, "txqe");
1978 evcnt_attach_dynamic(&sc->sc_ev_rxintr, EVCNT_TYPE_INTR,
1979 NULL, xname, "rxintr");
1980 evcnt_attach_dynamic(&sc->sc_ev_linkintr, EVCNT_TYPE_INTR,
1981 NULL, xname, "linkintr");
1982
1983 evcnt_attach_dynamic(&sc->sc_ev_rxipsum, EVCNT_TYPE_MISC,
1984 NULL, xname, "rxipsum");
1985 evcnt_attach_dynamic(&sc->sc_ev_rxtusum, EVCNT_TYPE_MISC,
1986 NULL, xname, "rxtusum");
1987 evcnt_attach_dynamic(&sc->sc_ev_txipsum, EVCNT_TYPE_MISC,
1988 NULL, xname, "txipsum");
1989 evcnt_attach_dynamic(&sc->sc_ev_txtusum, EVCNT_TYPE_MISC,
1990 NULL, xname, "txtusum");
1991 evcnt_attach_dynamic(&sc->sc_ev_txtusum6, EVCNT_TYPE_MISC,
1992 NULL, xname, "txtusum6");
1993
1994 evcnt_attach_dynamic(&sc->sc_ev_txtso, EVCNT_TYPE_MISC,
1995 NULL, xname, "txtso");
1996 evcnt_attach_dynamic(&sc->sc_ev_txtso6, EVCNT_TYPE_MISC,
1997 NULL, xname, "txtso6");
1998 evcnt_attach_dynamic(&sc->sc_ev_txtsopain, EVCNT_TYPE_MISC,
1999 NULL, xname, "txtsopain");
2000
2001 for (i = 0; i < WM_NTXSEGS; i++) {
2002 sprintf(wm_txseg_evcnt_names[i], "txseg%d", i);
2003 evcnt_attach_dynamic(&sc->sc_ev_txseg[i], EVCNT_TYPE_MISC,
2004 NULL, xname, wm_txseg_evcnt_names[i]);
2005 }
2006
2007 evcnt_attach_dynamic(&sc->sc_ev_txdrop, EVCNT_TYPE_MISC,
2008 NULL, xname, "txdrop");
2009
2010 evcnt_attach_dynamic(&sc->sc_ev_tu, EVCNT_TYPE_MISC,
2011 NULL, xname, "tu");
2012
2013 evcnt_attach_dynamic(&sc->sc_ev_tx_xoff, EVCNT_TYPE_MISC,
2014 NULL, xname, "tx_xoff");
2015 evcnt_attach_dynamic(&sc->sc_ev_tx_xon, EVCNT_TYPE_MISC,
2016 NULL, xname, "tx_xon");
2017 evcnt_attach_dynamic(&sc->sc_ev_rx_xoff, EVCNT_TYPE_MISC,
2018 NULL, xname, "rx_xoff");
2019 evcnt_attach_dynamic(&sc->sc_ev_rx_xon, EVCNT_TYPE_MISC,
2020 NULL, xname, "rx_xon");
2021 evcnt_attach_dynamic(&sc->sc_ev_rx_macctl, EVCNT_TYPE_MISC,
2022 NULL, xname, "rx_macctl");
2023 #endif /* WM_EVENT_COUNTERS */
2024
2025 if (pmf_device_register(self, wm_suspend, wm_resume))
2026 pmf_class_network_register(self, ifp);
2027 else
2028 aprint_error_dev(self, "couldn't establish power handler\n");
2029
2030 return;
2031
2032 /*
2033 * Free any resources we've allocated during the failed attach
2034 * attempt. Do this in reverse order and fall through.
2035 */
2036 fail_5:
2037 for (i = 0; i < WM_NRXDESC; i++) {
2038 if (sc->sc_rxsoft[i].rxs_dmamap != NULL)
2039 bus_dmamap_destroy(sc->sc_dmat,
2040 sc->sc_rxsoft[i].rxs_dmamap);
2041 }
2042 fail_4:
2043 for (i = 0; i < WM_TXQUEUELEN(sc); i++) {
2044 if (sc->sc_txsoft[i].txs_dmamap != NULL)
2045 bus_dmamap_destroy(sc->sc_dmat,
2046 sc->sc_txsoft[i].txs_dmamap);
2047 }
2048 bus_dmamap_unload(sc->sc_dmat, sc->sc_cddmamap);
2049 fail_3:
2050 bus_dmamap_destroy(sc->sc_dmat, sc->sc_cddmamap);
2051 fail_2:
2052 bus_dmamem_unmap(sc->sc_dmat, (void *)sc->sc_control_data,
2053 sc->sc_cd_size);
2054 fail_1:
2055 bus_dmamem_free(sc->sc_dmat, &sc->sc_cd_seg, sc->sc_cd_rseg);
2056 fail_0:
2057 return;
2058 }
2059
2060 static int
2061 wm_detach(device_t self, int flags __unused)
2062 {
2063 struct wm_softc *sc = device_private(self);
2064 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
2065 int i, s;
2066
2067 s = splnet();
2068 /* Stop the interface. Callouts are stopped in it. */
2069 wm_stop(ifp, 1);
2070 splx(s);
2071
2072 pmf_device_deregister(self);
2073
2074 /* Tell the firmware about the release */
2075 wm_release_manageability(sc);
2076 wm_release_hw_control(sc);
2077
2078 mii_detach(&sc->sc_mii, MII_PHY_ANY, MII_OFFSET_ANY);
2079
2080 /* Delete all remaining media. */
2081 ifmedia_delete_instance(&sc->sc_mii.mii_media, IFM_INST_ANY);
2082
2083 ether_ifdetach(ifp);
2084 if_detach(ifp);
2085
2086
2087 /* Unload RX dmamaps and free mbufs */
2088 wm_rxdrain(sc);
2089
2090 /* Free dmamap. It's the same as the end of the wm_attach() function */
2091 for (i = 0; i < WM_NRXDESC; i++) {
2092 if (sc->sc_rxsoft[i].rxs_dmamap != NULL)
2093 bus_dmamap_destroy(sc->sc_dmat,
2094 sc->sc_rxsoft[i].rxs_dmamap);
2095 }
2096 for (i = 0; i < WM_TXQUEUELEN(sc); i++) {
2097 if (sc->sc_txsoft[i].txs_dmamap != NULL)
2098 bus_dmamap_destroy(sc->sc_dmat,
2099 sc->sc_txsoft[i].txs_dmamap);
2100 }
2101 bus_dmamap_unload(sc->sc_dmat, sc->sc_cddmamap);
2102 bus_dmamap_destroy(sc->sc_dmat, sc->sc_cddmamap);
2103 bus_dmamem_unmap(sc->sc_dmat, (void *)sc->sc_control_data,
2104 sc->sc_cd_size);
2105 bus_dmamem_free(sc->sc_dmat, &sc->sc_cd_seg, sc->sc_cd_rseg);
2106
2107 /* Disestablish the interrupt handler */
2108 if (sc->sc_ih != NULL) {
2109 pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
2110 sc->sc_ih = NULL;
2111 }
2112
2113 /* Unmap the registers */
2114 if (sc->sc_ss) {
2115 bus_space_unmap(sc->sc_st, sc->sc_sh, sc->sc_ss);
2116 sc->sc_ss = 0;
2117 }
2118
2119 if (sc->sc_ios) {
2120 bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_ios);
2121 sc->sc_ios = 0;
2122 }
2123
2124 return 0;
2125 }
2126
2127 /*
2128 * wm_tx_offload:
2129 *
2130 * Set up TCP/IP checksumming parameters for the
2131 * specified packet.
2132 */
2133 static int
2134 wm_tx_offload(struct wm_softc *sc, struct wm_txsoft *txs, uint32_t *cmdp,
2135 uint8_t *fieldsp)
2136 {
2137 struct mbuf *m0 = txs->txs_mbuf;
2138 struct livengood_tcpip_ctxdesc *t;
2139 uint32_t ipcs, tucs, cmd, cmdlen, seg;
2140 uint32_t ipcse;
2141 struct ether_header *eh;
2142 int offset, iphl;
2143 uint8_t fields;
2144
2145 /*
2146 * XXX It would be nice if the mbuf pkthdr had offset
2147 * fields for the protocol headers.
2148 */
2149
2150 eh = mtod(m0, struct ether_header *);
2151 switch (htons(eh->ether_type)) {
2152 case ETHERTYPE_IP:
2153 case ETHERTYPE_IPV6:
2154 offset = ETHER_HDR_LEN;
2155 break;
2156
2157 case ETHERTYPE_VLAN:
2158 offset = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
2159 break;
2160
2161 default:
2162 /*
2163 * Don't support this protocol or encapsulation.
2164 */
2165 *fieldsp = 0;
2166 *cmdp = 0;
2167 return 0;
2168 }
2169
2170 if ((m0->m_pkthdr.csum_flags &
2171 (M_CSUM_TSOv4|M_CSUM_UDPv4|M_CSUM_TCPv4)) != 0) {
2172 iphl = M_CSUM_DATA_IPv4_IPHL(m0->m_pkthdr.csum_data);
2173 } else {
2174 iphl = M_CSUM_DATA_IPv6_HL(m0->m_pkthdr.csum_data);
2175 }
2176 ipcse = offset + iphl - 1;
2177
2178 cmd = WTX_CMD_DEXT | WTX_DTYP_D;
2179 cmdlen = WTX_CMD_DEXT | WTX_DTYP_C | WTX_CMD_IDE;
2180 seg = 0;
2181 fields = 0;
2182
2183 if ((m0->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0) {
2184 int hlen = offset + iphl;
2185 bool v4 = (m0->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0;
2186
2187 if (__predict_false(m0->m_len <
2188 (hlen + sizeof(struct tcphdr)))) {
2189 /*
2190 * TCP/IP headers are not in the first mbuf; we need
2191 * to do this the slow and painful way. Let's just
2192 * hope this doesn't happen very often.
2193 */
2194 struct tcphdr th;
2195
2196 WM_EVCNT_INCR(&sc->sc_ev_txtsopain);
2197
2198 m_copydata(m0, hlen, sizeof(th), &th);
2199 if (v4) {
2200 struct ip ip;
2201
2202 m_copydata(m0, offset, sizeof(ip), &ip);
2203 ip.ip_len = 0;
2204 m_copyback(m0,
2205 offset + offsetof(struct ip, ip_len),
2206 sizeof(ip.ip_len), &ip.ip_len);
2207 th.th_sum = in_cksum_phdr(ip.ip_src.s_addr,
2208 ip.ip_dst.s_addr, htons(IPPROTO_TCP));
2209 } else {
2210 struct ip6_hdr ip6;
2211
2212 m_copydata(m0, offset, sizeof(ip6), &ip6);
2213 ip6.ip6_plen = 0;
2214 m_copyback(m0,
2215 offset + offsetof(struct ip6_hdr, ip6_plen),
2216 sizeof(ip6.ip6_plen), &ip6.ip6_plen);
2217 th.th_sum = in6_cksum_phdr(&ip6.ip6_src,
2218 &ip6.ip6_dst, 0, htonl(IPPROTO_TCP));
2219 }
2220 m_copyback(m0, hlen + offsetof(struct tcphdr, th_sum),
2221 sizeof(th.th_sum), &th.th_sum);
2222
2223 hlen += th.th_off << 2;
2224 } else {
2225 /*
2226 * TCP/IP headers are in the first mbuf; we can do
2227 * this the easy way.
2228 */
2229 struct tcphdr *th;
2230
2231 if (v4) {
2232 struct ip *ip =
2233 (void *)(mtod(m0, char *) + offset);
2234 th = (void *)(mtod(m0, char *) + hlen);
2235
2236 ip->ip_len = 0;
2237 th->th_sum = in_cksum_phdr(ip->ip_src.s_addr,
2238 ip->ip_dst.s_addr, htons(IPPROTO_TCP));
2239 } else {
2240 struct ip6_hdr *ip6 =
2241 (void *)(mtod(m0, char *) + offset);
2242 th = (void *)(mtod(m0, char *) + hlen);
2243
2244 ip6->ip6_plen = 0;
2245 th->th_sum = in6_cksum_phdr(&ip6->ip6_src,
2246 &ip6->ip6_dst, 0, htonl(IPPROTO_TCP));
2247 }
2248 hlen += th->th_off << 2;
2249 }
2250
2251 if (v4) {
2252 WM_EVCNT_INCR(&sc->sc_ev_txtso);
2253 cmdlen |= WTX_TCPIP_CMD_IP;
2254 } else {
2255 WM_EVCNT_INCR(&sc->sc_ev_txtso6);
2256 ipcse = 0;
2257 }
2258 cmd |= WTX_TCPIP_CMD_TSE;
2259 cmdlen |= WTX_TCPIP_CMD_TSE |
2260 WTX_TCPIP_CMD_TCP | (m0->m_pkthdr.len - hlen);
2261 seg = WTX_TCPIP_SEG_HDRLEN(hlen) |
2262 WTX_TCPIP_SEG_MSS(m0->m_pkthdr.segsz);
2263 }
2264
2265 /*
2266 * NOTE: Even if we're not using the IP or TCP/UDP checksum
2267 * offload feature, if we load the context descriptor, we
2268 * MUST provide valid values for IPCSS and TUCSS fields.
2269 */
2270
2271 ipcs = WTX_TCPIP_IPCSS(offset) |
2272 WTX_TCPIP_IPCSO(offset + offsetof(struct ip, ip_sum)) |
2273 WTX_TCPIP_IPCSE(ipcse);
2274 if (m0->m_pkthdr.csum_flags & (M_CSUM_IPv4|M_CSUM_TSOv4)) {
2275 WM_EVCNT_INCR(&sc->sc_ev_txipsum);
2276 fields |= WTX_IXSM;
2277 }
2278
2279 offset += iphl;
2280
2281 if (m0->m_pkthdr.csum_flags &
2282 (M_CSUM_TCPv4|M_CSUM_UDPv4|M_CSUM_TSOv4)) {
2283 WM_EVCNT_INCR(&sc->sc_ev_txtusum);
2284 fields |= WTX_TXSM;
2285 tucs = WTX_TCPIP_TUCSS(offset) |
2286 WTX_TCPIP_TUCSO(offset +
2287 M_CSUM_DATA_IPv4_OFFSET(m0->m_pkthdr.csum_data)) |
2288 WTX_TCPIP_TUCSE(0) /* rest of packet */;
2289 } else if ((m0->m_pkthdr.csum_flags &
2290 (M_CSUM_TCPv6|M_CSUM_UDPv6|M_CSUM_TSOv6)) != 0) {
2291 WM_EVCNT_INCR(&sc->sc_ev_txtusum6);
2292 fields |= WTX_TXSM;
2293 tucs = WTX_TCPIP_TUCSS(offset) |
2294 WTX_TCPIP_TUCSO(offset +
2295 M_CSUM_DATA_IPv6_OFFSET(m0->m_pkthdr.csum_data)) |
2296 WTX_TCPIP_TUCSE(0) /* rest of packet */;
2297 } else {
2298 /* Just initialize it to a valid TCP context. */
2299 tucs = WTX_TCPIP_TUCSS(offset) |
2300 WTX_TCPIP_TUCSO(offset + offsetof(struct tcphdr, th_sum)) |
2301 WTX_TCPIP_TUCSE(0) /* rest of packet */;
2302 }
2303
2304 /* Fill in the context descriptor. */
2305 t = (struct livengood_tcpip_ctxdesc *)
2306 &sc->sc_txdescs[sc->sc_txnext];
2307 t->tcpip_ipcs = htole32(ipcs);
2308 t->tcpip_tucs = htole32(tucs);
2309 t->tcpip_cmdlen = htole32(cmdlen);
2310 t->tcpip_seg = htole32(seg);
2311 WM_CDTXSYNC(sc, sc->sc_txnext, 1, BUS_DMASYNC_PREWRITE);
2312
2313 sc->sc_txnext = WM_NEXTTX(sc, sc->sc_txnext);
2314 txs->txs_ndesc++;
2315
2316 *cmdp = cmd;
2317 *fieldsp = fields;
2318
2319 return 0;
2320 }
2321
2322 static void
2323 wm_dump_mbuf_chain(struct wm_softc *sc, struct mbuf *m0)
2324 {
2325 struct mbuf *m;
2326 int i;
2327
2328 log(LOG_DEBUG, "%s: mbuf chain:\n", device_xname(sc->sc_dev));
2329 for (m = m0, i = 0; m != NULL; m = m->m_next, i++)
2330 log(LOG_DEBUG, "%s:\tm_data = %p, m_len = %d, "
2331 "m_flags = 0x%08x\n", device_xname(sc->sc_dev),
2332 m->m_data, m->m_len, m->m_flags);
2333 log(LOG_DEBUG, "%s:\t%d mbuf%s in chain\n", device_xname(sc->sc_dev),
2334 i, i == 1 ? "" : "s");
2335 }
2336
2337 /*
2338 * wm_82547_txfifo_stall:
2339 *
2340 * Callout used to wait for the 82547 Tx FIFO to drain,
2341 * reset the FIFO pointers, and restart packet transmission.
2342 */
2343 static void
2344 wm_82547_txfifo_stall(void *arg)
2345 {
2346 struct wm_softc *sc = arg;
2347 int s;
2348
2349 s = splnet();
2350
2351 if (sc->sc_txfifo_stall) {
2352 if (CSR_READ(sc, WMREG_TDT) == CSR_READ(sc, WMREG_TDH) &&
2353 CSR_READ(sc, WMREG_TDFT) == CSR_READ(sc, WMREG_TDFH) &&
2354 CSR_READ(sc, WMREG_TDFTS) == CSR_READ(sc, WMREG_TDFHS)) {
2355 /*
2356 * Packets have drained. Stop transmitter, reset
2357 * FIFO pointers, restart transmitter, and kick
2358 * the packet queue.
2359 */
2360 uint32_t tctl = CSR_READ(sc, WMREG_TCTL);
2361 CSR_WRITE(sc, WMREG_TCTL, tctl & ~TCTL_EN);
2362 CSR_WRITE(sc, WMREG_TDFT, sc->sc_txfifo_addr);
2363 CSR_WRITE(sc, WMREG_TDFH, sc->sc_txfifo_addr);
2364 CSR_WRITE(sc, WMREG_TDFTS, sc->sc_txfifo_addr);
2365 CSR_WRITE(sc, WMREG_TDFHS, sc->sc_txfifo_addr);
2366 CSR_WRITE(sc, WMREG_TCTL, tctl);
2367 CSR_WRITE_FLUSH(sc);
2368
2369 sc->sc_txfifo_head = 0;
2370 sc->sc_txfifo_stall = 0;
2371 wm_start(&sc->sc_ethercom.ec_if);
2372 } else {
2373 /*
2374 * Still waiting for packets to drain; try again in
2375 * another tick.
2376 */
2377 callout_schedule(&sc->sc_txfifo_ch, 1);
2378 }
2379 }
2380
2381 splx(s);
2382 }
2383
2384 static void
2385 wm_gate_hw_phy_config_ich8lan(struct wm_softc *sc, int on)
2386 {
2387 uint32_t reg;
2388
2389 reg = CSR_READ(sc, WMREG_EXTCNFCTR);
2390
2391 if (on != 0)
2392 reg |= EXTCNFCTR_GATE_PHY_CFG;
2393 else
2394 reg &= ~EXTCNFCTR_GATE_PHY_CFG;
2395
2396 CSR_WRITE(sc, WMREG_EXTCNFCTR, reg);
2397 }
2398
2399 /*
2400 * wm_82547_txfifo_bugchk:
2401 *
2402 * Check for bug condition in the 82547 Tx FIFO. We need to
2403 * prevent enqueueing a packet that would wrap around the end
2404 * if the Tx FIFO ring buffer, otherwise the chip will croak.
2405 *
2406 * We do this by checking the amount of space before the end
2407 * of the Tx FIFO buffer. If the packet will not fit, we "stall"
2408 * the Tx FIFO, wait for all remaining packets to drain, reset
2409 * the internal FIFO pointers to the beginning, and restart
2410 * transmission on the interface.
2411 */
2412 #define WM_FIFO_HDR 0x10
2413 #define WM_82547_PAD_LEN 0x3e0
2414 static int
2415 wm_82547_txfifo_bugchk(struct wm_softc *sc, struct mbuf *m0)
2416 {
2417 int space = sc->sc_txfifo_size - sc->sc_txfifo_head;
2418 int len = roundup(m0->m_pkthdr.len + WM_FIFO_HDR, WM_FIFO_HDR);
2419
2420 /* Just return if already stalled. */
2421 if (sc->sc_txfifo_stall)
2422 return 1;
2423
2424 if (sc->sc_mii.mii_media_active & IFM_FDX) {
2425 /* Stall only occurs in half-duplex mode. */
2426 goto send_packet;
2427 }
2428
2429 if (len >= WM_82547_PAD_LEN + space) {
2430 sc->sc_txfifo_stall = 1;
2431 callout_schedule(&sc->sc_txfifo_ch, 1);
2432 return 1;
2433 }
2434
2435 send_packet:
2436 sc->sc_txfifo_head += len;
2437 if (sc->sc_txfifo_head >= sc->sc_txfifo_size)
2438 sc->sc_txfifo_head -= sc->sc_txfifo_size;
2439
2440 return 0;
2441 }
2442
2443 /*
2444 * wm_start: [ifnet interface function]
2445 *
2446 * Start packet transmission on the interface.
2447 */
2448 static void
2449 wm_start(struct ifnet *ifp)
2450 {
2451 struct wm_softc *sc = ifp->if_softc;
2452 struct mbuf *m0;
2453 struct m_tag *mtag;
2454 struct wm_txsoft *txs;
2455 bus_dmamap_t dmamap;
2456 int error, nexttx, lasttx = -1, ofree, seg, segs_needed, use_tso;
2457 bus_addr_t curaddr;
2458 bus_size_t seglen, curlen;
2459 uint32_t cksumcmd;
2460 uint8_t cksumfields;
2461
2462 if ((ifp->if_flags & (IFF_RUNNING|IFF_OACTIVE)) != IFF_RUNNING)
2463 return;
2464
2465 /*
2466 * Remember the previous number of free descriptors.
2467 */
2468 ofree = sc->sc_txfree;
2469
2470 /*
2471 * Loop through the send queue, setting up transmit descriptors
2472 * until we drain the queue, or use up all available transmit
2473 * descriptors.
2474 */
2475 for (;;) {
2476 /* Grab a packet off the queue. */
2477 IFQ_POLL(&ifp->if_snd, m0);
2478 if (m0 == NULL)
2479 break;
2480
2481 DPRINTF(WM_DEBUG_TX,
2482 ("%s: TX: have packet to transmit: %p\n",
2483 device_xname(sc->sc_dev), m0));
2484
2485 /* Get a work queue entry. */
2486 if (sc->sc_txsfree < WM_TXQUEUE_GC(sc)) {
2487 wm_txintr(sc);
2488 if (sc->sc_txsfree == 0) {
2489 DPRINTF(WM_DEBUG_TX,
2490 ("%s: TX: no free job descriptors\n",
2491 device_xname(sc->sc_dev)));
2492 WM_EVCNT_INCR(&sc->sc_ev_txsstall);
2493 break;
2494 }
2495 }
2496
2497 txs = &sc->sc_txsoft[sc->sc_txsnext];
2498 dmamap = txs->txs_dmamap;
2499
2500 use_tso = (m0->m_pkthdr.csum_flags &
2501 (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0;
2502
2503 /*
2504 * So says the Linux driver:
2505 * The controller does a simple calculation to make sure
2506 * there is enough room in the FIFO before initiating the
2507 * DMA for each buffer. The calc is:
2508 * 4 = ceil(buffer len / MSS)
2509 * To make sure we don't overrun the FIFO, adjust the max
2510 * buffer len if the MSS drops.
2511 */
2512 dmamap->dm_maxsegsz =
2513 (use_tso && (m0->m_pkthdr.segsz << 2) < WTX_MAX_LEN)
2514 ? m0->m_pkthdr.segsz << 2
2515 : WTX_MAX_LEN;
2516
2517 /*
2518 * Load the DMA map. If this fails, the packet either
2519 * didn't fit in the allotted number of segments, or we
2520 * were short on resources. For the too-many-segments
2521 * case, we simply report an error and drop the packet,
2522 * since we can't sanely copy a jumbo packet to a single
2523 * buffer.
2524 */
2525 error = bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, m0,
2526 BUS_DMA_WRITE|BUS_DMA_NOWAIT);
2527 if (error) {
2528 if (error == EFBIG) {
2529 WM_EVCNT_INCR(&sc->sc_ev_txdrop);
2530 log(LOG_ERR, "%s: Tx packet consumes too many "
2531 "DMA segments, dropping...\n",
2532 device_xname(sc->sc_dev));
2533 IFQ_DEQUEUE(&ifp->if_snd, m0);
2534 wm_dump_mbuf_chain(sc, m0);
2535 m_freem(m0);
2536 continue;
2537 }
2538 /*
2539 * Short on resources, just stop for now.
2540 */
2541 DPRINTF(WM_DEBUG_TX,
2542 ("%s: TX: dmamap load failed: %d\n",
2543 device_xname(sc->sc_dev), error));
2544 break;
2545 }
2546
2547 segs_needed = dmamap->dm_nsegs;
2548 if (use_tso) {
2549 /* For sentinel descriptor; see below. */
2550 segs_needed++;
2551 }
2552
2553 /*
2554 * Ensure we have enough descriptors free to describe
2555 * the packet. Note, we always reserve one descriptor
2556 * at the end of the ring due to the semantics of the
2557 * TDT register, plus one more in the event we need
2558 * to load offload context.
2559 */
2560 if (segs_needed > sc->sc_txfree - 2) {
2561 /*
2562 * Not enough free descriptors to transmit this
2563 * packet. We haven't committed anything yet,
2564 * so just unload the DMA map, put the packet
2565 * pack on the queue, and punt. Notify the upper
2566 * layer that there are no more slots left.
2567 */
2568 DPRINTF(WM_DEBUG_TX,
2569 ("%s: TX: need %d (%d) descriptors, have %d\n",
2570 device_xname(sc->sc_dev), dmamap->dm_nsegs,
2571 segs_needed, sc->sc_txfree - 1));
2572 ifp->if_flags |= IFF_OACTIVE;
2573 bus_dmamap_unload(sc->sc_dmat, dmamap);
2574 WM_EVCNT_INCR(&sc->sc_ev_txdstall);
2575 break;
2576 }
2577
2578 /*
2579 * Check for 82547 Tx FIFO bug. We need to do this
2580 * once we know we can transmit the packet, since we
2581 * do some internal FIFO space accounting here.
2582 */
2583 if (sc->sc_type == WM_T_82547 &&
2584 wm_82547_txfifo_bugchk(sc, m0)) {
2585 DPRINTF(WM_DEBUG_TX,
2586 ("%s: TX: 82547 Tx FIFO bug detected\n",
2587 device_xname(sc->sc_dev)));
2588 ifp->if_flags |= IFF_OACTIVE;
2589 bus_dmamap_unload(sc->sc_dmat, dmamap);
2590 WM_EVCNT_INCR(&sc->sc_ev_txfifo_stall);
2591 break;
2592 }
2593
2594 IFQ_DEQUEUE(&ifp->if_snd, m0);
2595
2596 /*
2597 * WE ARE NOW COMMITTED TO TRANSMITTING THE PACKET.
2598 */
2599
2600 DPRINTF(WM_DEBUG_TX,
2601 ("%s: TX: packet has %d (%d) DMA segments\n",
2602 device_xname(sc->sc_dev), dmamap->dm_nsegs, segs_needed));
2603
2604 WM_EVCNT_INCR(&sc->sc_ev_txseg[dmamap->dm_nsegs - 1]);
2605
2606 /*
2607 * Store a pointer to the packet so that we can free it
2608 * later.
2609 *
2610 * Initially, we consider the number of descriptors the
2611 * packet uses the number of DMA segments. This may be
2612 * incremented by 1 if we do checksum offload (a descriptor
2613 * is used to set the checksum context).
2614 */
2615 txs->txs_mbuf = m0;
2616 txs->txs_firstdesc = sc->sc_txnext;
2617 txs->txs_ndesc = segs_needed;
2618
2619 /* Set up offload parameters for this packet. */
2620 if (m0->m_pkthdr.csum_flags &
2621 (M_CSUM_TSOv4|M_CSUM_TSOv6|
2622 M_CSUM_IPv4|M_CSUM_TCPv4|M_CSUM_UDPv4|
2623 M_CSUM_TCPv6|M_CSUM_UDPv6)) {
2624 if (wm_tx_offload(sc, txs, &cksumcmd,
2625 &cksumfields) != 0) {
2626 /* Error message already displayed. */
2627 bus_dmamap_unload(sc->sc_dmat, dmamap);
2628 continue;
2629 }
2630 } else {
2631 cksumcmd = 0;
2632 cksumfields = 0;
2633 }
2634
2635 cksumcmd |= WTX_CMD_IDE | WTX_CMD_IFCS;
2636
2637 /* Sync the DMA map. */
2638 bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize,
2639 BUS_DMASYNC_PREWRITE);
2640
2641 /*
2642 * Initialize the transmit descriptor.
2643 */
2644 for (nexttx = sc->sc_txnext, seg = 0;
2645 seg < dmamap->dm_nsegs; seg++) {
2646 for (seglen = dmamap->dm_segs[seg].ds_len,
2647 curaddr = dmamap->dm_segs[seg].ds_addr;
2648 seglen != 0;
2649 curaddr += curlen, seglen -= curlen,
2650 nexttx = WM_NEXTTX(sc, nexttx)) {
2651 curlen = seglen;
2652
2653 /*
2654 * So says the Linux driver:
2655 * Work around for premature descriptor
2656 * write-backs in TSO mode. Append a
2657 * 4-byte sentinel descriptor.
2658 */
2659 if (use_tso &&
2660 seg == dmamap->dm_nsegs - 1 &&
2661 curlen > 8)
2662 curlen -= 4;
2663
2664 wm_set_dma_addr(
2665 &sc->sc_txdescs[nexttx].wtx_addr,
2666 curaddr);
2667 sc->sc_txdescs[nexttx].wtx_cmdlen =
2668 htole32(cksumcmd | curlen);
2669 sc->sc_txdescs[nexttx].wtx_fields.wtxu_status =
2670 0;
2671 sc->sc_txdescs[nexttx].wtx_fields.wtxu_options =
2672 cksumfields;
2673 sc->sc_txdescs[nexttx].wtx_fields.wtxu_vlan = 0;
2674 lasttx = nexttx;
2675
2676 DPRINTF(WM_DEBUG_TX,
2677 ("%s: TX: desc %d: low %#" PRIxPADDR ", "
2678 "len %#04zx\n",
2679 device_xname(sc->sc_dev), nexttx,
2680 curaddr & 0xffffffffUL, curlen));
2681 }
2682 }
2683
2684 KASSERT(lasttx != -1);
2685
2686 /*
2687 * Set up the command byte on the last descriptor of
2688 * the packet. If we're in the interrupt delay window,
2689 * delay the interrupt.
2690 */
2691 sc->sc_txdescs[lasttx].wtx_cmdlen |=
2692 htole32(WTX_CMD_EOP | WTX_CMD_RS);
2693
2694 /*
2695 * If VLANs are enabled and the packet has a VLAN tag, set
2696 * up the descriptor to encapsulate the packet for us.
2697 *
2698 * This is only valid on the last descriptor of the packet.
2699 */
2700 if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL) {
2701 sc->sc_txdescs[lasttx].wtx_cmdlen |=
2702 htole32(WTX_CMD_VLE);
2703 sc->sc_txdescs[lasttx].wtx_fields.wtxu_vlan
2704 = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
2705 }
2706
2707 txs->txs_lastdesc = lasttx;
2708
2709 DPRINTF(WM_DEBUG_TX,
2710 ("%s: TX: desc %d: cmdlen 0x%08x\n",
2711 device_xname(sc->sc_dev),
2712 lasttx, le32toh(sc->sc_txdescs[lasttx].wtx_cmdlen)));
2713
2714 /* Sync the descriptors we're using. */
2715 WM_CDTXSYNC(sc, sc->sc_txnext, txs->txs_ndesc,
2716 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
2717
2718 /* Give the packet to the chip. */
2719 CSR_WRITE(sc, sc->sc_tdt_reg, nexttx);
2720
2721 DPRINTF(WM_DEBUG_TX,
2722 ("%s: TX: TDT -> %d\n", device_xname(sc->sc_dev), nexttx));
2723
2724 DPRINTF(WM_DEBUG_TX,
2725 ("%s: TX: finished transmitting packet, job %d\n",
2726 device_xname(sc->sc_dev), sc->sc_txsnext));
2727
2728 /* Advance the tx pointer. */
2729 sc->sc_txfree -= txs->txs_ndesc;
2730 sc->sc_txnext = nexttx;
2731
2732 sc->sc_txsfree--;
2733 sc->sc_txsnext = WM_NEXTTXS(sc, sc->sc_txsnext);
2734
2735 /* Pass the packet to any BPF listeners. */
2736 bpf_mtap(ifp, m0);
2737 }
2738
2739 if (sc->sc_txsfree == 0 || sc->sc_txfree <= 2) {
2740 /* No more slots; notify upper layer. */
2741 ifp->if_flags |= IFF_OACTIVE;
2742 }
2743
2744 if (sc->sc_txfree != ofree) {
2745 /* Set a watchdog timer in case the chip flakes out. */
2746 ifp->if_timer = 5;
2747 }
2748 }
2749
2750 /*
2751 * wm_watchdog: [ifnet interface function]
2752 *
2753 * Watchdog timer handler.
2754 */
2755 static void
2756 wm_watchdog(struct ifnet *ifp)
2757 {
2758 struct wm_softc *sc = ifp->if_softc;
2759
2760 /*
2761 * Since we're using delayed interrupts, sweep up
2762 * before we report an error.
2763 */
2764 wm_txintr(sc);
2765
2766 if (sc->sc_txfree != WM_NTXDESC(sc)) {
2767 log(LOG_ERR,
2768 "%s: device timeout (txfree %d txsfree %d txnext %d)\n",
2769 device_xname(sc->sc_dev), sc->sc_txfree, sc->sc_txsfree,
2770 sc->sc_txnext);
2771 ifp->if_oerrors++;
2772
2773 /* Reset the interface. */
2774 (void) wm_init(ifp);
2775 }
2776
2777 /* Try to get more packets going. */
2778 wm_start(ifp);
2779 }
2780
2781 static int
2782 wm_ifflags_cb(struct ethercom *ec)
2783 {
2784 struct ifnet *ifp = &ec->ec_if;
2785 struct wm_softc *sc = ifp->if_softc;
2786 int change = ifp->if_flags ^ sc->sc_if_flags;
2787
2788 if (change != 0)
2789 sc->sc_if_flags = ifp->if_flags;
2790
2791 if ((change & ~(IFF_CANTCHANGE|IFF_DEBUG)) != 0)
2792 return ENETRESET;
2793
2794 if ((change & (IFF_PROMISC | IFF_ALLMULTI)) != 0)
2795 wm_set_filter(sc);
2796
2797 wm_set_vlan(sc);
2798
2799 return 0;
2800 }
2801
2802 /*
2803 * wm_ioctl: [ifnet interface function]
2804 *
2805 * Handle control requests from the operator.
2806 */
2807 static int
2808 wm_ioctl(struct ifnet *ifp, u_long cmd, void *data)
2809 {
2810 struct wm_softc *sc = ifp->if_softc;
2811 struct ifreq *ifr = (struct ifreq *) data;
2812 struct ifaddr *ifa = (struct ifaddr *)data;
2813 struct sockaddr_dl *sdl;
2814 int s, error;
2815
2816 s = splnet();
2817
2818 switch (cmd) {
2819 case SIOCSIFMEDIA:
2820 case SIOCGIFMEDIA:
2821 /* Flow control requires full-duplex mode. */
2822 if (IFM_SUBTYPE(ifr->ifr_media) == IFM_AUTO ||
2823 (ifr->ifr_media & IFM_FDX) == 0)
2824 ifr->ifr_media &= ~IFM_ETH_FMASK;
2825 if (IFM_SUBTYPE(ifr->ifr_media) != IFM_AUTO) {
2826 if ((ifr->ifr_media & IFM_ETH_FMASK) == IFM_FLOW) {
2827 /* We can do both TXPAUSE and RXPAUSE. */
2828 ifr->ifr_media |=
2829 IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE;
2830 }
2831 sc->sc_flowflags = ifr->ifr_media & IFM_ETH_FMASK;
2832 }
2833 error = ifmedia_ioctl(ifp, ifr, &sc->sc_mii.mii_media, cmd);
2834 break;
2835 case SIOCINITIFADDR:
2836 if (ifa->ifa_addr->sa_family == AF_LINK) {
2837 sdl = satosdl(ifp->if_dl->ifa_addr);
2838 (void)sockaddr_dl_setaddr(sdl, sdl->sdl_len,
2839 LLADDR(satosdl(ifa->ifa_addr)), ifp->if_addrlen);
2840 /* unicast address is first multicast entry */
2841 wm_set_filter(sc);
2842 error = 0;
2843 break;
2844 }
2845 /*FALLTHROUGH*/
2846 default:
2847 if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
2848 break;
2849
2850 error = 0;
2851
2852 if (cmd == SIOCSIFCAP)
2853 error = (*ifp->if_init)(ifp);
2854 else if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
2855 ;
2856 else if (ifp->if_flags & IFF_RUNNING) {
2857 /*
2858 * Multicast list has changed; set the hardware filter
2859 * accordingly.
2860 */
2861 wm_set_filter(sc);
2862 }
2863 break;
2864 }
2865
2866 /* Try to get more packets going. */
2867 wm_start(ifp);
2868
2869 splx(s);
2870 return error;
2871 }
2872
2873 /*
2874 * wm_intr:
2875 *
2876 * Interrupt service routine.
2877 */
2878 static int
2879 wm_intr(void *arg)
2880 {
2881 struct wm_softc *sc = arg;
2882 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
2883 uint32_t icr;
2884 int handled = 0;
2885
2886 while (1 /* CONSTCOND */) {
2887 icr = CSR_READ(sc, WMREG_ICR);
2888 if ((icr & sc->sc_icr) == 0)
2889 break;
2890 #if 0 /*NRND > 0*/
2891 if (RND_ENABLED(&sc->rnd_source))
2892 rnd_add_uint32(&sc->rnd_source, icr);
2893 #endif
2894
2895 handled = 1;
2896
2897 #if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS)
2898 if (icr & (ICR_RXDMT0|ICR_RXT0)) {
2899 DPRINTF(WM_DEBUG_RX,
2900 ("%s: RX: got Rx intr 0x%08x\n",
2901 device_xname(sc->sc_dev),
2902 icr & (ICR_RXDMT0|ICR_RXT0)));
2903 WM_EVCNT_INCR(&sc->sc_ev_rxintr);
2904 }
2905 #endif
2906 wm_rxintr(sc);
2907
2908 #if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS)
2909 if (icr & ICR_TXDW) {
2910 DPRINTF(WM_DEBUG_TX,
2911 ("%s: TX: got TXDW interrupt\n",
2912 device_xname(sc->sc_dev)));
2913 WM_EVCNT_INCR(&sc->sc_ev_txdw);
2914 }
2915 #endif
2916 wm_txintr(sc);
2917
2918 if (icr & (ICR_LSC|ICR_RXSEQ|ICR_RXCFG)) {
2919 WM_EVCNT_INCR(&sc->sc_ev_linkintr);
2920 wm_linkintr(sc, icr);
2921 }
2922
2923 if (icr & ICR_RXO) {
2924 #if defined(WM_DEBUG)
2925 log(LOG_WARNING, "%s: Receive overrun\n",
2926 device_xname(sc->sc_dev));
2927 #endif /* defined(WM_DEBUG) */
2928 }
2929 }
2930
2931 if (handled) {
2932 /* Try to get more packets going. */
2933 wm_start(ifp);
2934 }
2935
2936 return handled;
2937 }
2938
2939 /*
2940 * wm_txintr:
2941 *
2942 * Helper; handle transmit interrupts.
2943 */
2944 static void
2945 wm_txintr(struct wm_softc *sc)
2946 {
2947 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
2948 struct wm_txsoft *txs;
2949 uint8_t status;
2950 int i;
2951
2952 ifp->if_flags &= ~IFF_OACTIVE;
2953
2954 /*
2955 * Go through the Tx list and free mbufs for those
2956 * frames which have been transmitted.
2957 */
2958 for (i = sc->sc_txsdirty; sc->sc_txsfree != WM_TXQUEUELEN(sc);
2959 i = WM_NEXTTXS(sc, i), sc->sc_txsfree++) {
2960 txs = &sc->sc_txsoft[i];
2961
2962 DPRINTF(WM_DEBUG_TX,
2963 ("%s: TX: checking job %d\n", device_xname(sc->sc_dev), i));
2964
2965 WM_CDTXSYNC(sc, txs->txs_firstdesc, txs->txs_ndesc,
2966 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
2967
2968 status =
2969 sc->sc_txdescs[txs->txs_lastdesc].wtx_fields.wtxu_status;
2970 if ((status & WTX_ST_DD) == 0) {
2971 WM_CDTXSYNC(sc, txs->txs_lastdesc, 1,
2972 BUS_DMASYNC_PREREAD);
2973 break;
2974 }
2975
2976 DPRINTF(WM_DEBUG_TX,
2977 ("%s: TX: job %d done: descs %d..%d\n",
2978 device_xname(sc->sc_dev), i, txs->txs_firstdesc,
2979 txs->txs_lastdesc));
2980
2981 /*
2982 * XXX We should probably be using the statistics
2983 * XXX registers, but I don't know if they exist
2984 * XXX on chips before the i82544.
2985 */
2986
2987 #ifdef WM_EVENT_COUNTERS
2988 if (status & WTX_ST_TU)
2989 WM_EVCNT_INCR(&sc->sc_ev_tu);
2990 #endif /* WM_EVENT_COUNTERS */
2991
2992 if (status & (WTX_ST_EC|WTX_ST_LC)) {
2993 ifp->if_oerrors++;
2994 if (status & WTX_ST_LC)
2995 log(LOG_WARNING, "%s: late collision\n",
2996 device_xname(sc->sc_dev));
2997 else if (status & WTX_ST_EC) {
2998 ifp->if_collisions += 16;
2999 log(LOG_WARNING, "%s: excessive collisions\n",
3000 device_xname(sc->sc_dev));
3001 }
3002 } else
3003 ifp->if_opackets++;
3004
3005 sc->sc_txfree += txs->txs_ndesc;
3006 bus_dmamap_sync(sc->sc_dmat, txs->txs_dmamap,
3007 0, txs->txs_dmamap->dm_mapsize, BUS_DMASYNC_POSTWRITE);
3008 bus_dmamap_unload(sc->sc_dmat, txs->txs_dmamap);
3009 m_freem(txs->txs_mbuf);
3010 txs->txs_mbuf = NULL;
3011 }
3012
3013 /* Update the dirty transmit buffer pointer. */
3014 sc->sc_txsdirty = i;
3015 DPRINTF(WM_DEBUG_TX,
3016 ("%s: TX: txsdirty -> %d\n", device_xname(sc->sc_dev), i));
3017
3018 /*
3019 * If there are no more pending transmissions, cancel the watchdog
3020 * timer.
3021 */
3022 if (sc->sc_txsfree == WM_TXQUEUELEN(sc))
3023 ifp->if_timer = 0;
3024 }
3025
3026 /*
3027 * wm_rxintr:
3028 *
3029 * Helper; handle receive interrupts.
3030 */
3031 static void
3032 wm_rxintr(struct wm_softc *sc)
3033 {
3034 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
3035 struct wm_rxsoft *rxs;
3036 struct mbuf *m;
3037 int i, len;
3038 uint8_t status, errors;
3039 uint16_t vlantag;
3040
3041 for (i = sc->sc_rxptr;; i = WM_NEXTRX(i)) {
3042 rxs = &sc->sc_rxsoft[i];
3043
3044 DPRINTF(WM_DEBUG_RX,
3045 ("%s: RX: checking descriptor %d\n",
3046 device_xname(sc->sc_dev), i));
3047
3048 WM_CDRXSYNC(sc, i, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
3049
3050 status = sc->sc_rxdescs[i].wrx_status;
3051 errors = sc->sc_rxdescs[i].wrx_errors;
3052 len = le16toh(sc->sc_rxdescs[i].wrx_len);
3053 vlantag = sc->sc_rxdescs[i].wrx_special;
3054
3055 if ((status & WRX_ST_DD) == 0) {
3056 /*
3057 * We have processed all of the receive descriptors.
3058 */
3059 WM_CDRXSYNC(sc, i, BUS_DMASYNC_PREREAD);
3060 break;
3061 }
3062
3063 if (__predict_false(sc->sc_rxdiscard)) {
3064 DPRINTF(WM_DEBUG_RX,
3065 ("%s: RX: discarding contents of descriptor %d\n",
3066 device_xname(sc->sc_dev), i));
3067 WM_INIT_RXDESC(sc, i);
3068 if (status & WRX_ST_EOP) {
3069 /* Reset our state. */
3070 DPRINTF(WM_DEBUG_RX,
3071 ("%s: RX: resetting rxdiscard -> 0\n",
3072 device_xname(sc->sc_dev)));
3073 sc->sc_rxdiscard = 0;
3074 }
3075 continue;
3076 }
3077
3078 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0,
3079 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_POSTREAD);
3080
3081 m = rxs->rxs_mbuf;
3082
3083 /*
3084 * Add a new receive buffer to the ring, unless of
3085 * course the length is zero. Treat the latter as a
3086 * failed mapping.
3087 */
3088 if ((len == 0) || (wm_add_rxbuf(sc, i) != 0)) {
3089 /*
3090 * Failed, throw away what we've done so
3091 * far, and discard the rest of the packet.
3092 */
3093 ifp->if_ierrors++;
3094 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0,
3095 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD);
3096 WM_INIT_RXDESC(sc, i);
3097 if ((status & WRX_ST_EOP) == 0)
3098 sc->sc_rxdiscard = 1;
3099 if (sc->sc_rxhead != NULL)
3100 m_freem(sc->sc_rxhead);
3101 WM_RXCHAIN_RESET(sc);
3102 DPRINTF(WM_DEBUG_RX,
3103 ("%s: RX: Rx buffer allocation failed, "
3104 "dropping packet%s\n", device_xname(sc->sc_dev),
3105 sc->sc_rxdiscard ? " (discard)" : ""));
3106 continue;
3107 }
3108
3109 m->m_len = len;
3110 sc->sc_rxlen += len;
3111 DPRINTF(WM_DEBUG_RX,
3112 ("%s: RX: buffer at %p len %d\n",
3113 device_xname(sc->sc_dev), m->m_data, len));
3114
3115 /*
3116 * If this is not the end of the packet, keep
3117 * looking.
3118 */
3119 if ((status & WRX_ST_EOP) == 0) {
3120 WM_RXCHAIN_LINK(sc, m);
3121 DPRINTF(WM_DEBUG_RX,
3122 ("%s: RX: not yet EOP, rxlen -> %d\n",
3123 device_xname(sc->sc_dev), sc->sc_rxlen));
3124 continue;
3125 }
3126
3127 /*
3128 * Okay, we have the entire packet now. The chip is
3129 * configured to include the FCS (not all chips can
3130 * be configured to strip it), so we need to trim it.
3131 * May need to adjust length of previous mbuf in the
3132 * chain if the current mbuf is too short.
3133 */
3134 if (m->m_len < ETHER_CRC_LEN) {
3135 sc->sc_rxtail->m_len -= (ETHER_CRC_LEN - m->m_len);
3136 m->m_len = 0;
3137 } else {
3138 m->m_len -= ETHER_CRC_LEN;
3139 }
3140 len = sc->sc_rxlen - ETHER_CRC_LEN;
3141
3142 WM_RXCHAIN_LINK(sc, m);
3143
3144 *sc->sc_rxtailp = NULL;
3145 m = sc->sc_rxhead;
3146
3147 WM_RXCHAIN_RESET(sc);
3148
3149 DPRINTF(WM_DEBUG_RX,
3150 ("%s: RX: have entire packet, len -> %d\n",
3151 device_xname(sc->sc_dev), len));
3152
3153 /*
3154 * If an error occurred, update stats and drop the packet.
3155 */
3156 if (errors &
3157 (WRX_ER_CE|WRX_ER_SE|WRX_ER_SEQ|WRX_ER_CXE|WRX_ER_RXE)) {
3158 if (errors & WRX_ER_SE)
3159 log(LOG_WARNING, "%s: symbol error\n",
3160 device_xname(sc->sc_dev));
3161 else if (errors & WRX_ER_SEQ)
3162 log(LOG_WARNING, "%s: receive sequence error\n",
3163 device_xname(sc->sc_dev));
3164 else if (errors & WRX_ER_CE)
3165 log(LOG_WARNING, "%s: CRC error\n",
3166 device_xname(sc->sc_dev));
3167 m_freem(m);
3168 continue;
3169 }
3170
3171 /*
3172 * No errors. Receive the packet.
3173 */
3174 m->m_pkthdr.rcvif = ifp;
3175 m->m_pkthdr.len = len;
3176
3177 /*
3178 * If VLANs are enabled, VLAN packets have been unwrapped
3179 * for us. Associate the tag with the packet.
3180 */
3181 if ((status & WRX_ST_VP) != 0) {
3182 VLAN_INPUT_TAG(ifp, m,
3183 le16toh(vlantag),
3184 continue);
3185 }
3186
3187 /*
3188 * Set up checksum info for this packet.
3189 */
3190 if ((status & WRX_ST_IXSM) == 0) {
3191 if (status & WRX_ST_IPCS) {
3192 WM_EVCNT_INCR(&sc->sc_ev_rxipsum);
3193 m->m_pkthdr.csum_flags |= M_CSUM_IPv4;
3194 if (errors & WRX_ER_IPE)
3195 m->m_pkthdr.csum_flags |=
3196 M_CSUM_IPv4_BAD;
3197 }
3198 if (status & WRX_ST_TCPCS) {
3199 /*
3200 * Note: we don't know if this was TCP or UDP,
3201 * so we just set both bits, and expect the
3202 * upper layers to deal.
3203 */
3204 WM_EVCNT_INCR(&sc->sc_ev_rxtusum);
3205 m->m_pkthdr.csum_flags |=
3206 M_CSUM_TCPv4 | M_CSUM_UDPv4 |
3207 M_CSUM_TCPv6 | M_CSUM_UDPv6;
3208 if (errors & WRX_ER_TCPE)
3209 m->m_pkthdr.csum_flags |=
3210 M_CSUM_TCP_UDP_BAD;
3211 }
3212 }
3213
3214 ifp->if_ipackets++;
3215
3216 /* Pass this up to any BPF listeners. */
3217 bpf_mtap(ifp, m);
3218
3219 /* Pass it on. */
3220 (*ifp->if_input)(ifp, m);
3221 }
3222
3223 /* Update the receive pointer. */
3224 sc->sc_rxptr = i;
3225
3226 DPRINTF(WM_DEBUG_RX,
3227 ("%s: RX: rxptr -> %d\n", device_xname(sc->sc_dev), i));
3228 }
3229
3230 /*
3231 * wm_linkintr_gmii:
3232 *
3233 * Helper; handle link interrupts for GMII.
3234 */
3235 static void
3236 wm_linkintr_gmii(struct wm_softc *sc, uint32_t icr)
3237 {
3238
3239 DPRINTF(WM_DEBUG_LINK, ("%s: %s:\n", device_xname(sc->sc_dev),
3240 __func__));
3241
3242 if (icr & ICR_LSC) {
3243 DPRINTF(WM_DEBUG_LINK,
3244 ("%s: LINK: LSC -> mii_tick\n",
3245 device_xname(sc->sc_dev)));
3246 mii_tick(&sc->sc_mii);
3247 if (sc->sc_type == WM_T_82543) {
3248 int miistatus, active;
3249
3250 /*
3251 * With 82543, we need to force speed and
3252 * duplex on the MAC equal to what the PHY
3253 * speed and duplex configuration is.
3254 */
3255 miistatus = sc->sc_mii.mii_media_status;
3256
3257 if (miistatus & IFM_ACTIVE) {
3258 active = sc->sc_mii.mii_media_active;
3259 sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD);
3260 switch (IFM_SUBTYPE(active)) {
3261 case IFM_10_T:
3262 sc->sc_ctrl |= CTRL_SPEED_10;
3263 break;
3264 case IFM_100_TX:
3265 sc->sc_ctrl |= CTRL_SPEED_100;
3266 break;
3267 case IFM_1000_T:
3268 sc->sc_ctrl |= CTRL_SPEED_1000;
3269 break;
3270 default:
3271 /*
3272 * fiber?
3273 * Shoud not enter here.
3274 */
3275 printf("unknown media (%x)\n",
3276 active);
3277 break;
3278 }
3279 if (active & IFM_FDX)
3280 sc->sc_ctrl |= CTRL_FD;
3281 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
3282 }
3283 } else if ((sc->sc_type == WM_T_ICH8)
3284 && (sc->sc_phytype == WMPHY_IGP_3)) {
3285 wm_kmrn_lock_loss_workaround_ich8lan(sc);
3286 } else if (sc->sc_type == WM_T_PCH) {
3287 wm_k1_gig_workaround_hv(sc,
3288 ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0));
3289 }
3290
3291 if ((sc->sc_phytype == WMPHY_82578)
3292 && (IFM_SUBTYPE(sc->sc_mii.mii_media_active)
3293 == IFM_1000_T)) {
3294
3295 if ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0) {
3296 delay(200*1000); /* XXX too big */
3297
3298 /* Link stall fix for link up */
3299 wm_gmii_hv_writereg(sc->sc_dev, 1,
3300 HV_MUX_DATA_CTRL,
3301 HV_MUX_DATA_CTRL_GEN_TO_MAC
3302 | HV_MUX_DATA_CTRL_FORCE_SPEED);
3303 wm_gmii_hv_writereg(sc->sc_dev, 1,
3304 HV_MUX_DATA_CTRL,
3305 HV_MUX_DATA_CTRL_GEN_TO_MAC);
3306 }
3307 }
3308 } else if (icr & ICR_RXSEQ) {
3309 DPRINTF(WM_DEBUG_LINK,
3310 ("%s: LINK Receive sequence error\n",
3311 device_xname(sc->sc_dev)));
3312 }
3313 }
3314
3315 /*
3316 * wm_linkintr_tbi:
3317 *
3318 * Helper; handle link interrupts for TBI mode.
3319 */
3320 static void
3321 wm_linkintr_tbi(struct wm_softc *sc, uint32_t icr)
3322 {
3323 uint32_t status;
3324
3325 DPRINTF(WM_DEBUG_LINK, ("%s: %s:\n", device_xname(sc->sc_dev),
3326 __func__));
3327
3328 status = CSR_READ(sc, WMREG_STATUS);
3329 if (icr & ICR_LSC) {
3330 if (status & STATUS_LU) {
3331 DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> up %s\n",
3332 device_xname(sc->sc_dev),
3333 (status & STATUS_FD) ? "FDX" : "HDX"));
3334 /*
3335 * NOTE: CTRL will update TFCE and RFCE automatically,
3336 * so we should update sc->sc_ctrl
3337 */
3338
3339 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL);
3340 sc->sc_tctl &= ~TCTL_COLD(0x3ff);
3341 sc->sc_fcrtl &= ~FCRTL_XONE;
3342 if (status & STATUS_FD)
3343 sc->sc_tctl |=
3344 TCTL_COLD(TX_COLLISION_DISTANCE_FDX);
3345 else
3346 sc->sc_tctl |=
3347 TCTL_COLD(TX_COLLISION_DISTANCE_HDX);
3348 if (sc->sc_ctrl & CTRL_TFCE)
3349 sc->sc_fcrtl |= FCRTL_XONE;
3350 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl);
3351 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ?
3352 WMREG_OLD_FCRTL : WMREG_FCRTL,
3353 sc->sc_fcrtl);
3354 sc->sc_tbi_linkup = 1;
3355 } else {
3356 DPRINTF(WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n",
3357 device_xname(sc->sc_dev)));
3358 sc->sc_tbi_linkup = 0;
3359 }
3360 wm_tbi_set_linkled(sc);
3361 } else if (icr & ICR_RXCFG) {
3362 DPRINTF(WM_DEBUG_LINK, ("%s: LINK: receiving /C/\n",
3363 device_xname(sc->sc_dev)));
3364 sc->sc_tbi_nrxcfg++;
3365 wm_check_for_link(sc);
3366 } else if (icr & ICR_RXSEQ) {
3367 DPRINTF(WM_DEBUG_LINK,
3368 ("%s: LINK: Receive sequence error\n",
3369 device_xname(sc->sc_dev)));
3370 }
3371 }
3372
3373 /*
3374 * wm_linkintr:
3375 *
3376 * Helper; handle link interrupts.
3377 */
3378 static void
3379 wm_linkintr(struct wm_softc *sc, uint32_t icr)
3380 {
3381
3382 if (sc->sc_flags & WM_F_HAS_MII)
3383 wm_linkintr_gmii(sc, icr);
3384 else
3385 wm_linkintr_tbi(sc, icr);
3386 }
3387
3388 /*
3389 * wm_tick:
3390 *
3391 * One second timer, used to check link status, sweep up
3392 * completed transmit jobs, etc.
3393 */
3394 static void
3395 wm_tick(void *arg)
3396 {
3397 struct wm_softc *sc = arg;
3398 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
3399 int s;
3400
3401 s = splnet();
3402
3403 if (sc->sc_type >= WM_T_82542_2_1) {
3404 WM_EVCNT_ADD(&sc->sc_ev_rx_xon, CSR_READ(sc, WMREG_XONRXC));
3405 WM_EVCNT_ADD(&sc->sc_ev_tx_xon, CSR_READ(sc, WMREG_XONTXC));
3406 WM_EVCNT_ADD(&sc->sc_ev_rx_xoff, CSR_READ(sc, WMREG_XOFFRXC));
3407 WM_EVCNT_ADD(&sc->sc_ev_tx_xoff, CSR_READ(sc, WMREG_XOFFTXC));
3408 WM_EVCNT_ADD(&sc->sc_ev_rx_macctl, CSR_READ(sc, WMREG_FCRUC));
3409 }
3410
3411 ifp->if_collisions += CSR_READ(sc, WMREG_COLC);
3412 ifp->if_ierrors += 0ULL + /* ensure quad_t */
3413 + CSR_READ(sc, WMREG_CRCERRS)
3414 + CSR_READ(sc, WMREG_ALGNERRC)
3415 + CSR_READ(sc, WMREG_SYMERRC)
3416 + CSR_READ(sc, WMREG_RXERRC)
3417 + CSR_READ(sc, WMREG_SEC)
3418 + CSR_READ(sc, WMREG_CEXTERR)
3419 + CSR_READ(sc, WMREG_RLEC);
3420 ifp->if_iqdrops += CSR_READ(sc, WMREG_MPC) + CSR_READ(sc, WMREG_RNBC);
3421
3422 if (sc->sc_flags & WM_F_HAS_MII)
3423 mii_tick(&sc->sc_mii);
3424 else
3425 wm_tbi_check_link(sc);
3426
3427 splx(s);
3428
3429 callout_reset(&sc->sc_tick_ch, hz, wm_tick, sc);
3430 }
3431
3432 /*
3433 * wm_reset:
3434 *
3435 * Reset the i82542 chip.
3436 */
3437 static void
3438 wm_reset(struct wm_softc *sc)
3439 {
3440 int phy_reset = 0;
3441 uint32_t reg, mask;
3442 int i;
3443
3444 /*
3445 * Allocate on-chip memory according to the MTU size.
3446 * The Packet Buffer Allocation register must be written
3447 * before the chip is reset.
3448 */
3449 switch (sc->sc_type) {
3450 case WM_T_82547:
3451 case WM_T_82547_2:
3452 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 8192 ?
3453 PBA_22K : PBA_30K;
3454 sc->sc_txfifo_head = 0;
3455 sc->sc_txfifo_addr = sc->sc_pba << PBA_ADDR_SHIFT;
3456 sc->sc_txfifo_size =
3457 (PBA_40K - sc->sc_pba) << PBA_BYTE_SHIFT;
3458 sc->sc_txfifo_stall = 0;
3459 break;
3460 case WM_T_82571:
3461 case WM_T_82572:
3462 case WM_T_82575: /* XXX need special handing for jumbo frames */
3463 case WM_T_80003:
3464 sc->sc_pba = PBA_32K;
3465 break;
3466 case WM_T_82580:
3467 case WM_T_82580ER:
3468 sc->sc_pba = PBA_35K;
3469 break;
3470 case WM_T_82576:
3471 sc->sc_pba = PBA_64K;
3472 break;
3473 case WM_T_82573:
3474 sc->sc_pba = PBA_12K;
3475 break;
3476 case WM_T_82574:
3477 case WM_T_82583:
3478 sc->sc_pba = PBA_20K;
3479 break;
3480 case WM_T_ICH8:
3481 sc->sc_pba = PBA_8K;
3482 CSR_WRITE(sc, WMREG_PBS, PBA_16K);
3483 break;
3484 case WM_T_ICH9:
3485 case WM_T_ICH10:
3486 sc->sc_pba = PBA_10K;
3487 break;
3488 case WM_T_PCH:
3489 case WM_T_PCH2:
3490 sc->sc_pba = PBA_26K;
3491 break;
3492 default:
3493 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 8192 ?
3494 PBA_40K : PBA_48K;
3495 break;
3496 }
3497 CSR_WRITE(sc, WMREG_PBA, sc->sc_pba);
3498
3499 /* Prevent the PCI-E bus from sticking */
3500 if (sc->sc_flags & WM_F_PCIE) {
3501 int timeout = 800;
3502
3503 sc->sc_ctrl |= CTRL_GIO_M_DIS;
3504 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
3505
3506 while (timeout--) {
3507 if ((CSR_READ(sc, WMREG_STATUS) & STATUS_GIO_M_ENA) == 0)
3508 break;
3509 delay(100);
3510 }
3511 }
3512
3513 /* Set the completion timeout for interface */
3514 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576))
3515 wm_set_pcie_completion_timeout(sc);
3516
3517 /* Clear interrupt */
3518 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU);
3519
3520 /* Stop the transmit and receive processes. */
3521 CSR_WRITE(sc, WMREG_RCTL, 0);
3522 CSR_WRITE(sc, WMREG_TCTL, TCTL_PSP);
3523 sc->sc_rctl &= ~RCTL_EN;
3524
3525 /* XXX set_tbi_sbp_82543() */
3526
3527 delay(10*1000);
3528
3529 /* Must acquire the MDIO ownership before MAC reset */
3530 switch (sc->sc_type) {
3531 case WM_T_82573:
3532 case WM_T_82574:
3533 case WM_T_82583:
3534 i = 0;
3535 reg = CSR_READ(sc, WMREG_EXTCNFCTR)
3536 | EXTCNFCTR_MDIO_SW_OWNERSHIP;
3537 do {
3538 CSR_WRITE(sc, WMREG_EXTCNFCTR,
3539 reg | EXTCNFCTR_MDIO_SW_OWNERSHIP);
3540 reg = CSR_READ(sc, WMREG_EXTCNFCTR);
3541 if ((reg & EXTCNFCTR_MDIO_SW_OWNERSHIP) != 0)
3542 break;
3543 reg |= EXTCNFCTR_MDIO_SW_OWNERSHIP;
3544 delay(2*1000);
3545 i++;
3546 } while (i < WM_MDIO_OWNERSHIP_TIMEOUT);
3547 break;
3548 default:
3549 break;
3550 }
3551
3552 /*
3553 * 82541 Errata 29? & 82547 Errata 28?
3554 * See also the description about PHY_RST bit in CTRL register
3555 * in 8254x_GBe_SDM.pdf.
3556 */
3557 if ((sc->sc_type == WM_T_82541) || (sc->sc_type == WM_T_82547)) {
3558 CSR_WRITE(sc, WMREG_CTRL,
3559 CSR_READ(sc, WMREG_CTRL) | CTRL_PHY_RESET);
3560 delay(5000);
3561 }
3562
3563 switch (sc->sc_type) {
3564 case WM_T_82544: /* XXX check whether WM_F_IOH_VALID is set */
3565 case WM_T_82541:
3566 case WM_T_82541_2:
3567 case WM_T_82547:
3568 case WM_T_82547_2:
3569 /*
3570 * On some chipsets, a reset through a memory-mapped write
3571 * cycle can cause the chip to reset before completing the
3572 * write cycle. This causes major headache that can be
3573 * avoided by issuing the reset via indirect register writes
3574 * through I/O space.
3575 *
3576 * So, if we successfully mapped the I/O BAR at attach time,
3577 * use that. Otherwise, try our luck with a memory-mapped
3578 * reset.
3579 */
3580 if (sc->sc_flags & WM_F_IOH_VALID)
3581 wm_io_write(sc, WMREG_CTRL, CTRL_RST);
3582 else
3583 CSR_WRITE(sc, WMREG_CTRL, CTRL_RST);
3584 break;
3585 case WM_T_82545_3:
3586 case WM_T_82546_3:
3587 /* Use the shadow control register on these chips. */
3588 CSR_WRITE(sc, WMREG_CTRL_SHADOW, CTRL_RST);
3589 break;
3590 case WM_T_80003:
3591 mask = swfwphysem[sc->sc_funcid];
3592 reg = CSR_READ(sc, WMREG_CTRL) | CTRL_RST;
3593 wm_get_swfw_semaphore(sc, mask);
3594 CSR_WRITE(sc, WMREG_CTRL, reg);
3595 wm_put_swfw_semaphore(sc, mask);
3596 break;
3597 case WM_T_ICH8:
3598 case WM_T_ICH9:
3599 case WM_T_ICH10:
3600 case WM_T_PCH:
3601 case WM_T_PCH2:
3602 reg = CSR_READ(sc, WMREG_CTRL) | CTRL_RST;
3603 if (wm_check_reset_block(sc) == 0) {
3604 /*
3605 * Gate automatic PHY configuration by hardware on
3606 * manaed 82579
3607 */
3608 if ((sc->sc_type == WM_T_PCH2)
3609 && ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID)
3610 != 0))
3611 wm_gate_hw_phy_config_ich8lan(sc, 1);
3612
3613
3614 reg |= CTRL_PHY_RESET;
3615 phy_reset = 1;
3616 }
3617 wm_get_swfwhw_semaphore(sc);
3618 CSR_WRITE(sc, WMREG_CTRL, reg);
3619 delay(20*1000);
3620 wm_put_swfwhw_semaphore(sc);
3621 break;
3622 case WM_T_82542_2_0:
3623 case WM_T_82542_2_1:
3624 case WM_T_82543:
3625 case WM_T_82540:
3626 case WM_T_82545:
3627 case WM_T_82546:
3628 case WM_T_82571:
3629 case WM_T_82572:
3630 case WM_T_82573:
3631 case WM_T_82574:
3632 case WM_T_82575:
3633 case WM_T_82576:
3634 case WM_T_82580:
3635 case WM_T_82580ER:
3636 case WM_T_82583:
3637 default:
3638 /* Everything else can safely use the documented method. */
3639 CSR_WRITE(sc, WMREG_CTRL, CSR_READ(sc, WMREG_CTRL) | CTRL_RST);
3640 break;
3641 }
3642
3643 if (phy_reset != 0)
3644 wm_get_cfg_done(sc);
3645
3646 /* reload EEPROM */
3647 switch (sc->sc_type) {
3648 case WM_T_82542_2_0:
3649 case WM_T_82542_2_1:
3650 case WM_T_82543:
3651 case WM_T_82544:
3652 delay(10);
3653 reg = CSR_READ(sc, WMREG_CTRL_EXT) | CTRL_EXT_EE_RST;
3654 CSR_WRITE(sc, WMREG_CTRL_EXT, reg);
3655 delay(2000);
3656 break;
3657 case WM_T_82540:
3658 case WM_T_82545:
3659 case WM_T_82545_3:
3660 case WM_T_82546:
3661 case WM_T_82546_3:
3662 delay(5*1000);
3663 /* XXX Disable HW ARPs on ASF enabled adapters */
3664 break;
3665 case WM_T_82541:
3666 case WM_T_82541_2:
3667 case WM_T_82547:
3668 case WM_T_82547_2:
3669 delay(20000);
3670 /* XXX Disable HW ARPs on ASF enabled adapters */
3671 break;
3672 case WM_T_82571:
3673 case WM_T_82572:
3674 case WM_T_82573:
3675 case WM_T_82574:
3676 case WM_T_82583:
3677 if (sc->sc_flags & WM_F_EEPROM_FLASH) {
3678 delay(10);
3679 reg = CSR_READ(sc, WMREG_CTRL_EXT) | CTRL_EXT_EE_RST;
3680 CSR_WRITE(sc, WMREG_CTRL_EXT, reg);
3681 }
3682 /* check EECD_EE_AUTORD */
3683 wm_get_auto_rd_done(sc);
3684 /*
3685 * Phy configuration from NVM just starts after EECD_AUTO_RD
3686 * is set.
3687 */
3688 if ((sc->sc_type == WM_T_82573) || (sc->sc_type == WM_T_82574)
3689 || (sc->sc_type == WM_T_82583))
3690 delay(25*1000);
3691 break;
3692 case WM_T_82575:
3693 case WM_T_82576:
3694 case WM_T_82580:
3695 case WM_T_82580ER:
3696 case WM_T_80003:
3697 case WM_T_ICH8:
3698 case WM_T_ICH9:
3699 /* check EECD_EE_AUTORD */
3700 wm_get_auto_rd_done(sc);
3701 break;
3702 case WM_T_ICH10:
3703 case WM_T_PCH:
3704 case WM_T_PCH2:
3705 wm_lan_init_done(sc);
3706 break;
3707 default:
3708 panic("%s: unknown type\n", __func__);
3709 }
3710
3711 /* Check whether EEPROM is present or not */
3712 switch (sc->sc_type) {
3713 case WM_T_82575:
3714 case WM_T_82576:
3715 #if 0 /* XXX */
3716 case WM_T_82580:
3717 case WM_T_82580ER:
3718 #endif
3719 case WM_T_ICH8:
3720 case WM_T_ICH9:
3721 if ((CSR_READ(sc, WMREG_EECD) & EECD_EE_PRES) == 0) {
3722 /* Not found */
3723 sc->sc_flags |= WM_F_EEPROM_INVALID;
3724 if ((sc->sc_type == WM_T_82575)
3725 || (sc->sc_type == WM_T_82576)
3726 || (sc->sc_type == WM_T_82580)
3727 || (sc->sc_type == WM_T_82580ER))
3728 wm_reset_init_script_82575(sc);
3729 }
3730 break;
3731 default:
3732 break;
3733 }
3734
3735 if ((sc->sc_type == WM_T_82580) || (sc->sc_type == WM_T_82580ER)) {
3736 /* clear global device reset status bit */
3737 CSR_WRITE(sc, WMREG_STATUS, STATUS_DEV_RST_SET);
3738 }
3739
3740 /* Clear any pending interrupt events. */
3741 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU);
3742 reg = CSR_READ(sc, WMREG_ICR);
3743
3744 /* reload sc_ctrl */
3745 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL);
3746
3747 /* dummy read from WUC */
3748 if (sc->sc_type == WM_T_PCH)
3749 reg = wm_gmii_hv_readreg(sc->sc_dev, 1, BM_WUC);
3750 /*
3751 * For PCH, this write will make sure that any noise will be detected
3752 * as a CRC error and be dropped rather than show up as a bad packet
3753 * to the DMA engine
3754 */
3755 if (sc->sc_type == WM_T_PCH)
3756 CSR_WRITE(sc, WMREG_CRC_OFFSET, 0x65656565);
3757
3758 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
3759 CSR_WRITE(sc, WMREG_WUC, 0);
3760
3761 /* XXX need special handling for 82580 */
3762 }
3763
3764 static void
3765 wm_set_vlan(struct wm_softc *sc)
3766 {
3767 /* Deal with VLAN enables. */
3768 if (VLAN_ATTACHED(&sc->sc_ethercom))
3769 sc->sc_ctrl |= CTRL_VME;
3770 else
3771 sc->sc_ctrl &= ~CTRL_VME;
3772
3773 /* Write the control registers. */
3774 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
3775 }
3776
3777 /*
3778 * wm_init: [ifnet interface function]
3779 *
3780 * Initialize the interface. Must be called at splnet().
3781 */
3782 static int
3783 wm_init(struct ifnet *ifp)
3784 {
3785 struct wm_softc *sc = ifp->if_softc;
3786 struct wm_rxsoft *rxs;
3787 int i, error = 0;
3788 uint32_t reg;
3789
3790 /*
3791 * *_HDR_ALIGNED_P is constant 1 if __NO_STRICT_ALIGMENT is set.
3792 * There is a small but measurable benefit to avoiding the adjusment
3793 * of the descriptor so that the headers are aligned, for normal mtu,
3794 * on such platforms. One possibility is that the DMA itself is
3795 * slightly more efficient if the front of the entire packet (instead
3796 * of the front of the headers) is aligned.
3797 *
3798 * Note we must always set align_tweak to 0 if we are using
3799 * jumbo frames.
3800 */
3801 #ifdef __NO_STRICT_ALIGNMENT
3802 sc->sc_align_tweak = 0;
3803 #else
3804 if ((ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN) > (MCLBYTES - 2))
3805 sc->sc_align_tweak = 0;
3806 else
3807 sc->sc_align_tweak = 2;
3808 #endif /* __NO_STRICT_ALIGNMENT */
3809
3810 /* Cancel any pending I/O. */
3811 wm_stop(ifp, 0);
3812
3813 /* update statistics before reset */
3814 ifp->if_collisions += CSR_READ(sc, WMREG_COLC);
3815 ifp->if_ierrors += CSR_READ(sc, WMREG_RXERRC);
3816
3817 /* Reset the chip to a known state. */
3818 wm_reset(sc);
3819
3820 switch (sc->sc_type) {
3821 case WM_T_82571:
3822 case WM_T_82572:
3823 case WM_T_82573:
3824 case WM_T_82574:
3825 case WM_T_82583:
3826 case WM_T_80003:
3827 case WM_T_ICH8:
3828 case WM_T_ICH9:
3829 case WM_T_ICH10:
3830 case WM_T_PCH:
3831 case WM_T_PCH2:
3832 if (wm_check_mng_mode(sc) != 0)
3833 wm_get_hw_control(sc);
3834 break;
3835 default:
3836 break;
3837 }
3838
3839 /* Reset the PHY. */
3840 if (sc->sc_flags & WM_F_HAS_MII)
3841 wm_gmii_reset(sc);
3842
3843 reg = CSR_READ(sc, WMREG_CTRL_EXT);
3844 /* Enable PHY low-power state when MAC is at D3 w/o WoL */
3845 if ((sc->sc_type == WM_T_PCH) && (sc->sc_type == WM_T_PCH2))
3846 CSR_WRITE(sc, WMREG_CTRL_EXT, reg | CTRL_EXT_PHYPDEN);
3847
3848 /* Initialize the transmit descriptor ring. */
3849 memset(sc->sc_txdescs, 0, WM_TXDESCSIZE(sc));
3850 WM_CDTXSYNC(sc, 0, WM_NTXDESC(sc),
3851 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
3852 sc->sc_txfree = WM_NTXDESC(sc);
3853 sc->sc_txnext = 0;
3854
3855 if (sc->sc_type < WM_T_82543) {
3856 CSR_WRITE(sc, WMREG_OLD_TDBAH, WM_CDTXADDR_HI(sc, 0));
3857 CSR_WRITE(sc, WMREG_OLD_TDBAL, WM_CDTXADDR_LO(sc, 0));
3858 CSR_WRITE(sc, WMREG_OLD_TDLEN, WM_TXDESCSIZE(sc));
3859 CSR_WRITE(sc, WMREG_OLD_TDH, 0);
3860 CSR_WRITE(sc, WMREG_OLD_TDT, 0);
3861 CSR_WRITE(sc, WMREG_OLD_TIDV, 128);
3862 } else {
3863 CSR_WRITE(sc, WMREG_TDBAH, WM_CDTXADDR_HI(sc, 0));
3864 CSR_WRITE(sc, WMREG_TDBAL, WM_CDTXADDR_LO(sc, 0));
3865 CSR_WRITE(sc, WMREG_TDLEN, WM_TXDESCSIZE(sc));
3866 CSR_WRITE(sc, WMREG_TDH, 0);
3867 CSR_WRITE(sc, WMREG_TIDV, 375); /* ITR / 4 */
3868 CSR_WRITE(sc, WMREG_TADV, 375); /* should be same */
3869
3870 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
3871 /*
3872 * Don't write TDT before TCTL.EN is set.
3873 * See the document.
3874 */
3875 CSR_WRITE(sc, WMREG_TXDCTL, TXDCTL_QUEUE_ENABLE
3876 | TXDCTL_PTHRESH(0) | TXDCTL_HTHRESH(0)
3877 | TXDCTL_WTHRESH(0));
3878 else {
3879 CSR_WRITE(sc, WMREG_TDT, 0);
3880 CSR_WRITE(sc, WMREG_TXDCTL, TXDCTL_PTHRESH(0) |
3881 TXDCTL_HTHRESH(0) | TXDCTL_WTHRESH(0));
3882 CSR_WRITE(sc, WMREG_RXDCTL, RXDCTL_PTHRESH(0) |
3883 RXDCTL_HTHRESH(0) | RXDCTL_WTHRESH(1));
3884 }
3885 }
3886 CSR_WRITE(sc, WMREG_TQSA_LO, 0);
3887 CSR_WRITE(sc, WMREG_TQSA_HI, 0);
3888
3889 /* Initialize the transmit job descriptors. */
3890 for (i = 0; i < WM_TXQUEUELEN(sc); i++)
3891 sc->sc_txsoft[i].txs_mbuf = NULL;
3892 sc->sc_txsfree = WM_TXQUEUELEN(sc);
3893 sc->sc_txsnext = 0;
3894 sc->sc_txsdirty = 0;
3895
3896 /*
3897 * Initialize the receive descriptor and receive job
3898 * descriptor rings.
3899 */
3900 if (sc->sc_type < WM_T_82543) {
3901 CSR_WRITE(sc, WMREG_OLD_RDBAH0, WM_CDRXADDR_HI(sc, 0));
3902 CSR_WRITE(sc, WMREG_OLD_RDBAL0, WM_CDRXADDR_LO(sc, 0));
3903 CSR_WRITE(sc, WMREG_OLD_RDLEN0, sizeof(sc->sc_rxdescs));
3904 CSR_WRITE(sc, WMREG_OLD_RDH0, 0);
3905 CSR_WRITE(sc, WMREG_OLD_RDT0, 0);
3906 CSR_WRITE(sc, WMREG_OLD_RDTR0, 28 | RDTR_FPD);
3907
3908 CSR_WRITE(sc, WMREG_OLD_RDBA1_HI, 0);
3909 CSR_WRITE(sc, WMREG_OLD_RDBA1_LO, 0);
3910 CSR_WRITE(sc, WMREG_OLD_RDLEN1, 0);
3911 CSR_WRITE(sc, WMREG_OLD_RDH1, 0);
3912 CSR_WRITE(sc, WMREG_OLD_RDT1, 0);
3913 CSR_WRITE(sc, WMREG_OLD_RDTR1, 0);
3914 } else {
3915 CSR_WRITE(sc, WMREG_RDBAH, WM_CDRXADDR_HI(sc, 0));
3916 CSR_WRITE(sc, WMREG_RDBAL, WM_CDRXADDR_LO(sc, 0));
3917 CSR_WRITE(sc, WMREG_RDLEN, sizeof(sc->sc_rxdescs));
3918 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
3919 CSR_WRITE(sc, WMREG_EITR(0), 450);
3920 if (MCLBYTES & ((1 << SRRCTL_BSIZEPKT_SHIFT) - 1))
3921 panic("%s: MCLBYTES %d unsupported for i2575 or higher\n", __func__, MCLBYTES);
3922 CSR_WRITE(sc, WMREG_SRRCTL, SRRCTL_DESCTYPE_LEGACY
3923 | (MCLBYTES >> SRRCTL_BSIZEPKT_SHIFT));
3924 CSR_WRITE(sc, WMREG_RXDCTL, RXDCTL_QUEUE_ENABLE
3925 | RXDCTL_PTHRESH(16) | RXDCTL_HTHRESH(8)
3926 | RXDCTL_WTHRESH(1));
3927 } else {
3928 CSR_WRITE(sc, WMREG_RDH, 0);
3929 CSR_WRITE(sc, WMREG_RDT, 0);
3930 CSR_WRITE(sc, WMREG_RDTR, 375 | RDTR_FPD); /* ITR/4 */
3931 CSR_WRITE(sc, WMREG_RADV, 375); /* MUST be same */
3932 }
3933 }
3934 for (i = 0; i < WM_NRXDESC; i++) {
3935 rxs = &sc->sc_rxsoft[i];
3936 if (rxs->rxs_mbuf == NULL) {
3937 if ((error = wm_add_rxbuf(sc, i)) != 0) {
3938 log(LOG_ERR, "%s: unable to allocate or map rx "
3939 "buffer %d, error = %d\n",
3940 device_xname(sc->sc_dev), i, error);
3941 /*
3942 * XXX Should attempt to run with fewer receive
3943 * XXX buffers instead of just failing.
3944 */
3945 wm_rxdrain(sc);
3946 goto out;
3947 }
3948 } else {
3949 if ((sc->sc_flags & WM_F_NEWQUEUE) == 0)
3950 WM_INIT_RXDESC(sc, i);
3951 /*
3952 * For 82575 and newer device, the RX descriptors
3953 * must be initialized after the setting of RCTL.EN in
3954 * wm_set_filter()
3955 */
3956 }
3957 }
3958 sc->sc_rxptr = 0;
3959 sc->sc_rxdiscard = 0;
3960 WM_RXCHAIN_RESET(sc);
3961
3962 /*
3963 * Clear out the VLAN table -- we don't use it (yet).
3964 */
3965 CSR_WRITE(sc, WMREG_VET, 0);
3966 for (i = 0; i < WM_VLAN_TABSIZE; i++)
3967 CSR_WRITE(sc, WMREG_VFTA + (i << 2), 0);
3968
3969 /*
3970 * Set up flow-control parameters.
3971 *
3972 * XXX Values could probably stand some tuning.
3973 */
3974 if ((sc->sc_type != WM_T_ICH8) && (sc->sc_type != WM_T_ICH9)
3975 && (sc->sc_type != WM_T_ICH10) && (sc->sc_type != WM_T_PCH)
3976 && (sc->sc_type != WM_T_PCH2)) {
3977 CSR_WRITE(sc, WMREG_FCAL, FCAL_CONST);
3978 CSR_WRITE(sc, WMREG_FCAH, FCAH_CONST);
3979 CSR_WRITE(sc, WMREG_FCT, ETHERTYPE_FLOWCONTROL);
3980 }
3981
3982 sc->sc_fcrtl = FCRTL_DFLT;
3983 if (sc->sc_type < WM_T_82543) {
3984 CSR_WRITE(sc, WMREG_OLD_FCRTH, FCRTH_DFLT);
3985 CSR_WRITE(sc, WMREG_OLD_FCRTL, sc->sc_fcrtl);
3986 } else {
3987 CSR_WRITE(sc, WMREG_FCRTH, FCRTH_DFLT);
3988 CSR_WRITE(sc, WMREG_FCRTL, sc->sc_fcrtl);
3989 }
3990
3991 if (sc->sc_type == WM_T_80003)
3992 CSR_WRITE(sc, WMREG_FCTTV, 0xffff);
3993 else
3994 CSR_WRITE(sc, WMREG_FCTTV, FCTTV_DFLT);
3995
3996 /* Writes the control register. */
3997 wm_set_vlan(sc);
3998
3999 if (sc->sc_flags & WM_F_HAS_MII) {
4000 int val;
4001
4002 switch (sc->sc_type) {
4003 case WM_T_80003:
4004 case WM_T_ICH8:
4005 case WM_T_ICH9:
4006 case WM_T_ICH10:
4007 case WM_T_PCH:
4008 case WM_T_PCH2:
4009 /*
4010 * Set the mac to wait the maximum time between each
4011 * iteration and increase the max iterations when
4012 * polling the phy; this fixes erroneous timeouts at
4013 * 10Mbps.
4014 */
4015 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_TIMEOUTS,
4016 0xFFFF);
4017 val = wm_kmrn_readreg(sc,
4018 KUMCTRLSTA_OFFSET_INB_PARAM);
4019 val |= 0x3F;
4020 wm_kmrn_writereg(sc,
4021 KUMCTRLSTA_OFFSET_INB_PARAM, val);
4022 break;
4023 default:
4024 break;
4025 }
4026
4027 if (sc->sc_type == WM_T_80003) {
4028 val = CSR_READ(sc, WMREG_CTRL_EXT);
4029 val &= ~CTRL_EXT_LINK_MODE_MASK;
4030 CSR_WRITE(sc, WMREG_CTRL_EXT, val);
4031
4032 /* Bypass RX and TX FIFO's */
4033 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_FIFO_CTRL,
4034 KUMCTRLSTA_FIFO_CTRL_RX_BYPASS
4035 | KUMCTRLSTA_FIFO_CTRL_TX_BYPASS);
4036 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_INB_CTRL,
4037 KUMCTRLSTA_INB_CTRL_DIS_PADDING |
4038 KUMCTRLSTA_INB_CTRL_LINK_TMOUT_DFLT);
4039 }
4040 }
4041 #if 0
4042 CSR_WRITE(sc, WMREG_CTRL_EXT, sc->sc_ctrl_ext);
4043 #endif
4044
4045 /*
4046 * Set up checksum offload parameters.
4047 */
4048 reg = CSR_READ(sc, WMREG_RXCSUM);
4049 reg &= ~(RXCSUM_IPOFL | RXCSUM_IPV6OFL | RXCSUM_TUOFL);
4050 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Rx)
4051 reg |= RXCSUM_IPOFL;
4052 if (ifp->if_capenable & (IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx))
4053 reg |= RXCSUM_IPOFL | RXCSUM_TUOFL;
4054 if (ifp->if_capenable & (IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx))
4055 reg |= RXCSUM_IPV6OFL | RXCSUM_TUOFL;
4056 CSR_WRITE(sc, WMREG_RXCSUM, reg);
4057
4058 /* Reset TBI's RXCFG count */
4059 sc->sc_tbi_nrxcfg = sc->sc_tbi_lastnrxcfg = 0;
4060
4061 /*
4062 * Set up the interrupt registers.
4063 */
4064 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU);
4065 sc->sc_icr = ICR_TXDW | ICR_LSC | ICR_RXSEQ | ICR_RXDMT0 |
4066 ICR_RXO | ICR_RXT0;
4067 if ((sc->sc_flags & WM_F_HAS_MII) == 0)
4068 sc->sc_icr |= ICR_RXCFG;
4069 CSR_WRITE(sc, WMREG_IMS, sc->sc_icr);
4070
4071 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
4072 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
4073 || (sc->sc_type == WM_T_PCH2)) {
4074 reg = CSR_READ(sc, WMREG_KABGTXD);
4075 reg |= KABGTXD_BGSQLBIAS;
4076 CSR_WRITE(sc, WMREG_KABGTXD, reg);
4077 }
4078
4079 /* Set up the inter-packet gap. */
4080 CSR_WRITE(sc, WMREG_TIPG, sc->sc_tipg);
4081
4082 if (sc->sc_type >= WM_T_82543) {
4083 /*
4084 * Set up the interrupt throttling register (units of 256ns)
4085 * Note that a footnote in Intel's documentation says this
4086 * ticker runs at 1/4 the rate when the chip is in 100Mbit
4087 * or 10Mbit mode. Empirically, it appears to be the case
4088 * that that is also true for the 1024ns units of the other
4089 * interrupt-related timer registers -- so, really, we ought
4090 * to divide this value by 4 when the link speed is low.
4091 *
4092 * XXX implement this division at link speed change!
4093 */
4094
4095 /*
4096 * For N interrupts/sec, set this value to:
4097 * 1000000000 / (N * 256). Note that we set the
4098 * absolute and packet timer values to this value
4099 * divided by 4 to get "simple timer" behavior.
4100 */
4101
4102 sc->sc_itr = 1500; /* 2604 ints/sec */
4103 CSR_WRITE(sc, WMREG_ITR, sc->sc_itr);
4104 }
4105
4106 /* Set the VLAN ethernetype. */
4107 CSR_WRITE(sc, WMREG_VET, ETHERTYPE_VLAN);
4108
4109 /*
4110 * Set up the transmit control register; we start out with
4111 * a collision distance suitable for FDX, but update it whe
4112 * we resolve the media type.
4113 */
4114 sc->sc_tctl = TCTL_EN | TCTL_PSP | TCTL_RTLC
4115 | TCTL_CT(TX_COLLISION_THRESHOLD)
4116 | TCTL_COLD(TX_COLLISION_DISTANCE_FDX);
4117 if (sc->sc_type >= WM_T_82571)
4118 sc->sc_tctl |= TCTL_MULR;
4119 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl);
4120
4121 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
4122 /*
4123 * Write TDT after TCTL.EN is set.
4124 * See the document.
4125 */
4126 CSR_WRITE(sc, WMREG_TDT, 0);
4127 }
4128
4129 if (sc->sc_type == WM_T_80003) {
4130 reg = CSR_READ(sc, WMREG_TCTL_EXT);
4131 reg &= ~TCTL_EXT_GCEX_MASK;
4132 reg |= DEFAULT_80003ES2LAN_TCTL_EXT_GCEX;
4133 CSR_WRITE(sc, WMREG_TCTL_EXT, reg);
4134 }
4135
4136 /* Set the media. */
4137 if ((error = mii_ifmedia_change(&sc->sc_mii)) != 0)
4138 goto out;
4139
4140 /* Configure for OS presence */
4141 wm_init_manageability(sc);
4142
4143 /*
4144 * Set up the receive control register; we actually program
4145 * the register when we set the receive filter. Use multicast
4146 * address offset type 0.
4147 *
4148 * Only the i82544 has the ability to strip the incoming
4149 * CRC, so we don't enable that feature.
4150 */
4151 sc->sc_mchash_type = 0;
4152 sc->sc_rctl = RCTL_EN | RCTL_LBM_NONE | RCTL_RDMTS_1_2 | RCTL_DPF
4153 | RCTL_MO(sc->sc_mchash_type);
4154
4155 if (((sc->sc_ethercom.ec_capabilities & ETHERCAP_JUMBO_MTU) != 0)
4156 && (ifp->if_mtu > ETHERMTU)) {
4157 sc->sc_rctl |= RCTL_LPE;
4158 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
4159 CSR_WRITE(sc, WMREG_RLPML, ETHER_MAX_LEN_JUMBO);
4160 }
4161
4162 if (MCLBYTES == 2048) {
4163 sc->sc_rctl |= RCTL_2k;
4164 } else {
4165 if (sc->sc_type >= WM_T_82543) {
4166 switch (MCLBYTES) {
4167 case 4096:
4168 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_4k;
4169 break;
4170 case 8192:
4171 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_8k;
4172 break;
4173 case 16384:
4174 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_16k;
4175 break;
4176 default:
4177 panic("wm_init: MCLBYTES %d unsupported",
4178 MCLBYTES);
4179 break;
4180 }
4181 } else panic("wm_init: i82542 requires MCLBYTES = 2048");
4182 }
4183
4184 /* Set the receive filter. */
4185 wm_set_filter(sc);
4186
4187 /* On 575 and later set RDT only if RX enabled */
4188 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
4189 for (i = 0; i < WM_NRXDESC; i++)
4190 WM_INIT_RXDESC(sc, i);
4191
4192 /* Start the one second link check clock. */
4193 callout_reset(&sc->sc_tick_ch, hz, wm_tick, sc);
4194
4195 /* ...all done! */
4196 ifp->if_flags |= IFF_RUNNING;
4197 ifp->if_flags &= ~IFF_OACTIVE;
4198
4199 out:
4200 sc->sc_if_flags = ifp->if_flags;
4201 if (error)
4202 log(LOG_ERR, "%s: interface not running\n",
4203 device_xname(sc->sc_dev));
4204 return error;
4205 }
4206
4207 /*
4208 * wm_rxdrain:
4209 *
4210 * Drain the receive queue.
4211 */
4212 static void
4213 wm_rxdrain(struct wm_softc *sc)
4214 {
4215 struct wm_rxsoft *rxs;
4216 int i;
4217
4218 for (i = 0; i < WM_NRXDESC; i++) {
4219 rxs = &sc->sc_rxsoft[i];
4220 if (rxs->rxs_mbuf != NULL) {
4221 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap);
4222 m_freem(rxs->rxs_mbuf);
4223 rxs->rxs_mbuf = NULL;
4224 }
4225 }
4226 }
4227
4228 /*
4229 * wm_stop: [ifnet interface function]
4230 *
4231 * Stop transmission on the interface.
4232 */
4233 static void
4234 wm_stop(struct ifnet *ifp, int disable)
4235 {
4236 struct wm_softc *sc = ifp->if_softc;
4237 struct wm_txsoft *txs;
4238 int i;
4239
4240 /* Stop the one second clock. */
4241 callout_stop(&sc->sc_tick_ch);
4242
4243 /* Stop the 82547 Tx FIFO stall check timer. */
4244 if (sc->sc_type == WM_T_82547)
4245 callout_stop(&sc->sc_txfifo_ch);
4246
4247 if (sc->sc_flags & WM_F_HAS_MII) {
4248 /* Down the MII. */
4249 mii_down(&sc->sc_mii);
4250 } else {
4251 #if 0
4252 /* Should we clear PHY's status properly? */
4253 wm_reset(sc);
4254 #endif
4255 }
4256
4257 /* Stop the transmit and receive processes. */
4258 CSR_WRITE(sc, WMREG_TCTL, 0);
4259 CSR_WRITE(sc, WMREG_RCTL, 0);
4260 sc->sc_rctl &= ~RCTL_EN;
4261
4262 /*
4263 * Clear the interrupt mask to ensure the device cannot assert its
4264 * interrupt line.
4265 * Clear sc->sc_icr to ensure wm_intr() makes no attempt to service
4266 * any currently pending or shared interrupt.
4267 */
4268 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU);
4269 sc->sc_icr = 0;
4270
4271 /* Release any queued transmit buffers. */
4272 for (i = 0; i < WM_TXQUEUELEN(sc); i++) {
4273 txs = &sc->sc_txsoft[i];
4274 if (txs->txs_mbuf != NULL) {
4275 bus_dmamap_unload(sc->sc_dmat, txs->txs_dmamap);
4276 m_freem(txs->txs_mbuf);
4277 txs->txs_mbuf = NULL;
4278 }
4279 }
4280
4281 /* Mark the interface as down and cancel the watchdog timer. */
4282 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
4283 ifp->if_timer = 0;
4284
4285 if (disable)
4286 wm_rxdrain(sc);
4287
4288 #if 0 /* notyet */
4289 if (sc->sc_type >= WM_T_82544)
4290 CSR_WRITE(sc, WMREG_WUC, 0);
4291 #endif
4292 }
4293
4294 void
4295 wm_get_auto_rd_done(struct wm_softc *sc)
4296 {
4297 int i;
4298
4299 /* wait for eeprom to reload */
4300 switch (sc->sc_type) {
4301 case WM_T_82571:
4302 case WM_T_82572:
4303 case WM_T_82573:
4304 case WM_T_82574:
4305 case WM_T_82583:
4306 case WM_T_82575:
4307 case WM_T_82576:
4308 case WM_T_82580:
4309 case WM_T_82580ER:
4310 case WM_T_80003:
4311 case WM_T_ICH8:
4312 case WM_T_ICH9:
4313 for (i = 0; i < 10; i++) {
4314 if (CSR_READ(sc, WMREG_EECD) & EECD_EE_AUTORD)
4315 break;
4316 delay(1000);
4317 }
4318 if (i == 10) {
4319 log(LOG_ERR, "%s: auto read from eeprom failed to "
4320 "complete\n", device_xname(sc->sc_dev));
4321 }
4322 break;
4323 default:
4324 break;
4325 }
4326 }
4327
4328 void
4329 wm_lan_init_done(struct wm_softc *sc)
4330 {
4331 uint32_t reg = 0;
4332 int i;
4333
4334 /* wait for eeprom to reload */
4335 switch (sc->sc_type) {
4336 case WM_T_ICH10:
4337 case WM_T_PCH:
4338 case WM_T_PCH2:
4339 for (i = 0; i < WM_ICH8_LAN_INIT_TIMEOUT; i++) {
4340 reg = CSR_READ(sc, WMREG_STATUS);
4341 if ((reg & STATUS_LAN_INIT_DONE) != 0)
4342 break;
4343 delay(100);
4344 }
4345 if (i >= WM_ICH8_LAN_INIT_TIMEOUT) {
4346 log(LOG_ERR, "%s: %s: lan_init_done failed to "
4347 "complete\n", device_xname(sc->sc_dev), __func__);
4348 }
4349 break;
4350 default:
4351 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev),
4352 __func__);
4353 break;
4354 }
4355
4356 reg &= ~STATUS_LAN_INIT_DONE;
4357 CSR_WRITE(sc, WMREG_STATUS, reg);
4358 }
4359
4360 void
4361 wm_get_cfg_done(struct wm_softc *sc)
4362 {
4363 int mask;
4364 uint32_t reg;
4365 int i;
4366
4367 /* wait for eeprom to reload */
4368 switch (sc->sc_type) {
4369 case WM_T_82542_2_0:
4370 case WM_T_82542_2_1:
4371 /* null */
4372 break;
4373 case WM_T_82543:
4374 case WM_T_82544:
4375 case WM_T_82540:
4376 case WM_T_82545:
4377 case WM_T_82545_3:
4378 case WM_T_82546:
4379 case WM_T_82546_3:
4380 case WM_T_82541:
4381 case WM_T_82541_2:
4382 case WM_T_82547:
4383 case WM_T_82547_2:
4384 case WM_T_82573:
4385 case WM_T_82574:
4386 case WM_T_82583:
4387 /* generic */
4388 delay(10*1000);
4389 break;
4390 case WM_T_80003:
4391 case WM_T_82571:
4392 case WM_T_82572:
4393 case WM_T_82575:
4394 case WM_T_82576:
4395 case WM_T_82580:
4396 case WM_T_82580ER:
4397 if (sc->sc_type == WM_T_82571) {
4398 /* Only 82571 shares port 0 */
4399 mask = EEMNGCTL_CFGDONE_0;
4400 } else
4401 mask = EEMNGCTL_CFGDONE_0 << sc->sc_funcid;
4402 for (i = 0; i < WM_PHY_CFG_TIMEOUT; i++) {
4403 if (CSR_READ(sc, WMREG_EEMNGCTL) & mask)
4404 break;
4405 delay(1000);
4406 }
4407 if (i >= WM_PHY_CFG_TIMEOUT) {
4408 DPRINTF(WM_DEBUG_GMII, ("%s: %s failed\n",
4409 device_xname(sc->sc_dev), __func__));
4410 }
4411 break;
4412 case WM_T_ICH8:
4413 case WM_T_ICH9:
4414 case WM_T_ICH10:
4415 case WM_T_PCH:
4416 case WM_T_PCH2:
4417 if (sc->sc_type >= WM_T_PCH) {
4418 reg = CSR_READ(sc, WMREG_STATUS);
4419 if ((reg & STATUS_PHYRA) != 0)
4420 CSR_WRITE(sc, WMREG_STATUS,
4421 reg & ~STATUS_PHYRA);
4422 }
4423 delay(10*1000);
4424 break;
4425 default:
4426 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev),
4427 __func__);
4428 break;
4429 }
4430 }
4431
4432 /*
4433 * wm_acquire_eeprom:
4434 *
4435 * Perform the EEPROM handshake required on some chips.
4436 */
4437 static int
4438 wm_acquire_eeprom(struct wm_softc *sc)
4439 {
4440 uint32_t reg;
4441 int x;
4442 int ret = 0;
4443
4444 /* always success */
4445 if ((sc->sc_flags & WM_F_EEPROM_FLASH) != 0)
4446 return 0;
4447
4448 if (sc->sc_flags & WM_F_SWFWHW_SYNC) {
4449 ret = wm_get_swfwhw_semaphore(sc);
4450 } else if (sc->sc_flags & WM_F_SWFW_SYNC) {
4451 /* this will also do wm_get_swsm_semaphore() if needed */
4452 ret = wm_get_swfw_semaphore(sc, SWFW_EEP_SM);
4453 } else if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE) {
4454 ret = wm_get_swsm_semaphore(sc);
4455 }
4456
4457 if (ret) {
4458 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
4459 __func__);
4460 return 1;
4461 }
4462
4463 if (sc->sc_flags & WM_F_EEPROM_HANDSHAKE) {
4464 reg = CSR_READ(sc, WMREG_EECD);
4465
4466 /* Request EEPROM access. */
4467 reg |= EECD_EE_REQ;
4468 CSR_WRITE(sc, WMREG_EECD, reg);
4469
4470 /* ..and wait for it to be granted. */
4471 for (x = 0; x < 1000; x++) {
4472 reg = CSR_READ(sc, WMREG_EECD);
4473 if (reg & EECD_EE_GNT)
4474 break;
4475 delay(5);
4476 }
4477 if ((reg & EECD_EE_GNT) == 0) {
4478 aprint_error_dev(sc->sc_dev,
4479 "could not acquire EEPROM GNT\n");
4480 reg &= ~EECD_EE_REQ;
4481 CSR_WRITE(sc, WMREG_EECD, reg);
4482 if (sc->sc_flags & WM_F_SWFWHW_SYNC)
4483 wm_put_swfwhw_semaphore(sc);
4484 if (sc->sc_flags & WM_F_SWFW_SYNC)
4485 wm_put_swfw_semaphore(sc, SWFW_EEP_SM);
4486 else if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE)
4487 wm_put_swsm_semaphore(sc);
4488 return 1;
4489 }
4490 }
4491
4492 return 0;
4493 }
4494
4495 /*
4496 * wm_release_eeprom:
4497 *
4498 * Release the EEPROM mutex.
4499 */
4500 static void
4501 wm_release_eeprom(struct wm_softc *sc)
4502 {
4503 uint32_t reg;
4504
4505 /* always success */
4506 if ((sc->sc_flags & WM_F_EEPROM_FLASH) != 0)
4507 return;
4508
4509 if (sc->sc_flags & WM_F_EEPROM_HANDSHAKE) {
4510 reg = CSR_READ(sc, WMREG_EECD);
4511 reg &= ~EECD_EE_REQ;
4512 CSR_WRITE(sc, WMREG_EECD, reg);
4513 }
4514
4515 if (sc->sc_flags & WM_F_SWFWHW_SYNC)
4516 wm_put_swfwhw_semaphore(sc);
4517 if (sc->sc_flags & WM_F_SWFW_SYNC)
4518 wm_put_swfw_semaphore(sc, SWFW_EEP_SM);
4519 else if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE)
4520 wm_put_swsm_semaphore(sc);
4521 }
4522
4523 /*
4524 * wm_eeprom_sendbits:
4525 *
4526 * Send a series of bits to the EEPROM.
4527 */
4528 static void
4529 wm_eeprom_sendbits(struct wm_softc *sc, uint32_t bits, int nbits)
4530 {
4531 uint32_t reg;
4532 int x;
4533
4534 reg = CSR_READ(sc, WMREG_EECD);
4535
4536 for (x = nbits; x > 0; x--) {
4537 if (bits & (1U << (x - 1)))
4538 reg |= EECD_DI;
4539 else
4540 reg &= ~EECD_DI;
4541 CSR_WRITE(sc, WMREG_EECD, reg);
4542 delay(2);
4543 CSR_WRITE(sc, WMREG_EECD, reg | EECD_SK);
4544 delay(2);
4545 CSR_WRITE(sc, WMREG_EECD, reg);
4546 delay(2);
4547 }
4548 }
4549
4550 /*
4551 * wm_eeprom_recvbits:
4552 *
4553 * Receive a series of bits from the EEPROM.
4554 */
4555 static void
4556 wm_eeprom_recvbits(struct wm_softc *sc, uint32_t *valp, int nbits)
4557 {
4558 uint32_t reg, val;
4559 int x;
4560
4561 reg = CSR_READ(sc, WMREG_EECD) & ~EECD_DI;
4562
4563 val = 0;
4564 for (x = nbits; x > 0; x--) {
4565 CSR_WRITE(sc, WMREG_EECD, reg | EECD_SK);
4566 delay(2);
4567 if (CSR_READ(sc, WMREG_EECD) & EECD_DO)
4568 val |= (1U << (x - 1));
4569 CSR_WRITE(sc, WMREG_EECD, reg);
4570 delay(2);
4571 }
4572 *valp = val;
4573 }
4574
4575 /*
4576 * wm_read_eeprom_uwire:
4577 *
4578 * Read a word from the EEPROM using the MicroWire protocol.
4579 */
4580 static int
4581 wm_read_eeprom_uwire(struct wm_softc *sc, int word, int wordcnt, uint16_t *data)
4582 {
4583 uint32_t reg, val;
4584 int i;
4585
4586 for (i = 0; i < wordcnt; i++) {
4587 /* Clear SK and DI. */
4588 reg = CSR_READ(sc, WMREG_EECD) & ~(EECD_SK | EECD_DI);
4589 CSR_WRITE(sc, WMREG_EECD, reg);
4590
4591 /* Set CHIP SELECT. */
4592 reg |= EECD_CS;
4593 CSR_WRITE(sc, WMREG_EECD, reg);
4594 delay(2);
4595
4596 /* Shift in the READ command. */
4597 wm_eeprom_sendbits(sc, UWIRE_OPC_READ, 3);
4598
4599 /* Shift in address. */
4600 wm_eeprom_sendbits(sc, word + i, sc->sc_ee_addrbits);
4601
4602 /* Shift out the data. */
4603 wm_eeprom_recvbits(sc, &val, 16);
4604 data[i] = val & 0xffff;
4605
4606 /* Clear CHIP SELECT. */
4607 reg = CSR_READ(sc, WMREG_EECD) & ~EECD_CS;
4608 CSR_WRITE(sc, WMREG_EECD, reg);
4609 delay(2);
4610 }
4611
4612 return 0;
4613 }
4614
4615 /*
4616 * wm_spi_eeprom_ready:
4617 *
4618 * Wait for a SPI EEPROM to be ready for commands.
4619 */
4620 static int
4621 wm_spi_eeprom_ready(struct wm_softc *sc)
4622 {
4623 uint32_t val;
4624 int usec;
4625
4626 for (usec = 0; usec < SPI_MAX_RETRIES; delay(5), usec += 5) {
4627 wm_eeprom_sendbits(sc, SPI_OPC_RDSR, 8);
4628 wm_eeprom_recvbits(sc, &val, 8);
4629 if ((val & SPI_SR_RDY) == 0)
4630 break;
4631 }
4632 if (usec >= SPI_MAX_RETRIES) {
4633 aprint_error_dev(sc->sc_dev, "EEPROM failed to become ready\n");
4634 return 1;
4635 }
4636 return 0;
4637 }
4638
4639 /*
4640 * wm_read_eeprom_spi:
4641 *
4642 * Read a work from the EEPROM using the SPI protocol.
4643 */
4644 static int
4645 wm_read_eeprom_spi(struct wm_softc *sc, int word, int wordcnt, uint16_t *data)
4646 {
4647 uint32_t reg, val;
4648 int i;
4649 uint8_t opc;
4650
4651 /* Clear SK and CS. */
4652 reg = CSR_READ(sc, WMREG_EECD) & ~(EECD_SK | EECD_CS);
4653 CSR_WRITE(sc, WMREG_EECD, reg);
4654 delay(2);
4655
4656 if (wm_spi_eeprom_ready(sc))
4657 return 1;
4658
4659 /* Toggle CS to flush commands. */
4660 CSR_WRITE(sc, WMREG_EECD, reg | EECD_CS);
4661 delay(2);
4662 CSR_WRITE(sc, WMREG_EECD, reg);
4663 delay(2);
4664
4665 opc = SPI_OPC_READ;
4666 if (sc->sc_ee_addrbits == 8 && word >= 128)
4667 opc |= SPI_OPC_A8;
4668
4669 wm_eeprom_sendbits(sc, opc, 8);
4670 wm_eeprom_sendbits(sc, word << 1, sc->sc_ee_addrbits);
4671
4672 for (i = 0; i < wordcnt; i++) {
4673 wm_eeprom_recvbits(sc, &val, 16);
4674 data[i] = ((val >> 8) & 0xff) | ((val & 0xff) << 8);
4675 }
4676
4677 /* Raise CS and clear SK. */
4678 reg = (CSR_READ(sc, WMREG_EECD) & ~EECD_SK) | EECD_CS;
4679 CSR_WRITE(sc, WMREG_EECD, reg);
4680 delay(2);
4681
4682 return 0;
4683 }
4684
4685 #define EEPROM_CHECKSUM 0xBABA
4686 #define EEPROM_SIZE 0x0040
4687
4688 /*
4689 * wm_validate_eeprom_checksum
4690 *
4691 * The checksum is defined as the sum of the first 64 (16 bit) words.
4692 */
4693 static int
4694 wm_validate_eeprom_checksum(struct wm_softc *sc)
4695 {
4696 uint16_t checksum;
4697 uint16_t eeprom_data;
4698 int i;
4699
4700 checksum = 0;
4701
4702 for (i = 0; i < EEPROM_SIZE; i++) {
4703 if (wm_read_eeprom(sc, i, 1, &eeprom_data))
4704 return 1;
4705 checksum += eeprom_data;
4706 }
4707
4708 if (checksum != (uint16_t) EEPROM_CHECKSUM)
4709 return 1;
4710
4711 return 0;
4712 }
4713
4714 /*
4715 * wm_read_eeprom:
4716 *
4717 * Read data from the serial EEPROM.
4718 */
4719 static int
4720 wm_read_eeprom(struct wm_softc *sc, int word, int wordcnt, uint16_t *data)
4721 {
4722 int rv;
4723
4724 if (sc->sc_flags & WM_F_EEPROM_INVALID)
4725 return 1;
4726
4727 if (wm_acquire_eeprom(sc))
4728 return 1;
4729
4730 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
4731 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
4732 || (sc->sc_type == WM_T_PCH2))
4733 rv = wm_read_eeprom_ich8(sc, word, wordcnt, data);
4734 else if (sc->sc_flags & WM_F_EEPROM_EERDEEWR)
4735 rv = wm_read_eeprom_eerd(sc, word, wordcnt, data);
4736 else if (sc->sc_flags & WM_F_EEPROM_SPI)
4737 rv = wm_read_eeprom_spi(sc, word, wordcnt, data);
4738 else
4739 rv = wm_read_eeprom_uwire(sc, word, wordcnt, data);
4740
4741 wm_release_eeprom(sc);
4742 return rv;
4743 }
4744
4745 static int
4746 wm_read_eeprom_eerd(struct wm_softc *sc, int offset, int wordcnt,
4747 uint16_t *data)
4748 {
4749 int i, eerd = 0;
4750 int error = 0;
4751
4752 for (i = 0; i < wordcnt; i++) {
4753 eerd = ((offset + i) << EERD_ADDR_SHIFT) | EERD_START;
4754
4755 CSR_WRITE(sc, WMREG_EERD, eerd);
4756 error = wm_poll_eerd_eewr_done(sc, WMREG_EERD);
4757 if (error != 0)
4758 break;
4759
4760 data[i] = (CSR_READ(sc, WMREG_EERD) >> EERD_DATA_SHIFT);
4761 }
4762
4763 return error;
4764 }
4765
4766 static int
4767 wm_poll_eerd_eewr_done(struct wm_softc *sc, int rw)
4768 {
4769 uint32_t attempts = 100000;
4770 uint32_t i, reg = 0;
4771 int32_t done = -1;
4772
4773 for (i = 0; i < attempts; i++) {
4774 reg = CSR_READ(sc, rw);
4775
4776 if (reg & EERD_DONE) {
4777 done = 0;
4778 break;
4779 }
4780 delay(5);
4781 }
4782
4783 return done;
4784 }
4785
4786 static int
4787 wm_check_alt_mac_addr(struct wm_softc *sc)
4788 {
4789 uint16_t myea[ETHER_ADDR_LEN / 2];
4790 uint16_t offset = EEPROM_OFF_MACADDR;
4791
4792 /* Try to read alternative MAC address pointer */
4793 if (wm_read_eeprom(sc, EEPROM_ALT_MAC_ADDR_PTR, 1, &offset) != 0)
4794 return -1;
4795
4796 /* Check pointer */
4797 if (offset == 0xffff)
4798 return -1;
4799
4800 /*
4801 * Check whether alternative MAC address is valid or not.
4802 * Some cards have non 0xffff pointer but those don't use
4803 * alternative MAC address in reality.
4804 *
4805 * Check whether the broadcast bit is set or not.
4806 */
4807 if (wm_read_eeprom(sc, offset, 1, myea) == 0)
4808 if (((myea[0] & 0xff) & 0x01) == 0)
4809 return 0; /* found! */
4810
4811 /* not found */
4812 return -1;
4813 }
4814
4815 static int
4816 wm_read_mac_addr(struct wm_softc *sc, uint8_t *enaddr)
4817 {
4818 uint16_t myea[ETHER_ADDR_LEN / 2];
4819 uint16_t offset = EEPROM_OFF_MACADDR;
4820 int do_invert = 0;
4821
4822 switch (sc->sc_type) {
4823 case WM_T_82580:
4824 case WM_T_82580ER:
4825 switch (sc->sc_funcid) {
4826 case 0:
4827 /* default value (== EEPROM_OFF_MACADDR) */
4828 break;
4829 case 1:
4830 offset = EEPROM_OFF_LAN1;
4831 break;
4832 case 2:
4833 offset = EEPROM_OFF_LAN2;
4834 break;
4835 case 3:
4836 offset = EEPROM_OFF_LAN3;
4837 break;
4838 default:
4839 goto bad;
4840 /* NOTREACHED */
4841 break;
4842 }
4843 break;
4844 case WM_T_82571:
4845 case WM_T_82575:
4846 case WM_T_82576:
4847 case WM_T_80003:
4848 if (wm_check_alt_mac_addr(sc) != 0) {
4849 /* reset the offset to LAN0 */
4850 offset = EEPROM_OFF_MACADDR;
4851 if ((sc->sc_funcid & 0x01) == 1)
4852 do_invert = 1;
4853 goto do_read;
4854 }
4855 switch (sc->sc_funcid) {
4856 case 0:
4857 /*
4858 * The offset is the value in EEPROM_ALT_MAC_ADDR_PTR
4859 * itself.
4860 */
4861 break;
4862 case 1:
4863 offset += EEPROM_OFF_MACADDR_LAN1;
4864 break;
4865 case 2:
4866 offset += EEPROM_OFF_MACADDR_LAN2;
4867 break;
4868 case 3:
4869 offset += EEPROM_OFF_MACADDR_LAN3;
4870 break;
4871 default:
4872 goto bad;
4873 /* NOTREACHED */
4874 break;
4875 }
4876 break;
4877 default:
4878 if ((sc->sc_funcid & 0x01) == 1)
4879 do_invert = 1;
4880 break;
4881 }
4882
4883 do_read:
4884 if (wm_read_eeprom(sc, offset, sizeof(myea) / sizeof(myea[0]),
4885 myea) != 0) {
4886 goto bad;
4887 }
4888
4889 enaddr[0] = myea[0] & 0xff;
4890 enaddr[1] = myea[0] >> 8;
4891 enaddr[2] = myea[1] & 0xff;
4892 enaddr[3] = myea[1] >> 8;
4893 enaddr[4] = myea[2] & 0xff;
4894 enaddr[5] = myea[2] >> 8;
4895
4896 /*
4897 * Toggle the LSB of the MAC address on the second port
4898 * of some dual port cards.
4899 */
4900 if (do_invert != 0)
4901 enaddr[5] ^= 1;
4902
4903 return 0;
4904
4905 bad:
4906 aprint_error_dev(sc->sc_dev, "unable to read Ethernet address\n");
4907
4908 return -1;
4909 }
4910
4911 /*
4912 * wm_add_rxbuf:
4913 *
4914 * Add a receive buffer to the indiciated descriptor.
4915 */
4916 static int
4917 wm_add_rxbuf(struct wm_softc *sc, int idx)
4918 {
4919 struct wm_rxsoft *rxs = &sc->sc_rxsoft[idx];
4920 struct mbuf *m;
4921 int error;
4922
4923 MGETHDR(m, M_DONTWAIT, MT_DATA);
4924 if (m == NULL)
4925 return ENOBUFS;
4926
4927 MCLGET(m, M_DONTWAIT);
4928 if ((m->m_flags & M_EXT) == 0) {
4929 m_freem(m);
4930 return ENOBUFS;
4931 }
4932
4933 if (rxs->rxs_mbuf != NULL)
4934 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap);
4935
4936 rxs->rxs_mbuf = m;
4937
4938 m->m_len = m->m_pkthdr.len = m->m_ext.ext_size;
4939 error = bus_dmamap_load_mbuf(sc->sc_dmat, rxs->rxs_dmamap, m,
4940 BUS_DMA_READ|BUS_DMA_NOWAIT);
4941 if (error) {
4942 /* XXX XXX XXX */
4943 aprint_error_dev(sc->sc_dev,
4944 "unable to load rx DMA map %d, error = %d\n",
4945 idx, error);
4946 panic("wm_add_rxbuf");
4947 }
4948
4949 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0,
4950 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD);
4951
4952 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
4953 if ((sc->sc_rctl & RCTL_EN) != 0)
4954 WM_INIT_RXDESC(sc, idx);
4955 } else
4956 WM_INIT_RXDESC(sc, idx);
4957
4958 return 0;
4959 }
4960
4961 /*
4962 * wm_set_ral:
4963 *
4964 * Set an entery in the receive address list.
4965 */
4966 static void
4967 wm_set_ral(struct wm_softc *sc, const uint8_t *enaddr, int idx)
4968 {
4969 uint32_t ral_lo, ral_hi;
4970
4971 if (enaddr != NULL) {
4972 ral_lo = enaddr[0] | (enaddr[1] << 8) | (enaddr[2] << 16) |
4973 (enaddr[3] << 24);
4974 ral_hi = enaddr[4] | (enaddr[5] << 8);
4975 ral_hi |= RAL_AV;
4976 } else {
4977 ral_lo = 0;
4978 ral_hi = 0;
4979 }
4980
4981 if (sc->sc_type >= WM_T_82544) {
4982 CSR_WRITE(sc, WMREG_RAL_LO(WMREG_CORDOVA_RAL_BASE, idx),
4983 ral_lo);
4984 CSR_WRITE(sc, WMREG_RAL_HI(WMREG_CORDOVA_RAL_BASE, idx),
4985 ral_hi);
4986 } else {
4987 CSR_WRITE(sc, WMREG_RAL_LO(WMREG_RAL_BASE, idx), ral_lo);
4988 CSR_WRITE(sc, WMREG_RAL_HI(WMREG_RAL_BASE, idx), ral_hi);
4989 }
4990 }
4991
4992 /*
4993 * wm_mchash:
4994 *
4995 * Compute the hash of the multicast address for the 4096-bit
4996 * multicast filter.
4997 */
4998 static uint32_t
4999 wm_mchash(struct wm_softc *sc, const uint8_t *enaddr)
5000 {
5001 static const int lo_shift[4] = { 4, 3, 2, 0 };
5002 static const int hi_shift[4] = { 4, 5, 6, 8 };
5003 static const int ich8_lo_shift[4] = { 6, 5, 4, 2 };
5004 static const int ich8_hi_shift[4] = { 2, 3, 4, 6 };
5005 uint32_t hash;
5006
5007 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
5008 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
5009 || (sc->sc_type == WM_T_PCH2)) {
5010 hash = (enaddr[4] >> ich8_lo_shift[sc->sc_mchash_type]) |
5011 (((uint16_t) enaddr[5]) << ich8_hi_shift[sc->sc_mchash_type]);
5012 return (hash & 0x3ff);
5013 }
5014 hash = (enaddr[4] >> lo_shift[sc->sc_mchash_type]) |
5015 (((uint16_t) enaddr[5]) << hi_shift[sc->sc_mchash_type]);
5016
5017 return (hash & 0xfff);
5018 }
5019
5020 /*
5021 * wm_set_filter:
5022 *
5023 * Set up the receive filter.
5024 */
5025 static void
5026 wm_set_filter(struct wm_softc *sc)
5027 {
5028 struct ethercom *ec = &sc->sc_ethercom;
5029 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
5030 struct ether_multi *enm;
5031 struct ether_multistep step;
5032 bus_addr_t mta_reg;
5033 uint32_t hash, reg, bit;
5034 int i, size;
5035
5036 if (sc->sc_type >= WM_T_82544)
5037 mta_reg = WMREG_CORDOVA_MTA;
5038 else
5039 mta_reg = WMREG_MTA;
5040
5041 sc->sc_rctl &= ~(RCTL_BAM | RCTL_UPE | RCTL_MPE);
5042
5043 if (ifp->if_flags & IFF_BROADCAST)
5044 sc->sc_rctl |= RCTL_BAM;
5045 if (ifp->if_flags & IFF_PROMISC) {
5046 sc->sc_rctl |= RCTL_UPE;
5047 goto allmulti;
5048 }
5049
5050 /*
5051 * Set the station address in the first RAL slot, and
5052 * clear the remaining slots.
5053 */
5054 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
5055 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
5056 || (sc->sc_type == WM_T_PCH2))
5057 size = WM_ICH8_RAL_TABSIZE;
5058 else
5059 size = WM_RAL_TABSIZE;
5060 wm_set_ral(sc, CLLADDR(ifp->if_sadl), 0);
5061 for (i = 1; i < size; i++)
5062 wm_set_ral(sc, NULL, i);
5063
5064 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
5065 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
5066 || (sc->sc_type == WM_T_PCH2))
5067 size = WM_ICH8_MC_TABSIZE;
5068 else
5069 size = WM_MC_TABSIZE;
5070 /* Clear out the multicast table. */
5071 for (i = 0; i < size; i++)
5072 CSR_WRITE(sc, mta_reg + (i << 2), 0);
5073
5074 ETHER_FIRST_MULTI(step, ec, enm);
5075 while (enm != NULL) {
5076 if (memcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
5077 /*
5078 * We must listen to a range of multicast addresses.
5079 * For now, just accept all multicasts, rather than
5080 * trying to set only those filter bits needed to match
5081 * the range. (At this time, the only use of address
5082 * ranges is for IP multicast routing, for which the
5083 * range is big enough to require all bits set.)
5084 */
5085 goto allmulti;
5086 }
5087
5088 hash = wm_mchash(sc, enm->enm_addrlo);
5089
5090 reg = (hash >> 5);
5091 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
5092 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
5093 || (sc->sc_type == WM_T_PCH2))
5094 reg &= 0x1f;
5095 else
5096 reg &= 0x7f;
5097 bit = hash & 0x1f;
5098
5099 hash = CSR_READ(sc, mta_reg + (reg << 2));
5100 hash |= 1U << bit;
5101
5102 /* XXX Hardware bug?? */
5103 if (sc->sc_type == WM_T_82544 && (reg & 0xe) == 1) {
5104 bit = CSR_READ(sc, mta_reg + ((reg - 1) << 2));
5105 CSR_WRITE(sc, mta_reg + (reg << 2), hash);
5106 CSR_WRITE(sc, mta_reg + ((reg - 1) << 2), bit);
5107 } else
5108 CSR_WRITE(sc, mta_reg + (reg << 2), hash);
5109
5110 ETHER_NEXT_MULTI(step, enm);
5111 }
5112
5113 ifp->if_flags &= ~IFF_ALLMULTI;
5114 goto setit;
5115
5116 allmulti:
5117 ifp->if_flags |= IFF_ALLMULTI;
5118 sc->sc_rctl |= RCTL_MPE;
5119
5120 setit:
5121 CSR_WRITE(sc, WMREG_RCTL, sc->sc_rctl);
5122 }
5123
5124 /*
5125 * wm_tbi_mediainit:
5126 *
5127 * Initialize media for use on 1000BASE-X devices.
5128 */
5129 static void
5130 wm_tbi_mediainit(struct wm_softc *sc)
5131 {
5132 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
5133 const char *sep = "";
5134
5135 if (sc->sc_type < WM_T_82543)
5136 sc->sc_tipg = TIPG_WM_DFLT;
5137 else
5138 sc->sc_tipg = TIPG_LG_DFLT;
5139
5140 sc->sc_tbi_anegticks = 5;
5141
5142 /* Initialize our media structures */
5143 sc->sc_mii.mii_ifp = ifp;
5144
5145 sc->sc_ethercom.ec_mii = &sc->sc_mii;
5146 ifmedia_init(&sc->sc_mii.mii_media, IFM_IMASK, wm_tbi_mediachange,
5147 wm_tbi_mediastatus);
5148
5149 /*
5150 * SWD Pins:
5151 *
5152 * 0 = Link LED (output)
5153 * 1 = Loss Of Signal (input)
5154 */
5155 sc->sc_ctrl |= CTRL_SWDPIO(0);
5156 sc->sc_ctrl &= ~CTRL_SWDPIO(1);
5157
5158 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5159
5160 #define ADD(ss, mm, dd) \
5161 do { \
5162 aprint_normal("%s%s", sep, ss); \
5163 ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER|(mm), (dd), NULL); \
5164 sep = ", "; \
5165 } while (/*CONSTCOND*/0)
5166
5167 aprint_normal_dev(sc->sc_dev, "");
5168 ADD("1000baseSX", IFM_1000_SX, ANAR_X_HD);
5169 ADD("1000baseSX-FDX", IFM_1000_SX|IFM_FDX, ANAR_X_FD);
5170 ADD("auto", IFM_AUTO, ANAR_X_FD|ANAR_X_HD);
5171 aprint_normal("\n");
5172
5173 #undef ADD
5174
5175 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER | IFM_AUTO);
5176 }
5177
5178 /*
5179 * wm_tbi_mediastatus: [ifmedia interface function]
5180 *
5181 * Get the current interface media status on a 1000BASE-X device.
5182 */
5183 static void
5184 wm_tbi_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
5185 {
5186 struct wm_softc *sc = ifp->if_softc;
5187 uint32_t ctrl, status;
5188
5189 ifmr->ifm_status = IFM_AVALID;
5190 ifmr->ifm_active = IFM_ETHER;
5191
5192 status = CSR_READ(sc, WMREG_STATUS);
5193 if ((status & STATUS_LU) == 0) {
5194 ifmr->ifm_active |= IFM_NONE;
5195 return;
5196 }
5197
5198 ifmr->ifm_status |= IFM_ACTIVE;
5199 ifmr->ifm_active |= IFM_1000_SX;
5200 if (CSR_READ(sc, WMREG_STATUS) & STATUS_FD)
5201 ifmr->ifm_active |= IFM_FDX;
5202 ctrl = CSR_READ(sc, WMREG_CTRL);
5203 if (ctrl & CTRL_RFCE)
5204 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_RXPAUSE;
5205 if (ctrl & CTRL_TFCE)
5206 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_TXPAUSE;
5207 }
5208
5209 /*
5210 * wm_tbi_mediachange: [ifmedia interface function]
5211 *
5212 * Set hardware to newly-selected media on a 1000BASE-X device.
5213 */
5214 static int
5215 wm_tbi_mediachange(struct ifnet *ifp)
5216 {
5217 struct wm_softc *sc = ifp->if_softc;
5218 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur;
5219 uint32_t status;
5220 int i;
5221
5222 sc->sc_txcw = 0;
5223 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO ||
5224 (sc->sc_mii.mii_media.ifm_media & IFM_FLOW) != 0)
5225 sc->sc_txcw |= TXCW_SYM_PAUSE | TXCW_ASYM_PAUSE;
5226 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
5227 sc->sc_txcw |= TXCW_ANE;
5228 } else {
5229 /*
5230 * If autonegotiation is turned off, force link up and turn on
5231 * full duplex
5232 */
5233 sc->sc_txcw &= ~TXCW_ANE;
5234 sc->sc_ctrl |= CTRL_SLU | CTRL_FD;
5235 sc->sc_ctrl &= ~(CTRL_TFCE | CTRL_RFCE);
5236 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5237 delay(1000);
5238 }
5239
5240 DPRINTF(WM_DEBUG_LINK,("%s: sc_txcw = 0x%x after autoneg check\n",
5241 device_xname(sc->sc_dev),sc->sc_txcw));
5242 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw);
5243 delay(10000);
5244
5245 i = CSR_READ(sc, WMREG_CTRL) & CTRL_SWDPIN(1);
5246 DPRINTF(WM_DEBUG_LINK,("%s: i = 0x%x\n", device_xname(sc->sc_dev),i));
5247
5248 /*
5249 * On 82544 chips and later, the CTRL_SWDPIN(1) bit will be set if the
5250 * optics detect a signal, 0 if they don't.
5251 */
5252 if (((i != 0) && (sc->sc_type > WM_T_82544)) || (i == 0)) {
5253 /* Have signal; wait for the link to come up. */
5254
5255 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
5256 /*
5257 * Reset the link, and let autonegotiation do its thing
5258 */
5259 sc->sc_ctrl |= CTRL_LRST;
5260 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5261 delay(1000);
5262 sc->sc_ctrl &= ~CTRL_LRST;
5263 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5264 delay(1000);
5265 }
5266
5267 for (i = 0; i < WM_LINKUP_TIMEOUT; i++) {
5268 delay(10000);
5269 if (CSR_READ(sc, WMREG_STATUS) & STATUS_LU)
5270 break;
5271 }
5272
5273 DPRINTF(WM_DEBUG_LINK,("%s: i = %d after waiting for link\n",
5274 device_xname(sc->sc_dev),i));
5275
5276 status = CSR_READ(sc, WMREG_STATUS);
5277 DPRINTF(WM_DEBUG_LINK,
5278 ("%s: status after final read = 0x%x, STATUS_LU = 0x%x\n",
5279 device_xname(sc->sc_dev),status, STATUS_LU));
5280 if (status & STATUS_LU) {
5281 /* Link is up. */
5282 DPRINTF(WM_DEBUG_LINK,
5283 ("%s: LINK: set media -> link up %s\n",
5284 device_xname(sc->sc_dev),
5285 (status & STATUS_FD) ? "FDX" : "HDX"));
5286
5287 /*
5288 * NOTE: CTRL will update TFCE and RFCE automatically,
5289 * so we should update sc->sc_ctrl
5290 */
5291 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL);
5292 sc->sc_tctl &= ~TCTL_COLD(0x3ff);
5293 sc->sc_fcrtl &= ~FCRTL_XONE;
5294 if (status & STATUS_FD)
5295 sc->sc_tctl |=
5296 TCTL_COLD(TX_COLLISION_DISTANCE_FDX);
5297 else
5298 sc->sc_tctl |=
5299 TCTL_COLD(TX_COLLISION_DISTANCE_HDX);
5300 if (CSR_READ(sc, WMREG_CTRL) & CTRL_TFCE)
5301 sc->sc_fcrtl |= FCRTL_XONE;
5302 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl);
5303 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ?
5304 WMREG_OLD_FCRTL : WMREG_FCRTL,
5305 sc->sc_fcrtl);
5306 sc->sc_tbi_linkup = 1;
5307 } else {
5308 if (i == WM_LINKUP_TIMEOUT)
5309 wm_check_for_link(sc);
5310 /* Link is down. */
5311 DPRINTF(WM_DEBUG_LINK,
5312 ("%s: LINK: set media -> link down\n",
5313 device_xname(sc->sc_dev)));
5314 sc->sc_tbi_linkup = 0;
5315 }
5316 } else {
5317 DPRINTF(WM_DEBUG_LINK, ("%s: LINK: set media -> no signal\n",
5318 device_xname(sc->sc_dev)));
5319 sc->sc_tbi_linkup = 0;
5320 }
5321
5322 wm_tbi_set_linkled(sc);
5323
5324 return 0;
5325 }
5326
5327 /*
5328 * wm_tbi_set_linkled:
5329 *
5330 * Update the link LED on 1000BASE-X devices.
5331 */
5332 static void
5333 wm_tbi_set_linkled(struct wm_softc *sc)
5334 {
5335
5336 if (sc->sc_tbi_linkup)
5337 sc->sc_ctrl |= CTRL_SWDPIN(0);
5338 else
5339 sc->sc_ctrl &= ~CTRL_SWDPIN(0);
5340
5341 /* 82540 or newer devices are active low */
5342 sc->sc_ctrl ^= (sc->sc_type >= WM_T_82540) ? CTRL_SWDPIN(0) : 0;
5343
5344 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5345 }
5346
5347 /*
5348 * wm_tbi_check_link:
5349 *
5350 * Check the link on 1000BASE-X devices.
5351 */
5352 static void
5353 wm_tbi_check_link(struct wm_softc *sc)
5354 {
5355 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
5356 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur;
5357 uint32_t rxcw, ctrl, status;
5358
5359 status = CSR_READ(sc, WMREG_STATUS);
5360
5361 rxcw = CSR_READ(sc, WMREG_RXCW);
5362 ctrl = CSR_READ(sc, WMREG_CTRL);
5363
5364 /* set link status */
5365 if ((status & STATUS_LU) == 0) {
5366 DPRINTF(WM_DEBUG_LINK,
5367 ("%s: LINK: checklink -> down\n", device_xname(sc->sc_dev)));
5368 sc->sc_tbi_linkup = 0;
5369 } else if (sc->sc_tbi_linkup == 0) {
5370 DPRINTF(WM_DEBUG_LINK,
5371 ("%s: LINK: checklink -> up %s\n", device_xname(sc->sc_dev),
5372 (status & STATUS_FD) ? "FDX" : "HDX"));
5373 sc->sc_tbi_linkup = 1;
5374 }
5375
5376 if ((sc->sc_ethercom.ec_if.if_flags & IFF_UP)
5377 && ((status & STATUS_LU) == 0)) {
5378 sc->sc_tbi_linkup = 0;
5379 if (sc->sc_tbi_nrxcfg - sc->sc_tbi_lastnrxcfg > 100) {
5380 /* RXCFG storm! */
5381 DPRINTF(WM_DEBUG_LINK, ("RXCFG storm! (%d)\n",
5382 sc->sc_tbi_nrxcfg - sc->sc_tbi_lastnrxcfg));
5383 wm_init(ifp);
5384 wm_start(ifp);
5385 } else if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
5386 /* If the timer expired, retry autonegotiation */
5387 if (++sc->sc_tbi_ticks >= sc->sc_tbi_anegticks) {
5388 DPRINTF(WM_DEBUG_LINK, ("EXPIRE\n"));
5389 sc->sc_tbi_ticks = 0;
5390 /*
5391 * Reset the link, and let autonegotiation do
5392 * its thing
5393 */
5394 sc->sc_ctrl |= CTRL_LRST;
5395 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5396 delay(1000);
5397 sc->sc_ctrl &= ~CTRL_LRST;
5398 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5399 delay(1000);
5400 CSR_WRITE(sc, WMREG_TXCW,
5401 sc->sc_txcw & ~TXCW_ANE);
5402 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw);
5403 }
5404 }
5405 }
5406
5407 wm_tbi_set_linkled(sc);
5408 }
5409
5410 /*
5411 * wm_gmii_reset:
5412 *
5413 * Reset the PHY.
5414 */
5415 static void
5416 wm_gmii_reset(struct wm_softc *sc)
5417 {
5418 uint32_t reg;
5419 int rv;
5420
5421 /* get phy semaphore */
5422 switch (sc->sc_type) {
5423 case WM_T_82571:
5424 case WM_T_82572:
5425 case WM_T_82573:
5426 case WM_T_82574:
5427 case WM_T_82583:
5428 /* XXX should get sw semaphore, too */
5429 rv = wm_get_swsm_semaphore(sc);
5430 break;
5431 case WM_T_82575:
5432 case WM_T_82576:
5433 case WM_T_82580:
5434 case WM_T_82580ER:
5435 case WM_T_80003:
5436 rv = wm_get_swfw_semaphore(sc, swfwphysem[sc->sc_funcid]);
5437 break;
5438 case WM_T_ICH8:
5439 case WM_T_ICH9:
5440 case WM_T_ICH10:
5441 case WM_T_PCH:
5442 case WM_T_PCH2:
5443 rv = wm_get_swfwhw_semaphore(sc);
5444 break;
5445 default:
5446 /* nothing to do*/
5447 rv = 0;
5448 break;
5449 }
5450 if (rv != 0) {
5451 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
5452 __func__);
5453 return;
5454 }
5455
5456 switch (sc->sc_type) {
5457 case WM_T_82542_2_0:
5458 case WM_T_82542_2_1:
5459 /* null */
5460 break;
5461 case WM_T_82543:
5462 /*
5463 * With 82543, we need to force speed and duplex on the MAC
5464 * equal to what the PHY speed and duplex configuration is.
5465 * In addition, we need to perform a hardware reset on the PHY
5466 * to take it out of reset.
5467 */
5468 sc->sc_ctrl |= CTRL_FRCSPD | CTRL_FRCFDX;
5469 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5470
5471 /* The PHY reset pin is active-low. */
5472 reg = CSR_READ(sc, WMREG_CTRL_EXT);
5473 reg &= ~((CTRL_EXT_SWDPIO_MASK << CTRL_EXT_SWDPIO_SHIFT) |
5474 CTRL_EXT_SWDPIN(4));
5475 reg |= CTRL_EXT_SWDPIO(4);
5476
5477 CSR_WRITE(sc, WMREG_CTRL_EXT, reg);
5478 delay(10*1000);
5479
5480 CSR_WRITE(sc, WMREG_CTRL_EXT, reg | CTRL_EXT_SWDPIN(4));
5481 delay(150);
5482 #if 0
5483 sc->sc_ctrl_ext = reg | CTRL_EXT_SWDPIN(4);
5484 #endif
5485 delay(20*1000); /* XXX extra delay to get PHY ID? */
5486 break;
5487 case WM_T_82544: /* reset 10000us */
5488 case WM_T_82540:
5489 case WM_T_82545:
5490 case WM_T_82545_3:
5491 case WM_T_82546:
5492 case WM_T_82546_3:
5493 case WM_T_82541:
5494 case WM_T_82541_2:
5495 case WM_T_82547:
5496 case WM_T_82547_2:
5497 case WM_T_82571: /* reset 100us */
5498 case WM_T_82572:
5499 case WM_T_82573:
5500 case WM_T_82574:
5501 case WM_T_82575:
5502 case WM_T_82576:
5503 case WM_T_82580:
5504 case WM_T_82580ER:
5505 case WM_T_82583:
5506 case WM_T_80003:
5507 /* generic reset */
5508 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET);
5509 delay(20000);
5510 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5511 delay(20000);
5512
5513 if ((sc->sc_type == WM_T_82541)
5514 || (sc->sc_type == WM_T_82541_2)
5515 || (sc->sc_type == WM_T_82547)
5516 || (sc->sc_type == WM_T_82547_2)) {
5517 /* workaround for igp are done in igp_reset() */
5518 /* XXX add code to set LED after phy reset */
5519 }
5520 break;
5521 case WM_T_ICH8:
5522 case WM_T_ICH9:
5523 case WM_T_ICH10:
5524 case WM_T_PCH:
5525 case WM_T_PCH2:
5526 /* generic reset */
5527 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET);
5528 delay(100);
5529 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5530 delay(150);
5531 break;
5532 default:
5533 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev),
5534 __func__);
5535 break;
5536 }
5537
5538 /* release PHY semaphore */
5539 switch (sc->sc_type) {
5540 case WM_T_82571:
5541 case WM_T_82572:
5542 case WM_T_82573:
5543 case WM_T_82574:
5544 case WM_T_82583:
5545 /* XXX should put sw semaphore, too */
5546 wm_put_swsm_semaphore(sc);
5547 break;
5548 case WM_T_82575:
5549 case WM_T_82576:
5550 case WM_T_82580:
5551 case WM_T_82580ER:
5552 case WM_T_80003:
5553 wm_put_swfw_semaphore(sc, swfwphysem[sc->sc_funcid]);
5554 break;
5555 case WM_T_ICH8:
5556 case WM_T_ICH9:
5557 case WM_T_ICH10:
5558 case WM_T_PCH:
5559 case WM_T_PCH2:
5560 wm_put_swfwhw_semaphore(sc);
5561 break;
5562 default:
5563 /* nothing to do*/
5564 rv = 0;
5565 break;
5566 }
5567
5568 /* get_cfg_done */
5569 wm_get_cfg_done(sc);
5570
5571 /* extra setup */
5572 switch (sc->sc_type) {
5573 case WM_T_82542_2_0:
5574 case WM_T_82542_2_1:
5575 case WM_T_82543:
5576 case WM_T_82544:
5577 case WM_T_82540:
5578 case WM_T_82545:
5579 case WM_T_82545_3:
5580 case WM_T_82546:
5581 case WM_T_82546_3:
5582 case WM_T_82541_2:
5583 case WM_T_82547_2:
5584 case WM_T_82571:
5585 case WM_T_82572:
5586 case WM_T_82573:
5587 case WM_T_82574:
5588 case WM_T_82575:
5589 case WM_T_82576:
5590 case WM_T_82580:
5591 case WM_T_82580ER:
5592 case WM_T_82583:
5593 case WM_T_80003:
5594 /* null */
5595 break;
5596 case WM_T_82541:
5597 case WM_T_82547:
5598 /* XXX Configure actively LED after PHY reset */
5599 break;
5600 case WM_T_ICH8:
5601 case WM_T_ICH9:
5602 case WM_T_ICH10:
5603 case WM_T_PCH:
5604 case WM_T_PCH2:
5605 /* Allow time for h/w to get to a quiescent state afer reset */
5606 delay(10*1000);
5607
5608 if (sc->sc_type == WM_T_PCH)
5609 wm_hv_phy_workaround_ich8lan(sc);
5610
5611 if (sc->sc_type == WM_T_PCH2)
5612 wm_lv_phy_workaround_ich8lan(sc);
5613
5614 if ((sc->sc_type == WM_T_PCH) || (sc->sc_type == WM_T_PCH2)) {
5615 /*
5616 * dummy read to clear the phy wakeup bit after lcd
5617 * reset
5618 */
5619 reg = wm_gmii_hv_readreg(sc->sc_dev, 1, BM_WUC);
5620 }
5621
5622 /*
5623 * XXX Configure the LCD with th extended configuration region
5624 * in NVM
5625 */
5626
5627 /* Configure the LCD with the OEM bits in NVM */
5628 if ((sc->sc_type == WM_T_PCH) || (sc->sc_type == WM_T_PCH2)) {
5629 /*
5630 * Disable LPLU.
5631 * XXX It seems that 82567 has LPLU, too.
5632 */
5633 reg = wm_gmii_hv_readreg(sc->sc_dev, 1, HV_OEM_BITS);
5634 reg &= ~(HV_OEM_BITS_A1KDIS| HV_OEM_BITS_LPLU);
5635 reg |= HV_OEM_BITS_ANEGNOW;
5636 wm_gmii_hv_writereg(sc->sc_dev, 1, HV_OEM_BITS, reg);
5637 }
5638 break;
5639 default:
5640 panic("%s: unknown type\n", __func__);
5641 break;
5642 }
5643 }
5644
5645 /*
5646 * wm_gmii_mediainit:
5647 *
5648 * Initialize media for use on 1000BASE-T devices.
5649 */
5650 static void
5651 wm_gmii_mediainit(struct wm_softc *sc, pci_product_id_t prodid)
5652 {
5653 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
5654
5655 /* We have MII. */
5656 sc->sc_flags |= WM_F_HAS_MII;
5657
5658 if (sc->sc_type == WM_T_80003)
5659 sc->sc_tipg = TIPG_1000T_80003_DFLT;
5660 else
5661 sc->sc_tipg = TIPG_1000T_DFLT;
5662
5663 /*
5664 * Let the chip set speed/duplex on its own based on
5665 * signals from the PHY.
5666 * XXXbouyer - I'm not sure this is right for the 80003,
5667 * the em driver only sets CTRL_SLU here - but it seems to work.
5668 */
5669 sc->sc_ctrl |= CTRL_SLU;
5670 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5671
5672 /* Initialize our media structures and probe the GMII. */
5673 sc->sc_mii.mii_ifp = ifp;
5674
5675 switch (prodid) {
5676 case PCI_PRODUCT_INTEL_PCH_M_LM:
5677 case PCI_PRODUCT_INTEL_PCH_M_LC:
5678 /* 82577 */
5679 sc->sc_phytype = WMPHY_82577;
5680 sc->sc_mii.mii_readreg = wm_gmii_hv_readreg;
5681 sc->sc_mii.mii_writereg = wm_gmii_hv_writereg;
5682 break;
5683 case PCI_PRODUCT_INTEL_PCH_D_DM:
5684 case PCI_PRODUCT_INTEL_PCH_D_DC:
5685 /* 82578 */
5686 sc->sc_phytype = WMPHY_82578;
5687 sc->sc_mii.mii_readreg = wm_gmii_hv_readreg;
5688 sc->sc_mii.mii_writereg = wm_gmii_hv_writereg;
5689 break;
5690 case PCI_PRODUCT_INTEL_PCH2_LV_LM:
5691 case PCI_PRODUCT_INTEL_PCH2_LV_V:
5692 /* 82578 */
5693 sc->sc_phytype = WMPHY_82579;
5694 sc->sc_mii.mii_readreg = wm_gmii_hv_readreg;
5695 sc->sc_mii.mii_writereg = wm_gmii_hv_writereg;
5696 break;
5697 case PCI_PRODUCT_INTEL_82801I_BM:
5698 case PCI_PRODUCT_INTEL_82801J_R_BM_LM:
5699 case PCI_PRODUCT_INTEL_82801J_R_BM_LF:
5700 case PCI_PRODUCT_INTEL_82801J_D_BM_LM:
5701 case PCI_PRODUCT_INTEL_82801J_D_BM_LF:
5702 case PCI_PRODUCT_INTEL_82801J_R_BM_V:
5703 /* 82567 */
5704 sc->sc_phytype = WMPHY_BM;
5705 sc->sc_mii.mii_readreg = wm_gmii_bm_readreg;
5706 sc->sc_mii.mii_writereg = wm_gmii_bm_writereg;
5707 break;
5708 default:
5709 if ((sc->sc_flags & WM_F_SGMII) != 0) {
5710 sc->sc_mii.mii_readreg = wm_sgmii_readreg;
5711 sc->sc_mii.mii_writereg = wm_sgmii_writereg;
5712 } else if (sc->sc_type >= WM_T_80003) {
5713 sc->sc_mii.mii_readreg = wm_gmii_i80003_readreg;
5714 sc->sc_mii.mii_writereg = wm_gmii_i80003_writereg;
5715 } else if (sc->sc_type >= WM_T_82544) {
5716 sc->sc_mii.mii_readreg = wm_gmii_i82544_readreg;
5717 sc->sc_mii.mii_writereg = wm_gmii_i82544_writereg;
5718 } else {
5719 sc->sc_mii.mii_readreg = wm_gmii_i82543_readreg;
5720 sc->sc_mii.mii_writereg = wm_gmii_i82543_writereg;
5721 }
5722 break;
5723 }
5724 sc->sc_mii.mii_statchg = wm_gmii_statchg;
5725
5726 wm_gmii_reset(sc);
5727
5728 sc->sc_ethercom.ec_mii = &sc->sc_mii;
5729 ifmedia_init(&sc->sc_mii.mii_media, IFM_IMASK, wm_gmii_mediachange,
5730 wm_gmii_mediastatus);
5731
5732 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576)
5733 || (sc->sc_type == WM_T_82580) || (sc->sc_type == WM_T_82580ER)) {
5734 if ((sc->sc_flags & WM_F_SGMII) == 0) {
5735 /* Attach only one port */
5736 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, 1,
5737 MII_OFFSET_ANY, MIIF_DOPAUSE);
5738 } else {
5739 int i;
5740 uint32_t ctrl_ext;
5741
5742 /* Power on sgmii phy if it is disabled */
5743 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT);
5744 CSR_WRITE(sc, WMREG_CTRL_EXT,
5745 ctrl_ext &~ CTRL_EXT_SWDPIN(3));
5746 CSR_WRITE_FLUSH(sc);
5747 delay(300*1000); /* XXX too long */
5748
5749 /* from 1 to 8 */
5750 for (i = 1; i < 8; i++)
5751 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff,
5752 i, MII_OFFSET_ANY, MIIF_DOPAUSE);
5753
5754 /* restore previous sfp cage power state */
5755 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext);
5756 }
5757 } else {
5758 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY,
5759 MII_OFFSET_ANY, MIIF_DOPAUSE);
5760 }
5761
5762 if ((sc->sc_type == WM_T_PCH2) &&
5763 (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL)) {
5764 wm_set_mdio_slow_mode_hv(sc);
5765 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY,
5766 MII_OFFSET_ANY, MIIF_DOPAUSE);
5767 }
5768
5769 if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) {
5770 /* if failed, retry with *_bm_* */
5771 sc->sc_mii.mii_readreg = wm_gmii_bm_readreg;
5772 sc->sc_mii.mii_writereg = wm_gmii_bm_writereg;
5773
5774 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY,
5775 MII_OFFSET_ANY, MIIF_DOPAUSE);
5776 }
5777 if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) {
5778 ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE, 0, NULL);
5779 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE);
5780 sc->sc_phytype = WMPHY_NONE;
5781 } else {
5782 /* Check PHY type */
5783 uint32_t model;
5784 struct mii_softc *child;
5785
5786 child = LIST_FIRST(&sc->sc_mii.mii_phys);
5787 if (device_is_a(child->mii_dev, "igphy")) {
5788 struct igphy_softc *isc = (struct igphy_softc *)child;
5789
5790 model = isc->sc_mii.mii_mpd_model;
5791 if (model == MII_MODEL_yyINTEL_I82566)
5792 sc->sc_phytype = WMPHY_IGP_3;
5793 }
5794
5795 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER | IFM_AUTO);
5796 }
5797 }
5798
5799 /*
5800 * wm_gmii_mediastatus: [ifmedia interface function]
5801 *
5802 * Get the current interface media status on a 1000BASE-T device.
5803 */
5804 static void
5805 wm_gmii_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
5806 {
5807 struct wm_softc *sc = ifp->if_softc;
5808
5809 ether_mediastatus(ifp, ifmr);
5810 ifmr->ifm_active = (ifmr->ifm_active & ~IFM_ETH_FMASK)
5811 | sc->sc_flowflags;
5812 }
5813
5814 /*
5815 * wm_gmii_mediachange: [ifmedia interface function]
5816 *
5817 * Set hardware to newly-selected media on a 1000BASE-T device.
5818 */
5819 static int
5820 wm_gmii_mediachange(struct ifnet *ifp)
5821 {
5822 struct wm_softc *sc = ifp->if_softc;
5823 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur;
5824 int rc;
5825
5826 if ((ifp->if_flags & IFF_UP) == 0)
5827 return 0;
5828
5829 sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD);
5830 sc->sc_ctrl |= CTRL_SLU;
5831 if ((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO)
5832 || (sc->sc_type > WM_T_82543)) {
5833 sc->sc_ctrl &= ~(CTRL_FRCSPD | CTRL_FRCFDX);
5834 } else {
5835 sc->sc_ctrl &= ~CTRL_ASDE;
5836 sc->sc_ctrl |= CTRL_FRCSPD | CTRL_FRCFDX;
5837 if (ife->ifm_media & IFM_FDX)
5838 sc->sc_ctrl |= CTRL_FD;
5839 switch (IFM_SUBTYPE(ife->ifm_media)) {
5840 case IFM_10_T:
5841 sc->sc_ctrl |= CTRL_SPEED_10;
5842 break;
5843 case IFM_100_TX:
5844 sc->sc_ctrl |= CTRL_SPEED_100;
5845 break;
5846 case IFM_1000_T:
5847 sc->sc_ctrl |= CTRL_SPEED_1000;
5848 break;
5849 default:
5850 panic("wm_gmii_mediachange: bad media 0x%x",
5851 ife->ifm_media);
5852 }
5853 }
5854 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
5855 if (sc->sc_type <= WM_T_82543)
5856 wm_gmii_reset(sc);
5857
5858 if ((rc = mii_mediachg(&sc->sc_mii)) == ENXIO)
5859 return 0;
5860 return rc;
5861 }
5862
5863 #define MDI_IO CTRL_SWDPIN(2)
5864 #define MDI_DIR CTRL_SWDPIO(2) /* host -> PHY */
5865 #define MDI_CLK CTRL_SWDPIN(3)
5866
5867 static void
5868 i82543_mii_sendbits(struct wm_softc *sc, uint32_t data, int nbits)
5869 {
5870 uint32_t i, v;
5871
5872 v = CSR_READ(sc, WMREG_CTRL);
5873 v &= ~(MDI_IO|MDI_CLK|(CTRL_SWDPIO_MASK << CTRL_SWDPIO_SHIFT));
5874 v |= MDI_DIR | CTRL_SWDPIO(3);
5875
5876 for (i = 1 << (nbits - 1); i != 0; i >>= 1) {
5877 if (data & i)
5878 v |= MDI_IO;
5879 else
5880 v &= ~MDI_IO;
5881 CSR_WRITE(sc, WMREG_CTRL, v);
5882 delay(10);
5883 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK);
5884 delay(10);
5885 CSR_WRITE(sc, WMREG_CTRL, v);
5886 delay(10);
5887 }
5888 }
5889
5890 static uint32_t
5891 i82543_mii_recvbits(struct wm_softc *sc)
5892 {
5893 uint32_t v, i, data = 0;
5894
5895 v = CSR_READ(sc, WMREG_CTRL);
5896 v &= ~(MDI_IO|MDI_CLK|(CTRL_SWDPIO_MASK << CTRL_SWDPIO_SHIFT));
5897 v |= CTRL_SWDPIO(3);
5898
5899 CSR_WRITE(sc, WMREG_CTRL, v);
5900 delay(10);
5901 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK);
5902 delay(10);
5903 CSR_WRITE(sc, WMREG_CTRL, v);
5904 delay(10);
5905
5906 for (i = 0; i < 16; i++) {
5907 data <<= 1;
5908 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK);
5909 delay(10);
5910 if (CSR_READ(sc, WMREG_CTRL) & MDI_IO)
5911 data |= 1;
5912 CSR_WRITE(sc, WMREG_CTRL, v);
5913 delay(10);
5914 }
5915
5916 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK);
5917 delay(10);
5918 CSR_WRITE(sc, WMREG_CTRL, v);
5919 delay(10);
5920
5921 return data;
5922 }
5923
5924 #undef MDI_IO
5925 #undef MDI_DIR
5926 #undef MDI_CLK
5927
5928 /*
5929 * wm_gmii_i82543_readreg: [mii interface function]
5930 *
5931 * Read a PHY register on the GMII (i82543 version).
5932 */
5933 static int
5934 wm_gmii_i82543_readreg(device_t self, int phy, int reg)
5935 {
5936 struct wm_softc *sc = device_private(self);
5937 int rv;
5938
5939 i82543_mii_sendbits(sc, 0xffffffffU, 32);
5940 i82543_mii_sendbits(sc, reg | (phy << 5) |
5941 (MII_COMMAND_READ << 10) | (MII_COMMAND_START << 12), 14);
5942 rv = i82543_mii_recvbits(sc) & 0xffff;
5943
5944 DPRINTF(WM_DEBUG_GMII,
5945 ("%s: GMII: read phy %d reg %d -> 0x%04x\n",
5946 device_xname(sc->sc_dev), phy, reg, rv));
5947
5948 return rv;
5949 }
5950
5951 /*
5952 * wm_gmii_i82543_writereg: [mii interface function]
5953 *
5954 * Write a PHY register on the GMII (i82543 version).
5955 */
5956 static void
5957 wm_gmii_i82543_writereg(device_t self, int phy, int reg, int val)
5958 {
5959 struct wm_softc *sc = device_private(self);
5960
5961 i82543_mii_sendbits(sc, 0xffffffffU, 32);
5962 i82543_mii_sendbits(sc, val | (MII_COMMAND_ACK << 16) |
5963 (reg << 18) | (phy << 23) | (MII_COMMAND_WRITE << 28) |
5964 (MII_COMMAND_START << 30), 32);
5965 }
5966
5967 /*
5968 * wm_gmii_i82544_readreg: [mii interface function]
5969 *
5970 * Read a PHY register on the GMII.
5971 */
5972 static int
5973 wm_gmii_i82544_readreg(device_t self, int phy, int reg)
5974 {
5975 struct wm_softc *sc = device_private(self);
5976 uint32_t mdic = 0;
5977 int i, rv;
5978
5979 CSR_WRITE(sc, WMREG_MDIC, MDIC_OP_READ | MDIC_PHYADD(phy) |
5980 MDIC_REGADD(reg));
5981
5982 for (i = 0; i < WM_GEN_POLL_TIMEOUT * 3; i++) {
5983 mdic = CSR_READ(sc, WMREG_MDIC);
5984 if (mdic & MDIC_READY)
5985 break;
5986 delay(50);
5987 }
5988
5989 if ((mdic & MDIC_READY) == 0) {
5990 log(LOG_WARNING, "%s: MDIC read timed out: phy %d reg %d\n",
5991 device_xname(sc->sc_dev), phy, reg);
5992 rv = 0;
5993 } else if (mdic & MDIC_E) {
5994 #if 0 /* This is normal if no PHY is present. */
5995 log(LOG_WARNING, "%s: MDIC read error: phy %d reg %d\n",
5996 device_xname(sc->sc_dev), phy, reg);
5997 #endif
5998 rv = 0;
5999 } else {
6000 rv = MDIC_DATA(mdic);
6001 if (rv == 0xffff)
6002 rv = 0;
6003 }
6004
6005 return rv;
6006 }
6007
6008 /*
6009 * wm_gmii_i82544_writereg: [mii interface function]
6010 *
6011 * Write a PHY register on the GMII.
6012 */
6013 static void
6014 wm_gmii_i82544_writereg(device_t self, int phy, int reg, int val)
6015 {
6016 struct wm_softc *sc = device_private(self);
6017 uint32_t mdic = 0;
6018 int i;
6019
6020 CSR_WRITE(sc, WMREG_MDIC, MDIC_OP_WRITE | MDIC_PHYADD(phy) |
6021 MDIC_REGADD(reg) | MDIC_DATA(val));
6022
6023 for (i = 0; i < WM_GEN_POLL_TIMEOUT * 3; i++) {
6024 mdic = CSR_READ(sc, WMREG_MDIC);
6025 if (mdic & MDIC_READY)
6026 break;
6027 delay(50);
6028 }
6029
6030 if ((mdic & MDIC_READY) == 0)
6031 log(LOG_WARNING, "%s: MDIC write timed out: phy %d reg %d\n",
6032 device_xname(sc->sc_dev), phy, reg);
6033 else if (mdic & MDIC_E)
6034 log(LOG_WARNING, "%s: MDIC write error: phy %d reg %d\n",
6035 device_xname(sc->sc_dev), phy, reg);
6036 }
6037
6038 /*
6039 * wm_gmii_i80003_readreg: [mii interface function]
6040 *
6041 * Read a PHY register on the kumeran
6042 * This could be handled by the PHY layer if we didn't have to lock the
6043 * ressource ...
6044 */
6045 static int
6046 wm_gmii_i80003_readreg(device_t self, int phy, int reg)
6047 {
6048 struct wm_softc *sc = device_private(self);
6049 int sem;
6050 int rv;
6051
6052 if (phy != 1) /* only one PHY on kumeran bus */
6053 return 0;
6054
6055 sem = swfwphysem[sc->sc_funcid];
6056 if (wm_get_swfw_semaphore(sc, sem)) {
6057 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6058 __func__);
6059 return 0;
6060 }
6061
6062 if ((reg & GG82563_MAX_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
6063 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT,
6064 reg >> GG82563_PAGE_SHIFT);
6065 } else {
6066 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT_ALT,
6067 reg >> GG82563_PAGE_SHIFT);
6068 }
6069 /* Wait more 200us for a bug of the ready bit in the MDIC register */
6070 delay(200);
6071 rv = wm_gmii_i82544_readreg(self, phy, reg & GG82563_MAX_REG_ADDRESS);
6072 delay(200);
6073
6074 wm_put_swfw_semaphore(sc, sem);
6075 return rv;
6076 }
6077
6078 /*
6079 * wm_gmii_i80003_writereg: [mii interface function]
6080 *
6081 * Write a PHY register on the kumeran.
6082 * This could be handled by the PHY layer if we didn't have to lock the
6083 * ressource ...
6084 */
6085 static void
6086 wm_gmii_i80003_writereg(device_t self, int phy, int reg, int val)
6087 {
6088 struct wm_softc *sc = device_private(self);
6089 int sem;
6090
6091 if (phy != 1) /* only one PHY on kumeran bus */
6092 return;
6093
6094 sem = swfwphysem[sc->sc_funcid];
6095 if (wm_get_swfw_semaphore(sc, sem)) {
6096 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6097 __func__);
6098 return;
6099 }
6100
6101 if ((reg & GG82563_MAX_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
6102 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT,
6103 reg >> GG82563_PAGE_SHIFT);
6104 } else {
6105 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT_ALT,
6106 reg >> GG82563_PAGE_SHIFT);
6107 }
6108 /* Wait more 200us for a bug of the ready bit in the MDIC register */
6109 delay(200);
6110 wm_gmii_i82544_writereg(self, phy, reg & GG82563_MAX_REG_ADDRESS, val);
6111 delay(200);
6112
6113 wm_put_swfw_semaphore(sc, sem);
6114 }
6115
6116 /*
6117 * wm_gmii_bm_readreg: [mii interface function]
6118 *
6119 * Read a PHY register on the kumeran
6120 * This could be handled by the PHY layer if we didn't have to lock the
6121 * ressource ...
6122 */
6123 static int
6124 wm_gmii_bm_readreg(device_t self, int phy, int reg)
6125 {
6126 struct wm_softc *sc = device_private(self);
6127 int sem;
6128 int rv;
6129
6130 sem = swfwphysem[sc->sc_funcid];
6131 if (wm_get_swfw_semaphore(sc, sem)) {
6132 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6133 __func__);
6134 return 0;
6135 }
6136
6137 if (reg > BME1000_MAX_MULTI_PAGE_REG) {
6138 if (phy == 1)
6139 wm_gmii_i82544_writereg(self, phy, 0x1f,
6140 reg);
6141 else
6142 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT,
6143 reg >> GG82563_PAGE_SHIFT);
6144
6145 }
6146
6147 rv = wm_gmii_i82544_readreg(self, phy, reg & GG82563_MAX_REG_ADDRESS);
6148 wm_put_swfw_semaphore(sc, sem);
6149 return rv;
6150 }
6151
6152 /*
6153 * wm_gmii_bm_writereg: [mii interface function]
6154 *
6155 * Write a PHY register on the kumeran.
6156 * This could be handled by the PHY layer if we didn't have to lock the
6157 * ressource ...
6158 */
6159 static void
6160 wm_gmii_bm_writereg(device_t self, int phy, int reg, int val)
6161 {
6162 struct wm_softc *sc = device_private(self);
6163 int sem;
6164
6165 sem = swfwphysem[sc->sc_funcid];
6166 if (wm_get_swfw_semaphore(sc, sem)) {
6167 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6168 __func__);
6169 return;
6170 }
6171
6172 if (reg > BME1000_MAX_MULTI_PAGE_REG) {
6173 if (phy == 1)
6174 wm_gmii_i82544_writereg(self, phy, 0x1f,
6175 reg);
6176 else
6177 wm_gmii_i82544_writereg(self, phy, GG82563_PHY_PAGE_SELECT,
6178 reg >> GG82563_PAGE_SHIFT);
6179
6180 }
6181
6182 wm_gmii_i82544_writereg(self, phy, reg & GG82563_MAX_REG_ADDRESS, val);
6183 wm_put_swfw_semaphore(sc, sem);
6184 }
6185
6186 static void
6187 wm_access_phy_wakeup_reg_bm(device_t self, int offset, int16_t *val, int rd)
6188 {
6189 struct wm_softc *sc = device_private(self);
6190 uint16_t regnum = BM_PHY_REG_NUM(offset);
6191 uint16_t wuce;
6192
6193 /* XXX Gig must be disabled for MDIO accesses to page 800 */
6194 if (sc->sc_type == WM_T_PCH) {
6195 /* XXX e1000 driver do nothing... why? */
6196 }
6197
6198 /* Set page 769 */
6199 wm_gmii_i82544_writereg(self, 1, MII_IGPHY_PAGE_SELECT,
6200 BM_WUC_ENABLE_PAGE << BME1000_PAGE_SHIFT);
6201
6202 wuce = wm_gmii_i82544_readreg(self, 1, BM_WUC_ENABLE_REG);
6203
6204 wuce &= ~BM_WUC_HOST_WU_BIT;
6205 wm_gmii_i82544_writereg(self, 1, BM_WUC_ENABLE_REG,
6206 wuce | BM_WUC_ENABLE_BIT);
6207
6208 /* Select page 800 */
6209 wm_gmii_i82544_writereg(self, 1, MII_IGPHY_PAGE_SELECT,
6210 BM_WUC_PAGE << BME1000_PAGE_SHIFT);
6211
6212 /* Write page 800 */
6213 wm_gmii_i82544_writereg(self, 1, BM_WUC_ADDRESS_OPCODE, regnum);
6214
6215 if (rd)
6216 *val = wm_gmii_i82544_readreg(self, 1, BM_WUC_DATA_OPCODE);
6217 else
6218 wm_gmii_i82544_writereg(self, 1, BM_WUC_DATA_OPCODE, *val);
6219
6220 /* Set page 769 */
6221 wm_gmii_i82544_writereg(self, 1, MII_IGPHY_PAGE_SELECT,
6222 BM_WUC_ENABLE_PAGE << BME1000_PAGE_SHIFT);
6223
6224 wm_gmii_i82544_writereg(self, 1, BM_WUC_ENABLE_REG, wuce);
6225 }
6226
6227 /*
6228 * wm_gmii_hv_readreg: [mii interface function]
6229 *
6230 * Read a PHY register on the kumeran
6231 * This could be handled by the PHY layer if we didn't have to lock the
6232 * ressource ...
6233 */
6234 static int
6235 wm_gmii_hv_readreg(device_t self, int phy, int reg)
6236 {
6237 struct wm_softc *sc = device_private(self);
6238 uint16_t page = BM_PHY_REG_PAGE(reg);
6239 uint16_t regnum = BM_PHY_REG_NUM(reg);
6240 uint16_t val;
6241 int rv;
6242
6243 if (wm_get_swfw_semaphore(sc, SWFW_PHY0_SM)) {
6244 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6245 __func__);
6246 return 0;
6247 }
6248
6249 /* XXX Workaround failure in MDIO access while cable is disconnected */
6250 if (sc->sc_phytype == WMPHY_82577) {
6251 /* XXX must write */
6252 }
6253
6254 /* Page 800 works differently than the rest so it has its own func */
6255 if (page == BM_WUC_PAGE) {
6256 wm_access_phy_wakeup_reg_bm(self, reg, &val, 1);
6257 return val;
6258 }
6259
6260 /*
6261 * Lower than page 768 works differently than the rest so it has its
6262 * own func
6263 */
6264 if ((page > 0) && (page < HV_INTC_FC_PAGE_START)) {
6265 printf("gmii_hv_readreg!!!\n");
6266 return 0;
6267 }
6268
6269 if (regnum > BME1000_MAX_MULTI_PAGE_REG) {
6270 wm_gmii_i82544_writereg(self, 1, MII_IGPHY_PAGE_SELECT,
6271 page << BME1000_PAGE_SHIFT);
6272 }
6273
6274 rv = wm_gmii_i82544_readreg(self, phy, regnum & IGPHY_MAXREGADDR);
6275 wm_put_swfw_semaphore(sc, SWFW_PHY0_SM);
6276 return rv;
6277 }
6278
6279 /*
6280 * wm_gmii_hv_writereg: [mii interface function]
6281 *
6282 * Write a PHY register on the kumeran.
6283 * This could be handled by the PHY layer if we didn't have to lock the
6284 * ressource ...
6285 */
6286 static void
6287 wm_gmii_hv_writereg(device_t self, int phy, int reg, int val)
6288 {
6289 struct wm_softc *sc = device_private(self);
6290 uint16_t page = BM_PHY_REG_PAGE(reg);
6291 uint16_t regnum = BM_PHY_REG_NUM(reg);
6292
6293 if (wm_get_swfw_semaphore(sc, SWFW_PHY0_SM)) {
6294 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6295 __func__);
6296 return;
6297 }
6298
6299 /* XXX Workaround failure in MDIO access while cable is disconnected */
6300
6301 /* Page 800 works differently than the rest so it has its own func */
6302 if (page == BM_WUC_PAGE) {
6303 uint16_t tmp;
6304
6305 tmp = val;
6306 wm_access_phy_wakeup_reg_bm(self, reg, &tmp, 0);
6307 return;
6308 }
6309
6310 /*
6311 * Lower than page 768 works differently than the rest so it has its
6312 * own func
6313 */
6314 if ((page > 0) && (page < HV_INTC_FC_PAGE_START)) {
6315 printf("gmii_hv_writereg!!!\n");
6316 return;
6317 }
6318
6319 /*
6320 * XXX Workaround MDIO accesses being disabled after entering IEEE
6321 * Power Down (whenever bit 11 of the PHY control register is set)
6322 */
6323
6324 if (regnum > BME1000_MAX_MULTI_PAGE_REG) {
6325 wm_gmii_i82544_writereg(self, 1, MII_IGPHY_PAGE_SELECT,
6326 page << BME1000_PAGE_SHIFT);
6327 }
6328
6329 wm_gmii_i82544_writereg(self, phy, regnum & IGPHY_MAXREGADDR, val);
6330 wm_put_swfw_semaphore(sc, SWFW_PHY0_SM);
6331 }
6332
6333 /*
6334 * wm_gmii_hv_readreg: [mii interface function]
6335 *
6336 * Read a PHY register on the kumeran
6337 * This could be handled by the PHY layer if we didn't have to lock the
6338 * ressource ...
6339 */
6340 static int
6341 wm_sgmii_readreg(device_t self, int phy, int reg)
6342 {
6343 struct wm_softc *sc = device_private(self);
6344 uint32_t i2ccmd;
6345 int i, rv;
6346
6347 if (wm_get_swfw_semaphore(sc, swfwphysem[sc->sc_funcid])) {
6348 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6349 __func__);
6350 return 0;
6351 }
6352
6353 i2ccmd = (reg << I2CCMD_REG_ADDR_SHIFT)
6354 | (phy << I2CCMD_PHY_ADDR_SHIFT)
6355 | I2CCMD_OPCODE_READ;
6356 CSR_WRITE(sc, WMREG_I2CCMD, i2ccmd);
6357
6358 /* Poll the ready bit */
6359 for (i = 0; i < I2CCMD_PHY_TIMEOUT; i++) {
6360 delay(50);
6361 i2ccmd = CSR_READ(sc, WMREG_I2CCMD);
6362 if (i2ccmd & I2CCMD_READY)
6363 break;
6364 }
6365 if ((i2ccmd & I2CCMD_READY) == 0)
6366 aprint_error_dev(sc->sc_dev, "I2CCMD Read did not complete\n");
6367 if ((i2ccmd & I2CCMD_ERROR) != 0)
6368 aprint_error_dev(sc->sc_dev, "I2CCMD Error bit set\n");
6369
6370 rv = ((i2ccmd >> 8) & 0x00ff) | ((i2ccmd << 8) & 0xff00);
6371
6372 wm_put_swfw_semaphore(sc, swfwphysem[sc->sc_funcid]);
6373 return rv;
6374 }
6375
6376 /*
6377 * wm_gmii_hv_writereg: [mii interface function]
6378 *
6379 * Write a PHY register on the kumeran.
6380 * This could be handled by the PHY layer if we didn't have to lock the
6381 * ressource ...
6382 */
6383 static void
6384 wm_sgmii_writereg(device_t self, int phy, int reg, int val)
6385 {
6386 struct wm_softc *sc = device_private(self);
6387 uint32_t i2ccmd;
6388 int i;
6389
6390 if (wm_get_swfw_semaphore(sc, swfwphysem[sc->sc_funcid])) {
6391 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6392 __func__);
6393 return;
6394 }
6395
6396 i2ccmd = (reg << I2CCMD_REG_ADDR_SHIFT)
6397 | (phy << I2CCMD_PHY_ADDR_SHIFT)
6398 | I2CCMD_OPCODE_WRITE;
6399 CSR_WRITE(sc, WMREG_I2CCMD, i2ccmd);
6400
6401 /* Poll the ready bit */
6402 for (i = 0; i < I2CCMD_PHY_TIMEOUT; i++) {
6403 delay(50);
6404 i2ccmd = CSR_READ(sc, WMREG_I2CCMD);
6405 if (i2ccmd & I2CCMD_READY)
6406 break;
6407 }
6408 if ((i2ccmd & I2CCMD_READY) == 0)
6409 aprint_error_dev(sc->sc_dev, "I2CCMD Write did not complete\n");
6410 if ((i2ccmd & I2CCMD_ERROR) != 0)
6411 aprint_error_dev(sc->sc_dev, "I2CCMD Error bit set\n");
6412
6413 wm_put_swfw_semaphore(sc, SWFW_PHY0_SM);
6414 }
6415
6416 /*
6417 * wm_gmii_statchg: [mii interface function]
6418 *
6419 * Callback from MII layer when media changes.
6420 */
6421 static void
6422 wm_gmii_statchg(device_t self)
6423 {
6424 struct wm_softc *sc = device_private(self);
6425 struct mii_data *mii = &sc->sc_mii;
6426
6427 sc->sc_ctrl &= ~(CTRL_TFCE | CTRL_RFCE);
6428 sc->sc_tctl &= ~TCTL_COLD(0x3ff);
6429 sc->sc_fcrtl &= ~FCRTL_XONE;
6430
6431 /*
6432 * Get flow control negotiation result.
6433 */
6434 if (IFM_SUBTYPE(mii->mii_media.ifm_cur->ifm_media) == IFM_AUTO &&
6435 (mii->mii_media_active & IFM_ETH_FMASK) != sc->sc_flowflags) {
6436 sc->sc_flowflags = mii->mii_media_active & IFM_ETH_FMASK;
6437 mii->mii_media_active &= ~IFM_ETH_FMASK;
6438 }
6439
6440 if (sc->sc_flowflags & IFM_FLOW) {
6441 if (sc->sc_flowflags & IFM_ETH_TXPAUSE) {
6442 sc->sc_ctrl |= CTRL_TFCE;
6443 sc->sc_fcrtl |= FCRTL_XONE;
6444 }
6445 if (sc->sc_flowflags & IFM_ETH_RXPAUSE)
6446 sc->sc_ctrl |= CTRL_RFCE;
6447 }
6448
6449 if (sc->sc_mii.mii_media_active & IFM_FDX) {
6450 DPRINTF(WM_DEBUG_LINK,
6451 ("%s: LINK: statchg: FDX\n", device_xname(sc->sc_dev)));
6452 sc->sc_tctl |= TCTL_COLD(TX_COLLISION_DISTANCE_FDX);
6453 } else {
6454 DPRINTF(WM_DEBUG_LINK,
6455 ("%s: LINK: statchg: HDX\n", device_xname(sc->sc_dev)));
6456 sc->sc_tctl |= TCTL_COLD(TX_COLLISION_DISTANCE_HDX);
6457 }
6458
6459 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
6460 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl);
6461 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ? WMREG_OLD_FCRTL
6462 : WMREG_FCRTL, sc->sc_fcrtl);
6463 if (sc->sc_type == WM_T_80003) {
6464 switch (IFM_SUBTYPE(sc->sc_mii.mii_media_active)) {
6465 case IFM_1000_T:
6466 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_HD_CTRL,
6467 KUMCTRLSTA_HD_CTRL_1000_DEFAULT);
6468 sc->sc_tipg = TIPG_1000T_80003_DFLT;
6469 break;
6470 default:
6471 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_HD_CTRL,
6472 KUMCTRLSTA_HD_CTRL_10_100_DEFAULT);
6473 sc->sc_tipg = TIPG_10_100_80003_DFLT;
6474 break;
6475 }
6476 CSR_WRITE(sc, WMREG_TIPG, sc->sc_tipg);
6477 }
6478 }
6479
6480 /*
6481 * wm_kmrn_readreg:
6482 *
6483 * Read a kumeran register
6484 */
6485 static int
6486 wm_kmrn_readreg(struct wm_softc *sc, int reg)
6487 {
6488 int rv;
6489
6490 if (sc->sc_flags == WM_F_SWFW_SYNC) {
6491 if (wm_get_swfw_semaphore(sc, SWFW_MAC_CSR_SM)) {
6492 aprint_error_dev(sc->sc_dev,
6493 "%s: failed to get semaphore\n", __func__);
6494 return 0;
6495 }
6496 } else if (sc->sc_flags == WM_F_SWFWHW_SYNC) {
6497 if (wm_get_swfwhw_semaphore(sc)) {
6498 aprint_error_dev(sc->sc_dev,
6499 "%s: failed to get semaphore\n", __func__);
6500 return 0;
6501 }
6502 }
6503
6504 CSR_WRITE(sc, WMREG_KUMCTRLSTA,
6505 ((reg << KUMCTRLSTA_OFFSET_SHIFT) & KUMCTRLSTA_OFFSET) |
6506 KUMCTRLSTA_REN);
6507 delay(2);
6508
6509 rv = CSR_READ(sc, WMREG_KUMCTRLSTA) & KUMCTRLSTA_MASK;
6510
6511 if (sc->sc_flags == WM_F_SWFW_SYNC)
6512 wm_put_swfw_semaphore(sc, SWFW_MAC_CSR_SM);
6513 else if (sc->sc_flags == WM_F_SWFWHW_SYNC)
6514 wm_put_swfwhw_semaphore(sc);
6515
6516 return rv;
6517 }
6518
6519 /*
6520 * wm_kmrn_writereg:
6521 *
6522 * Write a kumeran register
6523 */
6524 static void
6525 wm_kmrn_writereg(struct wm_softc *sc, int reg, int val)
6526 {
6527
6528 if (sc->sc_flags == WM_F_SWFW_SYNC) {
6529 if (wm_get_swfw_semaphore(sc, SWFW_MAC_CSR_SM)) {
6530 aprint_error_dev(sc->sc_dev,
6531 "%s: failed to get semaphore\n", __func__);
6532 return;
6533 }
6534 } else if (sc->sc_flags == WM_F_SWFWHW_SYNC) {
6535 if (wm_get_swfwhw_semaphore(sc)) {
6536 aprint_error_dev(sc->sc_dev,
6537 "%s: failed to get semaphore\n", __func__);
6538 return;
6539 }
6540 }
6541
6542 CSR_WRITE(sc, WMREG_KUMCTRLSTA,
6543 ((reg << KUMCTRLSTA_OFFSET_SHIFT) & KUMCTRLSTA_OFFSET) |
6544 (val & KUMCTRLSTA_MASK));
6545
6546 if (sc->sc_flags == WM_F_SWFW_SYNC)
6547 wm_put_swfw_semaphore(sc, SWFW_MAC_CSR_SM);
6548 else if (sc->sc_flags == WM_F_SWFWHW_SYNC)
6549 wm_put_swfwhw_semaphore(sc);
6550 }
6551
6552 static int
6553 wm_is_onboard_nvm_eeprom(struct wm_softc *sc)
6554 {
6555 uint32_t eecd = 0;
6556
6557 if (sc->sc_type == WM_T_82573 || sc->sc_type == WM_T_82574
6558 || sc->sc_type == WM_T_82583) {
6559 eecd = CSR_READ(sc, WMREG_EECD);
6560
6561 /* Isolate bits 15 & 16 */
6562 eecd = ((eecd >> 15) & 0x03);
6563
6564 /* If both bits are set, device is Flash type */
6565 if (eecd == 0x03)
6566 return 0;
6567 }
6568 return 1;
6569 }
6570
6571 static int
6572 wm_get_swsm_semaphore(struct wm_softc *sc)
6573 {
6574 int32_t timeout;
6575 uint32_t swsm;
6576
6577 /* Get the FW semaphore. */
6578 timeout = 1000 + 1; /* XXX */
6579 while (timeout) {
6580 swsm = CSR_READ(sc, WMREG_SWSM);
6581 swsm |= SWSM_SWESMBI;
6582 CSR_WRITE(sc, WMREG_SWSM, swsm);
6583 /* if we managed to set the bit we got the semaphore. */
6584 swsm = CSR_READ(sc, WMREG_SWSM);
6585 if (swsm & SWSM_SWESMBI)
6586 break;
6587
6588 delay(50);
6589 timeout--;
6590 }
6591
6592 if (timeout == 0) {
6593 aprint_error_dev(sc->sc_dev, "could not acquire EEPROM GNT\n");
6594 /* Release semaphores */
6595 wm_put_swsm_semaphore(sc);
6596 return 1;
6597 }
6598 return 0;
6599 }
6600
6601 static void
6602 wm_put_swsm_semaphore(struct wm_softc *sc)
6603 {
6604 uint32_t swsm;
6605
6606 swsm = CSR_READ(sc, WMREG_SWSM);
6607 swsm &= ~(SWSM_SWESMBI);
6608 CSR_WRITE(sc, WMREG_SWSM, swsm);
6609 }
6610
6611 static int
6612 wm_get_swfw_semaphore(struct wm_softc *sc, uint16_t mask)
6613 {
6614 uint32_t swfw_sync;
6615 uint32_t swmask = mask << SWFW_SOFT_SHIFT;
6616 uint32_t fwmask = mask << SWFW_FIRM_SHIFT;
6617 int timeout = 200;
6618
6619 for (timeout = 0; timeout < 200; timeout++) {
6620 if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE) {
6621 if (wm_get_swsm_semaphore(sc)) {
6622 aprint_error_dev(sc->sc_dev,
6623 "%s: failed to get semaphore\n",
6624 __func__);
6625 return 1;
6626 }
6627 }
6628 swfw_sync = CSR_READ(sc, WMREG_SW_FW_SYNC);
6629 if ((swfw_sync & (swmask | fwmask)) == 0) {
6630 swfw_sync |= swmask;
6631 CSR_WRITE(sc, WMREG_SW_FW_SYNC, swfw_sync);
6632 if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE)
6633 wm_put_swsm_semaphore(sc);
6634 return 0;
6635 }
6636 if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE)
6637 wm_put_swsm_semaphore(sc);
6638 delay(5000);
6639 }
6640 printf("%s: failed to get swfw semaphore mask 0x%x swfw 0x%x\n",
6641 device_xname(sc->sc_dev), mask, swfw_sync);
6642 return 1;
6643 }
6644
6645 static void
6646 wm_put_swfw_semaphore(struct wm_softc *sc, uint16_t mask)
6647 {
6648 uint32_t swfw_sync;
6649
6650 if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE) {
6651 while (wm_get_swsm_semaphore(sc) != 0)
6652 continue;
6653 }
6654 swfw_sync = CSR_READ(sc, WMREG_SW_FW_SYNC);
6655 swfw_sync &= ~(mask << SWFW_SOFT_SHIFT);
6656 CSR_WRITE(sc, WMREG_SW_FW_SYNC, swfw_sync);
6657 if (sc->sc_flags & WM_F_EEPROM_SEMAPHORE)
6658 wm_put_swsm_semaphore(sc);
6659 }
6660
6661 static int
6662 wm_get_swfwhw_semaphore(struct wm_softc *sc)
6663 {
6664 uint32_t ext_ctrl;
6665 int timeout = 200;
6666
6667 for (timeout = 0; timeout < 200; timeout++) {
6668 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR);
6669 ext_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
6670 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl);
6671
6672 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR);
6673 if (ext_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
6674 return 0;
6675 delay(5000);
6676 }
6677 printf("%s: failed to get swfwhw semaphore ext_ctrl 0x%x\n",
6678 device_xname(sc->sc_dev), ext_ctrl);
6679 return 1;
6680 }
6681
6682 static void
6683 wm_put_swfwhw_semaphore(struct wm_softc *sc)
6684 {
6685 uint32_t ext_ctrl;
6686 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR);
6687 ext_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
6688 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl);
6689 }
6690
6691 static int
6692 wm_valid_nvm_bank_detect_ich8lan(struct wm_softc *sc, unsigned int *bank)
6693 {
6694 uint32_t act_offset = ICH_NVM_SIG_WORD * 2 + 1;
6695 uint32_t bank1_offset = sc->sc_ich8_flash_bank_size * sizeof(uint16_t);
6696
6697 if ((sc->sc_type != WM_T_ICH10) && (sc->sc_type != WM_T_PCH)) {
6698 /* Value of bit 22 corresponds to the flash bank we're on. */
6699 *bank = (CSR_READ(sc, WMREG_EECD) & EECD_SEC1VAL) ? 1 : 0;
6700 } else {
6701 uint8_t bank_high_byte;
6702 wm_read_ich8_byte(sc, act_offset, &bank_high_byte);
6703 if ((bank_high_byte & 0xc0) == 0x80)
6704 *bank = 0;
6705 else {
6706 wm_read_ich8_byte(sc, act_offset + bank1_offset,
6707 &bank_high_byte);
6708 if ((bank_high_byte & 0xc0) == 0x80)
6709 *bank = 1;
6710 else {
6711 aprint_error_dev(sc->sc_dev,
6712 "EEPROM not present\n");
6713 return -1;
6714 }
6715 }
6716 }
6717
6718 return 0;
6719 }
6720
6721 /******************************************************************************
6722 * Reads a 16 bit word or words from the EEPROM using the ICH8's flash access
6723 * register.
6724 *
6725 * sc - Struct containing variables accessed by shared code
6726 * offset - offset of word in the EEPROM to read
6727 * data - word read from the EEPROM
6728 * words - number of words to read
6729 *****************************************************************************/
6730 static int
6731 wm_read_eeprom_ich8(struct wm_softc *sc, int offset, int words, uint16_t *data)
6732 {
6733 int32_t error = 0;
6734 uint32_t flash_bank = 0;
6735 uint32_t act_offset = 0;
6736 uint32_t bank_offset = 0;
6737 uint16_t word = 0;
6738 uint16_t i = 0;
6739
6740 /* We need to know which is the valid flash bank. In the event
6741 * that we didn't allocate eeprom_shadow_ram, we may not be
6742 * managing flash_bank. So it cannot be trusted and needs
6743 * to be updated with each read.
6744 */
6745 error = wm_valid_nvm_bank_detect_ich8lan(sc, &flash_bank);
6746 if (error) {
6747 aprint_error_dev(sc->sc_dev, "%s: failed to detect NVM bank\n",
6748 __func__);
6749 return error;
6750 }
6751
6752 /* Adjust offset appropriately if we're on bank 1 - adjust for word size */
6753 bank_offset = flash_bank * (sc->sc_ich8_flash_bank_size * 2);
6754
6755 error = wm_get_swfwhw_semaphore(sc);
6756 if (error) {
6757 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n",
6758 __func__);
6759 return error;
6760 }
6761
6762 for (i = 0; i < words; i++) {
6763 /* The NVM part needs a byte offset, hence * 2 */
6764 act_offset = bank_offset + ((offset + i) * 2);
6765 error = wm_read_ich8_word(sc, act_offset, &word);
6766 if (error) {
6767 aprint_error_dev(sc->sc_dev, "%s: failed to read NVM\n",
6768 __func__);
6769 break;
6770 }
6771 data[i] = word;
6772 }
6773
6774 wm_put_swfwhw_semaphore(sc);
6775 return error;
6776 }
6777
6778 /******************************************************************************
6779 * This function does initial flash setup so that a new read/write/erase cycle
6780 * can be started.
6781 *
6782 * sc - The pointer to the hw structure
6783 ****************************************************************************/
6784 static int32_t
6785 wm_ich8_cycle_init(struct wm_softc *sc)
6786 {
6787 uint16_t hsfsts;
6788 int32_t error = 1;
6789 int32_t i = 0;
6790
6791 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS);
6792
6793 /* May be check the Flash Des Valid bit in Hw status */
6794 if ((hsfsts & HSFSTS_FLDVAL) == 0) {
6795 return error;
6796 }
6797
6798 /* Clear FCERR in Hw status by writing 1 */
6799 /* Clear DAEL in Hw status by writing a 1 */
6800 hsfsts |= HSFSTS_ERR | HSFSTS_DAEL;
6801
6802 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, hsfsts);
6803
6804 /*
6805 * Either we should have a hardware SPI cycle in progress bit to check
6806 * against, in order to start a new cycle or FDONE bit should be
6807 * changed in the hardware so that it is 1 after harware reset, which
6808 * can then be used as an indication whether a cycle is in progress or
6809 * has been completed .. we should also have some software semaphore
6810 * mechanism to guard FDONE or the cycle in progress bit so that two
6811 * threads access to those bits can be sequentiallized or a way so that
6812 * 2 threads dont start the cycle at the same time
6813 */
6814
6815 if ((hsfsts & HSFSTS_FLINPRO) == 0) {
6816 /*
6817 * There is no cycle running at present, so we can start a
6818 * cycle
6819 */
6820
6821 /* Begin by setting Flash Cycle Done. */
6822 hsfsts |= HSFSTS_DONE;
6823 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, hsfsts);
6824 error = 0;
6825 } else {
6826 /*
6827 * otherwise poll for sometime so the current cycle has a
6828 * chance to end before giving up.
6829 */
6830 for (i = 0; i < ICH_FLASH_COMMAND_TIMEOUT; i++) {
6831 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS);
6832 if ((hsfsts & HSFSTS_FLINPRO) == 0) {
6833 error = 0;
6834 break;
6835 }
6836 delay(1);
6837 }
6838 if (error == 0) {
6839 /*
6840 * Successful in waiting for previous cycle to timeout,
6841 * now set the Flash Cycle Done.
6842 */
6843 hsfsts |= HSFSTS_DONE;
6844 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, hsfsts);
6845 }
6846 }
6847 return error;
6848 }
6849
6850 /******************************************************************************
6851 * This function starts a flash cycle and waits for its completion
6852 *
6853 * sc - The pointer to the hw structure
6854 ****************************************************************************/
6855 static int32_t
6856 wm_ich8_flash_cycle(struct wm_softc *sc, uint32_t timeout)
6857 {
6858 uint16_t hsflctl;
6859 uint16_t hsfsts;
6860 int32_t error = 1;
6861 uint32_t i = 0;
6862
6863 /* Start a cycle by writing 1 in Flash Cycle Go in Hw Flash Control */
6864 hsflctl = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFCTL);
6865 hsflctl |= HSFCTL_GO;
6866 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFCTL, hsflctl);
6867
6868 /* wait till FDONE bit is set to 1 */
6869 do {
6870 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS);
6871 if (hsfsts & HSFSTS_DONE)
6872 break;
6873 delay(1);
6874 i++;
6875 } while (i < timeout);
6876 if ((hsfsts & HSFSTS_DONE) == 1 && (hsfsts & HSFSTS_ERR) == 0)
6877 error = 0;
6878
6879 return error;
6880 }
6881
6882 /******************************************************************************
6883 * Reads a byte or word from the NVM using the ICH8 flash access registers.
6884 *
6885 * sc - The pointer to the hw structure
6886 * index - The index of the byte or word to read.
6887 * size - Size of data to read, 1=byte 2=word
6888 * data - Pointer to the word to store the value read.
6889 *****************************************************************************/
6890 static int32_t
6891 wm_read_ich8_data(struct wm_softc *sc, uint32_t index,
6892 uint32_t size, uint16_t* data)
6893 {
6894 uint16_t hsfsts;
6895 uint16_t hsflctl;
6896 uint32_t flash_linear_address;
6897 uint32_t flash_data = 0;
6898 int32_t error = 1;
6899 int32_t count = 0;
6900
6901 if (size < 1 || size > 2 || data == 0x0 ||
6902 index > ICH_FLASH_LINEAR_ADDR_MASK)
6903 return error;
6904
6905 flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) +
6906 sc->sc_ich8_flash_base;
6907
6908 do {
6909 delay(1);
6910 /* Steps */
6911 error = wm_ich8_cycle_init(sc);
6912 if (error)
6913 break;
6914
6915 hsflctl = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFCTL);
6916 /* 0b/1b corresponds to 1 or 2 byte size, respectively. */
6917 hsflctl |= ((size - 1) << HSFCTL_BCOUNT_SHIFT)
6918 & HSFCTL_BCOUNT_MASK;
6919 hsflctl |= ICH_CYCLE_READ << HSFCTL_CYCLE_SHIFT;
6920 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFCTL, hsflctl);
6921
6922 /*
6923 * Write the last 24 bits of index into Flash Linear address
6924 * field in Flash Address
6925 */
6926 /* TODO: TBD maybe check the index against the size of flash */
6927
6928 ICH8_FLASH_WRITE32(sc, ICH_FLASH_FADDR, flash_linear_address);
6929
6930 error = wm_ich8_flash_cycle(sc, ICH_FLASH_COMMAND_TIMEOUT);
6931
6932 /*
6933 * Check if FCERR is set to 1, if set to 1, clear it and try
6934 * the whole sequence a few more times, else read in (shift in)
6935 * the Flash Data0, the order is least significant byte first
6936 * msb to lsb
6937 */
6938 if (error == 0) {
6939 flash_data = ICH8_FLASH_READ32(sc, ICH_FLASH_FDATA0);
6940 if (size == 1)
6941 *data = (uint8_t)(flash_data & 0x000000FF);
6942 else if (size == 2)
6943 *data = (uint16_t)(flash_data & 0x0000FFFF);
6944 break;
6945 } else {
6946 /*
6947 * If we've gotten here, then things are probably
6948 * completely hosed, but if the error condition is
6949 * detected, it won't hurt to give it another try...
6950 * ICH_FLASH_CYCLE_REPEAT_COUNT times.
6951 */
6952 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS);
6953 if (hsfsts & HSFSTS_ERR) {
6954 /* Repeat for some time before giving up. */
6955 continue;
6956 } else if ((hsfsts & HSFSTS_DONE) == 0)
6957 break;
6958 }
6959 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
6960
6961 return error;
6962 }
6963
6964 /******************************************************************************
6965 * Reads a single byte from the NVM using the ICH8 flash access registers.
6966 *
6967 * sc - pointer to wm_hw structure
6968 * index - The index of the byte to read.
6969 * data - Pointer to a byte to store the value read.
6970 *****************************************************************************/
6971 static int32_t
6972 wm_read_ich8_byte(struct wm_softc *sc, uint32_t index, uint8_t* data)
6973 {
6974 int32_t status;
6975 uint16_t word = 0;
6976
6977 status = wm_read_ich8_data(sc, index, 1, &word);
6978 if (status == 0)
6979 *data = (uint8_t)word;
6980 else
6981 *data = 0;
6982
6983 return status;
6984 }
6985
6986 /******************************************************************************
6987 * Reads a word from the NVM using the ICH8 flash access registers.
6988 *
6989 * sc - pointer to wm_hw structure
6990 * index - The starting byte index of the word to read.
6991 * data - Pointer to a word to store the value read.
6992 *****************************************************************************/
6993 static int32_t
6994 wm_read_ich8_word(struct wm_softc *sc, uint32_t index, uint16_t *data)
6995 {
6996 int32_t status;
6997
6998 status = wm_read_ich8_data(sc, index, 2, data);
6999 return status;
7000 }
7001
7002 static int
7003 wm_check_mng_mode(struct wm_softc *sc)
7004 {
7005 int rv;
7006
7007 switch (sc->sc_type) {
7008 case WM_T_ICH8:
7009 case WM_T_ICH9:
7010 case WM_T_ICH10:
7011 case WM_T_PCH:
7012 case WM_T_PCH2:
7013 rv = wm_check_mng_mode_ich8lan(sc);
7014 break;
7015 case WM_T_82574:
7016 case WM_T_82583:
7017 rv = wm_check_mng_mode_82574(sc);
7018 break;
7019 case WM_T_82571:
7020 case WM_T_82572:
7021 case WM_T_82573:
7022 case WM_T_80003:
7023 rv = wm_check_mng_mode_generic(sc);
7024 break;
7025 default:
7026 /* noting to do */
7027 rv = 0;
7028 break;
7029 }
7030
7031 return rv;
7032 }
7033
7034 static int
7035 wm_check_mng_mode_ich8lan(struct wm_softc *sc)
7036 {
7037 uint32_t fwsm;
7038
7039 fwsm = CSR_READ(sc, WMREG_FWSM);
7040
7041 if ((fwsm & FWSM_MODE_MASK) == (MNG_ICH_IAMT_MODE << FWSM_MODE_SHIFT))
7042 return 1;
7043
7044 return 0;
7045 }
7046
7047 static int
7048 wm_check_mng_mode_82574(struct wm_softc *sc)
7049 {
7050 uint16_t data;
7051
7052 wm_read_eeprom(sc, EEPROM_OFF_CFG2, 1, &data);
7053
7054 if ((data & EEPROM_CFG2_MNGM_MASK) != 0)
7055 return 1;
7056
7057 return 0;
7058 }
7059
7060 static int
7061 wm_check_mng_mode_generic(struct wm_softc *sc)
7062 {
7063 uint32_t fwsm;
7064
7065 fwsm = CSR_READ(sc, WMREG_FWSM);
7066
7067 if ((fwsm & FWSM_MODE_MASK) == (MNG_IAMT_MODE << FWSM_MODE_SHIFT))
7068 return 1;
7069
7070 return 0;
7071 }
7072
7073 static int
7074 wm_enable_mng_pass_thru(struct wm_softc *sc)
7075 {
7076 uint32_t manc, fwsm, factps;
7077
7078 if ((sc->sc_flags & WM_F_ASF_FIRMWARE_PRES) == 0)
7079 return 0;
7080
7081 manc = CSR_READ(sc, WMREG_MANC);
7082
7083 DPRINTF(WM_DEBUG_MANAGE, ("%s: MANC (%08x)\n",
7084 device_xname(sc->sc_dev), manc));
7085 if (((manc & MANC_RECV_TCO_EN) == 0)
7086 || ((manc & MANC_EN_MAC_ADDR_FILTER) == 0))
7087 return 0;
7088
7089 if ((sc->sc_flags & WM_F_ARC_SUBSYS_VALID) != 0) {
7090 fwsm = CSR_READ(sc, WMREG_FWSM);
7091 factps = CSR_READ(sc, WMREG_FACTPS);
7092 if (((factps & FACTPS_MNGCG) == 0)
7093 && ((fwsm & FWSM_MODE_MASK)
7094 == (MNG_ICH_IAMT_MODE << FWSM_MODE_SHIFT)))
7095 return 1;
7096 } else if (((manc & MANC_SMBUS_EN) != 0)
7097 && ((manc & MANC_ASF_EN) == 0))
7098 return 1;
7099
7100 return 0;
7101 }
7102
7103 static int
7104 wm_check_reset_block(struct wm_softc *sc)
7105 {
7106 uint32_t reg;
7107
7108 switch (sc->sc_type) {
7109 case WM_T_ICH8:
7110 case WM_T_ICH9:
7111 case WM_T_ICH10:
7112 case WM_T_PCH:
7113 case WM_T_PCH2:
7114 reg = CSR_READ(sc, WMREG_FWSM);
7115 if ((reg & FWSM_RSPCIPHY) != 0)
7116 return 0;
7117 else
7118 return -1;
7119 break;
7120 case WM_T_82571:
7121 case WM_T_82572:
7122 case WM_T_82573:
7123 case WM_T_82574:
7124 case WM_T_82583:
7125 case WM_T_80003:
7126 reg = CSR_READ(sc, WMREG_MANC);
7127 if ((reg & MANC_BLK_PHY_RST_ON_IDE) != 0)
7128 return -1;
7129 else
7130 return 0;
7131 break;
7132 default:
7133 /* no problem */
7134 break;
7135 }
7136
7137 return 0;
7138 }
7139
7140 static void
7141 wm_get_hw_control(struct wm_softc *sc)
7142 {
7143 uint32_t reg;
7144
7145 switch (sc->sc_type) {
7146 case WM_T_82573:
7147 reg = CSR_READ(sc, WMREG_SWSM);
7148 CSR_WRITE(sc, WMREG_SWSM, reg | SWSM_DRV_LOAD);
7149 break;
7150 case WM_T_82571:
7151 case WM_T_82572:
7152 case WM_T_82574:
7153 case WM_T_82583:
7154 case WM_T_80003:
7155 case WM_T_ICH8:
7156 case WM_T_ICH9:
7157 case WM_T_ICH10:
7158 case WM_T_PCH:
7159 case WM_T_PCH2:
7160 reg = CSR_READ(sc, WMREG_CTRL_EXT);
7161 CSR_WRITE(sc, WMREG_CTRL_EXT, reg | CTRL_EXT_DRV_LOAD);
7162 break;
7163 default:
7164 break;
7165 }
7166 }
7167
7168 static void
7169 wm_release_hw_control(struct wm_softc *sc)
7170 {
7171 uint32_t reg;
7172
7173 if ((sc->sc_flags & WM_F_HAS_MANAGE) == 0)
7174 return;
7175
7176 if (sc->sc_type == WM_T_82573) {
7177 reg = CSR_READ(sc, WMREG_SWSM);
7178 reg &= ~SWSM_DRV_LOAD;
7179 CSR_WRITE(sc, WMREG_SWSM, reg & ~SWSM_DRV_LOAD);
7180 } else {
7181 reg = CSR_READ(sc, WMREG_CTRL_EXT);
7182 CSR_WRITE(sc, WMREG_CTRL_EXT, reg & ~CTRL_EXT_DRV_LOAD);
7183 }
7184 }
7185
7186 /* XXX Currently TBI only */
7187 static int
7188 wm_check_for_link(struct wm_softc *sc)
7189 {
7190 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur;
7191 uint32_t rxcw;
7192 uint32_t ctrl;
7193 uint32_t status;
7194 uint32_t sig;
7195
7196 rxcw = CSR_READ(sc, WMREG_RXCW);
7197 ctrl = CSR_READ(sc, WMREG_CTRL);
7198 status = CSR_READ(sc, WMREG_STATUS);
7199
7200 sig = (sc->sc_type > WM_T_82544) ? CTRL_SWDPIN(1) : 0;
7201
7202 DPRINTF(WM_DEBUG_LINK, ("%s: %s: sig = %d, status_lu = %d, rxcw_c = %d\n",
7203 device_xname(sc->sc_dev), __func__,
7204 ((ctrl & CTRL_SWDPIN(1)) == sig),
7205 ((status & STATUS_LU) != 0),
7206 ((rxcw & RXCW_C) != 0)
7207 ));
7208
7209 /*
7210 * SWDPIN LU RXCW
7211 * 0 0 0
7212 * 0 0 1 (should not happen)
7213 * 0 1 0 (should not happen)
7214 * 0 1 1 (should not happen)
7215 * 1 0 0 Disable autonego and force linkup
7216 * 1 0 1 got /C/ but not linkup yet
7217 * 1 1 0 (linkup)
7218 * 1 1 1 If IFM_AUTO, back to autonego
7219 *
7220 */
7221 if (((ctrl & CTRL_SWDPIN(1)) == sig)
7222 && ((status & STATUS_LU) == 0)
7223 && ((rxcw & RXCW_C) == 0)) {
7224 DPRINTF(WM_DEBUG_LINK, ("%s: force linkup and fullduplex\n",
7225 __func__));
7226 sc->sc_tbi_linkup = 0;
7227 /* Disable auto-negotiation in the TXCW register */
7228 CSR_WRITE(sc, WMREG_TXCW, (sc->sc_txcw & ~TXCW_ANE));
7229
7230 /*
7231 * Force link-up and also force full-duplex.
7232 *
7233 * NOTE: CTRL was updated TFCE and RFCE automatically,
7234 * so we should update sc->sc_ctrl
7235 */
7236 sc->sc_ctrl = ctrl | CTRL_SLU | CTRL_FD;
7237 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
7238 } else if (((status & STATUS_LU) != 0)
7239 && ((rxcw & RXCW_C) != 0)
7240 && (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO)) {
7241 sc->sc_tbi_linkup = 1;
7242 DPRINTF(WM_DEBUG_LINK, ("%s: go back to autonego\n",
7243 __func__));
7244 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw);
7245 CSR_WRITE(sc, WMREG_CTRL, (ctrl & ~CTRL_SLU));
7246 } else if (((ctrl & CTRL_SWDPIN(1)) == sig)
7247 && ((rxcw & RXCW_C) != 0)) {
7248 DPRINTF(WM_DEBUG_LINK, ("/C/"));
7249 } else {
7250 DPRINTF(WM_DEBUG_LINK, ("%s: %x,%x,%x\n", __func__, rxcw, ctrl,
7251 status));
7252 }
7253
7254 return 0;
7255 }
7256
7257 /* Work-around for 82566 Kumeran PCS lock loss */
7258 static void
7259 wm_kmrn_lock_loss_workaround_ich8lan(struct wm_softc *sc)
7260 {
7261 int miistatus, active, i;
7262 int reg;
7263
7264 miistatus = sc->sc_mii.mii_media_status;
7265
7266 /* If the link is not up, do nothing */
7267 if ((miistatus & IFM_ACTIVE) != 0)
7268 return;
7269
7270 active = sc->sc_mii.mii_media_active;
7271
7272 /* Nothing to do if the link is other than 1Gbps */
7273 if (IFM_SUBTYPE(active) != IFM_1000_T)
7274 return;
7275
7276 for (i = 0; i < 10; i++) {
7277 /* read twice */
7278 reg = wm_gmii_i80003_readreg(sc->sc_dev, 1, IGP3_KMRN_DIAG);
7279 reg = wm_gmii_i80003_readreg(sc->sc_dev, 1, IGP3_KMRN_DIAG);
7280 if ((reg & IGP3_KMRN_DIAG_PCS_LOCK_LOSS) != 0)
7281 goto out; /* GOOD! */
7282
7283 /* Reset the PHY */
7284 wm_gmii_reset(sc);
7285 delay(5*1000);
7286 }
7287
7288 /* Disable GigE link negotiation */
7289 reg = CSR_READ(sc, WMREG_PHY_CTRL);
7290 reg |= PHY_CTRL_GBE_DIS | PHY_CTRL_NOND0A_GBE_DIS;
7291 CSR_WRITE(sc, WMREG_PHY_CTRL, reg);
7292
7293 /*
7294 * Call gig speed drop workaround on Gig disable before accessing
7295 * any PHY registers.
7296 */
7297 wm_gig_downshift_workaround_ich8lan(sc);
7298
7299 out:
7300 return;
7301 }
7302
7303 /* WOL from S5 stops working */
7304 static void
7305 wm_gig_downshift_workaround_ich8lan(struct wm_softc *sc)
7306 {
7307 uint16_t kmrn_reg;
7308
7309 /* Only for igp3 */
7310 if (sc->sc_phytype == WMPHY_IGP_3) {
7311 kmrn_reg = wm_kmrn_readreg(sc, KUMCTRLSTA_OFFSET_DIAG);
7312 kmrn_reg |= KUMCTRLSTA_DIAG_NELPBK;
7313 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_DIAG, kmrn_reg);
7314 kmrn_reg &= ~KUMCTRLSTA_DIAG_NELPBK;
7315 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_DIAG, kmrn_reg);
7316 }
7317 }
7318
7319 #ifdef WM_WOL
7320 /* Power down workaround on D3 */
7321 static void
7322 wm_igp3_phy_powerdown_workaround_ich8lan(struct wm_softc *sc)
7323 {
7324 uint32_t reg;
7325 int i;
7326
7327 for (i = 0; i < 2; i++) {
7328 /* Disable link */
7329 reg = CSR_READ(sc, WMREG_PHY_CTRL);
7330 reg |= PHY_CTRL_GBE_DIS | PHY_CTRL_NOND0A_GBE_DIS;
7331 CSR_WRITE(sc, WMREG_PHY_CTRL, reg);
7332
7333 /*
7334 * Call gig speed drop workaround on Gig disable before
7335 * accessing any PHY registers
7336 */
7337 if (sc->sc_type == WM_T_ICH8)
7338 wm_gig_downshift_workaround_ich8lan(sc);
7339
7340 /* Write VR power-down enable */
7341 reg = sc->sc_mii.mii_readreg(sc->sc_dev, 1, IGP3_VR_CTRL);
7342 reg &= ~IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK;
7343 reg |= IGP3_VR_CTRL_MODE_SHUTDOWN;
7344 sc->sc_mii.mii_writereg(sc->sc_dev, 1, IGP3_VR_CTRL, reg);
7345
7346 /* Read it back and test */
7347 reg = sc->sc_mii.mii_readreg(sc->sc_dev, 1, IGP3_VR_CTRL);
7348 reg &= IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK;
7349 if ((reg == IGP3_VR_CTRL_MODE_SHUTDOWN) || (i != 0))
7350 break;
7351
7352 /* Issue PHY reset and repeat at most one more time */
7353 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET);
7354 }
7355 }
7356 #endif /* WM_WOL */
7357
7358 /*
7359 * Workaround for pch's PHYs
7360 * XXX should be moved to new PHY driver?
7361 */
7362 static void
7363 wm_hv_phy_workaround_ich8lan(struct wm_softc *sc)
7364 {
7365 if (sc->sc_phytype == WMPHY_82577)
7366 wm_set_mdio_slow_mode_hv(sc);
7367
7368 /* (PCH rev.2) && (82577 && (phy rev 2 or 3)) */
7369
7370 /* (82577 && (phy rev 1 or 2)) || (82578 & phy rev 1)*/
7371
7372 /* 82578 */
7373 if (sc->sc_phytype == WMPHY_82578) {
7374 /* PCH rev. < 3 */
7375 if (sc->sc_rev < 3) {
7376 /* XXX 6 bit shift? Why? Is it page2? */
7377 wm_gmii_hv_writereg(sc->sc_dev, 1, ((1 << 6) | 0x29),
7378 0x66c0);
7379 wm_gmii_hv_writereg(sc->sc_dev, 1, ((1 << 6) | 0x1e),
7380 0xffff);
7381 }
7382
7383 /* XXX phy rev. < 2 */
7384 }
7385
7386 /* Select page 0 */
7387
7388 /* XXX acquire semaphore */
7389 wm_gmii_i82544_writereg(sc->sc_dev, 1, MII_IGPHY_PAGE_SELECT, 0);
7390 /* XXX release semaphore */
7391
7392 /*
7393 * Configure the K1 Si workaround during phy reset assuming there is
7394 * link so that it disables K1 if link is in 1Gbps.
7395 */
7396 wm_k1_gig_workaround_hv(sc, 1);
7397 }
7398
7399 static void
7400 wm_lv_phy_workaround_ich8lan(struct wm_softc *sc)
7401 {
7402
7403 wm_set_mdio_slow_mode_hv(sc);
7404 }
7405
7406 static void
7407 wm_k1_gig_workaround_hv(struct wm_softc *sc, int link)
7408 {
7409 int k1_enable = sc->sc_nvm_k1_enabled;
7410
7411 /* XXX acquire semaphore */
7412
7413 if (link) {
7414 k1_enable = 0;
7415
7416 /* Link stall fix for link up */
7417 wm_gmii_hv_writereg(sc->sc_dev, 1, IGP3_KMRN_DIAG, 0x0100);
7418 } else {
7419 /* Link stall fix for link down */
7420 wm_gmii_hv_writereg(sc->sc_dev, 1, IGP3_KMRN_DIAG, 0x4100);
7421 }
7422
7423 wm_configure_k1_ich8lan(sc, k1_enable);
7424
7425 /* XXX release semaphore */
7426 }
7427
7428 static void
7429 wm_set_mdio_slow_mode_hv(struct wm_softc *sc)
7430 {
7431 uint32_t reg;
7432
7433 reg = wm_gmii_hv_readreg(sc->sc_dev, 1, HV_KMRN_MODE_CTRL);
7434 wm_gmii_hv_writereg(sc->sc_dev, 1, HV_KMRN_MODE_CTRL,
7435 reg | HV_KMRN_MDIO_SLOW);
7436 }
7437
7438 static void
7439 wm_configure_k1_ich8lan(struct wm_softc *sc, int k1_enable)
7440 {
7441 uint32_t ctrl, ctrl_ext, tmp;
7442 uint16_t kmrn_reg;
7443
7444 kmrn_reg = wm_kmrn_readreg(sc, KUMCTRLSTA_OFFSET_K1_CONFIG);
7445
7446 if (k1_enable)
7447 kmrn_reg |= KUMCTRLSTA_K1_ENABLE;
7448 else
7449 kmrn_reg &= ~KUMCTRLSTA_K1_ENABLE;
7450
7451 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, kmrn_reg);
7452
7453 delay(20);
7454
7455 ctrl = CSR_READ(sc, WMREG_CTRL);
7456 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT);
7457
7458 tmp = ctrl & ~(CTRL_SPEED_1000 | CTRL_SPEED_100);
7459 tmp |= CTRL_FRCSPD;
7460
7461 CSR_WRITE(sc, WMREG_CTRL, tmp);
7462 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext | CTRL_EXT_SPD_BYPS);
7463 delay(20);
7464
7465 CSR_WRITE(sc, WMREG_CTRL, ctrl);
7466 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext);
7467 delay(20);
7468 }
7469
7470 static void
7471 wm_smbustopci(struct wm_softc *sc)
7472 {
7473 uint32_t fwsm;
7474
7475 fwsm = CSR_READ(sc, WMREG_FWSM);
7476 if (((fwsm & FWSM_FW_VALID) == 0)
7477 && ((wm_check_reset_block(sc) == 0))) {
7478 sc->sc_ctrl |= CTRL_LANPHYPC_OVERRIDE;
7479 sc->sc_ctrl &= ~CTRL_LANPHYPC_VALUE;
7480 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
7481 delay(10);
7482 sc->sc_ctrl &= ~CTRL_LANPHYPC_OVERRIDE;
7483 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl);
7484 delay(50*1000);
7485
7486 /*
7487 * Gate automatic PHY configuration by hardware on non-managed
7488 * 82579
7489 */
7490 if (sc->sc_type == WM_T_PCH2)
7491 wm_gate_hw_phy_config_ich8lan(sc, 1);
7492 }
7493 }
7494
7495 static void
7496 wm_set_pcie_completion_timeout(struct wm_softc *sc)
7497 {
7498 uint32_t gcr;
7499 pcireg_t ctrl2;
7500
7501 gcr = CSR_READ(sc, WMREG_GCR);
7502
7503 /* Only take action if timeout value is defaulted to 0 */
7504 if ((gcr & GCR_CMPL_TMOUT_MASK) != 0)
7505 goto out;
7506
7507 if ((gcr & GCR_CAP_VER2) == 0) {
7508 gcr |= GCR_CMPL_TMOUT_10MS;
7509 goto out;
7510 }
7511
7512 ctrl2 = pci_conf_read(sc->sc_pc, sc->sc_pcitag,
7513 sc->sc_pcixe_capoff + PCI_PCIE_DCSR2);
7514 ctrl2 |= WM_PCI_PCIE_DCSR2_16MS;
7515 pci_conf_write(sc->sc_pc, sc->sc_pcitag,
7516 sc->sc_pcixe_capoff + PCI_PCIE_DCSR2, ctrl2);
7517
7518 out:
7519 /* Disable completion timeout resend */
7520 gcr &= ~GCR_CMPL_TMOUT_RESEND;
7521
7522 CSR_WRITE(sc, WMREG_GCR, gcr);
7523 }
7524
7525 /* special case - for 82575 - need to do manual init ... */
7526 static void
7527 wm_reset_init_script_82575(struct wm_softc *sc)
7528 {
7529 /*
7530 * remark: this is untested code - we have no board without EEPROM
7531 * same setup as mentioned int the freeBSD driver for the i82575
7532 */
7533
7534 /* SerDes configuration via SERDESCTRL */
7535 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x00, 0x0c);
7536 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x01, 0x78);
7537 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x1b, 0x23);
7538 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x23, 0x15);
7539
7540 /* CCM configuration via CCMCTL register */
7541 wm_82575_write_8bit_ctlr_reg(sc, WMREG_CCMCTL, 0x14, 0x00);
7542 wm_82575_write_8bit_ctlr_reg(sc, WMREG_CCMCTL, 0x10, 0x00);
7543
7544 /* PCIe lanes configuration */
7545 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x00, 0xec);
7546 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x61, 0xdf);
7547 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x34, 0x05);
7548 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x2f, 0x81);
7549
7550 /* PCIe PLL Configuration */
7551 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x02, 0x47);
7552 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x14, 0x00);
7553 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x10, 0x00);
7554 }
7555
7556 static void
7557 wm_init_manageability(struct wm_softc *sc)
7558 {
7559
7560 if (sc->sc_flags & WM_F_HAS_MANAGE) {
7561 uint32_t manc2h = CSR_READ(sc, WMREG_MANC2H);
7562 uint32_t manc = CSR_READ(sc, WMREG_MANC);
7563
7564 /* disabl hardware interception of ARP */
7565 manc &= ~MANC_ARP_EN;
7566
7567 /* enable receiving management packets to the host */
7568 if (sc->sc_type >= WM_T_82571) {
7569 manc |= MANC_EN_MNG2HOST;
7570 manc2h |= MANC2H_PORT_623| MANC2H_PORT_624;
7571 CSR_WRITE(sc, WMREG_MANC2H, manc2h);
7572
7573 }
7574
7575 CSR_WRITE(sc, WMREG_MANC, manc);
7576 }
7577 }
7578
7579 static void
7580 wm_release_manageability(struct wm_softc *sc)
7581 {
7582
7583 if (sc->sc_flags & WM_F_HAS_MANAGE) {
7584 uint32_t manc = CSR_READ(sc, WMREG_MANC);
7585
7586 if (sc->sc_type >= WM_T_82571)
7587 manc &= ~MANC_EN_MNG2HOST;
7588
7589 CSR_WRITE(sc, WMREG_MANC, manc);
7590 }
7591 }
7592
7593 static void
7594 wm_get_wakeup(struct wm_softc *sc)
7595 {
7596
7597 /* 0: HAS_AMT, ARC_SUBSYS_VALID, ASF_FIRMWARE_PRES */
7598 switch (sc->sc_type) {
7599 case WM_T_82573:
7600 case WM_T_82583:
7601 sc->sc_flags |= WM_F_HAS_AMT;
7602 /* FALLTHROUGH */
7603 case WM_T_80003:
7604 case WM_T_82541:
7605 case WM_T_82547:
7606 case WM_T_82571:
7607 case WM_T_82572:
7608 case WM_T_82574:
7609 case WM_T_82575:
7610 case WM_T_82576:
7611 #if 0 /* XXX */
7612 case WM_T_82580:
7613 case WM_T_82580ER:
7614 #endif
7615 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_MODE_MASK) != 0)
7616 sc->sc_flags |= WM_F_ARC_SUBSYS_VALID;
7617 sc->sc_flags |= WM_F_ASF_FIRMWARE_PRES;
7618 break;
7619 case WM_T_ICH8:
7620 case WM_T_ICH9:
7621 case WM_T_ICH10:
7622 case WM_T_PCH:
7623 case WM_T_PCH2:
7624 sc->sc_flags |= WM_F_HAS_AMT;
7625 sc->sc_flags |= WM_F_ASF_FIRMWARE_PRES;
7626 break;
7627 default:
7628 break;
7629 }
7630
7631 /* 1: HAS_MANAGE */
7632 if (wm_enable_mng_pass_thru(sc) != 0)
7633 sc->sc_flags |= WM_F_HAS_MANAGE;
7634
7635 #ifdef WM_DEBUG
7636 printf("\n");
7637 if ((sc->sc_flags & WM_F_HAS_AMT) != 0)
7638 printf("HAS_AMT,");
7639 if ((sc->sc_flags & WM_F_ARC_SUBSYS_VALID) != 0)
7640 printf("ARC_SUBSYS_VALID,");
7641 if ((sc->sc_flags & WM_F_ASF_FIRMWARE_PRES) != 0)
7642 printf("ASF_FIRMWARE_PRES,");
7643 if ((sc->sc_flags & WM_F_HAS_MANAGE) != 0)
7644 printf("HAS_MANAGE,");
7645 printf("\n");
7646 #endif
7647 /*
7648 * Note that the WOL flags is set after the resetting of the eeprom
7649 * stuff
7650 */
7651 }
7652
7653 #ifdef WM_WOL
7654 /* WOL in the newer chipset interfaces (pchlan) */
7655 static void
7656 wm_enable_phy_wakeup(struct wm_softc *sc)
7657 {
7658 #if 0
7659 uint16_t preg;
7660
7661 /* Copy MAC RARs to PHY RARs */
7662
7663 /* Copy MAC MTA to PHY MTA */
7664
7665 /* Configure PHY Rx Control register */
7666
7667 /* Enable PHY wakeup in MAC register */
7668
7669 /* Configure and enable PHY wakeup in PHY registers */
7670
7671 /* Activate PHY wakeup */
7672
7673 /* XXX */
7674 #endif
7675 }
7676
7677 static void
7678 wm_enable_wakeup(struct wm_softc *sc)
7679 {
7680 uint32_t reg, pmreg;
7681 pcireg_t pmode;
7682
7683 if (pci_get_capability(sc->sc_pc, sc->sc_pcitag, PCI_CAP_PWRMGMT,
7684 &pmreg, NULL) == 0)
7685 return;
7686
7687 /* Advertise the wakeup capability */
7688 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_SWDPIN(2)
7689 | CTRL_SWDPIN(3));
7690 CSR_WRITE(sc, WMREG_WUC, WUC_APME);
7691
7692 /* ICH workaround */
7693 switch (sc->sc_type) {
7694 case WM_T_ICH8:
7695 case WM_T_ICH9:
7696 case WM_T_ICH10:
7697 case WM_T_PCH:
7698 case WM_T_PCH2:
7699 /* Disable gig during WOL */
7700 reg = CSR_READ(sc, WMREG_PHY_CTRL);
7701 reg |= PHY_CTRL_D0A_LPLU | PHY_CTRL_GBE_DIS;
7702 CSR_WRITE(sc, WMREG_PHY_CTRL, reg);
7703 if (sc->sc_type == WM_T_PCH)
7704 wm_gmii_reset(sc);
7705
7706 /* Power down workaround */
7707 if (sc->sc_phytype == WMPHY_82577) {
7708 struct mii_softc *child;
7709
7710 /* Assume that the PHY is copper */
7711 child = LIST_FIRST(&sc->sc_mii.mii_phys);
7712 if (child->mii_mpd_rev <= 2)
7713 sc->sc_mii.mii_writereg(sc->sc_dev, 1,
7714 (768 << 5) | 25, 0x0444); /* magic num */
7715 }
7716 break;
7717 default:
7718 break;
7719 }
7720
7721 /* Keep the laser running on fiber adapters */
7722 if (((sc->sc_wmp->wmp_flags & WMP_F_1000X) != 0)
7723 || (sc->sc_wmp->wmp_flags & WMP_F_SERDES) != 0) {
7724 reg = CSR_READ(sc, WMREG_CTRL_EXT);
7725 reg |= CTRL_EXT_SWDPIN(3);
7726 CSR_WRITE(sc, WMREG_CTRL_EXT, reg);
7727 }
7728
7729 reg = CSR_READ(sc, WMREG_WUFC) | WUFC_MAG;
7730 #if 0 /* for the multicast packet */
7731 reg |= WUFC_MC;
7732 CSR_WRITE(sc, WMREG_RCTL, CSR_READ(sc, WMREG_RCTL) | RCTL_MPE);
7733 #endif
7734
7735 if (sc->sc_type == WM_T_PCH) {
7736 wm_enable_phy_wakeup(sc);
7737 } else {
7738 CSR_WRITE(sc, WMREG_WUC, WUC_PME_EN);
7739 CSR_WRITE(sc, WMREG_WUFC, reg);
7740 }
7741
7742 if (((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9)
7743 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH)
7744 || (sc->sc_type == WM_T_PCH2))
7745 && (sc->sc_phytype == WMPHY_IGP_3))
7746 wm_igp3_phy_powerdown_workaround_ich8lan(sc);
7747
7748 /* Request PME */
7749 pmode = pci_conf_read(sc->sc_pc, sc->sc_pcitag, pmreg + PCI_PMCSR);
7750 #if 0
7751 /* Disable WOL */
7752 pmode &= ~(PCI_PMCSR_PME_STS | PCI_PMCSR_PME_EN);
7753 #else
7754 /* For WOL */
7755 pmode |= PCI_PMCSR_PME_STS | PCI_PMCSR_PME_EN;
7756 #endif
7757 pci_conf_write(sc->sc_pc, sc->sc_pcitag, pmreg + PCI_PMCSR, pmode);
7758 }
7759 #endif /* WM_WOL */
7760
7761 static bool
7762 wm_suspend(device_t self, const pmf_qual_t *qual)
7763 {
7764 struct wm_softc *sc = device_private(self);
7765
7766 wm_release_manageability(sc);
7767 wm_release_hw_control(sc);
7768 #ifdef WM_WOL
7769 wm_enable_wakeup(sc);
7770 #endif
7771
7772 return true;
7773 }
7774
7775 static bool
7776 wm_resume(device_t self, const pmf_qual_t *qual)
7777 {
7778 struct wm_softc *sc = device_private(self);
7779
7780 wm_init_manageability(sc);
7781
7782 return true;
7783 }
7784