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