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