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