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