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