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