1 /* $NetBSD: if_wm.c,v 1.792 2023/11/21 23:09:40 gutteridge 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 * - Check XXX'ed comments 76 * - TX Multi queue improvement (refine queue selection logic) 77 * - Split header buffer for newer descriptors 78 * - EEE (Energy Efficiency Ethernet) for I354 79 * - Virtual Function 80 * - Set LED correctly (based on contents in EEPROM) 81 * - Rework how parameters are loaded from the EEPROM. 82 */ 83 84 #include <sys/cdefs.h> 85 __KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.792 2023/11/21 23:09:40 gutteridge Exp $"); 86 87 #ifdef _KERNEL_OPT 88 #include "opt_if_wm.h" 89 #endif 90 91 #include <sys/param.h> 92 93 #include <sys/atomic.h> 94 #include <sys/callout.h> 95 #include <sys/cpu.h> 96 #include <sys/device.h> 97 #include <sys/errno.h> 98 #include <sys/interrupt.h> 99 #include <sys/ioctl.h> 100 #include <sys/kernel.h> 101 #include <sys/kmem.h> 102 #include <sys/mbuf.h> 103 #include <sys/pcq.h> 104 #include <sys/queue.h> 105 #include <sys/rndsource.h> 106 #include <sys/socket.h> 107 #include <sys/sysctl.h> 108 #include <sys/syslog.h> 109 #include <sys/systm.h> 110 #include <sys/workqueue.h> 111 112 #include <net/if.h> 113 #include <net/if_dl.h> 114 #include <net/if_media.h> 115 #include <net/if_ether.h> 116 117 #include <net/bpf.h> 118 119 #include <net/rss_config.h> 120 121 #include <netinet/in.h> /* XXX for struct ip */ 122 #include <netinet/in_systm.h> /* XXX for struct ip */ 123 #include <netinet/ip.h> /* XXX for struct ip */ 124 #include <netinet/ip6.h> /* XXX for struct ip6_hdr */ 125 #include <netinet/tcp.h> /* XXX for struct tcphdr */ 126 127 #include <sys/bus.h> 128 #include <sys/intr.h> 129 #include <machine/endian.h> 130 131 #include <dev/mii/mii.h> 132 #include <dev/mii/mdio.h> 133 #include <dev/mii/miivar.h> 134 #include <dev/mii/miidevs.h> 135 #include <dev/mii/mii_bitbang.h> 136 #include <dev/mii/ikphyreg.h> 137 #include <dev/mii/igphyreg.h> 138 #include <dev/mii/igphyvar.h> 139 #include <dev/mii/inbmphyreg.h> 140 #include <dev/mii/ihphyreg.h> 141 #include <dev/mii/makphyreg.h> 142 143 #include <dev/pci/pcireg.h> 144 #include <dev/pci/pcivar.h> 145 #include <dev/pci/pcidevs.h> 146 147 #include <dev/pci/if_wmreg.h> 148 #include <dev/pci/if_wmvar.h> 149 150 #ifdef WM_DEBUG 151 #define WM_DEBUG_LINK __BIT(0) 152 #define WM_DEBUG_TX __BIT(1) 153 #define WM_DEBUG_RX __BIT(2) 154 #define WM_DEBUG_GMII __BIT(3) 155 #define WM_DEBUG_MANAGE __BIT(4) 156 #define WM_DEBUG_NVM __BIT(5) 157 #define WM_DEBUG_INIT __BIT(6) 158 #define WM_DEBUG_LOCK __BIT(7) 159 160 #if 0 161 #define WM_DEBUG_DEFAULT WM_DEBUG_TX | WM_DEBUG_RX | WM_DEBUG_LINK | \ 162 WM_DEBUG_GMII | WM_DEBUG_MANAGE | WM_DEBUG_NVM | WM_DEBUG_INIT | \ 163 WM_DEBUG_LOCK 164 #endif 165 166 #define DPRINTF(sc, x, y) \ 167 do { \ 168 if ((sc)->sc_debug & (x)) \ 169 printf y; \ 170 } while (0) 171 #else 172 #define DPRINTF(sc, x, y) __nothing 173 #endif /* WM_DEBUG */ 174 175 #define WM_WORKQUEUE_PRI PRI_SOFTNET 176 177 /* 178 * This device driver's max interrupt numbers. 179 */ 180 #define WM_MAX_NQUEUEINTR 16 181 #define WM_MAX_NINTR (WM_MAX_NQUEUEINTR + 1) 182 183 #ifndef WM_DISABLE_MSI 184 #define WM_DISABLE_MSI 0 185 #endif 186 #ifndef WM_DISABLE_MSIX 187 #define WM_DISABLE_MSIX 0 188 #endif 189 190 int wm_disable_msi = WM_DISABLE_MSI; 191 int wm_disable_msix = WM_DISABLE_MSIX; 192 193 #ifndef WM_WATCHDOG_TIMEOUT 194 #define WM_WATCHDOG_TIMEOUT 5 195 #endif 196 static int wm_watchdog_timeout = WM_WATCHDOG_TIMEOUT; 197 198 /* 199 * Transmit descriptor list size. Due to errata, we can only have 200 * 256 hardware descriptors in the ring on < 82544, but we use 4096 201 * on >= 82544. We tell the upper layers that they can queue a lot 202 * of packets, and we go ahead and manage up to 64 (16 for the i82547) 203 * of them at a time. 204 * 205 * We allow up to 64 DMA segments per packet. Pathological packet 206 * chains containing many small mbufs have been observed in zero-copy 207 * situations with jumbo frames. If a mbuf chain has more than 64 DMA segments, 208 * m_defrag() is called to reduce it. 209 */ 210 #define WM_NTXSEGS 64 211 #define WM_IFQUEUELEN 256 212 #define WM_TXQUEUELEN_MAX 64 213 #define WM_TXQUEUELEN_MAX_82547 16 214 #define WM_TXQUEUELEN(txq) ((txq)->txq_num) 215 #define WM_TXQUEUELEN_MASK(txq) (WM_TXQUEUELEN(txq) - 1) 216 #define WM_TXQUEUE_GC(txq) (WM_TXQUEUELEN(txq) / 8) 217 #define WM_NTXDESC_82542 256 218 #define WM_NTXDESC_82544 4096 219 #define WM_NTXDESC(txq) ((txq)->txq_ndesc) 220 #define WM_NTXDESC_MASK(txq) (WM_NTXDESC(txq) - 1) 221 #define WM_TXDESCS_SIZE(txq) (WM_NTXDESC(txq) * (txq)->txq_descsize) 222 #define WM_NEXTTX(txq, x) (((x) + 1) & WM_NTXDESC_MASK(txq)) 223 #define WM_NEXTTXS(txq, x) (((x) + 1) & WM_TXQUEUELEN_MASK(txq)) 224 225 #define WM_MAXTXDMA (2 * round_page(IP_MAXPACKET)) /* for TSO */ 226 227 #define WM_TXINTERQSIZE 256 228 229 #ifndef WM_TX_PROCESS_LIMIT_DEFAULT 230 #define WM_TX_PROCESS_LIMIT_DEFAULT 100U 231 #endif 232 #ifndef WM_TX_INTR_PROCESS_LIMIT_DEFAULT 233 #define WM_TX_INTR_PROCESS_LIMIT_DEFAULT 0U 234 #endif 235 236 /* 237 * Receive descriptor list size. We have one Rx buffer for normal 238 * sized packets. Jumbo packets consume 5 Rx buffers for a full-sized 239 * packet. We allocate 256 receive descriptors, each with a 2k 240 * buffer (MCLBYTES), which gives us room for 50 jumbo packets. 241 */ 242 #define WM_NRXDESC 256U 243 #define WM_NRXDESC_MASK (WM_NRXDESC - 1) 244 #define WM_NEXTRX(x) (((x) + 1) & WM_NRXDESC_MASK) 245 #define WM_PREVRX(x) (((x) - 1) & WM_NRXDESC_MASK) 246 247 #ifndef WM_RX_PROCESS_LIMIT_DEFAULT 248 #define WM_RX_PROCESS_LIMIT_DEFAULT 100U 249 #endif 250 #ifndef WM_RX_INTR_PROCESS_LIMIT_DEFAULT 251 #define WM_RX_INTR_PROCESS_LIMIT_DEFAULT 0U 252 #endif 253 254 typedef union txdescs { 255 wiseman_txdesc_t sctxu_txdescs[WM_NTXDESC_82544]; 256 nq_txdesc_t sctxu_nq_txdescs[WM_NTXDESC_82544]; 257 } txdescs_t; 258 259 typedef union rxdescs { 260 wiseman_rxdesc_t sctxu_rxdescs[WM_NRXDESC]; 261 ext_rxdesc_t sctxu_ext_rxdescs[WM_NRXDESC]; /* 82574 only */ 262 nq_rxdesc_t sctxu_nq_rxdescs[WM_NRXDESC]; /* 82575 and newer */ 263 } rxdescs_t; 264 265 #define WM_CDTXOFF(txq, x) ((txq)->txq_descsize * (x)) 266 #define WM_CDRXOFF(rxq, x) ((rxq)->rxq_descsize * (x)) 267 268 /* 269 * Software state for transmit jobs. 270 */ 271 struct wm_txsoft { 272 struct mbuf *txs_mbuf; /* head of our mbuf chain */ 273 bus_dmamap_t txs_dmamap; /* our DMA map */ 274 int txs_firstdesc; /* first descriptor in packet */ 275 int txs_lastdesc; /* last descriptor in packet */ 276 int txs_ndesc; /* # of descriptors used */ 277 }; 278 279 /* 280 * Software state for receive buffers. Each descriptor gets a 2k (MCLBYTES) 281 * buffer and a DMA map. For packets which fill more than one buffer, we chain 282 * them together. 283 */ 284 struct wm_rxsoft { 285 struct mbuf *rxs_mbuf; /* head of our mbuf chain */ 286 bus_dmamap_t rxs_dmamap; /* our DMA map */ 287 }; 288 289 #define WM_LINKUP_TIMEOUT 50 290 291 static uint16_t swfwphysem[] = { 292 SWFW_PHY0_SM, 293 SWFW_PHY1_SM, 294 SWFW_PHY2_SM, 295 SWFW_PHY3_SM 296 }; 297 298 static const uint32_t wm_82580_rxpbs_table[] = { 299 36, 72, 144, 1, 2, 4, 8, 16, 35, 70, 140 300 }; 301 302 struct wm_softc; 303 304 #if defined(_LP64) && !defined(WM_DISABLE_EVENT_COUNTERS) 305 #if !defined(WM_EVENT_COUNTERS) 306 #define WM_EVENT_COUNTERS 1 307 #endif 308 #endif 309 310 #ifdef WM_EVENT_COUNTERS 311 #define WM_Q_EVCNT_DEFINE(qname, evname) \ 312 char qname##_##evname##_evcnt_name[sizeof("qname##XX##evname")]; \ 313 struct evcnt qname##_ev_##evname 314 315 #define WM_Q_EVCNT_ATTACH(qname, evname, q, qnum, xname, evtype) \ 316 do { \ 317 snprintf((q)->qname##_##evname##_evcnt_name, \ 318 sizeof((q)->qname##_##evname##_evcnt_name), \ 319 "%s%02d%s", #qname, (qnum), #evname); \ 320 evcnt_attach_dynamic(&(q)->qname##_ev_##evname, \ 321 (evtype), NULL, (xname), \ 322 (q)->qname##_##evname##_evcnt_name); \ 323 } while (0) 324 325 #define WM_Q_MISC_EVCNT_ATTACH(qname, evname, q, qnum, xname) \ 326 WM_Q_EVCNT_ATTACH(qname, evname, q, qnum, xname, EVCNT_TYPE_MISC) 327 328 #define WM_Q_INTR_EVCNT_ATTACH(qname, evname, q, qnum, xname) \ 329 WM_Q_EVCNT_ATTACH(qname, evname, q, qnum, xname, EVCNT_TYPE_INTR) 330 331 #define WM_Q_EVCNT_DETACH(qname, evname, q, qnum) \ 332 evcnt_detach(&(q)->qname##_ev_##evname) 333 #endif /* WM_EVENT_COUNTERS */ 334 335 struct wm_txqueue { 336 kmutex_t *txq_lock; /* lock for tx operations */ 337 338 struct wm_softc *txq_sc; /* shortcut (skip struct wm_queue) */ 339 340 /* Software state for the transmit descriptors. */ 341 int txq_num; /* must be a power of two */ 342 struct wm_txsoft txq_soft[WM_TXQUEUELEN_MAX]; 343 344 /* TX control data structures. */ 345 int txq_ndesc; /* must be a power of two */ 346 size_t txq_descsize; /* a tx descriptor size */ 347 txdescs_t *txq_descs_u; 348 bus_dmamap_t txq_desc_dmamap; /* control data DMA map */ 349 bus_dma_segment_t txq_desc_seg; /* control data segment */ 350 int txq_desc_rseg; /* real number of control segment */ 351 #define txq_desc_dma txq_desc_dmamap->dm_segs[0].ds_addr 352 #define txq_descs txq_descs_u->sctxu_txdescs 353 #define txq_nq_descs txq_descs_u->sctxu_nq_txdescs 354 355 bus_addr_t txq_tdt_reg; /* offset of TDT register */ 356 357 int txq_free; /* number of free Tx descriptors */ 358 int txq_next; /* next ready Tx descriptor */ 359 360 int txq_sfree; /* number of free Tx jobs */ 361 int txq_snext; /* next free Tx job */ 362 int txq_sdirty; /* dirty Tx jobs */ 363 364 /* These 4 variables are used only on the 82547. */ 365 int txq_fifo_size; /* Tx FIFO size */ 366 int txq_fifo_head; /* current head of FIFO */ 367 uint32_t txq_fifo_addr; /* internal address of start of FIFO */ 368 int txq_fifo_stall; /* Tx FIFO is stalled */ 369 370 /* 371 * When ncpu > number of Tx queues, a Tx queue is shared by multiple 372 * CPUs. This queue intermediate them without block. 373 */ 374 pcq_t *txq_interq; 375 376 /* 377 * NEWQUEUE devices must use not ifp->if_flags but txq->txq_flags 378 * to manage Tx H/W queue's busy flag. 379 */ 380 int txq_flags; /* flags for H/W queue, see below */ 381 #define WM_TXQ_NO_SPACE 0x1 382 #define WM_TXQ_LINKDOWN_DISCARD 0x2 383 384 bool txq_stopping; 385 386 bool txq_sending; 387 time_t txq_lastsent; 388 389 /* Checksum flags used for previous packet */ 390 uint32_t txq_last_hw_cmd; 391 uint8_t txq_last_hw_fields; 392 uint16_t txq_last_hw_ipcs; 393 uint16_t txq_last_hw_tucs; 394 395 uint32_t txq_packets; /* for AIM */ 396 uint32_t txq_bytes; /* for AIM */ 397 #ifdef WM_EVENT_COUNTERS 398 /* TX event counters */ 399 WM_Q_EVCNT_DEFINE(txq, txsstall); /* Stalled due to no txs */ 400 WM_Q_EVCNT_DEFINE(txq, txdstall); /* Stalled due to no txd */ 401 WM_Q_EVCNT_DEFINE(txq, fifo_stall); /* FIFO stalls (82547) */ 402 WM_Q_EVCNT_DEFINE(txq, txdw); /* Tx descriptor interrupts */ 403 WM_Q_EVCNT_DEFINE(txq, txqe); /* Tx queue empty interrupts */ 404 /* XXX not used? */ 405 406 WM_Q_EVCNT_DEFINE(txq, ipsum); /* IP checksums comp. */ 407 WM_Q_EVCNT_DEFINE(txq, tusum); /* TCP/UDP cksums comp. */ 408 WM_Q_EVCNT_DEFINE(txq, tusum6); /* TCP/UDP v6 cksums comp. */ 409 WM_Q_EVCNT_DEFINE(txq, tso); /* TCP seg offload (IPv4) */ 410 WM_Q_EVCNT_DEFINE(txq, tso6); /* TCP seg offload (IPv6) */ 411 WM_Q_EVCNT_DEFINE(txq, tsopain); /* Painful header manip. for TSO */ 412 WM_Q_EVCNT_DEFINE(txq, pcqdrop); /* Pkt dropped in pcq */ 413 WM_Q_EVCNT_DEFINE(txq, descdrop); /* Pkt dropped in MAC desc ring */ 414 /* other than toomanyseg */ 415 416 WM_Q_EVCNT_DEFINE(txq, toomanyseg); /* Pkt dropped(toomany DMA segs) */ 417 WM_Q_EVCNT_DEFINE(txq, defrag); /* m_defrag() */ 418 WM_Q_EVCNT_DEFINE(txq, underrun); /* Tx underrun */ 419 WM_Q_EVCNT_DEFINE(txq, skipcontext); /* Tx skip wrong cksum context */ 420 421 char txq_txseg_evcnt_names[WM_NTXSEGS][sizeof("txqXXtxsegXXX")]; 422 struct evcnt txq_ev_txseg[WM_NTXSEGS]; /* Tx packets w/ N segments */ 423 #endif /* WM_EVENT_COUNTERS */ 424 }; 425 426 struct wm_rxqueue { 427 kmutex_t *rxq_lock; /* lock for rx operations */ 428 429 struct wm_softc *rxq_sc; /* shortcut (skip struct wm_queue) */ 430 431 /* Software state for the receive descriptors. */ 432 struct wm_rxsoft rxq_soft[WM_NRXDESC]; 433 434 /* RX control data structures. */ 435 int rxq_ndesc; /* must be a power of two */ 436 size_t rxq_descsize; /* a rx descriptor size */ 437 rxdescs_t *rxq_descs_u; 438 bus_dmamap_t rxq_desc_dmamap; /* control data DMA map */ 439 bus_dma_segment_t rxq_desc_seg; /* control data segment */ 440 int rxq_desc_rseg; /* real number of control segment */ 441 #define rxq_desc_dma rxq_desc_dmamap->dm_segs[0].ds_addr 442 #define rxq_descs rxq_descs_u->sctxu_rxdescs 443 #define rxq_ext_descs rxq_descs_u->sctxu_ext_rxdescs 444 #define rxq_nq_descs rxq_descs_u->sctxu_nq_rxdescs 445 446 bus_addr_t rxq_rdt_reg; /* offset of RDT register */ 447 448 int rxq_ptr; /* next ready Rx desc/queue ent */ 449 int rxq_discard; 450 int rxq_len; 451 struct mbuf *rxq_head; 452 struct mbuf *rxq_tail; 453 struct mbuf **rxq_tailp; 454 455 bool rxq_stopping; 456 457 uint32_t rxq_packets; /* for AIM */ 458 uint32_t rxq_bytes; /* for AIM */ 459 #ifdef WM_EVENT_COUNTERS 460 /* RX event counters */ 461 WM_Q_EVCNT_DEFINE(rxq, intr); /* Interrupts */ 462 WM_Q_EVCNT_DEFINE(rxq, defer); /* Rx deferred processing */ 463 464 WM_Q_EVCNT_DEFINE(rxq, ipsum); /* IP checksums checked */ 465 WM_Q_EVCNT_DEFINE(rxq, tusum); /* TCP/UDP cksums checked */ 466 #endif 467 }; 468 469 struct wm_queue { 470 int wmq_id; /* index of TX/RX queues */ 471 int wmq_intr_idx; /* index of MSI-X tables */ 472 473 uint32_t wmq_itr; /* interrupt interval per queue. */ 474 bool wmq_set_itr; 475 476 struct wm_txqueue wmq_txq; 477 struct wm_rxqueue wmq_rxq; 478 char sysctlname[32]; /* Name for sysctl */ 479 480 bool wmq_txrx_use_workqueue; 481 bool wmq_wq_enqueued; 482 struct work wmq_cookie; 483 void *wmq_si; 484 }; 485 486 struct wm_phyop { 487 int (*acquire)(struct wm_softc *) __attribute__((warn_unused_result)); 488 void (*release)(struct wm_softc *); 489 int (*readreg_locked)(device_t, int, int, uint16_t *); 490 int (*writereg_locked)(device_t, int, int, uint16_t); 491 int reset_delay_us; 492 bool no_errprint; 493 }; 494 495 struct wm_nvmop { 496 int (*acquire)(struct wm_softc *) __attribute__((warn_unused_result)); 497 void (*release)(struct wm_softc *); 498 int (*read)(struct wm_softc *, int, int, uint16_t *); 499 }; 500 501 /* 502 * Software state per device. 503 */ 504 struct wm_softc { 505 device_t sc_dev; /* generic device information */ 506 bus_space_tag_t sc_st; /* bus space tag */ 507 bus_space_handle_t sc_sh; /* bus space handle */ 508 bus_size_t sc_ss; /* bus space size */ 509 bus_space_tag_t sc_iot; /* I/O space tag */ 510 bus_space_handle_t sc_ioh; /* I/O space handle */ 511 bus_size_t sc_ios; /* I/O space size */ 512 bus_space_tag_t sc_flasht; /* flash registers space tag */ 513 bus_space_handle_t sc_flashh; /* flash registers space handle */ 514 bus_size_t sc_flashs; /* flash registers space size */ 515 off_t sc_flashreg_offset; /* 516 * offset to flash registers from 517 * start of BAR 518 */ 519 bus_dma_tag_t sc_dmat; /* bus DMA tag */ 520 521 struct ethercom sc_ethercom; /* Ethernet common data */ 522 struct mii_data sc_mii; /* MII/media information */ 523 524 pci_chipset_tag_t sc_pc; 525 pcitag_t sc_pcitag; 526 int sc_bus_speed; /* PCI/PCIX bus speed */ 527 int sc_pcixe_capoff; /* PCI[Xe] capability reg offset */ 528 529 uint16_t sc_pcidevid; /* PCI device ID */ 530 wm_chip_type sc_type; /* MAC type */ 531 int sc_rev; /* MAC revision */ 532 wm_phy_type sc_phytype; /* PHY type */ 533 uint8_t sc_sfptype; /* SFP type */ 534 uint32_t sc_mediatype; /* Media type (Copper, Fiber, SERDES)*/ 535 #define WM_MEDIATYPE_UNKNOWN 0x00 536 #define WM_MEDIATYPE_FIBER 0x01 537 #define WM_MEDIATYPE_COPPER 0x02 538 #define WM_MEDIATYPE_SERDES 0x03 /* Internal SERDES */ 539 int sc_funcid; /* unit number of the chip (0 to 3) */ 540 u_int sc_flags; /* flags; see below */ 541 u_short sc_if_flags; /* last if_flags */ 542 int sc_ec_capenable; /* last ec_capenable */ 543 int sc_flowflags; /* 802.3x flow control flags */ 544 uint16_t eee_lp_ability; /* EEE link partner's ability */ 545 int sc_align_tweak; 546 547 void *sc_ihs[WM_MAX_NINTR]; /* 548 * interrupt cookie. 549 * - legacy and msi use sc_ihs[0] only 550 * - msix use sc_ihs[0] to sc_ihs[nintrs-1] 551 */ 552 pci_intr_handle_t *sc_intrs; /* 553 * legacy and msi use sc_intrs[0] only 554 * msix use sc_intrs[0] to sc_ihs[nintrs-1] 555 */ 556 int sc_nintrs; /* number of interrupts */ 557 558 int sc_link_intr_idx; /* index of MSI-X tables */ 559 560 callout_t sc_tick_ch; /* tick callout */ 561 bool sc_core_stopping; 562 563 int sc_nvm_ver_major; 564 int sc_nvm_ver_minor; 565 int sc_nvm_ver_build; 566 int sc_nvm_addrbits; /* NVM address bits */ 567 unsigned int sc_nvm_wordsize; /* NVM word size */ 568 int sc_ich8_flash_base; 569 int sc_ich8_flash_bank_size; 570 int sc_nvm_k1_enabled; 571 572 int sc_nqueues; 573 struct wm_queue *sc_queue; 574 u_int sc_tx_process_limit; /* Tx proc. repeat limit in softint */ 575 u_int sc_tx_intr_process_limit; /* Tx proc. repeat limit in H/W intr */ 576 u_int sc_rx_process_limit; /* Rx proc. repeat limit in softint */ 577 u_int sc_rx_intr_process_limit; /* Rx proc. repeat limit in H/W intr */ 578 struct workqueue *sc_queue_wq; 579 bool sc_txrx_use_workqueue; 580 581 int sc_affinity_offset; 582 583 #ifdef WM_EVENT_COUNTERS 584 /* Event counters. */ 585 struct evcnt sc_ev_linkintr; /* Link interrupts */ 586 587 /* >= WM_T_82542_2_1 */ 588 struct evcnt sc_ev_rx_xon; /* Rx PAUSE(0) frames */ 589 struct evcnt sc_ev_tx_xon; /* Tx PAUSE(0) frames */ 590 struct evcnt sc_ev_rx_xoff; /* Rx PAUSE(!0) frames */ 591 struct evcnt sc_ev_tx_xoff; /* Tx PAUSE(!0) frames */ 592 struct evcnt sc_ev_rx_macctl; /* Rx Unsupported */ 593 594 struct evcnt sc_ev_crcerrs; /* CRC Error */ 595 struct evcnt sc_ev_algnerrc; /* Alignment Error */ 596 struct evcnt sc_ev_symerrc; /* Symbol Error */ 597 struct evcnt sc_ev_rxerrc; /* Receive Error */ 598 struct evcnt sc_ev_mpc; /* Missed Packets */ 599 struct evcnt sc_ev_scc; /* Single Collision */ 600 struct evcnt sc_ev_ecol; /* Excessive Collision */ 601 struct evcnt sc_ev_mcc; /* Multiple Collision */ 602 struct evcnt sc_ev_latecol; /* Late Collision */ 603 struct evcnt sc_ev_colc; /* Collision */ 604 struct evcnt sc_ev_cbtmpc; /* Circuit Breaker Tx Mng. Packet */ 605 struct evcnt sc_ev_dc; /* Defer */ 606 struct evcnt sc_ev_tncrs; /* Tx-No CRS */ 607 struct evcnt sc_ev_sec; /* Sequence Error */ 608 609 /* Old */ 610 struct evcnt sc_ev_cexterr; /* Carrier Extension Error */ 611 /* New */ 612 struct evcnt sc_ev_htdpmc; /* Host Tx Discarded Pkts by MAC */ 613 614 struct evcnt sc_ev_rlec; /* Receive Length Error */ 615 struct evcnt sc_ev_cbrdpc; /* Circuit Breaker Rx Dropped Packet */ 616 struct evcnt sc_ev_prc64; /* Packets Rx (64 bytes) */ 617 struct evcnt sc_ev_prc127; /* Packets Rx (65-127 bytes) */ 618 struct evcnt sc_ev_prc255; /* Packets Rx (128-255 bytes) */ 619 struct evcnt sc_ev_prc511; /* Packets Rx (256-511 bytes) */ 620 struct evcnt sc_ev_prc1023; /* Packets Rx (512-1023 bytes) */ 621 struct evcnt sc_ev_prc1522; /* Packets Rx (1024-1522 bytes) */ 622 struct evcnt sc_ev_gprc; /* Good Packets Rx */ 623 struct evcnt sc_ev_bprc; /* Broadcast Packets Rx */ 624 struct evcnt sc_ev_mprc; /* Multicast Packets Rx */ 625 struct evcnt sc_ev_gptc; /* Good Packets Tx */ 626 struct evcnt sc_ev_gorc; /* Good Octets Rx */ 627 struct evcnt sc_ev_gotc; /* Good Octets Tx */ 628 struct evcnt sc_ev_rnbc; /* Rx No Buffers */ 629 struct evcnt sc_ev_ruc; /* Rx Undersize */ 630 struct evcnt sc_ev_rfc; /* Rx Fragment */ 631 struct evcnt sc_ev_roc; /* Rx Oversize */ 632 struct evcnt sc_ev_rjc; /* Rx Jabber */ 633 struct evcnt sc_ev_mgtprc; /* Management Packets RX */ 634 struct evcnt sc_ev_mgtpdc; /* Management Packets Dropped */ 635 struct evcnt sc_ev_mgtptc; /* Management Packets TX */ 636 struct evcnt sc_ev_tor; /* Total Octets Rx */ 637 struct evcnt sc_ev_tot; /* Total Octets Tx */ 638 struct evcnt sc_ev_tpr; /* Total Packets Rx */ 639 struct evcnt sc_ev_tpt; /* Total Packets Tx */ 640 struct evcnt sc_ev_ptc64; /* Packets Tx (64 bytes) */ 641 struct evcnt sc_ev_ptc127; /* Packets Tx (65-127 bytes) */ 642 struct evcnt sc_ev_ptc255; /* Packets Tx (128-255 bytes) */ 643 struct evcnt sc_ev_ptc511; /* Packets Tx (256-511 bytes) */ 644 struct evcnt sc_ev_ptc1023; /* Packets Tx (512-1023 bytes) */ 645 struct evcnt sc_ev_ptc1522; /* Packets Tx (1024-1522 Bytes) */ 646 struct evcnt sc_ev_mptc; /* Multicast Packets Tx */ 647 struct evcnt sc_ev_bptc; /* Broadcast Packets Tx */ 648 struct evcnt sc_ev_tsctc; /* TCP Segmentation Context Tx */ 649 650 /* Old */ 651 struct evcnt sc_ev_tsctfc; /* TCP Segmentation Context Tx Fail */ 652 /* New */ 653 struct evcnt sc_ev_cbrmpc; /* Circuit Breaker Rx Mng. Packet */ 654 655 struct evcnt sc_ev_iac; /* Interrupt Assertion */ 656 657 /* Old */ 658 struct evcnt sc_ev_icrxptc; /* Intr. Cause Rx Pkt Timer Expire */ 659 struct evcnt sc_ev_icrxatc; /* Intr. Cause Rx Abs Timer Expire */ 660 struct evcnt sc_ev_ictxptc; /* Intr. Cause Tx Pkt Timer Expire */ 661 struct evcnt sc_ev_ictxatc; /* Intr. Cause Tx Abs Timer Expire */ 662 struct evcnt sc_ev_ictxqec; /* Intr. Cause Tx Queue Empty */ 663 struct evcnt sc_ev_ictxqmtc; /* Intr. Cause Tx Queue Min Thresh */ 664 /* 665 * sc_ev_rxdmtc is shared with both "Intr. cause" and 666 * non "Intr. cause" register. 667 */ 668 struct evcnt sc_ev_rxdmtc; /* (Intr. Cause) Rx Desc Min Thresh */ 669 struct evcnt sc_ev_icrxoc; /* Intr. Cause Receiver Overrun */ 670 /* New */ 671 struct evcnt sc_ev_rpthc; /* Rx Packets To Host */ 672 struct evcnt sc_ev_debug1; /* Debug Counter 1 */ 673 struct evcnt sc_ev_debug2; /* Debug Counter 2 */ 674 struct evcnt sc_ev_debug3; /* Debug Counter 3 */ 675 struct evcnt sc_ev_hgptc; /* Host Good Packets TX */ 676 struct evcnt sc_ev_debug4; /* Debug Counter 4 */ 677 struct evcnt sc_ev_htcbdpc; /* Host Tx Circuit Breaker Drp. Pkts */ 678 struct evcnt sc_ev_hgorc; /* Host Good Octets Rx */ 679 struct evcnt sc_ev_hgotc; /* Host Good Octets Tx */ 680 struct evcnt sc_ev_lenerrs; /* Length Error */ 681 struct evcnt sc_ev_tlpic; /* EEE Tx LPI */ 682 struct evcnt sc_ev_rlpic; /* EEE Rx LPI */ 683 struct evcnt sc_ev_b2ogprc; /* BMC2OS pkts received by host */ 684 struct evcnt sc_ev_o2bspc; /* OS2BMC pkts transmitted by host */ 685 struct evcnt sc_ev_b2ospc; /* BMC2OS pkts sent by BMC */ 686 struct evcnt sc_ev_o2bgptc; /* OS2BMC pkts received by BMC */ 687 struct evcnt sc_ev_scvpc; /* SerDes/SGMII Code Violation Pkt. */ 688 struct evcnt sc_ev_hrmpc; /* Header Redirection Missed Packet */ 689 #endif /* WM_EVENT_COUNTERS */ 690 691 struct sysctllog *sc_sysctllog; 692 693 /* This variable are used only on the 82547. */ 694 callout_t sc_txfifo_ch; /* Tx FIFO stall work-around timer */ 695 696 uint32_t sc_ctrl; /* prototype CTRL register */ 697 #if 0 698 uint32_t sc_ctrl_ext; /* prototype CTRL_EXT register */ 699 #endif 700 uint32_t sc_icr; /* prototype interrupt bits */ 701 uint32_t sc_itr_init; /* prototype intr throttling reg */ 702 uint32_t sc_tctl; /* prototype TCTL register */ 703 uint32_t sc_rctl; /* prototype RCTL register */ 704 uint32_t sc_txcw; /* prototype TXCW register */ 705 uint32_t sc_tipg; /* prototype TIPG register */ 706 uint32_t sc_fcrtl; /* prototype FCRTL register */ 707 uint32_t sc_pba; /* prototype PBA register */ 708 709 int sc_tbi_linkup; /* TBI link status */ 710 int sc_tbi_serdes_anegticks; /* autonegotiation ticks */ 711 int sc_tbi_serdes_ticks; /* tbi ticks */ 712 struct timeval sc_linkup_delay_time; /* delay LINK_STATE_UP */ 713 714 int sc_mchash_type; /* multicast filter offset */ 715 716 krndsource_t rnd_source; /* random source */ 717 718 struct if_percpuq *sc_ipq; /* softint-based input queues */ 719 720 kmutex_t *sc_core_lock; /* lock for softc operations */ 721 kmutex_t *sc_ich_phymtx; /* 722 * 82574/82583/ICH/PCH specific PHY 723 * mutex. For 82574/82583, the mutex 724 * is used for both PHY and NVM. 725 */ 726 kmutex_t *sc_ich_nvmmtx; /* ICH/PCH specific NVM mutex */ 727 728 struct wm_phyop phy; 729 struct wm_nvmop nvm; 730 731 struct workqueue *sc_reset_wq; 732 struct work sc_reset_work; 733 volatile unsigned sc_reset_pending; 734 735 bool sc_dying; 736 737 #ifdef WM_DEBUG 738 uint32_t sc_debug; 739 bool sc_trigger_reset; 740 #endif 741 }; 742 743 #define WM_RXCHAIN_RESET(rxq) \ 744 do { \ 745 (rxq)->rxq_tailp = &(rxq)->rxq_head; \ 746 *(rxq)->rxq_tailp = NULL; \ 747 (rxq)->rxq_len = 0; \ 748 } while (/*CONSTCOND*/0) 749 750 #define WM_RXCHAIN_LINK(rxq, m) \ 751 do { \ 752 *(rxq)->rxq_tailp = (rxq)->rxq_tail = (m); \ 753 (rxq)->rxq_tailp = &(m)->m_next; \ 754 } while (/*CONSTCOND*/0) 755 756 #ifdef WM_EVENT_COUNTERS 757 #ifdef __HAVE_ATOMIC64_LOADSTORE 758 #define WM_EVCNT_INCR(ev) \ 759 atomic_store_relaxed(&((ev)->ev_count), \ 760 atomic_load_relaxed(&(ev)->ev_count) + 1) 761 #define WM_EVCNT_STORE(ev, val) \ 762 atomic_store_relaxed(&((ev)->ev_count), (val)) 763 #define WM_EVCNT_ADD(ev, val) \ 764 atomic_store_relaxed(&((ev)->ev_count), \ 765 atomic_load_relaxed(&(ev)->ev_count) + (val)) 766 #else 767 #define WM_EVCNT_INCR(ev) \ 768 ((ev)->ev_count)++ 769 #define WM_EVCNT_STORE(ev, val) \ 770 ((ev)->ev_count = (val)) 771 #define WM_EVCNT_ADD(ev, val) \ 772 (ev)->ev_count += (val) 773 #endif 774 775 #define WM_Q_EVCNT_INCR(qname, evname) \ 776 WM_EVCNT_INCR(&(qname)->qname##_ev_##evname) 777 #define WM_Q_EVCNT_STORE(qname, evname, val) \ 778 WM_EVCNT_STORE(&(qname)->qname##_ev_##evname, (val)) 779 #define WM_Q_EVCNT_ADD(qname, evname, val) \ 780 WM_EVCNT_ADD(&(qname)->qname##_ev_##evname, (val)) 781 #else /* !WM_EVENT_COUNTERS */ 782 #define WM_EVCNT_INCR(ev) __nothing 783 #define WM_EVCNT_STORE(ev, val) __nothing 784 #define WM_EVCNT_ADD(ev, val) __nothing 785 786 #define WM_Q_EVCNT_INCR(qname, evname) __nothing 787 #define WM_Q_EVCNT_STORE(qname, evname, val) __nothing 788 #define WM_Q_EVCNT_ADD(qname, evname, val) __nothing 789 #endif /* !WM_EVENT_COUNTERS */ 790 791 #define CSR_READ(sc, reg) \ 792 bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg)) 793 #define CSR_WRITE(sc, reg, val) \ 794 bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val)) 795 #define CSR_WRITE_FLUSH(sc) \ 796 (void)CSR_READ((sc), WMREG_STATUS) 797 798 #define ICH8_FLASH_READ32(sc, reg) \ 799 bus_space_read_4((sc)->sc_flasht, (sc)->sc_flashh, \ 800 (reg) + sc->sc_flashreg_offset) 801 #define ICH8_FLASH_WRITE32(sc, reg, data) \ 802 bus_space_write_4((sc)->sc_flasht, (sc)->sc_flashh, \ 803 (reg) + sc->sc_flashreg_offset, (data)) 804 805 #define ICH8_FLASH_READ16(sc, reg) \ 806 bus_space_read_2((sc)->sc_flasht, (sc)->sc_flashh, \ 807 (reg) + sc->sc_flashreg_offset) 808 #define ICH8_FLASH_WRITE16(sc, reg, data) \ 809 bus_space_write_2((sc)->sc_flasht, (sc)->sc_flashh, \ 810 (reg) + sc->sc_flashreg_offset, (data)) 811 812 #define WM_CDTXADDR(txq, x) ((txq)->txq_desc_dma + WM_CDTXOFF((txq), (x))) 813 #define WM_CDRXADDR(rxq, x) ((rxq)->rxq_desc_dma + WM_CDRXOFF((rxq), (x))) 814 815 #define WM_CDTXADDR_LO(txq, x) (WM_CDTXADDR((txq), (x)) & 0xffffffffU) 816 #define WM_CDTXADDR_HI(txq, x) \ 817 (sizeof(bus_addr_t) == 8 ? \ 818 (uint64_t)WM_CDTXADDR((txq), (x)) >> 32 : 0) 819 820 #define WM_CDRXADDR_LO(rxq, x) (WM_CDRXADDR((rxq), (x)) & 0xffffffffU) 821 #define WM_CDRXADDR_HI(rxq, x) \ 822 (sizeof(bus_addr_t) == 8 ? \ 823 (uint64_t)WM_CDRXADDR((rxq), (x)) >> 32 : 0) 824 825 /* 826 * Register read/write functions. 827 * Other than CSR_{READ|WRITE}(). 828 */ 829 #if 0 830 static inline uint32_t wm_io_read(struct wm_softc *, int); 831 #endif 832 static inline void wm_io_write(struct wm_softc *, int, uint32_t); 833 static inline void wm_82575_write_8bit_ctlr_reg(struct wm_softc *, uint32_t, 834 uint32_t, uint32_t); 835 static inline void wm_set_dma_addr(volatile wiseman_addr_t *, bus_addr_t); 836 837 /* 838 * Descriptor sync/init functions. 839 */ 840 static inline void wm_cdtxsync(struct wm_txqueue *, int, int, int); 841 static inline void wm_cdrxsync(struct wm_rxqueue *, int, int); 842 static inline void wm_init_rxdesc(struct wm_rxqueue *, int); 843 844 /* 845 * Device driver interface functions and commonly used functions. 846 * match, attach, detach, init, start, stop, ioctl, watchdog and so on. 847 */ 848 static const struct wm_product *wm_lookup(const struct pci_attach_args *); 849 static int wm_match(device_t, cfdata_t, void *); 850 static void wm_attach(device_t, device_t, void *); 851 static int wm_detach(device_t, int); 852 static bool wm_suspend(device_t, const pmf_qual_t *); 853 static bool wm_resume(device_t, const pmf_qual_t *); 854 static bool wm_watchdog(struct ifnet *); 855 static void wm_watchdog_txq(struct ifnet *, struct wm_txqueue *, 856 uint16_t *); 857 static void wm_watchdog_txq_locked(struct ifnet *, struct wm_txqueue *, 858 uint16_t *); 859 static void wm_tick(void *); 860 static int wm_ifflags_cb(struct ethercom *); 861 static int wm_ioctl(struct ifnet *, u_long, void *); 862 /* MAC address related */ 863 static uint16_t wm_check_alt_mac_addr(struct wm_softc *); 864 static int wm_read_mac_addr(struct wm_softc *, uint8_t *); 865 static void wm_set_ral(struct wm_softc *, const uint8_t *, int); 866 static uint32_t wm_mchash(struct wm_softc *, const uint8_t *); 867 static int wm_rar_count(struct wm_softc *); 868 static void wm_set_filter(struct wm_softc *); 869 /* Reset and init related */ 870 static void wm_set_vlan(struct wm_softc *); 871 static void wm_set_pcie_completion_timeout(struct wm_softc *); 872 static void wm_get_auto_rd_done(struct wm_softc *); 873 static void wm_lan_init_done(struct wm_softc *); 874 static void wm_get_cfg_done(struct wm_softc *); 875 static int wm_phy_post_reset(struct wm_softc *); 876 static int wm_write_smbus_addr(struct wm_softc *); 877 static int wm_init_lcd_from_nvm(struct wm_softc *); 878 static int wm_oem_bits_config_ich8lan(struct wm_softc *, bool); 879 static void wm_initialize_hardware_bits(struct wm_softc *); 880 static uint32_t wm_rxpbs_adjust_82580(uint32_t); 881 static int wm_reset_phy(struct wm_softc *); 882 static void wm_flush_desc_rings(struct wm_softc *); 883 static void wm_reset(struct wm_softc *); 884 static int wm_add_rxbuf(struct wm_rxqueue *, int); 885 static void wm_rxdrain(struct wm_rxqueue *); 886 static void wm_init_rss(struct wm_softc *); 887 static void wm_adjust_qnum(struct wm_softc *, int); 888 static inline bool wm_is_using_msix(struct wm_softc *); 889 static inline bool wm_is_using_multiqueue(struct wm_softc *); 890 static int wm_softint_establish_queue(struct wm_softc *, int, int); 891 static int wm_setup_legacy(struct wm_softc *); 892 static int wm_setup_msix(struct wm_softc *); 893 static int wm_init(struct ifnet *); 894 static int wm_init_locked(struct ifnet *); 895 static void wm_init_sysctls(struct wm_softc *); 896 static void wm_update_stats(struct wm_softc *); 897 static void wm_clear_evcnt(struct wm_softc *); 898 static void wm_unset_stopping_flags(struct wm_softc *); 899 static void wm_set_stopping_flags(struct wm_softc *); 900 static void wm_stop(struct ifnet *, int); 901 static void wm_stop_locked(struct ifnet *, bool, bool); 902 static void wm_dump_mbuf_chain(struct wm_softc *, struct mbuf *); 903 static void wm_82547_txfifo_stall(void *); 904 static int wm_82547_txfifo_bugchk(struct wm_softc *, struct mbuf *); 905 static void wm_itrs_writereg(struct wm_softc *, struct wm_queue *); 906 /* DMA related */ 907 static int wm_alloc_tx_descs(struct wm_softc *, struct wm_txqueue *); 908 static void wm_free_tx_descs(struct wm_softc *, struct wm_txqueue *); 909 static void wm_init_tx_descs(struct wm_softc *, struct wm_txqueue *); 910 static void wm_init_tx_regs(struct wm_softc *, struct wm_queue *, 911 struct wm_txqueue *); 912 static int wm_alloc_rx_descs(struct wm_softc *, struct wm_rxqueue *); 913 static void wm_free_rx_descs(struct wm_softc *, struct wm_rxqueue *); 914 static void wm_init_rx_regs(struct wm_softc *, struct wm_queue *, 915 struct wm_rxqueue *); 916 static int wm_alloc_tx_buffer(struct wm_softc *, struct wm_txqueue *); 917 static void wm_free_tx_buffer(struct wm_softc *, struct wm_txqueue *); 918 static void wm_init_tx_buffer(struct wm_softc *, struct wm_txqueue *); 919 static int wm_alloc_rx_buffer(struct wm_softc *, struct wm_rxqueue *); 920 static void wm_free_rx_buffer(struct wm_softc *, struct wm_rxqueue *); 921 static int wm_init_rx_buffer(struct wm_softc *, struct wm_rxqueue *); 922 static void wm_init_tx_queue(struct wm_softc *, struct wm_queue *, 923 struct wm_txqueue *); 924 static int wm_init_rx_queue(struct wm_softc *, struct wm_queue *, 925 struct wm_rxqueue *); 926 static int wm_alloc_txrx_queues(struct wm_softc *); 927 static void wm_free_txrx_queues(struct wm_softc *); 928 static int wm_init_txrx_queues(struct wm_softc *); 929 /* Start */ 930 static void wm_tx_offload(struct wm_softc *, struct wm_txqueue *, 931 struct wm_txsoft *, uint32_t *, uint8_t *); 932 static inline int wm_select_txqueue(struct ifnet *, struct mbuf *); 933 static void wm_start(struct ifnet *); 934 static void wm_start_locked(struct ifnet *); 935 static int wm_transmit(struct ifnet *, struct mbuf *); 936 static void wm_transmit_locked(struct ifnet *, struct wm_txqueue *); 937 static void wm_send_common_locked(struct ifnet *, struct wm_txqueue *, 938 bool); 939 static void wm_nq_tx_offload(struct wm_softc *, struct wm_txqueue *, 940 struct wm_txsoft *, uint32_t *, uint32_t *, bool *); 941 static void wm_nq_start(struct ifnet *); 942 static void wm_nq_start_locked(struct ifnet *); 943 static int wm_nq_transmit(struct ifnet *, struct mbuf *); 944 static void wm_nq_transmit_locked(struct ifnet *, struct wm_txqueue *); 945 static void wm_nq_send_common_locked(struct ifnet *, struct wm_txqueue *, 946 bool); 947 static void wm_deferred_start_locked(struct wm_txqueue *); 948 static void wm_handle_queue(void *); 949 static void wm_handle_queue_work(struct work *, void *); 950 static void wm_handle_reset_work(struct work *, void *); 951 /* Interrupt */ 952 static bool wm_txeof(struct wm_txqueue *, u_int); 953 static bool wm_rxeof(struct wm_rxqueue *, u_int); 954 static void wm_linkintr_gmii(struct wm_softc *, uint32_t); 955 static void wm_linkintr_tbi(struct wm_softc *, uint32_t); 956 static void wm_linkintr_serdes(struct wm_softc *, uint32_t); 957 static void wm_linkintr(struct wm_softc *, uint32_t); 958 static int wm_intr_legacy(void *); 959 static inline void wm_txrxintr_disable(struct wm_queue *); 960 static inline void wm_txrxintr_enable(struct wm_queue *); 961 static void wm_itrs_calculate(struct wm_softc *, struct wm_queue *); 962 static int wm_txrxintr_msix(void *); 963 static int wm_linkintr_msix(void *); 964 965 /* 966 * Media related. 967 * GMII, SGMII, TBI, SERDES and SFP. 968 */ 969 /* Common */ 970 static void wm_tbi_serdes_set_linkled(struct wm_softc *); 971 /* GMII related */ 972 static void wm_gmii_reset(struct wm_softc *); 973 static void wm_gmii_setup_phytype(struct wm_softc *, uint32_t, uint16_t); 974 static int wm_get_phy_id_82575(struct wm_softc *); 975 static void wm_gmii_mediainit(struct wm_softc *, pci_product_id_t); 976 static int wm_gmii_mediachange(struct ifnet *); 977 static void wm_gmii_mediastatus(struct ifnet *, struct ifmediareq *); 978 static void wm_i82543_mii_sendbits(struct wm_softc *, uint32_t, int); 979 static uint16_t wm_i82543_mii_recvbits(struct wm_softc *); 980 static int wm_gmii_i82543_readreg(device_t, int, int, uint16_t *); 981 static int wm_gmii_i82543_writereg(device_t, int, int, uint16_t); 982 static int wm_gmii_mdic_readreg(device_t, int, int, uint16_t *); 983 static int wm_gmii_mdic_writereg(device_t, int, int, uint16_t); 984 static int wm_gmii_i82544_readreg(device_t, int, int, uint16_t *); 985 static int wm_gmii_i82544_readreg_locked(device_t, int, int, uint16_t *); 986 static int wm_gmii_i82544_writereg(device_t, int, int, uint16_t); 987 static int wm_gmii_i82544_writereg_locked(device_t, int, int, uint16_t); 988 static int wm_gmii_i80003_readreg(device_t, int, int, uint16_t *); 989 static int wm_gmii_i80003_writereg(device_t, int, int, uint16_t); 990 static int wm_gmii_bm_readreg(device_t, int, int, uint16_t *); 991 static int wm_gmii_bm_writereg(device_t, int, int, uint16_t); 992 static int wm_enable_phy_wakeup_reg_access_bm(device_t, uint16_t *); 993 static int wm_disable_phy_wakeup_reg_access_bm(device_t, uint16_t *); 994 static int wm_access_phy_wakeup_reg_bm(device_t, int, int16_t *, int, 995 bool); 996 static int wm_gmii_hv_readreg(device_t, int, int, uint16_t *); 997 static int wm_gmii_hv_readreg_locked(device_t, int, int, uint16_t *); 998 static int wm_gmii_hv_writereg(device_t, int, int, uint16_t); 999 static int wm_gmii_hv_writereg_locked(device_t, int, int, uint16_t); 1000 static int wm_gmii_82580_readreg(device_t, int, int, uint16_t *); 1001 static int wm_gmii_82580_writereg(device_t, int, int, uint16_t); 1002 static int wm_gmii_gs40g_readreg(device_t, int, int, uint16_t *); 1003 static int wm_gmii_gs40g_writereg(device_t, int, int, uint16_t); 1004 static void wm_gmii_statchg(struct ifnet *); 1005 /* 1006 * kumeran related (80003, ICH* and PCH*). 1007 * These functions are not for accessing MII registers but for accessing 1008 * kumeran specific registers. 1009 */ 1010 static int wm_kmrn_readreg(struct wm_softc *, int, uint16_t *); 1011 static int wm_kmrn_readreg_locked(struct wm_softc *, int, uint16_t *); 1012 static int wm_kmrn_writereg(struct wm_softc *, int, uint16_t); 1013 static int wm_kmrn_writereg_locked(struct wm_softc *, int, uint16_t); 1014 /* EMI register related */ 1015 static int wm_access_emi_reg_locked(device_t, int, uint16_t *, bool); 1016 static int wm_read_emi_reg_locked(device_t, int, uint16_t *); 1017 static int wm_write_emi_reg_locked(device_t, int, uint16_t); 1018 /* SGMII */ 1019 static bool wm_sgmii_uses_mdio(struct wm_softc *); 1020 static void wm_sgmii_sfp_preconfig(struct wm_softc *); 1021 static int wm_sgmii_readreg(device_t, int, int, uint16_t *); 1022 static int wm_sgmii_readreg_locked(device_t, int, int, uint16_t *); 1023 static int wm_sgmii_writereg(device_t, int, int, uint16_t); 1024 static int wm_sgmii_writereg_locked(device_t, int, int, uint16_t); 1025 /* TBI related */ 1026 static bool wm_tbi_havesignal(struct wm_softc *, uint32_t); 1027 static void wm_tbi_mediainit(struct wm_softc *); 1028 static int wm_tbi_mediachange(struct ifnet *); 1029 static void wm_tbi_mediastatus(struct ifnet *, struct ifmediareq *); 1030 static int wm_check_for_link(struct wm_softc *); 1031 static void wm_tbi_tick(struct wm_softc *); 1032 /* SERDES related */ 1033 static void wm_serdes_power_up_link_82575(struct wm_softc *); 1034 static int wm_serdes_mediachange(struct ifnet *); 1035 static void wm_serdes_mediastatus(struct ifnet *, struct ifmediareq *); 1036 static void wm_serdes_tick(struct wm_softc *); 1037 /* SFP related */ 1038 static int wm_sfp_read_data_byte(struct wm_softc *, uint16_t, uint8_t *); 1039 static uint32_t wm_sfp_get_media_type(struct wm_softc *); 1040 1041 /* 1042 * NVM related. 1043 * Microwire, SPI (w/wo EERD) and Flash. 1044 */ 1045 /* Misc functions */ 1046 static void wm_eeprom_sendbits(struct wm_softc *, uint32_t, int); 1047 static void wm_eeprom_recvbits(struct wm_softc *, uint32_t *, int); 1048 static int wm_nvm_set_addrbits_size_eecd(struct wm_softc *); 1049 /* Microwire */ 1050 static int wm_nvm_read_uwire(struct wm_softc *, int, int, uint16_t *); 1051 /* SPI */ 1052 static int wm_nvm_ready_spi(struct wm_softc *); 1053 static int wm_nvm_read_spi(struct wm_softc *, int, int, uint16_t *); 1054 /* Using with EERD */ 1055 static int wm_poll_eerd_eewr_done(struct wm_softc *, int); 1056 static int wm_nvm_read_eerd(struct wm_softc *, int, int, uint16_t *); 1057 /* Flash */ 1058 static int wm_nvm_valid_bank_detect_ich8lan(struct wm_softc *, 1059 unsigned int *); 1060 static int32_t wm_ich8_cycle_init(struct wm_softc *); 1061 static int32_t wm_ich8_flash_cycle(struct wm_softc *, uint32_t); 1062 static int32_t wm_read_ich8_data(struct wm_softc *, uint32_t, uint32_t, 1063 uint32_t *); 1064 static int32_t wm_read_ich8_byte(struct wm_softc *, uint32_t, uint8_t *); 1065 static int32_t wm_read_ich8_word(struct wm_softc *, uint32_t, uint16_t *); 1066 static int32_t wm_read_ich8_dword(struct wm_softc *, uint32_t, uint32_t *); 1067 static int wm_nvm_read_ich8(struct wm_softc *, int, int, uint16_t *); 1068 static int wm_nvm_read_spt(struct wm_softc *, int, int, uint16_t *); 1069 /* iNVM */ 1070 static int wm_nvm_read_word_invm(struct wm_softc *, uint16_t, uint16_t *); 1071 static int wm_nvm_read_invm(struct wm_softc *, int, int, uint16_t *); 1072 /* Lock, detecting NVM type, validate checksum and read */ 1073 static int wm_nvm_is_onboard_eeprom(struct wm_softc *); 1074 static int wm_nvm_flash_presence_i210(struct wm_softc *); 1075 static int wm_nvm_validate_checksum(struct wm_softc *); 1076 static void wm_nvm_version_invm(struct wm_softc *); 1077 static void wm_nvm_version(struct wm_softc *); 1078 static int wm_nvm_read(struct wm_softc *, int, int, uint16_t *); 1079 1080 /* 1081 * Hardware semaphores. 1082 * Very complexed... 1083 */ 1084 static int wm_get_null(struct wm_softc *); 1085 static void wm_put_null(struct wm_softc *); 1086 static int wm_get_eecd(struct wm_softc *); 1087 static void wm_put_eecd(struct wm_softc *); 1088 static int wm_get_swsm_semaphore(struct wm_softc *); /* 8257[123] */ 1089 static void wm_put_swsm_semaphore(struct wm_softc *); 1090 static int wm_get_swfw_semaphore(struct wm_softc *, uint16_t); 1091 static void wm_put_swfw_semaphore(struct wm_softc *, uint16_t); 1092 static int wm_get_nvm_80003(struct wm_softc *); 1093 static void wm_put_nvm_80003(struct wm_softc *); 1094 static int wm_get_nvm_82571(struct wm_softc *); 1095 static void wm_put_nvm_82571(struct wm_softc *); 1096 static int wm_get_phy_82575(struct wm_softc *); 1097 static void wm_put_phy_82575(struct wm_softc *); 1098 static int wm_get_swfwhw_semaphore(struct wm_softc *); /* For 574/583 */ 1099 static void wm_put_swfwhw_semaphore(struct wm_softc *); 1100 static int wm_get_swflag_ich8lan(struct wm_softc *); /* For PHY */ 1101 static void wm_put_swflag_ich8lan(struct wm_softc *); 1102 static int wm_get_nvm_ich8lan(struct wm_softc *); 1103 static void wm_put_nvm_ich8lan(struct wm_softc *); 1104 static int wm_get_hw_semaphore_82573(struct wm_softc *); 1105 static void wm_put_hw_semaphore_82573(struct wm_softc *); 1106 1107 /* 1108 * Management mode and power management related subroutines. 1109 * BMC, AMT, suspend/resume and EEE. 1110 */ 1111 #if 0 1112 static int wm_check_mng_mode(struct wm_softc *); 1113 static int wm_check_mng_mode_ich8lan(struct wm_softc *); 1114 static int wm_check_mng_mode_82574(struct wm_softc *); 1115 static int wm_check_mng_mode_generic(struct wm_softc *); 1116 #endif 1117 static int wm_enable_mng_pass_thru(struct wm_softc *); 1118 static bool wm_phy_resetisblocked(struct wm_softc *); 1119 static void wm_get_hw_control(struct wm_softc *); 1120 static void wm_release_hw_control(struct wm_softc *); 1121 static void wm_gate_hw_phy_config_ich8lan(struct wm_softc *, bool); 1122 static int wm_init_phy_workarounds_pchlan(struct wm_softc *); 1123 static void wm_init_manageability(struct wm_softc *); 1124 static void wm_release_manageability(struct wm_softc *); 1125 static void wm_get_wakeup(struct wm_softc *); 1126 static int wm_ulp_disable(struct wm_softc *); 1127 static int wm_enable_phy_wakeup(struct wm_softc *); 1128 static void wm_igp3_phy_powerdown_workaround_ich8lan(struct wm_softc *); 1129 static void wm_suspend_workarounds_ich8lan(struct wm_softc *); 1130 static int wm_resume_workarounds_pchlan(struct wm_softc *); 1131 static void wm_enable_wakeup(struct wm_softc *); 1132 static void wm_disable_aspm(struct wm_softc *); 1133 /* LPLU (Low Power Link Up) */ 1134 static void wm_lplu_d0_disable(struct wm_softc *); 1135 /* EEE */ 1136 static int wm_set_eee_i350(struct wm_softc *); 1137 static int wm_set_eee_pchlan(struct wm_softc *); 1138 static int wm_set_eee(struct wm_softc *); 1139 1140 /* 1141 * Workarounds (mainly PHY related). 1142 * Basically, PHY's workarounds are in the PHY drivers. 1143 */ 1144 static int wm_kmrn_lock_loss_workaround_ich8lan(struct wm_softc *); 1145 static void wm_gig_downshift_workaround_ich8lan(struct wm_softc *); 1146 static int wm_hv_phy_workarounds_ich8lan(struct wm_softc *); 1147 static void wm_copy_rx_addrs_to_phy_ich8lan(struct wm_softc *); 1148 static void wm_copy_rx_addrs_to_phy_ich8lan_locked(struct wm_softc *); 1149 static int wm_lv_jumbo_workaround_ich8lan(struct wm_softc *, bool); 1150 static int wm_lv_phy_workarounds_ich8lan(struct wm_softc *); 1151 static int wm_k1_workaround_lpt_lp(struct wm_softc *, bool); 1152 static int wm_k1_gig_workaround_hv(struct wm_softc *, int); 1153 static int wm_k1_workaround_lv(struct wm_softc *); 1154 static int wm_link_stall_workaround_hv(struct wm_softc *); 1155 static int wm_set_mdio_slow_mode_hv(struct wm_softc *); 1156 static int wm_set_mdio_slow_mode_hv_locked(struct wm_softc *); 1157 static void wm_configure_k1_ich8lan(struct wm_softc *, int); 1158 static void wm_reset_init_script_82575(struct wm_softc *); 1159 static void wm_reset_mdicnfg_82580(struct wm_softc *); 1160 static bool wm_phy_is_accessible_pchlan(struct wm_softc *); 1161 static void wm_toggle_lanphypc_pch_lpt(struct wm_softc *); 1162 static int wm_platform_pm_pch_lpt(struct wm_softc *, bool); 1163 static int wm_pll_workaround_i210(struct wm_softc *); 1164 static void wm_legacy_irq_quirk_spt(struct wm_softc *); 1165 static bool wm_phy_need_linkdown_discard(struct wm_softc *); 1166 static void wm_set_linkdown_discard(struct wm_softc *); 1167 static void wm_clear_linkdown_discard(struct wm_softc *); 1168 1169 static int wm_sysctl_tdh_handler(SYSCTLFN_PROTO); 1170 static int wm_sysctl_tdt_handler(SYSCTLFN_PROTO); 1171 #ifdef WM_DEBUG 1172 static int wm_sysctl_debug(SYSCTLFN_PROTO); 1173 #endif 1174 1175 CFATTACH_DECL3_NEW(wm, sizeof(struct wm_softc), 1176 wm_match, wm_attach, wm_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN); 1177 1178 /* 1179 * Devices supported by this driver. 1180 */ 1181 static const struct wm_product { 1182 pci_vendor_id_t wmp_vendor; 1183 pci_product_id_t wmp_product; 1184 const char *wmp_name; 1185 wm_chip_type wmp_type; 1186 uint32_t wmp_flags; 1187 #define WMP_F_UNKNOWN WM_MEDIATYPE_UNKNOWN 1188 #define WMP_F_FIBER WM_MEDIATYPE_FIBER 1189 #define WMP_F_COPPER WM_MEDIATYPE_COPPER 1190 #define WMP_F_SERDES WM_MEDIATYPE_SERDES 1191 #define WMP_MEDIATYPE(x) ((x) & 0x03) 1192 } wm_products[] = { 1193 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82542, 1194 "Intel i82542 1000BASE-X Ethernet", 1195 WM_T_82542_2_1, WMP_F_FIBER }, 1196 1197 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_FIBER, 1198 "Intel i82543GC 1000BASE-X Ethernet", 1199 WM_T_82543, WMP_F_FIBER }, 1200 1201 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_COPPER, 1202 "Intel i82543GC 1000BASE-T Ethernet", 1203 WM_T_82543, WMP_F_COPPER }, 1204 1205 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_COPPER, 1206 "Intel i82544EI 1000BASE-T Ethernet", 1207 WM_T_82544, WMP_F_COPPER }, 1208 1209 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_FIBER, 1210 "Intel i82544EI 1000BASE-X Ethernet", 1211 WM_T_82544, WMP_F_FIBER }, 1212 1213 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_COPPER, 1214 "Intel i82544GC 1000BASE-T Ethernet", 1215 WM_T_82544, WMP_F_COPPER }, 1216 1217 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_LOM, 1218 "Intel i82544GC (LOM) 1000BASE-T Ethernet", 1219 WM_T_82544, WMP_F_COPPER }, 1220 1221 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM, 1222 "Intel i82540EM 1000BASE-T Ethernet", 1223 WM_T_82540, WMP_F_COPPER }, 1224 1225 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM_LOM, 1226 "Intel i82540EM (LOM) 1000BASE-T Ethernet", 1227 WM_T_82540, WMP_F_COPPER }, 1228 1229 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LOM, 1230 "Intel i82540EP 1000BASE-T Ethernet", 1231 WM_T_82540, WMP_F_COPPER }, 1232 1233 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP, 1234 "Intel i82540EP 1000BASE-T Ethernet", 1235 WM_T_82540, WMP_F_COPPER }, 1236 1237 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LP, 1238 "Intel i82540EP 1000BASE-T Ethernet", 1239 WM_T_82540, WMP_F_COPPER }, 1240 1241 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_COPPER, 1242 "Intel i82545EM 1000BASE-T Ethernet", 1243 WM_T_82545, WMP_F_COPPER }, 1244 1245 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_COPPER, 1246 "Intel i82545GM 1000BASE-T Ethernet", 1247 WM_T_82545_3, WMP_F_COPPER }, 1248 1249 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_FIBER, 1250 "Intel i82545GM 1000BASE-X Ethernet", 1251 WM_T_82545_3, WMP_F_FIBER }, 1252 1253 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_SERDES, 1254 "Intel i82545GM Gigabit Ethernet (SERDES)", 1255 WM_T_82545_3, WMP_F_SERDES }, 1256 1257 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_COPPER, 1258 "Intel i82546EB 1000BASE-T Ethernet", 1259 WM_T_82546, WMP_F_COPPER }, 1260 1261 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_QUAD, 1262 "Intel i82546EB 1000BASE-T Ethernet", 1263 WM_T_82546, WMP_F_COPPER }, 1264 1265 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_FIBER, 1266 "Intel i82545EM 1000BASE-X Ethernet", 1267 WM_T_82545, WMP_F_FIBER }, 1268 1269 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_FIBER, 1270 "Intel i82546EB 1000BASE-X Ethernet", 1271 WM_T_82546, WMP_F_FIBER }, 1272 1273 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_COPPER, 1274 "Intel i82546GB 1000BASE-T Ethernet", 1275 WM_T_82546_3, WMP_F_COPPER }, 1276 1277 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_FIBER, 1278 "Intel i82546GB 1000BASE-X Ethernet", 1279 WM_T_82546_3, WMP_F_FIBER }, 1280 1281 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_SERDES, 1282 "Intel i82546GB Gigabit Ethernet (SERDES)", 1283 WM_T_82546_3, WMP_F_SERDES }, 1284 1285 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER, 1286 "i82546GB quad-port Gigabit Ethernet", 1287 WM_T_82546_3, WMP_F_COPPER }, 1288 1289 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER_KSP3, 1290 "i82546GB quad-port Gigabit Ethernet (KSP3)", 1291 WM_T_82546_3, WMP_F_COPPER }, 1292 1293 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_PCIE, 1294 "Intel PRO/1000MT (82546GB)", 1295 WM_T_82546_3, WMP_F_COPPER }, 1296 1297 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI, 1298 "Intel i82541EI 1000BASE-T Ethernet", 1299 WM_T_82541, WMP_F_COPPER }, 1300 1301 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER_LOM, 1302 "Intel i82541ER (LOM) 1000BASE-T Ethernet", 1303 WM_T_82541, WMP_F_COPPER }, 1304 1305 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI_MOBILE, 1306 "Intel i82541EI Mobile 1000BASE-T Ethernet", 1307 WM_T_82541, WMP_F_COPPER }, 1308 1309 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER, 1310 "Intel i82541ER 1000BASE-T Ethernet", 1311 WM_T_82541_2, WMP_F_COPPER }, 1312 1313 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI, 1314 "Intel i82541GI 1000BASE-T Ethernet", 1315 WM_T_82541_2, WMP_F_COPPER }, 1316 1317 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI_MOBILE, 1318 "Intel i82541GI Mobile 1000BASE-T Ethernet", 1319 WM_T_82541_2, WMP_F_COPPER }, 1320 1321 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541PI, 1322 "Intel i82541PI 1000BASE-T Ethernet", 1323 WM_T_82541_2, WMP_F_COPPER }, 1324 1325 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI, 1326 "Intel i82547EI 1000BASE-T Ethernet", 1327 WM_T_82547, WMP_F_COPPER }, 1328 1329 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI_MOBILE, 1330 "Intel i82547EI Mobile 1000BASE-T Ethernet", 1331 WM_T_82547, WMP_F_COPPER }, 1332 1333 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547GI, 1334 "Intel i82547GI 1000BASE-T Ethernet", 1335 WM_T_82547_2, WMP_F_COPPER }, 1336 1337 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_COPPER, 1338 "Intel PRO/1000 PT (82571EB)", 1339 WM_T_82571, WMP_F_COPPER }, 1340 1341 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_FIBER, 1342 "Intel PRO/1000 PF (82571EB)", 1343 WM_T_82571, WMP_F_FIBER }, 1344 1345 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_SERDES, 1346 "Intel PRO/1000 PB (82571EB)", 1347 WM_T_82571, WMP_F_SERDES }, 1348 1349 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_COPPER, 1350 "Intel PRO/1000 QT (82571EB)", 1351 WM_T_82571, WMP_F_COPPER }, 1352 1353 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571GB_QUAD_COPPER, 1354 "Intel PRO/1000 PT Quad Port Server Adapter", 1355 WM_T_82571, WMP_F_COPPER }, 1356 1357 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571PT_QUAD_COPPER, 1358 "Intel Gigabit PT Quad Port Server ExpressModule", 1359 WM_T_82571, WMP_F_COPPER }, 1360 1361 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_DUAL_SERDES, 1362 "Intel 82571EB Dual Gigabit Ethernet (SERDES)", 1363 WM_T_82571, WMP_F_SERDES }, 1364 1365 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_SERDES, 1366 "Intel 82571EB Quad Gigabit Ethernet (SERDES)", 1367 WM_T_82571, WMP_F_SERDES }, 1368 1369 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_FIBER, 1370 "Intel 82571EB Quad 1000baseX Ethernet", 1371 WM_T_82571, WMP_F_FIBER }, 1372 1373 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_COPPER, 1374 "Intel i82572EI 1000baseT Ethernet", 1375 WM_T_82572, WMP_F_COPPER }, 1376 1377 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_FIBER, 1378 "Intel i82572EI 1000baseX Ethernet", 1379 WM_T_82572, WMP_F_FIBER }, 1380 1381 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_SERDES, 1382 "Intel i82572EI Gigabit Ethernet (SERDES)", 1383 WM_T_82572, WMP_F_SERDES }, 1384 1385 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI, 1386 "Intel i82572EI 1000baseT Ethernet", 1387 WM_T_82572, WMP_F_COPPER }, 1388 1389 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E, 1390 "Intel i82573E", 1391 WM_T_82573, WMP_F_COPPER }, 1392 1393 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E_IAMT, 1394 "Intel i82573E IAMT", 1395 WM_T_82573, WMP_F_COPPER }, 1396 1397 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573L, 1398 "Intel i82573L Gigabit Ethernet", 1399 WM_T_82573, WMP_F_COPPER }, 1400 1401 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82574L, 1402 "Intel i82574L", 1403 WM_T_82574, WMP_F_COPPER }, 1404 1405 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82574LA, 1406 "Intel i82574L", 1407 WM_T_82574, WMP_F_COPPER }, 1408 1409 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82583V, 1410 "Intel i82583V", 1411 WM_T_82583, WMP_F_COPPER }, 1412 1413 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_CPR_DPT, 1414 "i80003 dual 1000baseT Ethernet", 1415 WM_T_80003, WMP_F_COPPER }, 1416 1417 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_FIB_DPT, 1418 "i80003 dual 1000baseX Ethernet", 1419 WM_T_80003, WMP_F_COPPER }, 1420 1421 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_SDS_DPT, 1422 "Intel i80003ES2 dual Gigabit Ethernet (SERDES)", 1423 WM_T_80003, WMP_F_SERDES }, 1424 1425 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_CPR_SPT, 1426 "Intel i80003 1000baseT Ethernet", 1427 WM_T_80003, WMP_F_COPPER }, 1428 1429 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80K3LAN_SDS_SPT, 1430 "Intel i80003 Gigabit Ethernet (SERDES)", 1431 WM_T_80003, WMP_F_SERDES }, 1432 1433 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_M_AMT, 1434 "Intel i82801H (M_AMT) LAN Controller", 1435 WM_T_ICH8, WMP_F_COPPER }, 1436 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_AMT, 1437 "Intel i82801H (AMT) LAN Controller", 1438 WM_T_ICH8, WMP_F_COPPER }, 1439 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_LAN, 1440 "Intel i82801H LAN Controller", 1441 WM_T_ICH8, WMP_F_COPPER }, 1442 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_LAN, 1443 "Intel i82801H (IFE) 10/100 LAN Controller", 1444 WM_T_ICH8, WMP_F_COPPER }, 1445 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_M_LAN, 1446 "Intel i82801H (M) LAN Controller", 1447 WM_T_ICH8, WMP_F_COPPER }, 1448 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_GT, 1449 "Intel i82801H IFE (GT) 10/100 LAN Controller", 1450 WM_T_ICH8, WMP_F_COPPER }, 1451 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_IFE_G, 1452 "Intel i82801H IFE (G) 10/100 LAN Controller", 1453 WM_T_ICH8, WMP_F_COPPER }, 1454 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801H_82567V_3, 1455 "82567V-3 LAN Controller", 1456 WM_T_ICH8, WMP_F_COPPER }, 1457 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_AMT, 1458 "82801I (AMT) LAN Controller", 1459 WM_T_ICH9, WMP_F_COPPER }, 1460 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE, 1461 "82801I 10/100 LAN Controller", 1462 WM_T_ICH9, WMP_F_COPPER }, 1463 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE_G, 1464 "82801I (G) 10/100 LAN Controller", 1465 WM_T_ICH9, WMP_F_COPPER }, 1466 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IFE_GT, 1467 "82801I (GT) 10/100 LAN Controller", 1468 WM_T_ICH9, WMP_F_COPPER }, 1469 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_C, 1470 "82801I (C) LAN Controller", 1471 WM_T_ICH9, WMP_F_COPPER }, 1472 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_M, 1473 "82801I mobile LAN Controller", 1474 WM_T_ICH9, WMP_F_COPPER }, 1475 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_M_V, 1476 "82801I mobile (V) LAN Controller", 1477 WM_T_ICH9, WMP_F_COPPER }, 1478 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_IGP_M_AMT, 1479 "82801I mobile (AMT) LAN Controller", 1480 WM_T_ICH9, WMP_F_COPPER }, 1481 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_BM, 1482 "82567LM-4 LAN Controller", 1483 WM_T_ICH9, WMP_F_COPPER }, 1484 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_LM, 1485 "82567LM-2 LAN Controller", 1486 WM_T_ICH10, WMP_F_COPPER }, 1487 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_LF, 1488 "82567LF-2 LAN Controller", 1489 WM_T_ICH10, WMP_F_COPPER }, 1490 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_LM, 1491 "82567LM-3 LAN Controller", 1492 WM_T_ICH10, WMP_F_COPPER }, 1493 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_LF, 1494 "82567LF-3 LAN Controller", 1495 WM_T_ICH10, WMP_F_COPPER }, 1496 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_R_BM_V, 1497 "82567V-2 LAN Controller", 1498 WM_T_ICH10, WMP_F_COPPER }, 1499 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801J_D_BM_V, 1500 "82567V-3? LAN Controller", 1501 WM_T_ICH10, WMP_F_COPPER }, 1502 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_HANKSVILLE, 1503 "HANKSVILLE LAN Controller", 1504 WM_T_ICH10, WMP_F_COPPER }, 1505 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_M_LM, 1506 "PCH LAN (82577LM) Controller", 1507 WM_T_PCH, WMP_F_COPPER }, 1508 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_M_LC, 1509 "PCH LAN (82577LC) Controller", 1510 WM_T_PCH, WMP_F_COPPER }, 1511 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_D_DM, 1512 "PCH LAN (82578DM) Controller", 1513 WM_T_PCH, WMP_F_COPPER }, 1514 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH_D_DC, 1515 "PCH LAN (82578DC) Controller", 1516 WM_T_PCH, WMP_F_COPPER }, 1517 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH2_LV_LM, 1518 "PCH2 LAN (82579LM) Controller", 1519 WM_T_PCH2, WMP_F_COPPER }, 1520 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PCH2_LV_V, 1521 "PCH2 LAN (82579V) Controller", 1522 WM_T_PCH2, WMP_F_COPPER }, 1523 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575EB_COPPER, 1524 "82575EB dual-1000baseT Ethernet", 1525 WM_T_82575, WMP_F_COPPER }, 1526 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575EB_FIBER_SERDES, 1527 "82575EB dual-1000baseX Ethernet (SERDES)", 1528 WM_T_82575, WMP_F_SERDES }, 1529 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575GB_QUAD_COPPER, 1530 "82575GB quad-1000baseT Ethernet", 1531 WM_T_82575, WMP_F_COPPER }, 1532 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82575GB_QUAD_COPPER_PM, 1533 "82575GB quad-1000baseT Ethernet (PM)", 1534 WM_T_82575, WMP_F_COPPER }, 1535 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_COPPER, 1536 "82576 1000BaseT Ethernet", 1537 WM_T_82576, WMP_F_COPPER }, 1538 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_FIBER, 1539 "82576 1000BaseX Ethernet", 1540 WM_T_82576, WMP_F_FIBER }, 1541 1542 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_SERDES, 1543 "82576 gigabit Ethernet (SERDES)", 1544 WM_T_82576, WMP_F_SERDES }, 1545 1546 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_QUAD_COPPER, 1547 "82576 quad-1000BaseT Ethernet", 1548 WM_T_82576, WMP_F_COPPER }, 1549 1550 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_QUAD_COPPER_ET2, 1551 "82576 Gigabit ET2 Quad Port Server Adapter", 1552 WM_T_82576, WMP_F_COPPER }, 1553 1554 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_NS, 1555 "82576 gigabit Ethernet", 1556 WM_T_82576, WMP_F_COPPER }, 1557 1558 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_NS_SERDES, 1559 "82576 gigabit Ethernet (SERDES)", 1560 WM_T_82576, WMP_F_SERDES }, 1561 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82576_SERDES_QUAD, 1562 "82576 quad-gigabit Ethernet (SERDES)", 1563 WM_T_82576, WMP_F_SERDES }, 1564 1565 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_COPPER, 1566 "82580 1000BaseT Ethernet", 1567 WM_T_82580, WMP_F_COPPER }, 1568 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_FIBER, 1569 "82580 1000BaseX Ethernet", 1570 WM_T_82580, WMP_F_FIBER }, 1571 1572 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_SERDES, 1573 "82580 1000BaseT Ethernet (SERDES)", 1574 WM_T_82580, WMP_F_SERDES }, 1575 1576 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_SGMII, 1577 "82580 gigabit Ethernet (SGMII)", 1578 WM_T_82580, WMP_F_COPPER }, 1579 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_COPPER_DUAL, 1580 "82580 dual-1000BaseT Ethernet", 1581 WM_T_82580, WMP_F_COPPER }, 1582 1583 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82580_QUAD_FIBER, 1584 "82580 quad-1000BaseX Ethernet", 1585 WM_T_82580, WMP_F_FIBER }, 1586 1587 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_DH89XXCC_SGMII, 1588 "DH89XXCC Gigabit Ethernet (SGMII)", 1589 WM_T_82580, WMP_F_COPPER }, 1590 1591 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_DH89XXCC_SERDES, 1592 "DH89XXCC Gigabit Ethernet (SERDES)", 1593 WM_T_82580, WMP_F_SERDES }, 1594 1595 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_DH89XXCC_BPLANE, 1596 "DH89XXCC 1000BASE-KX Ethernet", 1597 WM_T_82580, WMP_F_SERDES }, 1598 1599 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_DH89XXCC_SFP, 1600 "DH89XXCC Gigabit Ethernet (SFP)", 1601 WM_T_82580, WMP_F_SERDES }, 1602 1603 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I350_COPPER, 1604 "I350 Gigabit Network Connection", 1605 WM_T_I350, WMP_F_COPPER }, 1606 1607 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I350_FIBER, 1608 "I350 Gigabit Fiber Network Connection", 1609 WM_T_I350, WMP_F_FIBER }, 1610 1611 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I350_SERDES, 1612 "I350 Gigabit Backplane Connection", 1613 WM_T_I350, WMP_F_SERDES }, 1614 1615 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I350_DA4, 1616 "I350 Quad Port Gigabit Ethernet", 1617 WM_T_I350, WMP_F_SERDES }, 1618 1619 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I350_SGMII, 1620 "I350 Gigabit Connection", 1621 WM_T_I350, WMP_F_COPPER }, 1622 1623 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_C2000_1000KX, 1624 "I354 Gigabit Ethernet (KX)", 1625 WM_T_I354, WMP_F_SERDES }, 1626 1627 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_C2000_SGMII, 1628 "I354 Gigabit Ethernet (SGMII)", 1629 WM_T_I354, WMP_F_COPPER }, 1630 1631 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_C2000_25GBE, 1632 "I354 Gigabit Ethernet (2.5G)", 1633 WM_T_I354, WMP_F_COPPER }, 1634 1635 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_T1, 1636 "I210-T1 Ethernet Server Adapter", 1637 WM_T_I210, WMP_F_COPPER }, 1638 1639 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_COPPER_OEM1, 1640 "I210 Ethernet (Copper OEM)", 1641 WM_T_I210, WMP_F_COPPER }, 1642 1643 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_COPPER_IT, 1644 "I210 Ethernet (Copper IT)", 1645 WM_T_I210, WMP_F_COPPER }, 1646 1647 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_COPPER_WOF, 1648 "I210 Ethernet (Copper, FLASH less)", 1649 WM_T_I210, WMP_F_COPPER }, 1650 1651 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_FIBER, 1652 "I210 Gigabit Ethernet (Fiber)", 1653 WM_T_I210, WMP_F_FIBER }, 1654 1655 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_SERDES, 1656 "I210 Gigabit Ethernet (SERDES)", 1657 WM_T_I210, WMP_F_SERDES }, 1658 1659 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_SERDES_WOF, 1660 "I210 Gigabit Ethernet (SERDES, FLASH less)", 1661 WM_T_I210, WMP_F_SERDES }, 1662 1663 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_SGMII, 1664 "I210 Gigabit Ethernet (SGMII)", 1665 WM_T_I210, WMP_F_COPPER }, 1666 1667 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I210_SGMII_WOF, 1668 "I210 Gigabit Ethernet (SGMII, FLASH less)", 1669 WM_T_I210, WMP_F_COPPER }, 1670 1671 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I211_COPPER, 1672 "I211 Ethernet (COPPER)", 1673 WM_T_I211, WMP_F_COPPER }, 1674 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I217_V, 1675 "I217 V Ethernet Connection", 1676 WM_T_PCH_LPT, WMP_F_COPPER }, 1677 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I217_LM, 1678 "I217 LM Ethernet Connection", 1679 WM_T_PCH_LPT, WMP_F_COPPER }, 1680 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_V, 1681 "I218 V Ethernet Connection", 1682 WM_T_PCH_LPT, WMP_F_COPPER }, 1683 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_V2, 1684 "I218 V Ethernet Connection", 1685 WM_T_PCH_LPT, WMP_F_COPPER }, 1686 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_V3, 1687 "I218 V Ethernet Connection", 1688 WM_T_PCH_LPT, WMP_F_COPPER }, 1689 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_LM, 1690 "I218 LM Ethernet Connection", 1691 WM_T_PCH_LPT, WMP_F_COPPER }, 1692 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_LM2, 1693 "I218 LM Ethernet Connection", 1694 WM_T_PCH_LPT, WMP_F_COPPER }, 1695 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I218_LM3, 1696 "I218 LM Ethernet Connection", 1697 WM_T_PCH_LPT, WMP_F_COPPER }, 1698 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM, 1699 "I219 LM Ethernet Connection", 1700 WM_T_PCH_SPT, WMP_F_COPPER }, 1701 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM2, 1702 "I219 LM (2) Ethernet Connection", 1703 WM_T_PCH_SPT, WMP_F_COPPER }, 1704 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM3, 1705 "I219 LM (3) Ethernet Connection", 1706 WM_T_PCH_SPT, WMP_F_COPPER }, 1707 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM4, 1708 "I219 LM (4) Ethernet Connection", 1709 WM_T_PCH_SPT, WMP_F_COPPER }, 1710 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM5, 1711 "I219 LM (5) Ethernet Connection", 1712 WM_T_PCH_SPT, WMP_F_COPPER }, 1713 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM6, 1714 "I219 LM (6) Ethernet Connection", 1715 WM_T_PCH_CNP, WMP_F_COPPER }, 1716 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM7, 1717 "I219 LM (7) Ethernet Connection", 1718 WM_T_PCH_CNP, WMP_F_COPPER }, 1719 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM8, 1720 "I219 LM (8) Ethernet Connection", 1721 WM_T_PCH_CNP, WMP_F_COPPER }, 1722 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM9, 1723 "I219 LM (9) Ethernet Connection", 1724 WM_T_PCH_CNP, WMP_F_COPPER }, 1725 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM10, 1726 "I219 LM (10) Ethernet Connection", 1727 WM_T_PCH_CNP, WMP_F_COPPER }, 1728 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM11, 1729 "I219 LM (11) Ethernet Connection", 1730 WM_T_PCH_CNP, WMP_F_COPPER }, 1731 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM12, 1732 "I219 LM (12) Ethernet Connection", 1733 WM_T_PCH_SPT, WMP_F_COPPER }, 1734 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM13, 1735 "I219 LM (13) Ethernet Connection", 1736 WM_T_PCH_TGP, WMP_F_COPPER }, 1737 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM14, 1738 "I219 LM (14) Ethernet Connection", 1739 WM_T_PCH_TGP, WMP_F_COPPER }, 1740 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM15, 1741 "I219 LM (15) Ethernet Connection", 1742 WM_T_PCH_TGP, WMP_F_COPPER }, 1743 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM16, 1744 "I219 LM (16) Ethernet Connection", 1745 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP */ 1746 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM17, 1747 "I219 LM (17) Ethernet Connection", 1748 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP */ 1749 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM18, 1750 "I219 LM (18) Ethernet Connection", 1751 WM_T_PCH_TGP, WMP_F_COPPER }, /* MTP */ 1752 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM19, 1753 "I219 LM (19) Ethernet Connection", 1754 WM_T_PCH_TGP, WMP_F_COPPER }, /* MTP */ 1755 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM22, 1756 "I219 LM (22) Ethernet Connection", 1757 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP(RPL) */ 1758 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_LM23, 1759 "I219 LM (23) Ethernet Connection", 1760 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP(RPL) */ 1761 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V, 1762 "I219 V Ethernet Connection", 1763 WM_T_PCH_SPT, WMP_F_COPPER }, 1764 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V2, 1765 "I219 V (2) Ethernet Connection", 1766 WM_T_PCH_SPT, WMP_F_COPPER }, 1767 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V4, 1768 "I219 V (4) Ethernet Connection", 1769 WM_T_PCH_SPT, WMP_F_COPPER }, 1770 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V5, 1771 "I219 V (5) Ethernet Connection", 1772 WM_T_PCH_SPT, WMP_F_COPPER }, 1773 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V6, 1774 "I219 V (6) Ethernet Connection", 1775 WM_T_PCH_CNP, WMP_F_COPPER }, 1776 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V7, 1777 "I219 V (7) Ethernet Connection", 1778 WM_T_PCH_CNP, WMP_F_COPPER }, 1779 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V8, 1780 "I219 V (8) Ethernet Connection", 1781 WM_T_PCH_CNP, WMP_F_COPPER }, 1782 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V9, 1783 "I219 V (9) Ethernet Connection", 1784 WM_T_PCH_CNP, WMP_F_COPPER }, 1785 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V10, 1786 "I219 V (10) Ethernet Connection", 1787 WM_T_PCH_CNP, WMP_F_COPPER }, 1788 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V11, 1789 "I219 V (11) Ethernet Connection", 1790 WM_T_PCH_CNP, WMP_F_COPPER }, 1791 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V12, 1792 "I219 V (12) Ethernet Connection", 1793 WM_T_PCH_SPT, WMP_F_COPPER }, 1794 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V13, 1795 "I219 V (13) Ethernet Connection", 1796 WM_T_PCH_TGP, WMP_F_COPPER }, 1797 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V14, 1798 "I219 V (14) Ethernet Connection", 1799 WM_T_PCH_TGP, WMP_F_COPPER }, 1800 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V15, 1801 "I219 V (15) Ethernet Connection", 1802 WM_T_PCH_TGP, WMP_F_COPPER }, 1803 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V16, 1804 "I219 V (16) Ethernet Connection", 1805 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP */ 1806 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V17, 1807 "I219 V (17) Ethernet Connection", 1808 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP */ 1809 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V18, 1810 "I219 V (18) Ethernet Connection", 1811 WM_T_PCH_TGP, WMP_F_COPPER }, /* MTP */ 1812 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V19, 1813 "I219 V (19) Ethernet Connection", 1814 WM_T_PCH_TGP, WMP_F_COPPER }, /* MTP */ 1815 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V22, 1816 "I219 V (22) Ethernet Connection", 1817 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP(RPL) */ 1818 { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_I219_V23, 1819 "I219 V (23) Ethernet Connection", 1820 WM_T_PCH_TGP, WMP_F_COPPER }, /* ADP(RPL) */ 1821 { 0, 0, 1822 NULL, 1823 0, 0 }, 1824 }; 1825 1826 /* 1827 * Register read/write functions. 1828 * Other than CSR_{READ|WRITE}(). 1829 */ 1830 1831 #if 0 /* Not currently used */ 1832 static inline uint32_t 1833 wm_io_read(struct wm_softc *sc, int reg) 1834 { 1835 1836 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 0, reg); 1837 return (bus_space_read_4(sc->sc_iot, sc->sc_ioh, 4)); 1838 } 1839 #endif 1840 1841 static inline void 1842 wm_io_write(struct wm_softc *sc, int reg, uint32_t val) 1843 { 1844 1845 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 0, reg); 1846 bus_space_write_4(sc->sc_iot, sc->sc_ioh, 4, val); 1847 } 1848 1849 static inline void 1850 wm_82575_write_8bit_ctlr_reg(struct wm_softc *sc, uint32_t reg, uint32_t off, 1851 uint32_t data) 1852 { 1853 uint32_t regval; 1854 int i; 1855 1856 regval = (data & SCTL_CTL_DATA_MASK) | (off << SCTL_CTL_ADDR_SHIFT); 1857 1858 CSR_WRITE(sc, reg, regval); 1859 1860 for (i = 0; i < SCTL_CTL_POLL_TIMEOUT; i++) { 1861 delay(5); 1862 if (CSR_READ(sc, reg) & SCTL_CTL_READY) 1863 break; 1864 } 1865 if (i == SCTL_CTL_POLL_TIMEOUT) { 1866 aprint_error("%s: WARNING:" 1867 " i82575 reg 0x%08x setup did not indicate ready\n", 1868 device_xname(sc->sc_dev), reg); 1869 } 1870 } 1871 1872 static inline void 1873 wm_set_dma_addr(volatile wiseman_addr_t *wa, bus_addr_t v) 1874 { 1875 wa->wa_low = htole32(BUS_ADDR_LO32(v)); 1876 wa->wa_high = htole32(BUS_ADDR_HI32(v)); 1877 } 1878 1879 /* 1880 * Descriptor sync/init functions. 1881 */ 1882 static inline void 1883 wm_cdtxsync(struct wm_txqueue *txq, int start, int num, int ops) 1884 { 1885 struct wm_softc *sc = txq->txq_sc; 1886 1887 /* If it will wrap around, sync to the end of the ring. */ 1888 if ((start + num) > WM_NTXDESC(txq)) { 1889 bus_dmamap_sync(sc->sc_dmat, txq->txq_desc_dmamap, 1890 WM_CDTXOFF(txq, start), txq->txq_descsize * 1891 (WM_NTXDESC(txq) - start), ops); 1892 num -= (WM_NTXDESC(txq) - start); 1893 start = 0; 1894 } 1895 1896 /* Now sync whatever is left. */ 1897 bus_dmamap_sync(sc->sc_dmat, txq->txq_desc_dmamap, 1898 WM_CDTXOFF(txq, start), txq->txq_descsize * num, ops); 1899 } 1900 1901 static inline void 1902 wm_cdrxsync(struct wm_rxqueue *rxq, int start, int ops) 1903 { 1904 struct wm_softc *sc = rxq->rxq_sc; 1905 1906 bus_dmamap_sync(sc->sc_dmat, rxq->rxq_desc_dmamap, 1907 WM_CDRXOFF(rxq, start), rxq->rxq_descsize, ops); 1908 } 1909 1910 static inline void 1911 wm_init_rxdesc(struct wm_rxqueue *rxq, int start) 1912 { 1913 struct wm_softc *sc = rxq->rxq_sc; 1914 struct wm_rxsoft *rxs = &rxq->rxq_soft[start]; 1915 struct mbuf *m = rxs->rxs_mbuf; 1916 1917 /* 1918 * Note: We scoot the packet forward 2 bytes in the buffer 1919 * so that the payload after the Ethernet header is aligned 1920 * to a 4-byte boundary. 1921 1922 * XXX BRAINDAMAGE ALERT! 1923 * The stupid chip uses the same size for every buffer, which 1924 * is set in the Receive Control register. We are using the 2K 1925 * size option, but what we REALLY want is (2K - 2)! For this 1926 * reason, we can't "scoot" packets longer than the standard 1927 * Ethernet MTU. On strict-alignment platforms, if the total 1928 * size exceeds (2K - 2) we set align_tweak to 0 and let 1929 * the upper layer copy the headers. 1930 */ 1931 m->m_data = m->m_ext.ext_buf + sc->sc_align_tweak; 1932 1933 if (sc->sc_type == WM_T_82574) { 1934 ext_rxdesc_t *rxd = &rxq->rxq_ext_descs[start]; 1935 rxd->erx_data.erxd_addr = 1936 htole64(rxs->rxs_dmamap->dm_segs[0].ds_addr + sc->sc_align_tweak); 1937 rxd->erx_data.erxd_dd = 0; 1938 } else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 1939 nq_rxdesc_t *rxd = &rxq->rxq_nq_descs[start]; 1940 1941 rxd->nqrx_data.nrxd_paddr = 1942 htole64(rxs->rxs_dmamap->dm_segs[0].ds_addr + sc->sc_align_tweak); 1943 /* Currently, split header is not supported. */ 1944 rxd->nqrx_data.nrxd_haddr = 0; 1945 } else { 1946 wiseman_rxdesc_t *rxd = &rxq->rxq_descs[start]; 1947 1948 wm_set_dma_addr(&rxd->wrx_addr, 1949 rxs->rxs_dmamap->dm_segs[0].ds_addr + sc->sc_align_tweak); 1950 rxd->wrx_len = 0; 1951 rxd->wrx_cksum = 0; 1952 rxd->wrx_status = 0; 1953 rxd->wrx_errors = 0; 1954 rxd->wrx_special = 0; 1955 } 1956 wm_cdrxsync(rxq, start, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1957 1958 CSR_WRITE(sc, rxq->rxq_rdt_reg, start); 1959 } 1960 1961 /* 1962 * Device driver interface functions and commonly used functions. 1963 * match, attach, detach, init, start, stop, ioctl, watchdog and so on. 1964 */ 1965 1966 /* Lookup supported device table */ 1967 static const struct wm_product * 1968 wm_lookup(const struct pci_attach_args *pa) 1969 { 1970 const struct wm_product *wmp; 1971 1972 for (wmp = wm_products; wmp->wmp_name != NULL; wmp++) { 1973 if (PCI_VENDOR(pa->pa_id) == wmp->wmp_vendor && 1974 PCI_PRODUCT(pa->pa_id) == wmp->wmp_product) 1975 return wmp; 1976 } 1977 return NULL; 1978 } 1979 1980 /* The match function (ca_match) */ 1981 static int 1982 wm_match(device_t parent, cfdata_t cf, void *aux) 1983 { 1984 struct pci_attach_args *pa = aux; 1985 1986 if (wm_lookup(pa) != NULL) 1987 return 1; 1988 1989 return 0; 1990 } 1991 1992 /* The attach function (ca_attach) */ 1993 static void 1994 wm_attach(device_t parent, device_t self, void *aux) 1995 { 1996 struct wm_softc *sc = device_private(self); 1997 struct pci_attach_args *pa = aux; 1998 prop_dictionary_t dict; 1999 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 2000 pci_chipset_tag_t pc = pa->pa_pc; 2001 int counts[PCI_INTR_TYPE_SIZE]; 2002 pci_intr_type_t max_type; 2003 const char *eetype, *xname; 2004 bus_space_tag_t memt; 2005 bus_space_handle_t memh; 2006 bus_size_t memsize; 2007 int memh_valid; 2008 int i, error; 2009 const struct wm_product *wmp; 2010 prop_data_t ea; 2011 prop_number_t pn; 2012 uint8_t enaddr[ETHER_ADDR_LEN]; 2013 char buf[256]; 2014 char wqname[MAXCOMLEN]; 2015 uint16_t cfg1, cfg2, swdpin, nvmword; 2016 pcireg_t preg, memtype; 2017 uint16_t eeprom_data, apme_mask; 2018 bool force_clear_smbi; 2019 uint32_t link_mode; 2020 uint32_t reg; 2021 2022 #if defined(WM_DEBUG) && defined(WM_DEBUG_DEFAULT) 2023 sc->sc_debug = WM_DEBUG_DEFAULT; 2024 #endif 2025 sc->sc_dev = self; 2026 callout_init(&sc->sc_tick_ch, CALLOUT_MPSAFE); 2027 callout_setfunc(&sc->sc_tick_ch, wm_tick, sc); 2028 sc->sc_core_stopping = false; 2029 2030 wmp = wm_lookup(pa); 2031 #ifdef DIAGNOSTIC 2032 if (wmp == NULL) { 2033 printf("\n"); 2034 panic("wm_attach: impossible"); 2035 } 2036 #endif 2037 sc->sc_mediatype = WMP_MEDIATYPE(wmp->wmp_flags); 2038 2039 sc->sc_pc = pa->pa_pc; 2040 sc->sc_pcitag = pa->pa_tag; 2041 2042 if (pci_dma64_available(pa)) { 2043 aprint_verbose(", 64-bit DMA"); 2044 sc->sc_dmat = pa->pa_dmat64; 2045 } else { 2046 aprint_verbose(", 32-bit DMA"); 2047 sc->sc_dmat = pa->pa_dmat; 2048 } 2049 2050 sc->sc_pcidevid = PCI_PRODUCT(pa->pa_id); 2051 sc->sc_rev = PCI_REVISION(pci_conf_read(pc, pa->pa_tag,PCI_CLASS_REG)); 2052 pci_aprint_devinfo_fancy(pa, "Ethernet controller", wmp->wmp_name, 1); 2053 2054 sc->sc_type = wmp->wmp_type; 2055 2056 /* Set default function pointers */ 2057 sc->phy.acquire = sc->nvm.acquire = wm_get_null; 2058 sc->phy.release = sc->nvm.release = wm_put_null; 2059 sc->phy.reset_delay_us = (sc->sc_type >= WM_T_82571) ? 100 : 10000; 2060 2061 if (sc->sc_type < WM_T_82543) { 2062 if (sc->sc_rev < 2) { 2063 aprint_error_dev(sc->sc_dev, 2064 "i82542 must be at least rev. 2\n"); 2065 return; 2066 } 2067 if (sc->sc_rev < 3) 2068 sc->sc_type = WM_T_82542_2_0; 2069 } 2070 2071 /* 2072 * Disable MSI for Errata: 2073 * "Message Signaled Interrupt Feature May Corrupt Write Transactions" 2074 * 2075 * 82544: Errata 25 2076 * 82540: Errata 6 (easy to reproduce device timeout) 2077 * 82545: Errata 4 (easy to reproduce device timeout) 2078 * 82546: Errata 26 (easy to reproduce device timeout) 2079 * 82541: Errata 7 (easy to reproduce device timeout) 2080 * 2081 * "Byte Enables 2 and 3 are not set on MSI writes" 2082 * 2083 * 82571 & 82572: Errata 63 2084 */ 2085 if ((sc->sc_type <= WM_T_82541_2) || (sc->sc_type == WM_T_82571) 2086 || (sc->sc_type == WM_T_82572)) 2087 pa->pa_flags &= ~PCI_FLAGS_MSI_OKAY; 2088 2089 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576) 2090 || (sc->sc_type == WM_T_82580) 2091 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354) 2092 || (sc->sc_type == WM_T_I210) || (sc->sc_type == WM_T_I211)) 2093 sc->sc_flags |= WM_F_NEWQUEUE; 2094 2095 /* Set device properties (mactype) */ 2096 dict = device_properties(sc->sc_dev); 2097 prop_dictionary_set_uint32(dict, "mactype", sc->sc_type); 2098 2099 /* 2100 * Map the device. All devices support memory-mapped acccess, 2101 * and it is really required for normal operation. 2102 */ 2103 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, WM_PCI_MMBA); 2104 switch (memtype) { 2105 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT: 2106 case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_64BIT: 2107 memh_valid = (pci_mapreg_map(pa, WM_PCI_MMBA, 2108 memtype, 0, &memt, &memh, NULL, &memsize) == 0); 2109 break; 2110 default: 2111 memh_valid = 0; 2112 break; 2113 } 2114 2115 if (memh_valid) { 2116 sc->sc_st = memt; 2117 sc->sc_sh = memh; 2118 sc->sc_ss = memsize; 2119 } else { 2120 aprint_error_dev(sc->sc_dev, 2121 "unable to map device registers\n"); 2122 return; 2123 } 2124 2125 /* 2126 * In addition, i82544 and later support I/O mapped indirect 2127 * register access. It is not desirable (nor supported in 2128 * this driver) to use it for normal operation, though it is 2129 * required to work around bugs in some chip versions. 2130 */ 2131 switch (sc->sc_type) { 2132 case WM_T_82544: 2133 case WM_T_82541: 2134 case WM_T_82541_2: 2135 case WM_T_82547: 2136 case WM_T_82547_2: 2137 /* First we have to find the I/O BAR. */ 2138 for (i = PCI_MAPREG_START; i < PCI_MAPREG_END; i += 4) { 2139 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, i); 2140 if (memtype == PCI_MAPREG_TYPE_IO) 2141 break; 2142 if (PCI_MAPREG_MEM_TYPE(memtype) == 2143 PCI_MAPREG_MEM_TYPE_64BIT) 2144 i += 4; /* skip high bits, too */ 2145 } 2146 if (i < PCI_MAPREG_END) { 2147 /* 2148 * We found PCI_MAPREG_TYPE_IO. Note that 82580 2149 * (and newer?) chip has no PCI_MAPREG_TYPE_IO. 2150 * It's no problem because newer chips has no this 2151 * bug. 2152 * 2153 * The i8254x doesn't apparently respond when the 2154 * I/O BAR is 0, which looks somewhat like it's not 2155 * been configured. 2156 */ 2157 preg = pci_conf_read(pc, pa->pa_tag, i); 2158 if (PCI_MAPREG_MEM_ADDR(preg) == 0) { 2159 aprint_error_dev(sc->sc_dev, 2160 "WARNING: I/O BAR at zero.\n"); 2161 } else if (pci_mapreg_map(pa, i, PCI_MAPREG_TYPE_IO, 2162 0, &sc->sc_iot, &sc->sc_ioh, NULL, &sc->sc_ios) 2163 == 0) { 2164 sc->sc_flags |= WM_F_IOH_VALID; 2165 } else 2166 aprint_error_dev(sc->sc_dev, 2167 "WARNING: unable to map I/O space\n"); 2168 } 2169 break; 2170 default: 2171 break; 2172 } 2173 2174 /* Enable bus mastering. Disable MWI on the i82542 2.0. */ 2175 preg = pci_conf_read(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG); 2176 preg |= PCI_COMMAND_MASTER_ENABLE; 2177 if (sc->sc_type < WM_T_82542_2_1) 2178 preg &= ~PCI_COMMAND_INVALIDATE_ENABLE; 2179 pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, preg); 2180 2181 /* Power up chip */ 2182 if ((error = pci_activate(pa->pa_pc, pa->pa_tag, self, NULL)) 2183 && error != EOPNOTSUPP) { 2184 aprint_error_dev(sc->sc_dev, "cannot activate %d\n", error); 2185 return; 2186 } 2187 2188 wm_adjust_qnum(sc, pci_msix_count(pa->pa_pc, pa->pa_tag)); 2189 /* 2190 * Don't use MSI-X if we can use only one queue to save interrupt 2191 * resource. 2192 */ 2193 if (sc->sc_nqueues > 1) { 2194 max_type = PCI_INTR_TYPE_MSIX; 2195 /* 2196 * 82583 has a MSI-X capability in the PCI configuration space 2197 * but it doesn't support it. At least the document doesn't 2198 * say anything about MSI-X. 2199 */ 2200 counts[PCI_INTR_TYPE_MSIX] 2201 = (sc->sc_type == WM_T_82583) ? 0 : sc->sc_nqueues + 1; 2202 } else { 2203 max_type = PCI_INTR_TYPE_MSI; 2204 counts[PCI_INTR_TYPE_MSIX] = 0; 2205 } 2206 2207 /* Allocation settings */ 2208 counts[PCI_INTR_TYPE_MSI] = 1; 2209 counts[PCI_INTR_TYPE_INTX] = 1; 2210 /* overridden by disable flags */ 2211 if (wm_disable_msi != 0) { 2212 counts[PCI_INTR_TYPE_MSI] = 0; 2213 if (wm_disable_msix != 0) { 2214 max_type = PCI_INTR_TYPE_INTX; 2215 counts[PCI_INTR_TYPE_MSIX] = 0; 2216 } 2217 } else if (wm_disable_msix != 0) { 2218 max_type = PCI_INTR_TYPE_MSI; 2219 counts[PCI_INTR_TYPE_MSIX] = 0; 2220 } 2221 2222 alloc_retry: 2223 if (pci_intr_alloc(pa, &sc->sc_intrs, counts, max_type) != 0) { 2224 aprint_error_dev(sc->sc_dev, "failed to allocate interrupt\n"); 2225 return; 2226 } 2227 2228 if (pci_intr_type(pc, sc->sc_intrs[0]) == PCI_INTR_TYPE_MSIX) { 2229 error = wm_setup_msix(sc); 2230 if (error) { 2231 pci_intr_release(pc, sc->sc_intrs, 2232 counts[PCI_INTR_TYPE_MSIX]); 2233 2234 /* Setup for MSI: Disable MSI-X */ 2235 max_type = PCI_INTR_TYPE_MSI; 2236 counts[PCI_INTR_TYPE_MSI] = 1; 2237 counts[PCI_INTR_TYPE_INTX] = 1; 2238 goto alloc_retry; 2239 } 2240 } else if (pci_intr_type(pc, sc->sc_intrs[0]) == PCI_INTR_TYPE_MSI) { 2241 wm_adjust_qnum(sc, 0); /* Must not use multiqueue */ 2242 error = wm_setup_legacy(sc); 2243 if (error) { 2244 pci_intr_release(sc->sc_pc, sc->sc_intrs, 2245 counts[PCI_INTR_TYPE_MSI]); 2246 2247 /* The next try is for INTx: Disable MSI */ 2248 max_type = PCI_INTR_TYPE_INTX; 2249 counts[PCI_INTR_TYPE_INTX] = 1; 2250 goto alloc_retry; 2251 } 2252 } else { 2253 wm_adjust_qnum(sc, 0); /* Must not use multiqueue */ 2254 error = wm_setup_legacy(sc); 2255 if (error) { 2256 pci_intr_release(sc->sc_pc, sc->sc_intrs, 2257 counts[PCI_INTR_TYPE_INTX]); 2258 return; 2259 } 2260 } 2261 2262 snprintf(wqname, sizeof(wqname), "%sTxRx", device_xname(sc->sc_dev)); 2263 error = workqueue_create(&sc->sc_queue_wq, wqname, 2264 wm_handle_queue_work, sc, WM_WORKQUEUE_PRI, IPL_NET, 2265 WQ_PERCPU | WQ_MPSAFE); 2266 if (error) { 2267 aprint_error_dev(sc->sc_dev, 2268 "unable to create TxRx workqueue\n"); 2269 goto out; 2270 } 2271 2272 snprintf(wqname, sizeof(wqname), "%sReset", device_xname(sc->sc_dev)); 2273 error = workqueue_create(&sc->sc_reset_wq, wqname, 2274 wm_handle_reset_work, sc, WM_WORKQUEUE_PRI, IPL_SOFTCLOCK, 2275 WQ_MPSAFE); 2276 if (error) { 2277 workqueue_destroy(sc->sc_queue_wq); 2278 aprint_error_dev(sc->sc_dev, 2279 "unable to create reset workqueue\n"); 2280 goto out; 2281 } 2282 2283 /* 2284 * Check the function ID (unit number of the chip). 2285 */ 2286 if ((sc->sc_type == WM_T_82546) || (sc->sc_type == WM_T_82546_3) 2287 || (sc->sc_type == WM_T_82571) || (sc->sc_type == WM_T_80003) 2288 || (sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576) 2289 || (sc->sc_type == WM_T_82580) 2290 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354)) 2291 sc->sc_funcid = (CSR_READ(sc, WMREG_STATUS) 2292 >> STATUS_FUNCID_SHIFT) & STATUS_FUNCID_MASK; 2293 else 2294 sc->sc_funcid = 0; 2295 2296 /* 2297 * Determine a few things about the bus we're connected to. 2298 */ 2299 if (sc->sc_type < WM_T_82543) { 2300 /* We don't really know the bus characteristics here. */ 2301 sc->sc_bus_speed = 33; 2302 } else if (sc->sc_type == WM_T_82547 || sc->sc_type == WM_T_82547_2) { 2303 /* 2304 * CSA (Communication Streaming Architecture) is about as fast 2305 * a 32-bit 66MHz PCI Bus. 2306 */ 2307 sc->sc_flags |= WM_F_CSA; 2308 sc->sc_bus_speed = 66; 2309 aprint_verbose_dev(sc->sc_dev, 2310 "Communication Streaming Architecture\n"); 2311 if (sc->sc_type == WM_T_82547) { 2312 callout_init(&sc->sc_txfifo_ch, CALLOUT_MPSAFE); 2313 callout_setfunc(&sc->sc_txfifo_ch, 2314 wm_82547_txfifo_stall, sc); 2315 aprint_verbose_dev(sc->sc_dev, 2316 "using 82547 Tx FIFO stall work-around\n"); 2317 } 2318 } else if (sc->sc_type >= WM_T_82571) { 2319 sc->sc_flags |= WM_F_PCIE; 2320 if ((sc->sc_type != WM_T_ICH8) && (sc->sc_type != WM_T_ICH9) 2321 && (sc->sc_type != WM_T_ICH10) 2322 && (sc->sc_type != WM_T_PCH) 2323 && (sc->sc_type != WM_T_PCH2) 2324 && (sc->sc_type != WM_T_PCH_LPT) 2325 && (sc->sc_type != WM_T_PCH_SPT) 2326 && (sc->sc_type != WM_T_PCH_CNP) 2327 && (sc->sc_type != WM_T_PCH_TGP)) { 2328 /* ICH* and PCH* have no PCIe capability registers */ 2329 if (pci_get_capability(pa->pa_pc, pa->pa_tag, 2330 PCI_CAP_PCIEXPRESS, &sc->sc_pcixe_capoff, 2331 NULL) == 0) 2332 aprint_error_dev(sc->sc_dev, 2333 "unable to find PCIe capability\n"); 2334 } 2335 aprint_verbose_dev(sc->sc_dev, "PCI-Express bus\n"); 2336 } else { 2337 reg = CSR_READ(sc, WMREG_STATUS); 2338 if (reg & STATUS_BUS64) 2339 sc->sc_flags |= WM_F_BUS64; 2340 if ((reg & STATUS_PCIX_MODE) != 0) { 2341 pcireg_t pcix_cmd, pcix_sts, bytecnt, maxb; 2342 2343 sc->sc_flags |= WM_F_PCIX; 2344 if (pci_get_capability(pa->pa_pc, pa->pa_tag, 2345 PCI_CAP_PCIX, &sc->sc_pcixe_capoff, NULL) == 0) 2346 aprint_error_dev(sc->sc_dev, 2347 "unable to find PCIX capability\n"); 2348 else if (sc->sc_type != WM_T_82545_3 && 2349 sc->sc_type != WM_T_82546_3) { 2350 /* 2351 * Work around a problem caused by the BIOS 2352 * setting the max memory read byte count 2353 * incorrectly. 2354 */ 2355 pcix_cmd = pci_conf_read(pa->pa_pc, pa->pa_tag, 2356 sc->sc_pcixe_capoff + PCIX_CMD); 2357 pcix_sts = pci_conf_read(pa->pa_pc, pa->pa_tag, 2358 sc->sc_pcixe_capoff + PCIX_STATUS); 2359 2360 bytecnt = (pcix_cmd & PCIX_CMD_BYTECNT_MASK) >> 2361 PCIX_CMD_BYTECNT_SHIFT; 2362 maxb = (pcix_sts & PCIX_STATUS_MAXB_MASK) >> 2363 PCIX_STATUS_MAXB_SHIFT; 2364 if (bytecnt > maxb) { 2365 aprint_verbose_dev(sc->sc_dev, 2366 "resetting PCI-X MMRBC: %d -> %d\n", 2367 512 << bytecnt, 512 << maxb); 2368 pcix_cmd = (pcix_cmd & 2369 ~PCIX_CMD_BYTECNT_MASK) | 2370 (maxb << PCIX_CMD_BYTECNT_SHIFT); 2371 pci_conf_write(pa->pa_pc, pa->pa_tag, 2372 sc->sc_pcixe_capoff + PCIX_CMD, 2373 pcix_cmd); 2374 } 2375 } 2376 } 2377 /* 2378 * The quad port adapter is special; it has a PCIX-PCIX 2379 * bridge on the board, and can run the secondary bus at 2380 * a higher speed. 2381 */ 2382 if (wmp->wmp_product == PCI_PRODUCT_INTEL_82546EB_QUAD) { 2383 sc->sc_bus_speed = (sc->sc_flags & WM_F_PCIX) ? 120 2384 : 66; 2385 } else if (sc->sc_flags & WM_F_PCIX) { 2386 switch (reg & STATUS_PCIXSPD_MASK) { 2387 case STATUS_PCIXSPD_50_66: 2388 sc->sc_bus_speed = 66; 2389 break; 2390 case STATUS_PCIXSPD_66_100: 2391 sc->sc_bus_speed = 100; 2392 break; 2393 case STATUS_PCIXSPD_100_133: 2394 sc->sc_bus_speed = 133; 2395 break; 2396 default: 2397 aprint_error_dev(sc->sc_dev, 2398 "unknown PCIXSPD %d; assuming 66MHz\n", 2399 reg & STATUS_PCIXSPD_MASK); 2400 sc->sc_bus_speed = 66; 2401 break; 2402 } 2403 } else 2404 sc->sc_bus_speed = (reg & STATUS_PCI66) ? 66 : 33; 2405 aprint_verbose_dev(sc->sc_dev, "%d-bit %dMHz %s bus\n", 2406 (sc->sc_flags & WM_F_BUS64) ? 64 : 32, sc->sc_bus_speed, 2407 (sc->sc_flags & WM_F_PCIX) ? "PCIX" : "PCI"); 2408 } 2409 2410 /* clear interesting stat counters */ 2411 CSR_READ(sc, WMREG_COLC); 2412 CSR_READ(sc, WMREG_RXERRC); 2413 2414 if ((sc->sc_type == WM_T_82574) || (sc->sc_type == WM_T_82583) 2415 || (sc->sc_type >= WM_T_ICH8)) 2416 sc->sc_ich_phymtx = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); 2417 if (sc->sc_type >= WM_T_ICH8) 2418 sc->sc_ich_nvmmtx = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); 2419 2420 /* Set PHY, NVM mutex related stuff */ 2421 switch (sc->sc_type) { 2422 case WM_T_82542_2_0: 2423 case WM_T_82542_2_1: 2424 case WM_T_82543: 2425 case WM_T_82544: 2426 /* Microwire */ 2427 sc->nvm.read = wm_nvm_read_uwire; 2428 sc->sc_nvm_wordsize = 64; 2429 sc->sc_nvm_addrbits = 6; 2430 break; 2431 case WM_T_82540: 2432 case WM_T_82545: 2433 case WM_T_82545_3: 2434 case WM_T_82546: 2435 case WM_T_82546_3: 2436 /* Microwire */ 2437 sc->nvm.read = wm_nvm_read_uwire; 2438 reg = CSR_READ(sc, WMREG_EECD); 2439 if (reg & EECD_EE_SIZE) { 2440 sc->sc_nvm_wordsize = 256; 2441 sc->sc_nvm_addrbits = 8; 2442 } else { 2443 sc->sc_nvm_wordsize = 64; 2444 sc->sc_nvm_addrbits = 6; 2445 } 2446 sc->sc_flags |= WM_F_LOCK_EECD; 2447 sc->nvm.acquire = wm_get_eecd; 2448 sc->nvm.release = wm_put_eecd; 2449 break; 2450 case WM_T_82541: 2451 case WM_T_82541_2: 2452 case WM_T_82547: 2453 case WM_T_82547_2: 2454 reg = CSR_READ(sc, WMREG_EECD); 2455 /* 2456 * wm_nvm_set_addrbits_size_eecd() accesses SPI in it only 2457 * on 8254[17], so set flags and functios before calling it. 2458 */ 2459 sc->sc_flags |= WM_F_LOCK_EECD; 2460 sc->nvm.acquire = wm_get_eecd; 2461 sc->nvm.release = wm_put_eecd; 2462 if (reg & EECD_EE_TYPE) { 2463 /* SPI */ 2464 sc->nvm.read = wm_nvm_read_spi; 2465 sc->sc_flags |= WM_F_EEPROM_SPI; 2466 wm_nvm_set_addrbits_size_eecd(sc); 2467 } else { 2468 /* Microwire */ 2469 sc->nvm.read = wm_nvm_read_uwire; 2470 if ((reg & EECD_EE_ABITS) != 0) { 2471 sc->sc_nvm_wordsize = 256; 2472 sc->sc_nvm_addrbits = 8; 2473 } else { 2474 sc->sc_nvm_wordsize = 64; 2475 sc->sc_nvm_addrbits = 6; 2476 } 2477 } 2478 break; 2479 case WM_T_82571: 2480 case WM_T_82572: 2481 /* SPI */ 2482 sc->nvm.read = wm_nvm_read_eerd; 2483 /* Not use WM_F_LOCK_EECD because we use EERD */ 2484 sc->sc_flags |= WM_F_EEPROM_SPI; 2485 wm_nvm_set_addrbits_size_eecd(sc); 2486 sc->phy.acquire = wm_get_swsm_semaphore; 2487 sc->phy.release = wm_put_swsm_semaphore; 2488 sc->nvm.acquire = wm_get_nvm_82571; 2489 sc->nvm.release = wm_put_nvm_82571; 2490 break; 2491 case WM_T_82573: 2492 case WM_T_82574: 2493 case WM_T_82583: 2494 sc->nvm.read = wm_nvm_read_eerd; 2495 /* Not use WM_F_LOCK_EECD because we use EERD */ 2496 if (sc->sc_type == WM_T_82573) { 2497 sc->phy.acquire = wm_get_swsm_semaphore; 2498 sc->phy.release = wm_put_swsm_semaphore; 2499 sc->nvm.acquire = wm_get_nvm_82571; 2500 sc->nvm.release = wm_put_nvm_82571; 2501 } else { 2502 /* Both PHY and NVM use the same semaphore. */ 2503 sc->phy.acquire = sc->nvm.acquire 2504 = wm_get_swfwhw_semaphore; 2505 sc->phy.release = sc->nvm.release 2506 = wm_put_swfwhw_semaphore; 2507 } 2508 if (wm_nvm_is_onboard_eeprom(sc) == 0) { 2509 sc->sc_flags |= WM_F_EEPROM_FLASH; 2510 sc->sc_nvm_wordsize = 2048; 2511 } else { 2512 /* SPI */ 2513 sc->sc_flags |= WM_F_EEPROM_SPI; 2514 wm_nvm_set_addrbits_size_eecd(sc); 2515 } 2516 break; 2517 case WM_T_82575: 2518 case WM_T_82576: 2519 case WM_T_82580: 2520 case WM_T_I350: 2521 case WM_T_I354: 2522 case WM_T_80003: 2523 /* SPI */ 2524 sc->sc_flags |= WM_F_EEPROM_SPI; 2525 wm_nvm_set_addrbits_size_eecd(sc); 2526 if ((sc->sc_type == WM_T_80003) 2527 || (sc->sc_nvm_wordsize < (1 << 15))) { 2528 sc->nvm.read = wm_nvm_read_eerd; 2529 /* Don't use WM_F_LOCK_EECD because we use EERD */ 2530 } else { 2531 sc->nvm.read = wm_nvm_read_spi; 2532 sc->sc_flags |= WM_F_LOCK_EECD; 2533 } 2534 sc->phy.acquire = wm_get_phy_82575; 2535 sc->phy.release = wm_put_phy_82575; 2536 sc->nvm.acquire = wm_get_nvm_80003; 2537 sc->nvm.release = wm_put_nvm_80003; 2538 break; 2539 case WM_T_ICH8: 2540 case WM_T_ICH9: 2541 case WM_T_ICH10: 2542 case WM_T_PCH: 2543 case WM_T_PCH2: 2544 case WM_T_PCH_LPT: 2545 sc->nvm.read = wm_nvm_read_ich8; 2546 /* FLASH */ 2547 sc->sc_flags |= WM_F_EEPROM_FLASH; 2548 sc->sc_nvm_wordsize = 2048; 2549 memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag,WM_ICH8_FLASH); 2550 if (pci_mapreg_map(pa, WM_ICH8_FLASH, memtype, 0, 2551 &sc->sc_flasht, &sc->sc_flashh, NULL, &sc->sc_flashs)) { 2552 aprint_error_dev(sc->sc_dev, 2553 "can't map FLASH registers\n"); 2554 goto out; 2555 } 2556 reg = ICH8_FLASH_READ32(sc, ICH_FLASH_GFPREG); 2557 sc->sc_ich8_flash_base = (reg & ICH_GFPREG_BASE_MASK) * 2558 ICH_FLASH_SECTOR_SIZE; 2559 sc->sc_ich8_flash_bank_size = 2560 ((reg >> 16) & ICH_GFPREG_BASE_MASK) + 1; 2561 sc->sc_ich8_flash_bank_size -= (reg & ICH_GFPREG_BASE_MASK); 2562 sc->sc_ich8_flash_bank_size *= ICH_FLASH_SECTOR_SIZE; 2563 sc->sc_ich8_flash_bank_size /= 2 * sizeof(uint16_t); 2564 sc->sc_flashreg_offset = 0; 2565 sc->phy.acquire = wm_get_swflag_ich8lan; 2566 sc->phy.release = wm_put_swflag_ich8lan; 2567 sc->nvm.acquire = wm_get_nvm_ich8lan; 2568 sc->nvm.release = wm_put_nvm_ich8lan; 2569 break; 2570 case WM_T_PCH_SPT: 2571 case WM_T_PCH_CNP: 2572 case WM_T_PCH_TGP: 2573 sc->nvm.read = wm_nvm_read_spt; 2574 /* SPT has no GFPREG; flash registers mapped through BAR0 */ 2575 sc->sc_flags |= WM_F_EEPROM_FLASH; 2576 sc->sc_flasht = sc->sc_st; 2577 sc->sc_flashh = sc->sc_sh; 2578 sc->sc_ich8_flash_base = 0; 2579 sc->sc_nvm_wordsize = 2580 (((CSR_READ(sc, WMREG_STRAP) >> 1) & 0x1F) + 1) 2581 * NVM_SIZE_MULTIPLIER; 2582 /* It is size in bytes, we want words */ 2583 sc->sc_nvm_wordsize /= 2; 2584 /* Assume 2 banks */ 2585 sc->sc_ich8_flash_bank_size = sc->sc_nvm_wordsize / 2; 2586 sc->sc_flashreg_offset = WM_PCH_SPT_FLASHOFFSET; 2587 sc->phy.acquire = wm_get_swflag_ich8lan; 2588 sc->phy.release = wm_put_swflag_ich8lan; 2589 sc->nvm.acquire = wm_get_nvm_ich8lan; 2590 sc->nvm.release = wm_put_nvm_ich8lan; 2591 break; 2592 case WM_T_I210: 2593 case WM_T_I211: 2594 /* Allow a single clear of the SW semaphore on I210 and newer*/ 2595 sc->sc_flags |= WM_F_WA_I210_CLSEM; 2596 if (wm_nvm_flash_presence_i210(sc)) { 2597 sc->nvm.read = wm_nvm_read_eerd; 2598 /* Don't use WM_F_LOCK_EECD because we use EERD */ 2599 sc->sc_flags |= WM_F_EEPROM_FLASH_HW; 2600 wm_nvm_set_addrbits_size_eecd(sc); 2601 } else { 2602 sc->nvm.read = wm_nvm_read_invm; 2603 sc->sc_flags |= WM_F_EEPROM_INVM; 2604 sc->sc_nvm_wordsize = INVM_SIZE; 2605 } 2606 sc->phy.acquire = wm_get_phy_82575; 2607 sc->phy.release = wm_put_phy_82575; 2608 sc->nvm.acquire = wm_get_nvm_80003; 2609 sc->nvm.release = wm_put_nvm_80003; 2610 break; 2611 default: 2612 break; 2613 } 2614 2615 /* Ensure the SMBI bit is clear before first NVM or PHY access */ 2616 switch (sc->sc_type) { 2617 case WM_T_82571: 2618 case WM_T_82572: 2619 reg = CSR_READ(sc, WMREG_SWSM2); 2620 if ((reg & SWSM2_LOCK) == 0) { 2621 CSR_WRITE(sc, WMREG_SWSM2, reg | SWSM2_LOCK); 2622 force_clear_smbi = true; 2623 } else 2624 force_clear_smbi = false; 2625 break; 2626 case WM_T_82573: 2627 case WM_T_82574: 2628 case WM_T_82583: 2629 force_clear_smbi = true; 2630 break; 2631 default: 2632 force_clear_smbi = false; 2633 break; 2634 } 2635 if (force_clear_smbi) { 2636 reg = CSR_READ(sc, WMREG_SWSM); 2637 if ((reg & SWSM_SMBI) != 0) 2638 aprint_error_dev(sc->sc_dev, 2639 "Please update the Bootagent\n"); 2640 CSR_WRITE(sc, WMREG_SWSM, reg & ~SWSM_SMBI); 2641 } 2642 2643 /* 2644 * Defer printing the EEPROM type until after verifying the checksum 2645 * This allows the EEPROM type to be printed correctly in the case 2646 * that no EEPROM is attached. 2647 */ 2648 /* 2649 * Validate the EEPROM checksum. If the checksum fails, flag 2650 * this for later, so we can fail future reads from the EEPROM. 2651 */ 2652 if (wm_nvm_validate_checksum(sc)) { 2653 /* 2654 * Read twice again because some PCI-e parts fail the 2655 * first check due to the link being in sleep state. 2656 */ 2657 if (wm_nvm_validate_checksum(sc)) 2658 sc->sc_flags |= WM_F_EEPROM_INVALID; 2659 } 2660 2661 if (sc->sc_flags & WM_F_EEPROM_INVALID) 2662 aprint_verbose_dev(sc->sc_dev, "No EEPROM"); 2663 else { 2664 aprint_verbose_dev(sc->sc_dev, "%u words ", 2665 sc->sc_nvm_wordsize); 2666 if (sc->sc_flags & WM_F_EEPROM_INVM) 2667 aprint_verbose("iNVM"); 2668 else if (sc->sc_flags & WM_F_EEPROM_FLASH_HW) 2669 aprint_verbose("FLASH(HW)"); 2670 else if (sc->sc_flags & WM_F_EEPROM_FLASH) 2671 aprint_verbose("FLASH"); 2672 else { 2673 if (sc->sc_flags & WM_F_EEPROM_SPI) 2674 eetype = "SPI"; 2675 else 2676 eetype = "MicroWire"; 2677 aprint_verbose("(%d address bits) %s EEPROM", 2678 sc->sc_nvm_addrbits, eetype); 2679 } 2680 } 2681 wm_nvm_version(sc); 2682 aprint_verbose("\n"); 2683 2684 /* 2685 * XXX The first call of wm_gmii_setup_phytype. The result might be 2686 * incorrect. 2687 */ 2688 wm_gmii_setup_phytype(sc, 0, 0); 2689 2690 /* Check for WM_F_WOL on some chips before wm_reset() */ 2691 switch (sc->sc_type) { 2692 case WM_T_ICH8: 2693 case WM_T_ICH9: 2694 case WM_T_ICH10: 2695 case WM_T_PCH: 2696 case WM_T_PCH2: 2697 case WM_T_PCH_LPT: 2698 case WM_T_PCH_SPT: 2699 case WM_T_PCH_CNP: 2700 case WM_T_PCH_TGP: 2701 apme_mask = WUC_APME; 2702 eeprom_data = CSR_READ(sc, WMREG_WUC); 2703 if ((eeprom_data & apme_mask) != 0) 2704 sc->sc_flags |= WM_F_WOL; 2705 break; 2706 default: 2707 break; 2708 } 2709 2710 /* Reset the chip to a known state. */ 2711 wm_reset(sc); 2712 2713 /* 2714 * Check for I21[01] PLL workaround. 2715 * 2716 * Three cases: 2717 * a) Chip is I211. 2718 * b) Chip is I210 and it uses INVM (not FLASH). 2719 * c) Chip is I210 (and it uses FLASH) and the NVM image version < 3.25 2720 */ 2721 if (sc->sc_type == WM_T_I211) 2722 sc->sc_flags |= WM_F_PLL_WA_I210; 2723 if (sc->sc_type == WM_T_I210) { 2724 if (!wm_nvm_flash_presence_i210(sc)) 2725 sc->sc_flags |= WM_F_PLL_WA_I210; 2726 else if ((sc->sc_nvm_ver_major < 3) 2727 || ((sc->sc_nvm_ver_major == 3) 2728 && (sc->sc_nvm_ver_minor < 25))) { 2729 aprint_verbose_dev(sc->sc_dev, 2730 "ROM image version %d.%d is older than 3.25\n", 2731 sc->sc_nvm_ver_major, sc->sc_nvm_ver_minor); 2732 sc->sc_flags |= WM_F_PLL_WA_I210; 2733 } 2734 } 2735 if ((sc->sc_flags & WM_F_PLL_WA_I210) != 0) 2736 wm_pll_workaround_i210(sc); 2737 2738 wm_get_wakeup(sc); 2739 2740 /* Non-AMT based hardware can now take control from firmware */ 2741 if ((sc->sc_flags & WM_F_HAS_AMT) == 0) 2742 wm_get_hw_control(sc); 2743 2744 /* 2745 * Read the Ethernet address from the EEPROM, if not first found 2746 * in device properties. 2747 */ 2748 ea = prop_dictionary_get(dict, "mac-address"); 2749 if (ea != NULL) { 2750 KASSERT(prop_object_type(ea) == PROP_TYPE_DATA); 2751 KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN); 2752 memcpy(enaddr, prop_data_value(ea), ETHER_ADDR_LEN); 2753 } else { 2754 if (wm_read_mac_addr(sc, enaddr) != 0) { 2755 aprint_error_dev(sc->sc_dev, 2756 "unable to read Ethernet address\n"); 2757 goto out; 2758 } 2759 } 2760 2761 aprint_normal_dev(sc->sc_dev, "Ethernet address %s\n", 2762 ether_sprintf(enaddr)); 2763 2764 /* 2765 * Read the config info from the EEPROM, and set up various 2766 * bits in the control registers based on their contents. 2767 */ 2768 pn = prop_dictionary_get(dict, "i82543-cfg1"); 2769 if (pn != NULL) { 2770 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER); 2771 cfg1 = (uint16_t) prop_number_signed_value(pn); 2772 } else { 2773 if (wm_nvm_read(sc, NVM_OFF_CFG1, 1, &cfg1)) { 2774 aprint_error_dev(sc->sc_dev, "unable to read CFG1\n"); 2775 goto out; 2776 } 2777 } 2778 2779 pn = prop_dictionary_get(dict, "i82543-cfg2"); 2780 if (pn != NULL) { 2781 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER); 2782 cfg2 = (uint16_t) prop_number_signed_value(pn); 2783 } else { 2784 if (wm_nvm_read(sc, NVM_OFF_CFG2, 1, &cfg2)) { 2785 aprint_error_dev(sc->sc_dev, "unable to read CFG2\n"); 2786 goto out; 2787 } 2788 } 2789 2790 /* check for WM_F_WOL */ 2791 switch (sc->sc_type) { 2792 case WM_T_82542_2_0: 2793 case WM_T_82542_2_1: 2794 case WM_T_82543: 2795 /* dummy? */ 2796 eeprom_data = 0; 2797 apme_mask = NVM_CFG3_APME; 2798 break; 2799 case WM_T_82544: 2800 apme_mask = NVM_CFG2_82544_APM_EN; 2801 eeprom_data = cfg2; 2802 break; 2803 case WM_T_82546: 2804 case WM_T_82546_3: 2805 case WM_T_82571: 2806 case WM_T_82572: 2807 case WM_T_82573: 2808 case WM_T_82574: 2809 case WM_T_82583: 2810 case WM_T_80003: 2811 case WM_T_82575: 2812 case WM_T_82576: 2813 apme_mask = NVM_CFG3_APME; 2814 wm_nvm_read(sc, (sc->sc_funcid == 1) ? NVM_OFF_CFG3_PORTB 2815 : NVM_OFF_CFG3_PORTA, 1, &eeprom_data); 2816 break; 2817 case WM_T_82580: 2818 case WM_T_I350: 2819 case WM_T_I354: 2820 case WM_T_I210: 2821 case WM_T_I211: 2822 apme_mask = NVM_CFG3_APME; 2823 wm_nvm_read(sc, 2824 NVM_OFF_LAN_FUNC_82580(sc->sc_funcid) + NVM_OFF_CFG3_PORTA, 2825 1, &eeprom_data); 2826 break; 2827 case WM_T_ICH8: 2828 case WM_T_ICH9: 2829 case WM_T_ICH10: 2830 case WM_T_PCH: 2831 case WM_T_PCH2: 2832 case WM_T_PCH_LPT: 2833 case WM_T_PCH_SPT: 2834 case WM_T_PCH_CNP: 2835 case WM_T_PCH_TGP: 2836 /* Already checked before wm_reset () */ 2837 apme_mask = eeprom_data = 0; 2838 break; 2839 default: /* XXX 82540 */ 2840 apme_mask = NVM_CFG3_APME; 2841 wm_nvm_read(sc, NVM_OFF_CFG3_PORTA, 1, &eeprom_data); 2842 break; 2843 } 2844 /* Check for WM_F_WOL flag after the setting of the EEPROM stuff */ 2845 if ((eeprom_data & apme_mask) != 0) 2846 sc->sc_flags |= WM_F_WOL; 2847 2848 /* 2849 * We have the eeprom settings, now apply the special cases 2850 * where the eeprom may be wrong or the board won't support 2851 * wake on lan on a particular port 2852 */ 2853 switch (sc->sc_pcidevid) { 2854 case PCI_PRODUCT_INTEL_82546GB_PCIE: 2855 sc->sc_flags &= ~WM_F_WOL; 2856 break; 2857 case PCI_PRODUCT_INTEL_82546EB_FIBER: 2858 case PCI_PRODUCT_INTEL_82546GB_FIBER: 2859 /* Wake events only supported on port A for dual fiber 2860 * regardless of eeprom setting */ 2861 if (sc->sc_funcid == 1) 2862 sc->sc_flags &= ~WM_F_WOL; 2863 break; 2864 case PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER_KSP3: 2865 /* If quad port adapter, disable WoL on all but port A */ 2866 if (sc->sc_funcid != 0) 2867 sc->sc_flags &= ~WM_F_WOL; 2868 break; 2869 case PCI_PRODUCT_INTEL_82571EB_FIBER: 2870 /* Wake events only supported on port A for dual fiber 2871 * regardless of eeprom setting */ 2872 if (sc->sc_funcid == 1) 2873 sc->sc_flags &= ~WM_F_WOL; 2874 break; 2875 case PCI_PRODUCT_INTEL_82571EB_QUAD_COPPER: 2876 case PCI_PRODUCT_INTEL_82571EB_QUAD_FIBER: 2877 case PCI_PRODUCT_INTEL_82571GB_QUAD_COPPER: 2878 /* If quad port adapter, disable WoL on all but port A */ 2879 if (sc->sc_funcid != 0) 2880 sc->sc_flags &= ~WM_F_WOL; 2881 break; 2882 } 2883 2884 if (sc->sc_type >= WM_T_82575) { 2885 if (wm_nvm_read(sc, NVM_OFF_COMPAT, 1, &nvmword) == 0) { 2886 aprint_debug_dev(sc->sc_dev, "COMPAT = %hx\n", 2887 nvmword); 2888 if ((sc->sc_type == WM_T_82575) || 2889 (sc->sc_type == WM_T_82576)) { 2890 /* Check NVM for autonegotiation */ 2891 if ((nvmword & NVM_COMPAT_SERDES_FORCE_MODE) 2892 != 0) 2893 sc->sc_flags |= WM_F_PCS_DIS_AUTONEGO; 2894 } 2895 if ((sc->sc_type == WM_T_82575) || 2896 (sc->sc_type == WM_T_I350)) { 2897 if (nvmword & NVM_COMPAT_MAS_EN(sc->sc_funcid)) 2898 sc->sc_flags |= WM_F_MAS; 2899 } 2900 } 2901 } 2902 2903 /* 2904 * XXX need special handling for some multiple port cards 2905 * to disable a paticular port. 2906 */ 2907 2908 if (sc->sc_type >= WM_T_82544) { 2909 pn = prop_dictionary_get(dict, "i82543-swdpin"); 2910 if (pn != NULL) { 2911 KASSERT(prop_object_type(pn) == PROP_TYPE_NUMBER); 2912 swdpin = (uint16_t) prop_number_signed_value(pn); 2913 } else { 2914 if (wm_nvm_read(sc, NVM_OFF_SWDPIN, 1, &swdpin)) { 2915 aprint_error_dev(sc->sc_dev, 2916 "unable to read SWDPIN\n"); 2917 goto out; 2918 } 2919 } 2920 } 2921 2922 if (cfg1 & NVM_CFG1_ILOS) 2923 sc->sc_ctrl |= CTRL_ILOS; 2924 2925 /* 2926 * XXX 2927 * This code isn't correct because pin 2 and 3 are located 2928 * in different position on newer chips. Check all datasheet. 2929 * 2930 * Until resolve this problem, check if a chip < 82580 2931 */ 2932 if (sc->sc_type <= WM_T_82580) { 2933 if (sc->sc_type >= WM_T_82544) { 2934 sc->sc_ctrl |= 2935 ((swdpin >> NVM_SWDPIN_SWDPIO_SHIFT) & 0xf) << 2936 CTRL_SWDPIO_SHIFT; 2937 sc->sc_ctrl |= 2938 ((swdpin >> NVM_SWDPIN_SWDPIN_SHIFT) & 0xf) << 2939 CTRL_SWDPINS_SHIFT; 2940 } else { 2941 sc->sc_ctrl |= 2942 ((cfg1 >> NVM_CFG1_SWDPIO_SHIFT) & 0xf) << 2943 CTRL_SWDPIO_SHIFT; 2944 } 2945 } 2946 2947 if ((sc->sc_type >= WM_T_82580) && (sc->sc_type <= WM_T_I211)) { 2948 wm_nvm_read(sc, 2949 NVM_OFF_LAN_FUNC_82580(sc->sc_funcid) + NVM_OFF_CFG3_PORTA, 2950 1, &nvmword); 2951 if (nvmword & NVM_CFG3_ILOS) 2952 sc->sc_ctrl |= CTRL_ILOS; 2953 } 2954 2955 #if 0 2956 if (sc->sc_type >= WM_T_82544) { 2957 if (cfg1 & NVM_CFG1_IPS0) 2958 sc->sc_ctrl_ext |= CTRL_EXT_IPS; 2959 if (cfg1 & NVM_CFG1_IPS1) 2960 sc->sc_ctrl_ext |= CTRL_EXT_IPS1; 2961 sc->sc_ctrl_ext |= 2962 ((swdpin >> (NVM_SWDPIN_SWDPIO_SHIFT + 4)) & 0xd) << 2963 CTRL_EXT_SWDPIO_SHIFT; 2964 sc->sc_ctrl_ext |= 2965 ((swdpin >> (NVM_SWDPIN_SWDPIN_SHIFT + 4)) & 0xd) << 2966 CTRL_EXT_SWDPINS_SHIFT; 2967 } else { 2968 sc->sc_ctrl_ext |= 2969 ((cfg2 >> NVM_CFG2_SWDPIO_SHIFT) & 0xf) << 2970 CTRL_EXT_SWDPIO_SHIFT; 2971 } 2972 #endif 2973 2974 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 2975 #if 0 2976 CSR_WRITE(sc, WMREG_CTRL_EXT, sc->sc_ctrl_ext); 2977 #endif 2978 2979 if (sc->sc_type == WM_T_PCH) { 2980 uint16_t val; 2981 2982 /* Save the NVM K1 bit setting */ 2983 wm_nvm_read(sc, NVM_OFF_K1_CONFIG, 1, &val); 2984 2985 if ((val & NVM_K1_CONFIG_ENABLE) != 0) 2986 sc->sc_nvm_k1_enabled = 1; 2987 else 2988 sc->sc_nvm_k1_enabled = 0; 2989 } 2990 2991 /* Determine if we're GMII, TBI, SERDES or SGMII mode */ 2992 if (sc->sc_type == WM_T_ICH8 || sc->sc_type == WM_T_ICH9 2993 || sc->sc_type == WM_T_ICH10 || sc->sc_type == WM_T_PCH 2994 || sc->sc_type == WM_T_PCH2 || sc->sc_type == WM_T_PCH_LPT 2995 || sc->sc_type == WM_T_PCH_SPT || sc->sc_type == WM_T_PCH_CNP 2996 || sc->sc_type == WM_T_PCH_TGP 2997 || sc->sc_type == WM_T_82573 2998 || sc->sc_type == WM_T_82574 || sc->sc_type == WM_T_82583) { 2999 /* Copper only */ 3000 } else if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576) 3001 || (sc->sc_type ==WM_T_82580) || (sc->sc_type ==WM_T_I350) 3002 || (sc->sc_type ==WM_T_I354) || (sc->sc_type ==WM_T_I210) 3003 || (sc->sc_type ==WM_T_I211)) { 3004 reg = CSR_READ(sc, WMREG_CTRL_EXT); 3005 link_mode = reg & CTRL_EXT_LINK_MODE_MASK; 3006 switch (link_mode) { 3007 case CTRL_EXT_LINK_MODE_1000KX: 3008 aprint_normal_dev(sc->sc_dev, "1000KX\n"); 3009 sc->sc_mediatype = WM_MEDIATYPE_SERDES; 3010 break; 3011 case CTRL_EXT_LINK_MODE_SGMII: 3012 if (wm_sgmii_uses_mdio(sc)) { 3013 aprint_normal_dev(sc->sc_dev, 3014 "SGMII(MDIO)\n"); 3015 sc->sc_flags |= WM_F_SGMII; 3016 sc->sc_mediatype = WM_MEDIATYPE_COPPER; 3017 break; 3018 } 3019 aprint_verbose_dev(sc->sc_dev, "SGMII(I2C)\n"); 3020 /*FALLTHROUGH*/ 3021 case CTRL_EXT_LINK_MODE_PCIE_SERDES: 3022 sc->sc_mediatype = wm_sfp_get_media_type(sc); 3023 if (sc->sc_mediatype == WM_MEDIATYPE_UNKNOWN) { 3024 if (link_mode 3025 == CTRL_EXT_LINK_MODE_SGMII) { 3026 sc->sc_mediatype = WM_MEDIATYPE_COPPER; 3027 sc->sc_flags |= WM_F_SGMII; 3028 aprint_verbose_dev(sc->sc_dev, 3029 "SGMII\n"); 3030 } else { 3031 sc->sc_mediatype = WM_MEDIATYPE_SERDES; 3032 aprint_verbose_dev(sc->sc_dev, 3033 "SERDES\n"); 3034 } 3035 break; 3036 } 3037 if (sc->sc_mediatype == WM_MEDIATYPE_SERDES) 3038 aprint_normal_dev(sc->sc_dev, "SERDES(SFP)\n"); 3039 else if (sc->sc_mediatype == WM_MEDIATYPE_COPPER) { 3040 aprint_normal_dev(sc->sc_dev, "SGMII(SFP)\n"); 3041 sc->sc_flags |= WM_F_SGMII; 3042 } 3043 /* Do not change link mode for 100BaseFX */ 3044 if (sc->sc_sfptype == SFF_SFP_ETH_FLAGS_100FX) 3045 break; 3046 3047 /* Change current link mode setting */ 3048 reg &= ~CTRL_EXT_LINK_MODE_MASK; 3049 if (sc->sc_mediatype == WM_MEDIATYPE_COPPER) 3050 reg |= CTRL_EXT_LINK_MODE_SGMII; 3051 else 3052 reg |= CTRL_EXT_LINK_MODE_PCIE_SERDES; 3053 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 3054 break; 3055 case CTRL_EXT_LINK_MODE_GMII: 3056 default: 3057 aprint_normal_dev(sc->sc_dev, "Copper\n"); 3058 sc->sc_mediatype = WM_MEDIATYPE_COPPER; 3059 break; 3060 } 3061 3062 reg &= ~CTRL_EXT_I2C_ENA; 3063 if ((sc->sc_flags & WM_F_SGMII) != 0) 3064 reg |= CTRL_EXT_I2C_ENA; 3065 else 3066 reg &= ~CTRL_EXT_I2C_ENA; 3067 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 3068 if ((sc->sc_flags & WM_F_SGMII) != 0) { 3069 if (!wm_sgmii_uses_mdio(sc)) 3070 wm_gmii_setup_phytype(sc, 0, 0); 3071 wm_reset_mdicnfg_82580(sc); 3072 } 3073 } else if (sc->sc_type < WM_T_82543 || 3074 (CSR_READ(sc, WMREG_STATUS) & STATUS_TBIMODE) != 0) { 3075 if (sc->sc_mediatype == WM_MEDIATYPE_COPPER) { 3076 aprint_error_dev(sc->sc_dev, 3077 "WARNING: TBIMODE set on 1000BASE-T product!\n"); 3078 sc->sc_mediatype = WM_MEDIATYPE_FIBER; 3079 } 3080 } else { 3081 if (sc->sc_mediatype == WM_MEDIATYPE_FIBER) { 3082 aprint_error_dev(sc->sc_dev, 3083 "WARNING: TBIMODE clear on 1000BASE-X product!\n"); 3084 sc->sc_mediatype = WM_MEDIATYPE_COPPER; 3085 } 3086 } 3087 3088 if (sc->sc_type >= WM_T_PCH2) 3089 sc->sc_flags |= WM_F_EEE; 3090 else if ((sc->sc_type >= WM_T_I350) && (sc->sc_type <= WM_T_I211) 3091 && (sc->sc_mediatype == WM_MEDIATYPE_COPPER)) { 3092 /* XXX: Need special handling for I354. (not yet) */ 3093 if (sc->sc_type != WM_T_I354) 3094 sc->sc_flags |= WM_F_EEE; 3095 } 3096 3097 /* 3098 * The I350 has a bug where it always strips the CRC whether 3099 * asked to or not. So ask for stripped CRC here and cope in rxeof 3100 */ 3101 if ((sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354) 3102 || (sc->sc_type == WM_T_I210) || (sc->sc_type == WM_T_I211)) 3103 sc->sc_flags |= WM_F_CRC_STRIP; 3104 3105 /* 3106 * Workaround for some chips to delay sending LINK_STATE_UP. 3107 * Some systems can't send packet soon after linkup. See also 3108 * wm_linkintr_gmii(), wm_tick() and wm_gmii_mediastatus(). 3109 */ 3110 switch (sc->sc_type) { 3111 case WM_T_I350: 3112 case WM_T_I354: 3113 case WM_T_I210: 3114 case WM_T_I211: 3115 if (sc->sc_mediatype == WM_MEDIATYPE_COPPER) 3116 sc->sc_flags |= WM_F_DELAY_LINKUP; 3117 break; 3118 default: 3119 break; 3120 } 3121 3122 /* Set device properties (macflags) */ 3123 prop_dictionary_set_uint32(dict, "macflags", sc->sc_flags); 3124 3125 if (sc->sc_flags != 0) { 3126 snprintb(buf, sizeof(buf), WM_FLAGS, sc->sc_flags); 3127 aprint_verbose_dev(sc->sc_dev, "%s\n", buf); 3128 } 3129 3130 sc->sc_core_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); 3131 3132 /* Initialize the media structures accordingly. */ 3133 if (sc->sc_mediatype == WM_MEDIATYPE_COPPER) 3134 wm_gmii_mediainit(sc, wmp->wmp_product); 3135 else 3136 wm_tbi_mediainit(sc); /* All others */ 3137 3138 ifp = &sc->sc_ethercom.ec_if; 3139 xname = device_xname(sc->sc_dev); 3140 strlcpy(ifp->if_xname, xname, IFNAMSIZ); 3141 ifp->if_softc = sc; 3142 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 3143 ifp->if_extflags = IFEF_MPSAFE; 3144 ifp->if_ioctl = wm_ioctl; 3145 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 3146 ifp->if_start = wm_nq_start; 3147 /* 3148 * When the number of CPUs is one and the controller can use 3149 * MSI-X, wm(4) use MSI-X but *does not* use multiqueue. 3150 * That is, wm(4) use two interrupts, one is used for Tx/Rx 3151 * and the other is used for link status changing. 3152 * In this situation, wm_nq_transmit() is disadvantageous 3153 * because of wm_select_txqueue() and pcq(9) overhead. 3154 */ 3155 if (wm_is_using_multiqueue(sc)) 3156 ifp->if_transmit = wm_nq_transmit; 3157 } else { 3158 ifp->if_start = wm_start; 3159 /* 3160 * wm_transmit() has the same disadvantages as wm_nq_transmit() 3161 * described above. 3162 */ 3163 if (wm_is_using_multiqueue(sc)) 3164 ifp->if_transmit = wm_transmit; 3165 } 3166 /* wm(4) doest not use ifp->if_watchdog, use wm_tick as watchdog. */ 3167 ifp->if_init = wm_init; 3168 ifp->if_stop = wm_stop; 3169 IFQ_SET_MAXLEN(&ifp->if_snd, uimax(WM_IFQUEUELEN, IFQ_MAXLEN)); 3170 IFQ_SET_READY(&ifp->if_snd); 3171 3172 /* Check for jumbo frame */ 3173 switch (sc->sc_type) { 3174 case WM_T_82573: 3175 /* XXX limited to 9234 if ASPM is disabled */ 3176 wm_nvm_read(sc, NVM_OFF_INIT_3GIO_3, 1, &nvmword); 3177 if ((nvmword & NVM_3GIO_3_ASPM_MASK) != 0) 3178 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU; 3179 break; 3180 case WM_T_82571: 3181 case WM_T_82572: 3182 case WM_T_82574: 3183 case WM_T_82583: 3184 case WM_T_82575: 3185 case WM_T_82576: 3186 case WM_T_82580: 3187 case WM_T_I350: 3188 case WM_T_I354: 3189 case WM_T_I210: 3190 case WM_T_I211: 3191 case WM_T_80003: 3192 case WM_T_ICH9: 3193 case WM_T_ICH10: 3194 case WM_T_PCH2: /* PCH2 supports 9K frame size */ 3195 case WM_T_PCH_LPT: 3196 case WM_T_PCH_SPT: 3197 case WM_T_PCH_CNP: 3198 case WM_T_PCH_TGP: 3199 /* XXX limited to 9234 */ 3200 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU; 3201 break; 3202 case WM_T_PCH: 3203 /* XXX limited to 4096 */ 3204 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU; 3205 break; 3206 case WM_T_82542_2_0: 3207 case WM_T_82542_2_1: 3208 case WM_T_ICH8: 3209 /* No support for jumbo frame */ 3210 break; 3211 default: 3212 /* ETHER_MAX_LEN_JUMBO */ 3213 sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU; 3214 break; 3215 } 3216 3217 /* If we're a i82543 or greater, we can support VLANs. */ 3218 if (sc->sc_type >= WM_T_82543) { 3219 sc->sc_ethercom.ec_capabilities |= 3220 ETHERCAP_VLAN_MTU | ETHERCAP_VLAN_HWTAGGING; 3221 sc->sc_ethercom.ec_capenable |= ETHERCAP_VLAN_HWTAGGING; 3222 } 3223 3224 if ((sc->sc_flags & WM_F_EEE) != 0) 3225 sc->sc_ethercom.ec_capabilities |= ETHERCAP_EEE; 3226 3227 /* 3228 * We can perform TCPv4 and UDPv4 checksums in-bound. Only 3229 * on i82543 and later. 3230 */ 3231 if (sc->sc_type >= WM_T_82543) { 3232 ifp->if_capabilities |= 3233 IFCAP_CSUM_IPv4_Tx | IFCAP_CSUM_IPv4_Rx | 3234 IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_TCPv4_Rx | 3235 IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_UDPv4_Rx | 3236 IFCAP_CSUM_TCPv6_Tx | 3237 IFCAP_CSUM_UDPv6_Tx; 3238 } 3239 3240 /* 3241 * XXXyamt: i'm not sure which chips support RXCSUM_IPV6OFL. 3242 * 3243 * 82541GI (8086:1076) ... no 3244 * 82572EI (8086:10b9) ... yes 3245 */ 3246 if (sc->sc_type >= WM_T_82571) { 3247 ifp->if_capabilities |= 3248 IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx; 3249 } 3250 3251 /* 3252 * If we're a i82544 or greater (except i82547), we can do 3253 * TCP segmentation offload. 3254 */ 3255 if (sc->sc_type >= WM_T_82544 && sc->sc_type != WM_T_82547) 3256 ifp->if_capabilities |= IFCAP_TSOv4; 3257 3258 if (sc->sc_type >= WM_T_82571) 3259 ifp->if_capabilities |= IFCAP_TSOv6; 3260 3261 sc->sc_tx_process_limit = WM_TX_PROCESS_LIMIT_DEFAULT; 3262 sc->sc_tx_intr_process_limit = WM_TX_INTR_PROCESS_LIMIT_DEFAULT; 3263 sc->sc_rx_process_limit = WM_RX_PROCESS_LIMIT_DEFAULT; 3264 sc->sc_rx_intr_process_limit = WM_RX_INTR_PROCESS_LIMIT_DEFAULT; 3265 3266 /* Attach the interface. */ 3267 if_initialize(ifp); 3268 sc->sc_ipq = if_percpuq_create(&sc->sc_ethercom.ec_if); 3269 ether_ifattach(ifp, enaddr); 3270 ether_set_ifflags_cb(&sc->sc_ethercom, wm_ifflags_cb); 3271 if_register(ifp); 3272 rnd_attach_source(&sc->rnd_source, xname, RND_TYPE_NET, 3273 RND_FLAG_DEFAULT); 3274 3275 #ifdef WM_EVENT_COUNTERS 3276 /* Attach event counters. */ 3277 evcnt_attach_dynamic(&sc->sc_ev_linkintr, EVCNT_TYPE_INTR, 3278 NULL, xname, "linkintr"); 3279 3280 evcnt_attach_dynamic(&sc->sc_ev_crcerrs, EVCNT_TYPE_MISC, 3281 NULL, xname, "CRC Error"); 3282 evcnt_attach_dynamic(&sc->sc_ev_symerrc, EVCNT_TYPE_MISC, 3283 NULL, xname, "Symbol Error"); 3284 evcnt_attach_dynamic(&sc->sc_ev_mpc, EVCNT_TYPE_MISC, 3285 NULL, xname, "Missed Packets"); 3286 evcnt_attach_dynamic(&sc->sc_ev_colc, EVCNT_TYPE_MISC, 3287 NULL, xname, "Collision"); 3288 evcnt_attach_dynamic(&sc->sc_ev_sec, EVCNT_TYPE_MISC, 3289 NULL, xname, "Sequence Error"); 3290 evcnt_attach_dynamic(&sc->sc_ev_rlec, EVCNT_TYPE_MISC, 3291 NULL, xname, "Receive Length Error"); 3292 3293 if (sc->sc_type >= WM_T_82543) { 3294 evcnt_attach_dynamic(&sc->sc_ev_algnerrc, EVCNT_TYPE_MISC, 3295 NULL, xname, "Alignment Error"); 3296 evcnt_attach_dynamic(&sc->sc_ev_rxerrc, EVCNT_TYPE_MISC, 3297 NULL, xname, "Receive Error"); 3298 /* XXX Does 82575 have HTDPMC? */ 3299 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 3300 evcnt_attach_dynamic(&sc->sc_ev_cexterr, 3301 EVCNT_TYPE_MISC, NULL, xname, 3302 "Carrier Extension Error"); 3303 else 3304 evcnt_attach_dynamic(&sc->sc_ev_htdpmc, 3305 EVCNT_TYPE_MISC, NULL, xname, 3306 "Host Transmit Discarded Packets by MAC"); 3307 3308 evcnt_attach_dynamic(&sc->sc_ev_tncrs, EVCNT_TYPE_MISC, 3309 NULL, xname, "Tx with No CRS"); 3310 evcnt_attach_dynamic(&sc->sc_ev_tsctc, EVCNT_TYPE_MISC, 3311 NULL, xname, "TCP Segmentation Context Tx"); 3312 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 3313 evcnt_attach_dynamic(&sc->sc_ev_tsctfc, 3314 EVCNT_TYPE_MISC, NULL, xname, 3315 "TCP Segmentation Context Tx Fail"); 3316 else { 3317 /* XXX Is the circuit breaker only for 82576? */ 3318 evcnt_attach_dynamic(&sc->sc_ev_cbrdpc, 3319 EVCNT_TYPE_MISC, NULL, xname, 3320 "Circuit Breaker Rx Dropped Packet"); 3321 evcnt_attach_dynamic(&sc->sc_ev_cbrmpc, 3322 EVCNT_TYPE_MISC, NULL, xname, 3323 "Circuit Breaker Rx Manageability Packet"); 3324 } 3325 } 3326 3327 if (sc->sc_type >= WM_T_82542_2_1) { 3328 evcnt_attach_dynamic(&sc->sc_ev_tx_xoff, EVCNT_TYPE_MISC, 3329 NULL, xname, "XOFF Transmitted"); 3330 evcnt_attach_dynamic(&sc->sc_ev_tx_xon, EVCNT_TYPE_MISC, 3331 NULL, xname, "XON Transmitted"); 3332 evcnt_attach_dynamic(&sc->sc_ev_rx_xoff, EVCNT_TYPE_MISC, 3333 NULL, xname, "XOFF Received"); 3334 evcnt_attach_dynamic(&sc->sc_ev_rx_xon, EVCNT_TYPE_MISC, 3335 NULL, xname, "XON Received"); 3336 evcnt_attach_dynamic(&sc->sc_ev_rx_macctl, EVCNT_TYPE_MISC, 3337 NULL, xname, "FC Received Unsupported"); 3338 } 3339 3340 evcnt_attach_dynamic(&sc->sc_ev_scc, EVCNT_TYPE_MISC, 3341 NULL, xname, "Single Collision"); 3342 evcnt_attach_dynamic(&sc->sc_ev_ecol, EVCNT_TYPE_MISC, 3343 NULL, xname, "Excessive Collisions"); 3344 evcnt_attach_dynamic(&sc->sc_ev_mcc, EVCNT_TYPE_MISC, 3345 NULL, xname, "Multiple Collision"); 3346 evcnt_attach_dynamic(&sc->sc_ev_latecol, EVCNT_TYPE_MISC, 3347 NULL, xname, "Late Collisions"); 3348 3349 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) 3350 evcnt_attach_dynamic(&sc->sc_ev_cbtmpc, EVCNT_TYPE_MISC, 3351 NULL, xname, "Circuit Breaker Tx Manageability Packet"); 3352 3353 evcnt_attach_dynamic(&sc->sc_ev_dc, EVCNT_TYPE_MISC, 3354 NULL, xname, "Defer"); 3355 evcnt_attach_dynamic(&sc->sc_ev_prc64, EVCNT_TYPE_MISC, 3356 NULL, xname, "Packets Rx (64 bytes)"); 3357 evcnt_attach_dynamic(&sc->sc_ev_prc127, EVCNT_TYPE_MISC, 3358 NULL, xname, "Packets Rx (65-127 bytes)"); 3359 evcnt_attach_dynamic(&sc->sc_ev_prc255, EVCNT_TYPE_MISC, 3360 NULL, xname, "Packets Rx (128-255 bytes)"); 3361 evcnt_attach_dynamic(&sc->sc_ev_prc511, EVCNT_TYPE_MISC, 3362 NULL, xname, "Packets Rx (256-511 bytes)"); 3363 evcnt_attach_dynamic(&sc->sc_ev_prc1023, EVCNT_TYPE_MISC, 3364 NULL, xname, "Packets Rx (512-1023 bytes)"); 3365 evcnt_attach_dynamic(&sc->sc_ev_prc1522, EVCNT_TYPE_MISC, 3366 NULL, xname, "Packets Rx (1024-1522 bytes)"); 3367 evcnt_attach_dynamic(&sc->sc_ev_gprc, EVCNT_TYPE_MISC, 3368 NULL, xname, "Good Packets Rx"); 3369 evcnt_attach_dynamic(&sc->sc_ev_bprc, EVCNT_TYPE_MISC, 3370 NULL, xname, "Broadcast Packets Rx"); 3371 evcnt_attach_dynamic(&sc->sc_ev_mprc, EVCNT_TYPE_MISC, 3372 NULL, xname, "Multicast Packets Rx"); 3373 evcnt_attach_dynamic(&sc->sc_ev_gptc, EVCNT_TYPE_MISC, 3374 NULL, xname, "Good Packets Tx"); 3375 evcnt_attach_dynamic(&sc->sc_ev_gorc, EVCNT_TYPE_MISC, 3376 NULL, xname, "Good Octets Rx"); 3377 evcnt_attach_dynamic(&sc->sc_ev_gotc, EVCNT_TYPE_MISC, 3378 NULL, xname, "Good Octets Tx"); 3379 evcnt_attach_dynamic(&sc->sc_ev_rnbc, EVCNT_TYPE_MISC, 3380 NULL, xname, "Rx No Buffers"); 3381 evcnt_attach_dynamic(&sc->sc_ev_ruc, EVCNT_TYPE_MISC, 3382 NULL, xname, "Rx Undersize (valid CRC)"); 3383 evcnt_attach_dynamic(&sc->sc_ev_rfc, EVCNT_TYPE_MISC, 3384 NULL, xname, "Rx Fragment (bad CRC)"); 3385 evcnt_attach_dynamic(&sc->sc_ev_roc, EVCNT_TYPE_MISC, 3386 NULL, xname, "Rx Oversize (valid CRC)"); 3387 evcnt_attach_dynamic(&sc->sc_ev_rjc, EVCNT_TYPE_MISC, 3388 NULL, xname, "Rx Jabber (bad CRC)"); 3389 if (sc->sc_type >= WM_T_82540) { 3390 evcnt_attach_dynamic(&sc->sc_ev_mgtprc, EVCNT_TYPE_MISC, 3391 NULL, xname, "Management Packets RX"); 3392 evcnt_attach_dynamic(&sc->sc_ev_mgtpdc, EVCNT_TYPE_MISC, 3393 NULL, xname, "Management Packets Dropped"); 3394 evcnt_attach_dynamic(&sc->sc_ev_mgtptc, EVCNT_TYPE_MISC, 3395 NULL, xname, "Management Packets TX"); 3396 } 3397 evcnt_attach_dynamic(&sc->sc_ev_tor, EVCNT_TYPE_MISC, 3398 NULL, xname, "Total Octets Rx"); 3399 evcnt_attach_dynamic(&sc->sc_ev_tot, EVCNT_TYPE_MISC, 3400 NULL, xname, "Total Octets Tx"); 3401 evcnt_attach_dynamic(&sc->sc_ev_tpr, EVCNT_TYPE_MISC, 3402 NULL, xname, "Total Packets Rx"); 3403 evcnt_attach_dynamic(&sc->sc_ev_tpt, EVCNT_TYPE_MISC, 3404 NULL, xname, "Total Packets Tx"); 3405 evcnt_attach_dynamic(&sc->sc_ev_ptc64, EVCNT_TYPE_MISC, 3406 NULL, xname, "Packets Tx (64 bytes)"); 3407 evcnt_attach_dynamic(&sc->sc_ev_ptc127, EVCNT_TYPE_MISC, 3408 NULL, xname, "Packets Tx (65-127 bytes)"); 3409 evcnt_attach_dynamic(&sc->sc_ev_ptc255, EVCNT_TYPE_MISC, 3410 NULL, xname, "Packets Tx (128-255 bytes)"); 3411 evcnt_attach_dynamic(&sc->sc_ev_ptc511, EVCNT_TYPE_MISC, 3412 NULL, xname, "Packets Tx (256-511 bytes)"); 3413 evcnt_attach_dynamic(&sc->sc_ev_ptc1023, EVCNT_TYPE_MISC, 3414 NULL, xname, "Packets Tx (512-1023 bytes)"); 3415 evcnt_attach_dynamic(&sc->sc_ev_ptc1522, EVCNT_TYPE_MISC, 3416 NULL, xname, "Packets Tx (1024-1522 Bytes)"); 3417 evcnt_attach_dynamic(&sc->sc_ev_mptc, EVCNT_TYPE_MISC, 3418 NULL, xname, "Multicast Packets Tx"); 3419 evcnt_attach_dynamic(&sc->sc_ev_bptc, EVCNT_TYPE_MISC, 3420 NULL, xname, "Broadcast Packets Tx"); 3421 if (sc->sc_type >= WM_T_82571) /* PCIe, 80003 and ICH/PCHs */ 3422 evcnt_attach_dynamic(&sc->sc_ev_iac, EVCNT_TYPE_MISC, 3423 NULL, xname, "Interrupt Assertion"); 3424 if (sc->sc_type < WM_T_82575) { 3425 evcnt_attach_dynamic(&sc->sc_ev_icrxptc, EVCNT_TYPE_MISC, 3426 NULL, xname, "Intr. Cause Rx Pkt Timer Expire"); 3427 evcnt_attach_dynamic(&sc->sc_ev_icrxatc, EVCNT_TYPE_MISC, 3428 NULL, xname, "Intr. Cause Rx Abs Timer Expire"); 3429 evcnt_attach_dynamic(&sc->sc_ev_ictxptc, EVCNT_TYPE_MISC, 3430 NULL, xname, "Intr. Cause Tx Pkt Timer Expire"); 3431 evcnt_attach_dynamic(&sc->sc_ev_ictxatc, EVCNT_TYPE_MISC, 3432 NULL, xname, "Intr. Cause Tx Abs Timer Expire"); 3433 evcnt_attach_dynamic(&sc->sc_ev_ictxqec, EVCNT_TYPE_MISC, 3434 NULL, xname, "Intr. Cause Tx Queue Empty"); 3435 evcnt_attach_dynamic(&sc->sc_ev_ictxqmtc, EVCNT_TYPE_MISC, 3436 NULL, xname, "Intr. Cause Tx Queue Min Thresh"); 3437 evcnt_attach_dynamic(&sc->sc_ev_rxdmtc, EVCNT_TYPE_MISC, 3438 NULL, xname, "Intr. Cause Rx Desc Min Thresh"); 3439 3440 /* XXX 82575 document says it has ICRXOC. Is that right? */ 3441 evcnt_attach_dynamic(&sc->sc_ev_icrxoc, EVCNT_TYPE_MISC, 3442 NULL, xname, "Interrupt Cause Receiver Overrun"); 3443 } else if (!WM_IS_ICHPCH(sc)) { 3444 /* 3445 * For 82575 and newer. 3446 * 3447 * On 80003, ICHs and PCHs, it seems all of the following 3448 * registers are zero. 3449 */ 3450 evcnt_attach_dynamic(&sc->sc_ev_rpthc, EVCNT_TYPE_MISC, 3451 NULL, xname, "Rx Packets To Host"); 3452 evcnt_attach_dynamic(&sc->sc_ev_debug1, EVCNT_TYPE_MISC, 3453 NULL, xname, "Debug Counter 1"); 3454 evcnt_attach_dynamic(&sc->sc_ev_debug2, EVCNT_TYPE_MISC, 3455 NULL, xname, "Debug Counter 2"); 3456 evcnt_attach_dynamic(&sc->sc_ev_debug3, EVCNT_TYPE_MISC, 3457 NULL, xname, "Debug Counter 3"); 3458 3459 /* 3460 * 82575 datasheet says 0x4118 is for TXQEC(Tx Queue Empty). 3461 * I think it's wrong. The real count I observed is the same 3462 * as GPTC(Good Packets Tx) and TPT(Total Packets Tx). 3463 * It's HGPTC(Host Good Packets Tx) which is described in 3464 * 82576's datasheet. 3465 */ 3466 evcnt_attach_dynamic(&sc->sc_ev_hgptc, EVCNT_TYPE_MISC, 3467 NULL, xname, "Host Good Packets TX"); 3468 3469 evcnt_attach_dynamic(&sc->sc_ev_debug4, EVCNT_TYPE_MISC, 3470 NULL, xname, "Debug Counter 4"); 3471 evcnt_attach_dynamic(&sc->sc_ev_rxdmtc, EVCNT_TYPE_MISC, 3472 NULL, xname, "Rx Desc Min Thresh"); 3473 /* XXX Is the circuit breaker only for 82576? */ 3474 evcnt_attach_dynamic(&sc->sc_ev_htcbdpc, EVCNT_TYPE_MISC, 3475 NULL, xname, "Host Tx Circuit Breaker Dropped Packets"); 3476 3477 evcnt_attach_dynamic(&sc->sc_ev_hgorc, EVCNT_TYPE_MISC, 3478 NULL, xname, "Host Good Octets Rx"); 3479 evcnt_attach_dynamic(&sc->sc_ev_hgotc, EVCNT_TYPE_MISC, 3480 NULL, xname, "Host Good Octets Tx"); 3481 evcnt_attach_dynamic(&sc->sc_ev_lenerrs, EVCNT_TYPE_MISC, 3482 NULL, xname, "Length Errors (length/type <= 1500)"); 3483 evcnt_attach_dynamic(&sc->sc_ev_scvpc, EVCNT_TYPE_MISC, 3484 NULL, xname, "SerDes/SGMII Code Violation Packet"); 3485 evcnt_attach_dynamic(&sc->sc_ev_hrmpc, EVCNT_TYPE_MISC, 3486 NULL, xname, "Header Redirection Missed Packet"); 3487 } 3488 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) { 3489 evcnt_attach_dynamic(&sc->sc_ev_tlpic, EVCNT_TYPE_MISC, 3490 NULL, xname, "EEE Tx LPI"); 3491 evcnt_attach_dynamic(&sc->sc_ev_rlpic, EVCNT_TYPE_MISC, 3492 NULL, xname, "EEE Rx LPI"); 3493 evcnt_attach_dynamic(&sc->sc_ev_b2ogprc, EVCNT_TYPE_MISC, 3494 NULL, xname, "BMC2OS Packets received by host"); 3495 evcnt_attach_dynamic(&sc->sc_ev_o2bspc, EVCNT_TYPE_MISC, 3496 NULL, xname, "OS2BMC Packets transmitted by host"); 3497 evcnt_attach_dynamic(&sc->sc_ev_b2ospc, EVCNT_TYPE_MISC, 3498 NULL, xname, "BMC2OS Packets sent by BMC"); 3499 evcnt_attach_dynamic(&sc->sc_ev_o2bgptc, EVCNT_TYPE_MISC, 3500 NULL, xname, "OS2BMC Packets received by BMC"); 3501 } 3502 #endif /* WM_EVENT_COUNTERS */ 3503 3504 sc->sc_txrx_use_workqueue = false; 3505 3506 if (wm_phy_need_linkdown_discard(sc)) { 3507 DPRINTF(sc, WM_DEBUG_LINK, 3508 ("%s: %s: Set linkdown discard flag\n", 3509 device_xname(sc->sc_dev), __func__)); 3510 wm_set_linkdown_discard(sc); 3511 } 3512 3513 wm_init_sysctls(sc); 3514 3515 if (pmf_device_register(self, wm_suspend, wm_resume)) 3516 pmf_class_network_register(self, ifp); 3517 else 3518 aprint_error_dev(self, "couldn't establish power handler\n"); 3519 3520 sc->sc_flags |= WM_F_ATTACHED; 3521 out: 3522 return; 3523 } 3524 3525 /* The detach function (ca_detach) */ 3526 static int 3527 wm_detach(device_t self, int flags __unused) 3528 { 3529 struct wm_softc *sc = device_private(self); 3530 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 3531 int i; 3532 3533 if ((sc->sc_flags & WM_F_ATTACHED) == 0) 3534 return 0; 3535 3536 /* Stop the interface. Callouts are stopped in it. */ 3537 IFNET_LOCK(ifp); 3538 sc->sc_dying = true; 3539 wm_stop(ifp, 1); 3540 IFNET_UNLOCK(ifp); 3541 3542 pmf_device_deregister(self); 3543 3544 sysctl_teardown(&sc->sc_sysctllog); 3545 3546 #ifdef WM_EVENT_COUNTERS 3547 evcnt_detach(&sc->sc_ev_linkintr); 3548 3549 evcnt_detach(&sc->sc_ev_crcerrs); 3550 evcnt_detach(&sc->sc_ev_symerrc); 3551 evcnt_detach(&sc->sc_ev_mpc); 3552 evcnt_detach(&sc->sc_ev_colc); 3553 evcnt_detach(&sc->sc_ev_sec); 3554 evcnt_detach(&sc->sc_ev_rlec); 3555 3556 if (sc->sc_type >= WM_T_82543) { 3557 evcnt_detach(&sc->sc_ev_algnerrc); 3558 evcnt_detach(&sc->sc_ev_rxerrc); 3559 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 3560 evcnt_detach(&sc->sc_ev_cexterr); 3561 else 3562 evcnt_detach(&sc->sc_ev_htdpmc); 3563 3564 evcnt_detach(&sc->sc_ev_tncrs); 3565 evcnt_detach(&sc->sc_ev_tsctc); 3566 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 3567 evcnt_detach(&sc->sc_ev_tsctfc); 3568 else { 3569 evcnt_detach(&sc->sc_ev_cbrdpc); 3570 evcnt_detach(&sc->sc_ev_cbrmpc); 3571 } 3572 } 3573 3574 if (sc->sc_type >= WM_T_82542_2_1) { 3575 evcnt_detach(&sc->sc_ev_tx_xoff); 3576 evcnt_detach(&sc->sc_ev_tx_xon); 3577 evcnt_detach(&sc->sc_ev_rx_xoff); 3578 evcnt_detach(&sc->sc_ev_rx_xon); 3579 evcnt_detach(&sc->sc_ev_rx_macctl); 3580 } 3581 3582 evcnt_detach(&sc->sc_ev_scc); 3583 evcnt_detach(&sc->sc_ev_ecol); 3584 evcnt_detach(&sc->sc_ev_mcc); 3585 evcnt_detach(&sc->sc_ev_latecol); 3586 3587 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) 3588 evcnt_detach(&sc->sc_ev_cbtmpc); 3589 3590 evcnt_detach(&sc->sc_ev_dc); 3591 evcnt_detach(&sc->sc_ev_prc64); 3592 evcnt_detach(&sc->sc_ev_prc127); 3593 evcnt_detach(&sc->sc_ev_prc255); 3594 evcnt_detach(&sc->sc_ev_prc511); 3595 evcnt_detach(&sc->sc_ev_prc1023); 3596 evcnt_detach(&sc->sc_ev_prc1522); 3597 evcnt_detach(&sc->sc_ev_gprc); 3598 evcnt_detach(&sc->sc_ev_bprc); 3599 evcnt_detach(&sc->sc_ev_mprc); 3600 evcnt_detach(&sc->sc_ev_gptc); 3601 evcnt_detach(&sc->sc_ev_gorc); 3602 evcnt_detach(&sc->sc_ev_gotc); 3603 evcnt_detach(&sc->sc_ev_rnbc); 3604 evcnt_detach(&sc->sc_ev_ruc); 3605 evcnt_detach(&sc->sc_ev_rfc); 3606 evcnt_detach(&sc->sc_ev_roc); 3607 evcnt_detach(&sc->sc_ev_rjc); 3608 if (sc->sc_type >= WM_T_82540) { 3609 evcnt_detach(&sc->sc_ev_mgtprc); 3610 evcnt_detach(&sc->sc_ev_mgtpdc); 3611 evcnt_detach(&sc->sc_ev_mgtptc); 3612 } 3613 evcnt_detach(&sc->sc_ev_tor); 3614 evcnt_detach(&sc->sc_ev_tot); 3615 evcnt_detach(&sc->sc_ev_tpr); 3616 evcnt_detach(&sc->sc_ev_tpt); 3617 evcnt_detach(&sc->sc_ev_ptc64); 3618 evcnt_detach(&sc->sc_ev_ptc127); 3619 evcnt_detach(&sc->sc_ev_ptc255); 3620 evcnt_detach(&sc->sc_ev_ptc511); 3621 evcnt_detach(&sc->sc_ev_ptc1023); 3622 evcnt_detach(&sc->sc_ev_ptc1522); 3623 evcnt_detach(&sc->sc_ev_mptc); 3624 evcnt_detach(&sc->sc_ev_bptc); 3625 if (sc->sc_type >= WM_T_82571) 3626 evcnt_detach(&sc->sc_ev_iac); 3627 if (sc->sc_type < WM_T_82575) { 3628 evcnt_detach(&sc->sc_ev_icrxptc); 3629 evcnt_detach(&sc->sc_ev_icrxatc); 3630 evcnt_detach(&sc->sc_ev_ictxptc); 3631 evcnt_detach(&sc->sc_ev_ictxatc); 3632 evcnt_detach(&sc->sc_ev_ictxqec); 3633 evcnt_detach(&sc->sc_ev_ictxqmtc); 3634 evcnt_detach(&sc->sc_ev_rxdmtc); 3635 evcnt_detach(&sc->sc_ev_icrxoc); 3636 } else if (!WM_IS_ICHPCH(sc)) { 3637 evcnt_detach(&sc->sc_ev_rpthc); 3638 evcnt_detach(&sc->sc_ev_debug1); 3639 evcnt_detach(&sc->sc_ev_debug2); 3640 evcnt_detach(&sc->sc_ev_debug3); 3641 evcnt_detach(&sc->sc_ev_hgptc); 3642 evcnt_detach(&sc->sc_ev_debug4); 3643 evcnt_detach(&sc->sc_ev_rxdmtc); 3644 evcnt_detach(&sc->sc_ev_htcbdpc); 3645 3646 evcnt_detach(&sc->sc_ev_hgorc); 3647 evcnt_detach(&sc->sc_ev_hgotc); 3648 evcnt_detach(&sc->sc_ev_lenerrs); 3649 evcnt_detach(&sc->sc_ev_scvpc); 3650 evcnt_detach(&sc->sc_ev_hrmpc); 3651 } 3652 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) { 3653 evcnt_detach(&sc->sc_ev_tlpic); 3654 evcnt_detach(&sc->sc_ev_rlpic); 3655 evcnt_detach(&sc->sc_ev_b2ogprc); 3656 evcnt_detach(&sc->sc_ev_o2bspc); 3657 evcnt_detach(&sc->sc_ev_b2ospc); 3658 evcnt_detach(&sc->sc_ev_o2bgptc); 3659 } 3660 #endif /* WM_EVENT_COUNTERS */ 3661 3662 rnd_detach_source(&sc->rnd_source); 3663 3664 /* Tell the firmware about the release */ 3665 mutex_enter(sc->sc_core_lock); 3666 wm_release_manageability(sc); 3667 wm_release_hw_control(sc); 3668 wm_enable_wakeup(sc); 3669 mutex_exit(sc->sc_core_lock); 3670 3671 mii_detach(&sc->sc_mii, MII_PHY_ANY, MII_OFFSET_ANY); 3672 3673 ether_ifdetach(ifp); 3674 if_detach(ifp); 3675 if_percpuq_destroy(sc->sc_ipq); 3676 3677 /* Delete all remaining media. */ 3678 ifmedia_fini(&sc->sc_mii.mii_media); 3679 3680 /* Unload RX dmamaps and free mbufs */ 3681 for (i = 0; i < sc->sc_nqueues; i++) { 3682 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 3683 mutex_enter(rxq->rxq_lock); 3684 wm_rxdrain(rxq); 3685 mutex_exit(rxq->rxq_lock); 3686 } 3687 /* Must unlock here */ 3688 3689 /* Disestablish the interrupt handler */ 3690 for (i = 0; i < sc->sc_nintrs; i++) { 3691 if (sc->sc_ihs[i] != NULL) { 3692 pci_intr_disestablish(sc->sc_pc, sc->sc_ihs[i]); 3693 sc->sc_ihs[i] = NULL; 3694 } 3695 } 3696 pci_intr_release(sc->sc_pc, sc->sc_intrs, sc->sc_nintrs); 3697 3698 /* wm_stop() ensured that the workqueues are stopped. */ 3699 workqueue_destroy(sc->sc_queue_wq); 3700 workqueue_destroy(sc->sc_reset_wq); 3701 3702 for (i = 0; i < sc->sc_nqueues; i++) 3703 softint_disestablish(sc->sc_queue[i].wmq_si); 3704 3705 wm_free_txrx_queues(sc); 3706 3707 /* Unmap the registers */ 3708 if (sc->sc_ss) { 3709 bus_space_unmap(sc->sc_st, sc->sc_sh, sc->sc_ss); 3710 sc->sc_ss = 0; 3711 } 3712 if (sc->sc_ios) { 3713 bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_ios); 3714 sc->sc_ios = 0; 3715 } 3716 if (sc->sc_flashs) { 3717 bus_space_unmap(sc->sc_flasht, sc->sc_flashh, sc->sc_flashs); 3718 sc->sc_flashs = 0; 3719 } 3720 3721 if (sc->sc_core_lock) 3722 mutex_obj_free(sc->sc_core_lock); 3723 if (sc->sc_ich_phymtx) 3724 mutex_obj_free(sc->sc_ich_phymtx); 3725 if (sc->sc_ich_nvmmtx) 3726 mutex_obj_free(sc->sc_ich_nvmmtx); 3727 3728 return 0; 3729 } 3730 3731 static bool 3732 wm_suspend(device_t self, const pmf_qual_t *qual) 3733 { 3734 struct wm_softc *sc = device_private(self); 3735 3736 wm_release_manageability(sc); 3737 wm_release_hw_control(sc); 3738 wm_enable_wakeup(sc); 3739 3740 return true; 3741 } 3742 3743 static bool 3744 wm_resume(device_t self, const pmf_qual_t *qual) 3745 { 3746 struct wm_softc *sc = device_private(self); 3747 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 3748 pcireg_t reg; 3749 char buf[256]; 3750 3751 reg = CSR_READ(sc, WMREG_WUS); 3752 if (reg != 0) { 3753 snprintb(buf, sizeof(buf), WUS_FLAGS, reg); 3754 device_printf(sc->sc_dev, "wakeup status %s\n", buf); 3755 CSR_WRITE(sc, WMREG_WUS, 0xffffffff); /* W1C */ 3756 } 3757 3758 if (sc->sc_type >= WM_T_PCH2) 3759 wm_resume_workarounds_pchlan(sc); 3760 IFNET_LOCK(ifp); 3761 if ((ifp->if_flags & IFF_UP) == 0) { 3762 /* >= PCH_SPT hardware workaround before reset. */ 3763 if (sc->sc_type >= WM_T_PCH_SPT) 3764 wm_flush_desc_rings(sc); 3765 3766 wm_reset(sc); 3767 /* Non-AMT based hardware can now take control from firmware */ 3768 if ((sc->sc_flags & WM_F_HAS_AMT) == 0) 3769 wm_get_hw_control(sc); 3770 wm_init_manageability(sc); 3771 } else { 3772 /* 3773 * We called pmf_class_network_register(), so if_init() is 3774 * automatically called when IFF_UP. wm_reset(), 3775 * wm_get_hw_control() and wm_init_manageability() are called 3776 * via wm_init(). 3777 */ 3778 } 3779 IFNET_UNLOCK(ifp); 3780 3781 return true; 3782 } 3783 3784 /* 3785 * wm_watchdog: 3786 * 3787 * Watchdog checker. 3788 */ 3789 static bool 3790 wm_watchdog(struct ifnet *ifp) 3791 { 3792 int qid; 3793 struct wm_softc *sc = ifp->if_softc; 3794 uint16_t hang_queue = 0; /* Max queue number of wm(4) is 82576's 16. */ 3795 3796 for (qid = 0; qid < sc->sc_nqueues; qid++) { 3797 struct wm_txqueue *txq = &sc->sc_queue[qid].wmq_txq; 3798 3799 wm_watchdog_txq(ifp, txq, &hang_queue); 3800 } 3801 3802 #ifdef WM_DEBUG 3803 if (sc->sc_trigger_reset) { 3804 /* debug operation, no need for atomicity or reliability */ 3805 sc->sc_trigger_reset = 0; 3806 hang_queue++; 3807 } 3808 #endif 3809 3810 if (hang_queue == 0) 3811 return true; 3812 3813 if (atomic_swap_uint(&sc->sc_reset_pending, 1) == 0) 3814 workqueue_enqueue(sc->sc_reset_wq, &sc->sc_reset_work, NULL); 3815 3816 return false; 3817 } 3818 3819 /* 3820 * Perform an interface watchdog reset. 3821 */ 3822 static void 3823 wm_handle_reset_work(struct work *work, void *arg) 3824 { 3825 struct wm_softc * const sc = arg; 3826 struct ifnet * const ifp = &sc->sc_ethercom.ec_if; 3827 3828 /* Don't want ioctl operations to happen */ 3829 IFNET_LOCK(ifp); 3830 3831 /* reset the interface. */ 3832 wm_init(ifp); 3833 3834 IFNET_UNLOCK(ifp); 3835 3836 /* 3837 * There are still some upper layer processing which call 3838 * ifp->if_start(). e.g. ALTQ or one CPU system 3839 */ 3840 /* Try to get more packets going. */ 3841 ifp->if_start(ifp); 3842 3843 atomic_store_relaxed(&sc->sc_reset_pending, 0); 3844 } 3845 3846 3847 static void 3848 wm_watchdog_txq(struct ifnet *ifp, struct wm_txqueue *txq, uint16_t *hang) 3849 { 3850 3851 mutex_enter(txq->txq_lock); 3852 if (txq->txq_sending && 3853 time_uptime - txq->txq_lastsent > wm_watchdog_timeout) 3854 wm_watchdog_txq_locked(ifp, txq, hang); 3855 3856 mutex_exit(txq->txq_lock); 3857 } 3858 3859 static void 3860 wm_watchdog_txq_locked(struct ifnet *ifp, struct wm_txqueue *txq, 3861 uint16_t *hang) 3862 { 3863 struct wm_softc *sc = ifp->if_softc; 3864 struct wm_queue *wmq = container_of(txq, struct wm_queue, wmq_txq); 3865 3866 KASSERT(mutex_owned(txq->txq_lock)); 3867 3868 /* 3869 * Since we're using delayed interrupts, sweep up 3870 * before we report an error. 3871 */ 3872 wm_txeof(txq, UINT_MAX); 3873 3874 if (txq->txq_sending) 3875 *hang |= __BIT(wmq->wmq_id); 3876 3877 if (txq->txq_free == WM_NTXDESC(txq)) { 3878 log(LOG_ERR, "%s: device timeout (lost interrupt)\n", 3879 device_xname(sc->sc_dev)); 3880 } else { 3881 #ifdef WM_DEBUG 3882 int i, j; 3883 struct wm_txsoft *txs; 3884 #endif 3885 log(LOG_ERR, 3886 "%s: device timeout (txfree %d txsfree %d txnext %d)\n", 3887 device_xname(sc->sc_dev), txq->txq_free, txq->txq_sfree, 3888 txq->txq_next); 3889 if_statinc(ifp, if_oerrors); 3890 #ifdef WM_DEBUG 3891 for (i = txq->txq_sdirty; i != txq->txq_snext; 3892 i = WM_NEXTTXS(txq, i)) { 3893 txs = &txq->txq_soft[i]; 3894 printf("txs %d tx %d -> %d\n", 3895 i, txs->txs_firstdesc, txs->txs_lastdesc); 3896 for (j = txs->txs_firstdesc; ; j = WM_NEXTTX(txq, j)) { 3897 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 3898 printf("\tdesc %d: 0x%" PRIx64 "\n", j, 3899 txq->txq_nq_descs[j].nqtx_data.nqtxd_addr); 3900 printf("\t %#08x%08x\n", 3901 txq->txq_nq_descs[j].nqtx_data.nqtxd_fields, 3902 txq->txq_nq_descs[j].nqtx_data.nqtxd_cmdlen); 3903 } else { 3904 printf("\tdesc %d: 0x%" PRIx64 "\n", j, 3905 (uint64_t)txq->txq_descs[j].wtx_addr.wa_high << 32 | 3906 txq->txq_descs[j].wtx_addr.wa_low); 3907 printf("\t %#04x%02x%02x%08x\n", 3908 txq->txq_descs[j].wtx_fields.wtxu_vlan, 3909 txq->txq_descs[j].wtx_fields.wtxu_options, 3910 txq->txq_descs[j].wtx_fields.wtxu_status, 3911 txq->txq_descs[j].wtx_cmdlen); 3912 } 3913 if (j == txs->txs_lastdesc) 3914 break; 3915 } 3916 } 3917 #endif 3918 } 3919 } 3920 3921 /* 3922 * wm_tick: 3923 * 3924 * One second timer, used to check link status, sweep up 3925 * completed transmit jobs, etc. 3926 */ 3927 static void 3928 wm_tick(void *arg) 3929 { 3930 struct wm_softc *sc = arg; 3931 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 3932 3933 mutex_enter(sc->sc_core_lock); 3934 3935 if (sc->sc_core_stopping) { 3936 mutex_exit(sc->sc_core_lock); 3937 return; 3938 } 3939 3940 wm_update_stats(sc); 3941 3942 if (sc->sc_flags & WM_F_HAS_MII) { 3943 bool dotick = true; 3944 3945 /* 3946 * Workaround for some chips to delay sending LINK_STATE_UP. 3947 * See also wm_linkintr_gmii() and wm_gmii_mediastatus(). 3948 */ 3949 if ((sc->sc_flags & WM_F_DELAY_LINKUP) != 0) { 3950 struct timeval now; 3951 3952 getmicrotime(&now); 3953 if (timercmp(&now, &sc->sc_linkup_delay_time, <)) 3954 dotick = false; 3955 else if (sc->sc_linkup_delay_time.tv_sec != 0) { 3956 /* Simplify by checking tv_sec only. */ 3957 3958 sc->sc_linkup_delay_time.tv_sec = 0; 3959 sc->sc_linkup_delay_time.tv_usec = 0; 3960 } 3961 } 3962 if (dotick) 3963 mii_tick(&sc->sc_mii); 3964 } else if ((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211) 3965 && (sc->sc_mediatype == WM_MEDIATYPE_SERDES)) 3966 wm_serdes_tick(sc); 3967 else 3968 wm_tbi_tick(sc); 3969 3970 mutex_exit(sc->sc_core_lock); 3971 3972 if (wm_watchdog(ifp)) 3973 callout_schedule(&sc->sc_tick_ch, hz); 3974 } 3975 3976 static int 3977 wm_ifflags_cb(struct ethercom *ec) 3978 { 3979 struct ifnet *ifp = &ec->ec_if; 3980 struct wm_softc *sc = ifp->if_softc; 3981 u_short iffchange; 3982 int ecchange; 3983 bool needreset = false; 3984 int rc = 0; 3985 3986 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 3987 device_xname(sc->sc_dev), __func__)); 3988 3989 KASSERT(IFNET_LOCKED(ifp)); 3990 3991 mutex_enter(sc->sc_core_lock); 3992 3993 /* 3994 * Check for if_flags. 3995 * Main usage is to prevent linkdown when opening bpf. 3996 */ 3997 iffchange = ifp->if_flags ^ sc->sc_if_flags; 3998 sc->sc_if_flags = ifp->if_flags; 3999 if ((iffchange & ~(IFF_CANTCHANGE | IFF_DEBUG)) != 0) { 4000 needreset = true; 4001 goto ec; 4002 } 4003 4004 /* iff related updates */ 4005 if ((iffchange & IFF_PROMISC) != 0) 4006 wm_set_filter(sc); 4007 4008 wm_set_vlan(sc); 4009 4010 ec: 4011 /* Check for ec_capenable. */ 4012 ecchange = ec->ec_capenable ^ sc->sc_ec_capenable; 4013 sc->sc_ec_capenable = ec->ec_capenable; 4014 if ((ecchange & ~ETHERCAP_EEE) != 0) { 4015 needreset = true; 4016 goto out; 4017 } 4018 4019 /* ec related updates */ 4020 wm_set_eee(sc); 4021 4022 out: 4023 if (needreset) 4024 rc = ENETRESET; 4025 mutex_exit(sc->sc_core_lock); 4026 4027 return rc; 4028 } 4029 4030 static bool 4031 wm_phy_need_linkdown_discard(struct wm_softc *sc) 4032 { 4033 4034 switch (sc->sc_phytype) { 4035 case WMPHY_82577: /* ihphy */ 4036 case WMPHY_82578: /* atphy */ 4037 case WMPHY_82579: /* ihphy */ 4038 case WMPHY_I217: /* ihphy */ 4039 case WMPHY_82580: /* ihphy */ 4040 case WMPHY_I350: /* ihphy */ 4041 return true; 4042 default: 4043 return false; 4044 } 4045 } 4046 4047 static void 4048 wm_set_linkdown_discard(struct wm_softc *sc) 4049 { 4050 4051 for (int i = 0; i < sc->sc_nqueues; i++) { 4052 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 4053 4054 mutex_enter(txq->txq_lock); 4055 txq->txq_flags |= WM_TXQ_LINKDOWN_DISCARD; 4056 mutex_exit(txq->txq_lock); 4057 } 4058 } 4059 4060 static void 4061 wm_clear_linkdown_discard(struct wm_softc *sc) 4062 { 4063 4064 for (int i = 0; i < sc->sc_nqueues; i++) { 4065 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 4066 4067 mutex_enter(txq->txq_lock); 4068 txq->txq_flags &= ~WM_TXQ_LINKDOWN_DISCARD; 4069 mutex_exit(txq->txq_lock); 4070 } 4071 } 4072 4073 /* 4074 * wm_ioctl: [ifnet interface function] 4075 * 4076 * Handle control requests from the operator. 4077 */ 4078 static int 4079 wm_ioctl(struct ifnet *ifp, u_long cmd, void *data) 4080 { 4081 struct wm_softc *sc = ifp->if_softc; 4082 struct ifreq *ifr = (struct ifreq *)data; 4083 struct ifaddr *ifa = (struct ifaddr *)data; 4084 struct sockaddr_dl *sdl; 4085 int error; 4086 4087 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4088 device_xname(sc->sc_dev), __func__)); 4089 4090 switch (cmd) { 4091 case SIOCADDMULTI: 4092 case SIOCDELMULTI: 4093 break; 4094 default: 4095 KASSERT(IFNET_LOCKED(ifp)); 4096 } 4097 4098 if (cmd == SIOCZIFDATA) { 4099 /* 4100 * Special handling for SIOCZIFDATA. 4101 * Copying and clearing the if_data structure is done with 4102 * ether_ioctl() below. 4103 */ 4104 mutex_enter(sc->sc_core_lock); 4105 wm_update_stats(sc); 4106 wm_clear_evcnt(sc); 4107 mutex_exit(sc->sc_core_lock); 4108 } 4109 4110 switch (cmd) { 4111 case SIOCSIFMEDIA: 4112 mutex_enter(sc->sc_core_lock); 4113 /* Flow control requires full-duplex mode. */ 4114 if (IFM_SUBTYPE(ifr->ifr_media) == IFM_AUTO || 4115 (ifr->ifr_media & IFM_FDX) == 0) 4116 ifr->ifr_media &= ~IFM_ETH_FMASK; 4117 if (IFM_SUBTYPE(ifr->ifr_media) != IFM_AUTO) { 4118 if ((ifr->ifr_media & IFM_ETH_FMASK) == IFM_FLOW) { 4119 /* We can do both TXPAUSE and RXPAUSE. */ 4120 ifr->ifr_media |= 4121 IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE; 4122 } 4123 sc->sc_flowflags = ifr->ifr_media & IFM_ETH_FMASK; 4124 } 4125 mutex_exit(sc->sc_core_lock); 4126 error = ifmedia_ioctl(ifp, ifr, &sc->sc_mii.mii_media, cmd); 4127 if (error == 0 && wm_phy_need_linkdown_discard(sc)) { 4128 if (IFM_SUBTYPE(ifr->ifr_media) == IFM_NONE) { 4129 DPRINTF(sc, WM_DEBUG_LINK, 4130 ("%s: %s: Set linkdown discard flag\n", 4131 device_xname(sc->sc_dev), __func__)); 4132 wm_set_linkdown_discard(sc); 4133 } 4134 } 4135 break; 4136 case SIOCINITIFADDR: 4137 mutex_enter(sc->sc_core_lock); 4138 if (ifa->ifa_addr->sa_family == AF_LINK) { 4139 sdl = satosdl(ifp->if_dl->ifa_addr); 4140 (void)sockaddr_dl_setaddr(sdl, sdl->sdl_len, 4141 LLADDR(satosdl(ifa->ifa_addr)), ifp->if_addrlen); 4142 /* Unicast address is the first multicast entry */ 4143 wm_set_filter(sc); 4144 error = 0; 4145 mutex_exit(sc->sc_core_lock); 4146 break; 4147 } 4148 mutex_exit(sc->sc_core_lock); 4149 /*FALLTHROUGH*/ 4150 default: 4151 if (cmd == SIOCSIFFLAGS && wm_phy_need_linkdown_discard(sc)) { 4152 if (((ifp->if_flags & IFF_UP) != 0) && 4153 ((ifr->ifr_flags & IFF_UP) == 0)) { 4154 DPRINTF(sc, WM_DEBUG_LINK, 4155 ("%s: %s: Set linkdown discard flag\n", 4156 device_xname(sc->sc_dev), __func__)); 4157 wm_set_linkdown_discard(sc); 4158 } 4159 } 4160 const int s = splnet(); 4161 /* It may call wm_start, so unlock here */ 4162 error = ether_ioctl(ifp, cmd, data); 4163 splx(s); 4164 if (error != ENETRESET) 4165 break; 4166 4167 error = 0; 4168 4169 if (cmd == SIOCSIFCAP) 4170 error = if_init(ifp); 4171 else if (cmd == SIOCADDMULTI || cmd == SIOCDELMULTI) { 4172 mutex_enter(sc->sc_core_lock); 4173 if (sc->sc_if_flags & IFF_RUNNING) { 4174 /* 4175 * Multicast list has changed; set the 4176 * hardware filter accordingly. 4177 */ 4178 wm_set_filter(sc); 4179 } 4180 mutex_exit(sc->sc_core_lock); 4181 } 4182 break; 4183 } 4184 4185 return error; 4186 } 4187 4188 /* MAC address related */ 4189 4190 /* 4191 * Get the offset of MAC address and return it. 4192 * If error occured, use offset 0. 4193 */ 4194 static uint16_t 4195 wm_check_alt_mac_addr(struct wm_softc *sc) 4196 { 4197 uint16_t myea[ETHER_ADDR_LEN / 2]; 4198 uint16_t offset = NVM_OFF_MACADDR; 4199 4200 /* Try to read alternative MAC address pointer */ 4201 if (wm_nvm_read(sc, NVM_OFF_ALT_MAC_ADDR_PTR, 1, &offset) != 0) 4202 return 0; 4203 4204 /* Check pointer if it's valid or not. */ 4205 if ((offset == 0x0000) || (offset == 0xffff)) 4206 return 0; 4207 4208 offset += NVM_OFF_MACADDR_82571(sc->sc_funcid); 4209 /* 4210 * Check whether alternative MAC address is valid or not. 4211 * Some cards have non 0xffff pointer but those don't use 4212 * alternative MAC address in reality. 4213 * 4214 * Check whether the broadcast bit is set or not. 4215 */ 4216 if (wm_nvm_read(sc, offset, 1, myea) == 0) 4217 if (((myea[0] & 0xff) & 0x01) == 0) 4218 return offset; /* Found */ 4219 4220 /* Not found */ 4221 return 0; 4222 } 4223 4224 static int 4225 wm_read_mac_addr(struct wm_softc *sc, uint8_t *enaddr) 4226 { 4227 uint16_t myea[ETHER_ADDR_LEN / 2]; 4228 uint16_t offset = NVM_OFF_MACADDR; 4229 int do_invert = 0; 4230 4231 switch (sc->sc_type) { 4232 case WM_T_82580: 4233 case WM_T_I350: 4234 case WM_T_I354: 4235 /* EEPROM Top Level Partitioning */ 4236 offset = NVM_OFF_LAN_FUNC_82580(sc->sc_funcid) + 0; 4237 break; 4238 case WM_T_82571: 4239 case WM_T_82575: 4240 case WM_T_82576: 4241 case WM_T_80003: 4242 case WM_T_I210: 4243 case WM_T_I211: 4244 offset = wm_check_alt_mac_addr(sc); 4245 if (offset == 0) 4246 if ((sc->sc_funcid & 0x01) == 1) 4247 do_invert = 1; 4248 break; 4249 default: 4250 if ((sc->sc_funcid & 0x01) == 1) 4251 do_invert = 1; 4252 break; 4253 } 4254 4255 if (wm_nvm_read(sc, offset, sizeof(myea) / sizeof(myea[0]), myea) != 0) 4256 goto bad; 4257 4258 enaddr[0] = myea[0] & 0xff; 4259 enaddr[1] = myea[0] >> 8; 4260 enaddr[2] = myea[1] & 0xff; 4261 enaddr[3] = myea[1] >> 8; 4262 enaddr[4] = myea[2] & 0xff; 4263 enaddr[5] = myea[2] >> 8; 4264 4265 /* 4266 * Toggle the LSB of the MAC address on the second port 4267 * of some dual port cards. 4268 */ 4269 if (do_invert != 0) 4270 enaddr[5] ^= 1; 4271 4272 return 0; 4273 4274 bad: 4275 return -1; 4276 } 4277 4278 /* 4279 * wm_set_ral: 4280 * 4281 * Set an entery in the receive address list. 4282 */ 4283 static void 4284 wm_set_ral(struct wm_softc *sc, const uint8_t *enaddr, int idx) 4285 { 4286 uint32_t ral_lo, ral_hi, addrl, addrh; 4287 uint32_t wlock_mac; 4288 int rv; 4289 4290 if (enaddr != NULL) { 4291 ral_lo = (uint32_t)enaddr[0] | ((uint32_t)enaddr[1] << 8) | 4292 ((uint32_t)enaddr[2] << 16) | ((uint32_t)enaddr[3] << 24); 4293 ral_hi = (uint32_t)enaddr[4] | ((uint32_t)enaddr[5] << 8); 4294 ral_hi |= RAL_AV; 4295 } else { 4296 ral_lo = 0; 4297 ral_hi = 0; 4298 } 4299 4300 switch (sc->sc_type) { 4301 case WM_T_82542_2_0: 4302 case WM_T_82542_2_1: 4303 case WM_T_82543: 4304 CSR_WRITE(sc, WMREG_RAL(idx), ral_lo); 4305 CSR_WRITE_FLUSH(sc); 4306 CSR_WRITE(sc, WMREG_RAH(idx), ral_hi); 4307 CSR_WRITE_FLUSH(sc); 4308 break; 4309 case WM_T_PCH2: 4310 case WM_T_PCH_LPT: 4311 case WM_T_PCH_SPT: 4312 case WM_T_PCH_CNP: 4313 case WM_T_PCH_TGP: 4314 if (idx == 0) { 4315 CSR_WRITE(sc, WMREG_CORDOVA_RAL(idx), ral_lo); 4316 CSR_WRITE_FLUSH(sc); 4317 CSR_WRITE(sc, WMREG_CORDOVA_RAH(idx), ral_hi); 4318 CSR_WRITE_FLUSH(sc); 4319 return; 4320 } 4321 if (sc->sc_type != WM_T_PCH2) { 4322 wlock_mac = __SHIFTOUT(CSR_READ(sc, WMREG_FWSM), 4323 FWSM_WLOCK_MAC); 4324 addrl = WMREG_SHRAL(idx - 1); 4325 addrh = WMREG_SHRAH(idx - 1); 4326 } else { 4327 wlock_mac = 0; 4328 addrl = WMREG_PCH_LPT_SHRAL(idx - 1); 4329 addrh = WMREG_PCH_LPT_SHRAH(idx - 1); 4330 } 4331 4332 if ((wlock_mac == 0) || (idx <= wlock_mac)) { 4333 rv = wm_get_swflag_ich8lan(sc); 4334 if (rv != 0) 4335 return; 4336 CSR_WRITE(sc, addrl, ral_lo); 4337 CSR_WRITE_FLUSH(sc); 4338 CSR_WRITE(sc, addrh, ral_hi); 4339 CSR_WRITE_FLUSH(sc); 4340 wm_put_swflag_ich8lan(sc); 4341 } 4342 4343 break; 4344 default: 4345 CSR_WRITE(sc, WMREG_CORDOVA_RAL(idx), ral_lo); 4346 CSR_WRITE_FLUSH(sc); 4347 CSR_WRITE(sc, WMREG_CORDOVA_RAH(idx), ral_hi); 4348 CSR_WRITE_FLUSH(sc); 4349 break; 4350 } 4351 } 4352 4353 /* 4354 * wm_mchash: 4355 * 4356 * Compute the hash of the multicast address for the 4096-bit 4357 * multicast filter. 4358 */ 4359 static uint32_t 4360 wm_mchash(struct wm_softc *sc, const uint8_t *enaddr) 4361 { 4362 static const int lo_shift[4] = { 4, 3, 2, 0 }; 4363 static const int hi_shift[4] = { 4, 5, 6, 8 }; 4364 static const int ich8_lo_shift[4] = { 6, 5, 4, 2 }; 4365 static const int ich8_hi_shift[4] = { 2, 3, 4, 6 }; 4366 uint32_t hash; 4367 4368 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 4369 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 4370 || (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT) 4371 || (sc->sc_type == WM_T_PCH_SPT) || (sc->sc_type == WM_T_PCH_CNP) 4372 || (sc->sc_type == WM_T_PCH_TGP)) { 4373 hash = (enaddr[4] >> ich8_lo_shift[sc->sc_mchash_type]) | 4374 (((uint16_t)enaddr[5]) << ich8_hi_shift[sc->sc_mchash_type]); 4375 return (hash & 0x3ff); 4376 } 4377 hash = (enaddr[4] >> lo_shift[sc->sc_mchash_type]) | 4378 (((uint16_t)enaddr[5]) << hi_shift[sc->sc_mchash_type]); 4379 4380 return (hash & 0xfff); 4381 } 4382 4383 /* 4384 * 4385 * 4386 */ 4387 static int 4388 wm_rar_count(struct wm_softc *sc) 4389 { 4390 int size; 4391 4392 switch (sc->sc_type) { 4393 case WM_T_ICH8: 4394 size = WM_RAL_TABSIZE_ICH8 -1; 4395 break; 4396 case WM_T_ICH9: 4397 case WM_T_ICH10: 4398 case WM_T_PCH: 4399 size = WM_RAL_TABSIZE_ICH8; 4400 break; 4401 case WM_T_PCH2: 4402 size = WM_RAL_TABSIZE_PCH2; 4403 break; 4404 case WM_T_PCH_LPT: 4405 case WM_T_PCH_SPT: 4406 case WM_T_PCH_CNP: 4407 case WM_T_PCH_TGP: 4408 size = WM_RAL_TABSIZE_PCH_LPT; 4409 break; 4410 case WM_T_82575: 4411 case WM_T_I210: 4412 case WM_T_I211: 4413 size = WM_RAL_TABSIZE_82575; 4414 break; 4415 case WM_T_82576: 4416 case WM_T_82580: 4417 size = WM_RAL_TABSIZE_82576; 4418 break; 4419 case WM_T_I350: 4420 case WM_T_I354: 4421 size = WM_RAL_TABSIZE_I350; 4422 break; 4423 default: 4424 size = WM_RAL_TABSIZE; 4425 } 4426 4427 return size; 4428 } 4429 4430 /* 4431 * wm_set_filter: 4432 * 4433 * Set up the receive filter. 4434 */ 4435 static void 4436 wm_set_filter(struct wm_softc *sc) 4437 { 4438 struct ethercom *ec = &sc->sc_ethercom; 4439 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 4440 struct ether_multi *enm; 4441 struct ether_multistep step; 4442 bus_addr_t mta_reg; 4443 uint32_t hash, reg, bit; 4444 int i, size, ralmax, rv; 4445 4446 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4447 device_xname(sc->sc_dev), __func__)); 4448 KASSERT(mutex_owned(sc->sc_core_lock)); 4449 4450 if (sc->sc_type >= WM_T_82544) 4451 mta_reg = WMREG_CORDOVA_MTA; 4452 else 4453 mta_reg = WMREG_MTA; 4454 4455 sc->sc_rctl &= ~(RCTL_BAM | RCTL_UPE | RCTL_MPE); 4456 4457 if (sc->sc_if_flags & IFF_BROADCAST) 4458 sc->sc_rctl |= RCTL_BAM; 4459 if (sc->sc_if_flags & IFF_PROMISC) { 4460 sc->sc_rctl |= RCTL_UPE; 4461 ETHER_LOCK(ec); 4462 ec->ec_flags |= ETHER_F_ALLMULTI; 4463 ETHER_UNLOCK(ec); 4464 goto allmulti; 4465 } 4466 4467 /* 4468 * Set the station address in the first RAL slot, and 4469 * clear the remaining slots. 4470 */ 4471 size = wm_rar_count(sc); 4472 wm_set_ral(sc, CLLADDR(ifp->if_sadl), 0); 4473 4474 if ((sc->sc_type == WM_T_PCH_LPT) || (sc->sc_type == WM_T_PCH_SPT) || 4475 (sc->sc_type == WM_T_PCH_CNP) || (sc->sc_type == WM_T_PCH_TGP)) { 4476 i = __SHIFTOUT(CSR_READ(sc, WMREG_FWSM), FWSM_WLOCK_MAC); 4477 switch (i) { 4478 case 0: 4479 /* We can use all entries */ 4480 ralmax = size; 4481 break; 4482 case 1: 4483 /* Only RAR[0] */ 4484 ralmax = 1; 4485 break; 4486 default: 4487 /* Available SHRA + RAR[0] */ 4488 ralmax = i + 1; 4489 } 4490 } else 4491 ralmax = size; 4492 for (i = 1; i < size; i++) { 4493 if (i < ralmax) 4494 wm_set_ral(sc, NULL, i); 4495 } 4496 4497 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 4498 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 4499 || (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT) 4500 || (sc->sc_type == WM_T_PCH_SPT) || (sc->sc_type == WM_T_PCH_CNP) 4501 || (sc->sc_type == WM_T_PCH_TGP)) 4502 size = WM_ICH8_MC_TABSIZE; 4503 else 4504 size = WM_MC_TABSIZE; 4505 /* Clear out the multicast table. */ 4506 for (i = 0; i < size; i++) { 4507 CSR_WRITE(sc, mta_reg + (i << 2), 0); 4508 CSR_WRITE_FLUSH(sc); 4509 } 4510 4511 ETHER_LOCK(ec); 4512 ETHER_FIRST_MULTI(step, ec, enm); 4513 while (enm != NULL) { 4514 if (memcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) { 4515 ec->ec_flags |= ETHER_F_ALLMULTI; 4516 ETHER_UNLOCK(ec); 4517 /* 4518 * We must listen to a range of multicast addresses. 4519 * For now, just accept all multicasts, rather than 4520 * trying to set only those filter bits needed to match 4521 * the range. (At this time, the only use of address 4522 * ranges is for IP multicast routing, for which the 4523 * range is big enough to require all bits set.) 4524 */ 4525 goto allmulti; 4526 } 4527 4528 hash = wm_mchash(sc, enm->enm_addrlo); 4529 4530 reg = (hash >> 5); 4531 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 4532 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 4533 || (sc->sc_type == WM_T_PCH2) 4534 || (sc->sc_type == WM_T_PCH_LPT) 4535 || (sc->sc_type == WM_T_PCH_SPT) 4536 || (sc->sc_type == WM_T_PCH_CNP) 4537 || (sc->sc_type == WM_T_PCH_TGP)) 4538 reg &= 0x1f; 4539 else 4540 reg &= 0x7f; 4541 bit = hash & 0x1f; 4542 4543 hash = CSR_READ(sc, mta_reg + (reg << 2)); 4544 hash |= 1U << bit; 4545 4546 if (sc->sc_type == WM_T_82544 && (reg & 1) != 0) { 4547 /* 4548 * 82544 Errata 9: Certain register cannot be written 4549 * with particular alignments in PCI-X bus operation 4550 * (FCAH, MTA and VFTA). 4551 */ 4552 bit = CSR_READ(sc, mta_reg + ((reg - 1) << 2)); 4553 CSR_WRITE(sc, mta_reg + (reg << 2), hash); 4554 CSR_WRITE_FLUSH(sc); 4555 CSR_WRITE(sc, mta_reg + ((reg - 1) << 2), bit); 4556 CSR_WRITE_FLUSH(sc); 4557 } else { 4558 CSR_WRITE(sc, mta_reg + (reg << 2), hash); 4559 CSR_WRITE_FLUSH(sc); 4560 } 4561 4562 ETHER_NEXT_MULTI(step, enm); 4563 } 4564 ec->ec_flags &= ~ETHER_F_ALLMULTI; 4565 ETHER_UNLOCK(ec); 4566 4567 goto setit; 4568 4569 allmulti: 4570 sc->sc_rctl |= RCTL_MPE; 4571 4572 setit: 4573 if (sc->sc_type >= WM_T_PCH2) { 4574 if (((ec->ec_capabilities & ETHERCAP_JUMBO_MTU) != 0) 4575 && (ifp->if_mtu > ETHERMTU)) 4576 rv = wm_lv_jumbo_workaround_ich8lan(sc, true); 4577 else 4578 rv = wm_lv_jumbo_workaround_ich8lan(sc, false); 4579 if (rv != 0) 4580 device_printf(sc->sc_dev, 4581 "Failed to do workaround for jumbo frame.\n"); 4582 } 4583 4584 CSR_WRITE(sc, WMREG_RCTL, sc->sc_rctl); 4585 } 4586 4587 /* Reset and init related */ 4588 4589 static void 4590 wm_set_vlan(struct wm_softc *sc) 4591 { 4592 4593 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4594 device_xname(sc->sc_dev), __func__)); 4595 4596 /* Deal with VLAN enables. */ 4597 if (VLAN_ATTACHED(&sc->sc_ethercom)) 4598 sc->sc_ctrl |= CTRL_VME; 4599 else 4600 sc->sc_ctrl &= ~CTRL_VME; 4601 4602 /* Write the control registers. */ 4603 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 4604 } 4605 4606 static void 4607 wm_set_pcie_completion_timeout(struct wm_softc *sc) 4608 { 4609 uint32_t gcr; 4610 pcireg_t ctrl2; 4611 4612 gcr = CSR_READ(sc, WMREG_GCR); 4613 4614 /* Only take action if timeout value is defaulted to 0 */ 4615 if ((gcr & GCR_CMPL_TMOUT_MASK) != 0) 4616 goto out; 4617 4618 if ((gcr & GCR_CAP_VER2) == 0) { 4619 gcr |= GCR_CMPL_TMOUT_10MS; 4620 goto out; 4621 } 4622 4623 ctrl2 = pci_conf_read(sc->sc_pc, sc->sc_pcitag, 4624 sc->sc_pcixe_capoff + PCIE_DCSR2); 4625 ctrl2 |= WM_PCIE_DCSR2_16MS; 4626 pci_conf_write(sc->sc_pc, sc->sc_pcitag, 4627 sc->sc_pcixe_capoff + PCIE_DCSR2, ctrl2); 4628 4629 out: 4630 /* Disable completion timeout resend */ 4631 gcr &= ~GCR_CMPL_TMOUT_RESEND; 4632 4633 CSR_WRITE(sc, WMREG_GCR, gcr); 4634 } 4635 4636 void 4637 wm_get_auto_rd_done(struct wm_softc *sc) 4638 { 4639 int i; 4640 4641 /* wait for eeprom to reload */ 4642 switch (sc->sc_type) { 4643 case WM_T_82571: 4644 case WM_T_82572: 4645 case WM_T_82573: 4646 case WM_T_82574: 4647 case WM_T_82583: 4648 case WM_T_82575: 4649 case WM_T_82576: 4650 case WM_T_82580: 4651 case WM_T_I350: 4652 case WM_T_I354: 4653 case WM_T_I210: 4654 case WM_T_I211: 4655 case WM_T_80003: 4656 case WM_T_ICH8: 4657 case WM_T_ICH9: 4658 for (i = 0; i < 10; i++) { 4659 if (CSR_READ(sc, WMREG_EECD) & EECD_EE_AUTORD) 4660 break; 4661 delay(1000); 4662 } 4663 if (i == 10) { 4664 log(LOG_ERR, "%s: auto read from eeprom failed to " 4665 "complete\n", device_xname(sc->sc_dev)); 4666 } 4667 break; 4668 default: 4669 break; 4670 } 4671 } 4672 4673 void 4674 wm_lan_init_done(struct wm_softc *sc) 4675 { 4676 uint32_t reg = 0; 4677 int i; 4678 4679 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4680 device_xname(sc->sc_dev), __func__)); 4681 4682 /* Wait for eeprom to reload */ 4683 switch (sc->sc_type) { 4684 case WM_T_ICH10: 4685 case WM_T_PCH: 4686 case WM_T_PCH2: 4687 case WM_T_PCH_LPT: 4688 case WM_T_PCH_SPT: 4689 case WM_T_PCH_CNP: 4690 case WM_T_PCH_TGP: 4691 for (i = 0; i < WM_ICH8_LAN_INIT_TIMEOUT; i++) { 4692 reg = CSR_READ(sc, WMREG_STATUS); 4693 if ((reg & STATUS_LAN_INIT_DONE) != 0) 4694 break; 4695 delay(100); 4696 } 4697 if (i >= WM_ICH8_LAN_INIT_TIMEOUT) { 4698 log(LOG_ERR, "%s: %s: lan_init_done failed to " 4699 "complete\n", device_xname(sc->sc_dev), __func__); 4700 } 4701 break; 4702 default: 4703 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev), 4704 __func__); 4705 break; 4706 } 4707 4708 reg &= ~STATUS_LAN_INIT_DONE; 4709 CSR_WRITE(sc, WMREG_STATUS, reg); 4710 } 4711 4712 void 4713 wm_get_cfg_done(struct wm_softc *sc) 4714 { 4715 int mask; 4716 uint32_t reg; 4717 int i; 4718 4719 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4720 device_xname(sc->sc_dev), __func__)); 4721 4722 /* Wait for eeprom to reload */ 4723 switch (sc->sc_type) { 4724 case WM_T_82542_2_0: 4725 case WM_T_82542_2_1: 4726 /* null */ 4727 break; 4728 case WM_T_82543: 4729 case WM_T_82544: 4730 case WM_T_82540: 4731 case WM_T_82545: 4732 case WM_T_82545_3: 4733 case WM_T_82546: 4734 case WM_T_82546_3: 4735 case WM_T_82541: 4736 case WM_T_82541_2: 4737 case WM_T_82547: 4738 case WM_T_82547_2: 4739 case WM_T_82573: 4740 case WM_T_82574: 4741 case WM_T_82583: 4742 /* generic */ 4743 delay(10*1000); 4744 break; 4745 case WM_T_80003: 4746 case WM_T_82571: 4747 case WM_T_82572: 4748 case WM_T_82575: 4749 case WM_T_82576: 4750 case WM_T_82580: 4751 case WM_T_I350: 4752 case WM_T_I354: 4753 case WM_T_I210: 4754 case WM_T_I211: 4755 if (sc->sc_type == WM_T_82571) { 4756 /* Only 82571 shares port 0 */ 4757 mask = EEMNGCTL_CFGDONE_0; 4758 } else 4759 mask = EEMNGCTL_CFGDONE_0 << sc->sc_funcid; 4760 for (i = 0; i < WM_PHY_CFG_TIMEOUT; i++) { 4761 if (CSR_READ(sc, WMREG_EEMNGCTL) & mask) 4762 break; 4763 delay(1000); 4764 } 4765 if (i >= WM_PHY_CFG_TIMEOUT) 4766 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s failed\n", 4767 device_xname(sc->sc_dev), __func__)); 4768 break; 4769 case WM_T_ICH8: 4770 case WM_T_ICH9: 4771 case WM_T_ICH10: 4772 case WM_T_PCH: 4773 case WM_T_PCH2: 4774 case WM_T_PCH_LPT: 4775 case WM_T_PCH_SPT: 4776 case WM_T_PCH_CNP: 4777 case WM_T_PCH_TGP: 4778 delay(10*1000); 4779 if (sc->sc_type >= WM_T_ICH10) 4780 wm_lan_init_done(sc); 4781 else 4782 wm_get_auto_rd_done(sc); 4783 4784 /* Clear PHY Reset Asserted bit */ 4785 reg = CSR_READ(sc, WMREG_STATUS); 4786 if ((reg & STATUS_PHYRA) != 0) 4787 CSR_WRITE(sc, WMREG_STATUS, reg & ~STATUS_PHYRA); 4788 break; 4789 default: 4790 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev), 4791 __func__); 4792 break; 4793 } 4794 } 4795 4796 int 4797 wm_phy_post_reset(struct wm_softc *sc) 4798 { 4799 device_t dev = sc->sc_dev; 4800 uint16_t reg; 4801 int rv = 0; 4802 4803 /* This function is only for ICH8 and newer. */ 4804 if (sc->sc_type < WM_T_ICH8) 4805 return 0; 4806 4807 if (wm_phy_resetisblocked(sc)) { 4808 /* XXX */ 4809 device_printf(dev, "PHY is blocked\n"); 4810 return -1; 4811 } 4812 4813 /* Allow time for h/w to get to quiescent state after reset */ 4814 delay(10*1000); 4815 4816 /* Perform any necessary post-reset workarounds */ 4817 if (sc->sc_type == WM_T_PCH) 4818 rv = wm_hv_phy_workarounds_ich8lan(sc); 4819 else if (sc->sc_type == WM_T_PCH2) 4820 rv = wm_lv_phy_workarounds_ich8lan(sc); 4821 if (rv != 0) 4822 return rv; 4823 4824 /* Clear the host wakeup bit after lcd reset */ 4825 if (sc->sc_type >= WM_T_PCH) { 4826 wm_gmii_hv_readreg(dev, 2, BM_PORT_GEN_CFG, ®); 4827 reg &= ~BM_WUC_HOST_WU_BIT; 4828 wm_gmii_hv_writereg(dev, 2, BM_PORT_GEN_CFG, reg); 4829 } 4830 4831 /* Configure the LCD with the extended configuration region in NVM */ 4832 if ((rv = wm_init_lcd_from_nvm(sc)) != 0) 4833 return rv; 4834 4835 /* Configure the LCD with the OEM bits in NVM */ 4836 rv = wm_oem_bits_config_ich8lan(sc, true); 4837 4838 if (sc->sc_type == WM_T_PCH2) { 4839 /* Ungate automatic PHY configuration on non-managed 82579 */ 4840 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID) == 0) { 4841 delay(10 * 1000); 4842 wm_gate_hw_phy_config_ich8lan(sc, false); 4843 } 4844 /* Set EEE LPI Update Timer to 200usec */ 4845 rv = sc->phy.acquire(sc); 4846 if (rv) 4847 return rv; 4848 rv = wm_write_emi_reg_locked(dev, 4849 I82579_LPI_UPDATE_TIMER, 0x1387); 4850 sc->phy.release(sc); 4851 } 4852 4853 return rv; 4854 } 4855 4856 /* Only for PCH and newer */ 4857 static int 4858 wm_write_smbus_addr(struct wm_softc *sc) 4859 { 4860 uint32_t strap, freq; 4861 uint16_t phy_data; 4862 int rv; 4863 4864 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4865 device_xname(sc->sc_dev), __func__)); 4866 KASSERT(CSR_READ(sc, WMREG_EXTCNFCTR) & EXTCNFCTR_MDIO_SW_OWNERSHIP); 4867 4868 strap = CSR_READ(sc, WMREG_STRAP); 4869 freq = __SHIFTOUT(strap, STRAP_FREQ); 4870 4871 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, HV_SMB_ADDR, &phy_data); 4872 if (rv != 0) 4873 return rv; 4874 4875 phy_data &= ~HV_SMB_ADDR_ADDR; 4876 phy_data |= __SHIFTOUT(strap, STRAP_SMBUSADDR); 4877 phy_data |= HV_SMB_ADDR_PEC_EN | HV_SMB_ADDR_VALID; 4878 4879 if (sc->sc_phytype == WMPHY_I217) { 4880 /* Restore SMBus frequency */ 4881 if (freq --) { 4882 phy_data &= ~(HV_SMB_ADDR_FREQ_LOW 4883 | HV_SMB_ADDR_FREQ_HIGH); 4884 phy_data |= __SHIFTIN((freq & 0x01) != 0, 4885 HV_SMB_ADDR_FREQ_LOW); 4886 phy_data |= __SHIFTIN((freq & 0x02) != 0, 4887 HV_SMB_ADDR_FREQ_HIGH); 4888 } else 4889 DPRINTF(sc, WM_DEBUG_INIT, 4890 ("%s: %s Unsupported SMB frequency in PHY\n", 4891 device_xname(sc->sc_dev), __func__)); 4892 } 4893 4894 return wm_gmii_hv_writereg_locked(sc->sc_dev, 2, HV_SMB_ADDR, 4895 phy_data); 4896 } 4897 4898 static int 4899 wm_init_lcd_from_nvm(struct wm_softc *sc) 4900 { 4901 uint32_t extcnfctr, sw_cfg_mask, cnf_size, word_addr, i, reg; 4902 uint16_t phy_page = 0; 4903 int rv = 0; 4904 4905 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 4906 device_xname(sc->sc_dev), __func__)); 4907 4908 switch (sc->sc_type) { 4909 case WM_T_ICH8: 4910 if ((sc->sc_phytype == WMPHY_UNKNOWN) 4911 || (sc->sc_phytype != WMPHY_IGP_3)) 4912 return 0; 4913 4914 if ((sc->sc_pcidevid == PCI_PRODUCT_INTEL_82801H_AMT) 4915 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_82801H_LAN)) { 4916 sw_cfg_mask = FEXTNVM_SW_CONFIG; 4917 break; 4918 } 4919 /* FALLTHROUGH */ 4920 case WM_T_PCH: 4921 case WM_T_PCH2: 4922 case WM_T_PCH_LPT: 4923 case WM_T_PCH_SPT: 4924 case WM_T_PCH_CNP: 4925 case WM_T_PCH_TGP: 4926 sw_cfg_mask = FEXTNVM_SW_CONFIG_ICH8M; 4927 break; 4928 default: 4929 return 0; 4930 } 4931 4932 if ((rv = sc->phy.acquire(sc)) != 0) 4933 return rv; 4934 4935 reg = CSR_READ(sc, WMREG_FEXTNVM); 4936 if ((reg & sw_cfg_mask) == 0) 4937 goto release; 4938 4939 /* 4940 * Make sure HW does not configure LCD from PHY extended configuration 4941 * before SW configuration 4942 */ 4943 extcnfctr = CSR_READ(sc, WMREG_EXTCNFCTR); 4944 if ((sc->sc_type < WM_T_PCH2) 4945 && ((extcnfctr & EXTCNFCTR_PCIE_WRITE_ENABLE) != 0)) 4946 goto release; 4947 4948 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s: Configure LCD by software\n", 4949 device_xname(sc->sc_dev), __func__)); 4950 /* word_addr is in DWORD */ 4951 word_addr = __SHIFTOUT(extcnfctr, EXTCNFCTR_EXT_CNF_POINTER) << 1; 4952 4953 reg = CSR_READ(sc, WMREG_EXTCNFSIZE); 4954 cnf_size = __SHIFTOUT(reg, EXTCNFSIZE_LENGTH); 4955 if (cnf_size == 0) 4956 goto release; 4957 4958 if (((sc->sc_type == WM_T_PCH) 4959 && ((extcnfctr & EXTCNFCTR_OEM_WRITE_ENABLE) == 0)) 4960 || (sc->sc_type > WM_T_PCH)) { 4961 /* 4962 * HW configures the SMBus address and LEDs when the OEM and 4963 * LCD Write Enable bits are set in the NVM. When both NVM bits 4964 * are cleared, SW will configure them instead. 4965 */ 4966 DPRINTF(sc, WM_DEBUG_INIT, 4967 ("%s: %s: Configure SMBus and LED\n", 4968 device_xname(sc->sc_dev), __func__)); 4969 if ((rv = wm_write_smbus_addr(sc)) != 0) 4970 goto release; 4971 4972 reg = CSR_READ(sc, WMREG_LEDCTL); 4973 rv = wm_gmii_hv_writereg_locked(sc->sc_dev, 1, HV_LED_CONFIG, 4974 (uint16_t)reg); 4975 if (rv != 0) 4976 goto release; 4977 } 4978 4979 /* Configure LCD from extended configuration region. */ 4980 for (i = 0; i < cnf_size; i++) { 4981 uint16_t reg_data, reg_addr; 4982 4983 if (wm_nvm_read(sc, (word_addr + i * 2), 1, ®_data) != 0) 4984 goto release; 4985 4986 if (wm_nvm_read(sc, (word_addr + i * 2 + 1), 1, ®_addr) !=0) 4987 goto release; 4988 4989 if (reg_addr == IGPHY_PAGE_SELECT) 4990 phy_page = reg_data; 4991 4992 reg_addr &= IGPHY_MAXREGADDR; 4993 reg_addr |= phy_page; 4994 4995 KASSERT(sc->phy.writereg_locked != NULL); 4996 rv = sc->phy.writereg_locked(sc->sc_dev, 1, reg_addr, 4997 reg_data); 4998 } 4999 5000 release: 5001 sc->phy.release(sc); 5002 return rv; 5003 } 5004 5005 /* 5006 * wm_oem_bits_config_ich8lan - SW-based LCD Configuration 5007 * @sc: pointer to the HW structure 5008 * @d0_state: boolean if entering d0 or d3 device state 5009 * 5010 * SW will configure Gbe Disable and LPLU based on the NVM. The four bits are 5011 * collectively called OEM bits. The OEM Write Enable bit and SW Config bit 5012 * in NVM determines whether HW should configure LPLU and Gbe Disable. 5013 */ 5014 int 5015 wm_oem_bits_config_ich8lan(struct wm_softc *sc, bool d0_state) 5016 { 5017 uint32_t mac_reg; 5018 uint16_t oem_reg; 5019 int rv; 5020 5021 if (sc->sc_type < WM_T_PCH) 5022 return 0; 5023 5024 rv = sc->phy.acquire(sc); 5025 if (rv != 0) 5026 return rv; 5027 5028 if (sc->sc_type == WM_T_PCH) { 5029 mac_reg = CSR_READ(sc, WMREG_EXTCNFCTR); 5030 if ((mac_reg & EXTCNFCTR_OEM_WRITE_ENABLE) != 0) 5031 goto release; 5032 } 5033 5034 mac_reg = CSR_READ(sc, WMREG_FEXTNVM); 5035 if ((mac_reg & FEXTNVM_SW_CONFIG_ICH8M) == 0) 5036 goto release; 5037 5038 mac_reg = CSR_READ(sc, WMREG_PHY_CTRL); 5039 5040 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 1, HV_OEM_BITS, &oem_reg); 5041 if (rv != 0) 5042 goto release; 5043 oem_reg &= ~(HV_OEM_BITS_A1KDIS | HV_OEM_BITS_LPLU); 5044 5045 if (d0_state) { 5046 if ((mac_reg & PHY_CTRL_GBE_DIS) != 0) 5047 oem_reg |= HV_OEM_BITS_A1KDIS; 5048 if ((mac_reg & PHY_CTRL_D0A_LPLU) != 0) 5049 oem_reg |= HV_OEM_BITS_LPLU; 5050 } else { 5051 if ((mac_reg & (PHY_CTRL_GBE_DIS | PHY_CTRL_NOND0A_GBE_DIS)) 5052 != 0) 5053 oem_reg |= HV_OEM_BITS_A1KDIS; 5054 if ((mac_reg & (PHY_CTRL_D0A_LPLU | PHY_CTRL_NOND0A_LPLU)) 5055 != 0) 5056 oem_reg |= HV_OEM_BITS_LPLU; 5057 } 5058 5059 /* Set Restart auto-neg to activate the bits */ 5060 if ((d0_state || (sc->sc_type != WM_T_PCH)) 5061 && (wm_phy_resetisblocked(sc) == false)) 5062 oem_reg |= HV_OEM_BITS_ANEGNOW; 5063 5064 rv = wm_gmii_hv_writereg_locked(sc->sc_dev, 1, HV_OEM_BITS, oem_reg); 5065 5066 release: 5067 sc->phy.release(sc); 5068 5069 return rv; 5070 } 5071 5072 /* Init hardware bits */ 5073 void 5074 wm_initialize_hardware_bits(struct wm_softc *sc) 5075 { 5076 uint32_t tarc0, tarc1, reg; 5077 5078 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 5079 device_xname(sc->sc_dev), __func__)); 5080 5081 /* For 82571 variant, 80003 and ICHs */ 5082 if (((sc->sc_type >= WM_T_82571) && (sc->sc_type <= WM_T_82583)) 5083 || WM_IS_ICHPCH(sc)) { 5084 5085 /* Transmit Descriptor Control 0 */ 5086 reg = CSR_READ(sc, WMREG_TXDCTL(0)); 5087 reg |= TXDCTL_COUNT_DESC; 5088 CSR_WRITE(sc, WMREG_TXDCTL(0), reg); 5089 5090 /* Transmit Descriptor Control 1 */ 5091 reg = CSR_READ(sc, WMREG_TXDCTL(1)); 5092 reg |= TXDCTL_COUNT_DESC; 5093 CSR_WRITE(sc, WMREG_TXDCTL(1), reg); 5094 5095 /* TARC0 */ 5096 tarc0 = CSR_READ(sc, WMREG_TARC0); 5097 switch (sc->sc_type) { 5098 case WM_T_82571: 5099 case WM_T_82572: 5100 case WM_T_82573: 5101 case WM_T_82574: 5102 case WM_T_82583: 5103 case WM_T_80003: 5104 /* Clear bits 30..27 */ 5105 tarc0 &= ~__BITS(30, 27); 5106 break; 5107 default: 5108 break; 5109 } 5110 5111 switch (sc->sc_type) { 5112 case WM_T_82571: 5113 case WM_T_82572: 5114 tarc0 |= __BITS(26, 23); /* TARC0 bits 23-26 */ 5115 5116 tarc1 = CSR_READ(sc, WMREG_TARC1); 5117 tarc1 &= ~__BITS(30, 29); /* Clear bits 30 and 29 */ 5118 tarc1 |= __BITS(26, 24); /* TARC1 bits 26-24 */ 5119 /* 8257[12] Errata No.7 */ 5120 tarc1 |= __BIT(22); /* TARC1 bits 22 */ 5121 5122 /* TARC1 bit 28 */ 5123 if ((CSR_READ(sc, WMREG_TCTL) & TCTL_MULR) != 0) 5124 tarc1 &= ~__BIT(28); 5125 else 5126 tarc1 |= __BIT(28); 5127 CSR_WRITE(sc, WMREG_TARC1, tarc1); 5128 5129 /* 5130 * 8257[12] Errata No.13 5131 * Disable Dyamic Clock Gating. 5132 */ 5133 reg = CSR_READ(sc, WMREG_CTRL_EXT); 5134 reg &= ~CTRL_EXT_DMA_DYN_CLK; 5135 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 5136 break; 5137 case WM_T_82573: 5138 case WM_T_82574: 5139 case WM_T_82583: 5140 if ((sc->sc_type == WM_T_82574) 5141 || (sc->sc_type == WM_T_82583)) 5142 tarc0 |= __BIT(26); /* TARC0 bit 26 */ 5143 5144 /* Extended Device Control */ 5145 reg = CSR_READ(sc, WMREG_CTRL_EXT); 5146 reg &= ~__BIT(23); /* Clear bit 23 */ 5147 reg |= __BIT(22); /* Set bit 22 */ 5148 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 5149 5150 /* Device Control */ 5151 sc->sc_ctrl &= ~__BIT(29); /* Clear bit 29 */ 5152 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 5153 5154 /* PCIe Control Register */ 5155 /* 5156 * 82573 Errata (unknown). 5157 * 5158 * 82574 Errata 25 and 82583 Errata 12 5159 * "Dropped Rx Packets": 5160 * NVM Image Version 2.1.4 and newer has no this bug. 5161 */ 5162 reg = CSR_READ(sc, WMREG_GCR); 5163 reg |= GCR_L1_ACT_WITHOUT_L0S_RX; 5164 CSR_WRITE(sc, WMREG_GCR, reg); 5165 5166 if ((sc->sc_type == WM_T_82574) 5167 || (sc->sc_type == WM_T_82583)) { 5168 /* 5169 * Document says this bit must be set for 5170 * proper operation. 5171 */ 5172 reg = CSR_READ(sc, WMREG_GCR); 5173 reg |= __BIT(22); 5174 CSR_WRITE(sc, WMREG_GCR, reg); 5175 5176 /* 5177 * Apply workaround for hardware errata 5178 * documented in errata docs Fixes issue where 5179 * some error prone or unreliable PCIe 5180 * completions are occurring, particularly 5181 * with ASPM enabled. Without fix, issue can 5182 * cause Tx timeouts. 5183 */ 5184 reg = CSR_READ(sc, WMREG_GCR2); 5185 reg |= __BIT(0); 5186 CSR_WRITE(sc, WMREG_GCR2, reg); 5187 } 5188 break; 5189 case WM_T_80003: 5190 /* TARC0 */ 5191 if ((sc->sc_mediatype == WM_MEDIATYPE_FIBER) 5192 || (sc->sc_mediatype == WM_MEDIATYPE_SERDES)) 5193 tarc0 &= ~__BIT(20); /* Clear bits 20 */ 5194 5195 /* TARC1 bit 28 */ 5196 tarc1 = CSR_READ(sc, WMREG_TARC1); 5197 if ((CSR_READ(sc, WMREG_TCTL) & TCTL_MULR) != 0) 5198 tarc1 &= ~__BIT(28); 5199 else 5200 tarc1 |= __BIT(28); 5201 CSR_WRITE(sc, WMREG_TARC1, tarc1); 5202 break; 5203 case WM_T_ICH8: 5204 case WM_T_ICH9: 5205 case WM_T_ICH10: 5206 case WM_T_PCH: 5207 case WM_T_PCH2: 5208 case WM_T_PCH_LPT: 5209 case WM_T_PCH_SPT: 5210 case WM_T_PCH_CNP: 5211 case WM_T_PCH_TGP: 5212 /* TARC0 */ 5213 if (sc->sc_type == WM_T_ICH8) { 5214 /* Set TARC0 bits 29 and 28 */ 5215 tarc0 |= __BITS(29, 28); 5216 } else if (sc->sc_type == WM_T_PCH_SPT) { 5217 tarc0 |= __BIT(29); 5218 /* 5219 * Drop bit 28. From Linux. 5220 * See I218/I219 spec update 5221 * "5. Buffer Overrun While the I219 is 5222 * Processing DMA Transactions" 5223 */ 5224 tarc0 &= ~__BIT(28); 5225 } 5226 /* Set TARC0 bits 23,24,26,27 */ 5227 tarc0 |= __BITS(27, 26) | __BITS(24, 23); 5228 5229 /* CTRL_EXT */ 5230 reg = CSR_READ(sc, WMREG_CTRL_EXT); 5231 reg |= __BIT(22); /* Set bit 22 */ 5232 /* 5233 * Enable PHY low-power state when MAC is at D3 5234 * w/o WoL 5235 */ 5236 if (sc->sc_type >= WM_T_PCH) 5237 reg |= CTRL_EXT_PHYPDEN; 5238 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 5239 5240 /* TARC1 */ 5241 tarc1 = CSR_READ(sc, WMREG_TARC1); 5242 /* bit 28 */ 5243 if ((CSR_READ(sc, WMREG_TCTL) & TCTL_MULR) != 0) 5244 tarc1 &= ~__BIT(28); 5245 else 5246 tarc1 |= __BIT(28); 5247 tarc1 |= __BIT(24) | __BIT(26) | __BIT(30); 5248 CSR_WRITE(sc, WMREG_TARC1, tarc1); 5249 5250 /* Device Status */ 5251 if (sc->sc_type == WM_T_ICH8) { 5252 reg = CSR_READ(sc, WMREG_STATUS); 5253 reg &= ~__BIT(31); 5254 CSR_WRITE(sc, WMREG_STATUS, reg); 5255 5256 } 5257 5258 /* IOSFPC */ 5259 if (sc->sc_type == WM_T_PCH_SPT) { 5260 reg = CSR_READ(sc, WMREG_IOSFPC); 5261 reg |= RCTL_RDMTS_HEX; /* XXX RTCL bit? */ 5262 CSR_WRITE(sc, WMREG_IOSFPC, reg); 5263 } 5264 /* 5265 * Work-around descriptor data corruption issue during 5266 * NFS v2 UDP traffic, just disable the NFS filtering 5267 * capability. 5268 */ 5269 reg = CSR_READ(sc, WMREG_RFCTL); 5270 reg |= WMREG_RFCTL_NFSWDIS | WMREG_RFCTL_NFSRDIS; 5271 CSR_WRITE(sc, WMREG_RFCTL, reg); 5272 break; 5273 default: 5274 break; 5275 } 5276 CSR_WRITE(sc, WMREG_TARC0, tarc0); 5277 5278 switch (sc->sc_type) { 5279 case WM_T_82571: 5280 case WM_T_82572: 5281 case WM_T_82573: 5282 case WM_T_80003: 5283 case WM_T_ICH8: 5284 /* 5285 * 8257[12] Errata No.52, 82573 Errata No.43 and some 5286 * others to avoid RSS Hash Value bug. 5287 */ 5288 reg = CSR_READ(sc, WMREG_RFCTL); 5289 reg |= WMREG_RFCTL_NEWIPV6EXDIS |WMREG_RFCTL_IPV6EXDIS; 5290 CSR_WRITE(sc, WMREG_RFCTL, reg); 5291 break; 5292 case WM_T_82574: 5293 /* Use extened Rx descriptor. */ 5294 reg = CSR_READ(sc, WMREG_RFCTL); 5295 reg |= WMREG_RFCTL_EXSTEN; 5296 CSR_WRITE(sc, WMREG_RFCTL, reg); 5297 break; 5298 default: 5299 break; 5300 } 5301 } else if ((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211)) { 5302 /* 5303 * 82575 Errata XXX, 82576 Errata 46, 82580 Errata 24, 5304 * I350 Errata 37, I210 Errata No. 31 and I211 Errata No. 11: 5305 * "Certain Malformed IPv6 Extension Headers are Not Processed 5306 * Correctly by the Device" 5307 * 5308 * I354(C2000) Errata AVR53: 5309 * "Malformed IPv6 Extension Headers May Result in LAN Device 5310 * Hang" 5311 */ 5312 reg = CSR_READ(sc, WMREG_RFCTL); 5313 reg |= WMREG_RFCTL_IPV6EXDIS; 5314 CSR_WRITE(sc, WMREG_RFCTL, reg); 5315 } 5316 } 5317 5318 static uint32_t 5319 wm_rxpbs_adjust_82580(uint32_t val) 5320 { 5321 uint32_t rv = 0; 5322 5323 if (val < __arraycount(wm_82580_rxpbs_table)) 5324 rv = wm_82580_rxpbs_table[val]; 5325 5326 return rv; 5327 } 5328 5329 /* 5330 * wm_reset_phy: 5331 * 5332 * generic PHY reset function. 5333 * Same as e1000_phy_hw_reset_generic() 5334 */ 5335 static int 5336 wm_reset_phy(struct wm_softc *sc) 5337 { 5338 uint32_t reg; 5339 int rv; 5340 5341 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 5342 device_xname(sc->sc_dev), __func__)); 5343 if (wm_phy_resetisblocked(sc)) 5344 return -1; 5345 5346 rv = sc->phy.acquire(sc); 5347 if (rv) { 5348 device_printf(sc->sc_dev, "%s: failed to acquire phy: %d\n", 5349 __func__, rv); 5350 return rv; 5351 } 5352 5353 reg = CSR_READ(sc, WMREG_CTRL); 5354 CSR_WRITE(sc, WMREG_CTRL, reg | CTRL_PHY_RESET); 5355 CSR_WRITE_FLUSH(sc); 5356 5357 delay(sc->phy.reset_delay_us); 5358 5359 CSR_WRITE(sc, WMREG_CTRL, reg); 5360 CSR_WRITE_FLUSH(sc); 5361 5362 delay(150); 5363 5364 sc->phy.release(sc); 5365 5366 wm_get_cfg_done(sc); 5367 wm_phy_post_reset(sc); 5368 5369 return 0; 5370 } 5371 5372 /* 5373 * wm_flush_desc_rings - remove all descriptors from the descriptor rings. 5374 * 5375 * In i219, the descriptor rings must be emptied before resetting the HW 5376 * or before changing the device state to D3 during runtime (runtime PM). 5377 * 5378 * Failure to do this will cause the HW to enter a unit hang state which can 5379 * only be released by PCI reset on the device. 5380 * 5381 * I219 does not use multiqueue, so it is enough to check sc->sc_queue[0] only. 5382 */ 5383 static void 5384 wm_flush_desc_rings(struct wm_softc *sc) 5385 { 5386 pcireg_t preg; 5387 uint32_t reg; 5388 struct wm_txqueue *txq; 5389 wiseman_txdesc_t *txd; 5390 int nexttx; 5391 uint32_t rctl; 5392 5393 KASSERT(IFNET_LOCKED(&sc->sc_ethercom.ec_if)); 5394 5395 /* First, disable MULR fix in FEXTNVM11 */ 5396 reg = CSR_READ(sc, WMREG_FEXTNVM11); 5397 reg |= FEXTNVM11_DIS_MULRFIX; 5398 CSR_WRITE(sc, WMREG_FEXTNVM11, reg); 5399 5400 preg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, WM_PCI_DESCRING_STATUS); 5401 reg = CSR_READ(sc, WMREG_TDLEN(0)); 5402 if (((preg & DESCRING_STATUS_FLUSH_REQ) == 0) || (reg == 0)) 5403 return; 5404 5405 /* 5406 * Remove all descriptors from the tx_ring. 5407 * 5408 * We want to clear all pending descriptors from the TX ring. Zeroing 5409 * happens when the HW reads the regs. We assign the ring itself as 5410 * the data of the next descriptor. We don't care about the data we are 5411 * about to reset the HW. 5412 */ 5413 #ifdef WM_DEBUG 5414 device_printf(sc->sc_dev, "Need TX flush (reg = %08x)\n", preg); 5415 #endif 5416 reg = CSR_READ(sc, WMREG_TCTL); 5417 CSR_WRITE(sc, WMREG_TCTL, reg | TCTL_EN); 5418 5419 txq = &sc->sc_queue[0].wmq_txq; 5420 nexttx = txq->txq_next; 5421 txd = &txq->txq_descs[nexttx]; 5422 wm_set_dma_addr(&txd->wtx_addr, txq->txq_desc_dma); 5423 txd->wtx_cmdlen = htole32(WTX_CMD_IFCS | 512); 5424 txd->wtx_fields.wtxu_status = 0; 5425 txd->wtx_fields.wtxu_options = 0; 5426 txd->wtx_fields.wtxu_vlan = 0; 5427 5428 wm_cdtxsync(txq, 0, WM_NTXDESC(txq), 5429 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 5430 5431 txq->txq_next = WM_NEXTTX(txq, txq->txq_next); 5432 CSR_WRITE(sc, WMREG_TDT(0), txq->txq_next); 5433 CSR_WRITE_FLUSH(sc); 5434 delay(250); 5435 5436 preg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, WM_PCI_DESCRING_STATUS); 5437 if ((preg & DESCRING_STATUS_FLUSH_REQ) == 0) 5438 return; 5439 5440 /* 5441 * Mark all descriptors in the RX ring as consumed and disable the 5442 * rx ring. 5443 */ 5444 #ifdef WM_DEBUG 5445 device_printf(sc->sc_dev, "Need RX flush (reg = %08x)\n", preg); 5446 #endif 5447 rctl = CSR_READ(sc, WMREG_RCTL); 5448 CSR_WRITE(sc, WMREG_RCTL, rctl & ~RCTL_EN); 5449 CSR_WRITE_FLUSH(sc); 5450 delay(150); 5451 5452 reg = CSR_READ(sc, WMREG_RXDCTL(0)); 5453 /* Zero the lower 14 bits (prefetch and host thresholds) */ 5454 reg &= 0xffffc000; 5455 /* 5456 * Update thresholds: prefetch threshold to 31, host threshold 5457 * to 1 and make sure the granularity is "descriptors" and not 5458 * "cache lines" 5459 */ 5460 reg |= (0x1f | (1 << 8) | RXDCTL_GRAN); 5461 CSR_WRITE(sc, WMREG_RXDCTL(0), reg); 5462 5463 /* Momentarily enable the RX ring for the changes to take effect */ 5464 CSR_WRITE(sc, WMREG_RCTL, rctl | RCTL_EN); 5465 CSR_WRITE_FLUSH(sc); 5466 delay(150); 5467 CSR_WRITE(sc, WMREG_RCTL, rctl & ~RCTL_EN); 5468 } 5469 5470 /* 5471 * wm_reset: 5472 * 5473 * Reset the i82542 chip. 5474 */ 5475 static void 5476 wm_reset(struct wm_softc *sc) 5477 { 5478 int phy_reset = 0; 5479 int i, error = 0; 5480 uint32_t reg; 5481 uint16_t kmreg; 5482 int rv; 5483 5484 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 5485 device_xname(sc->sc_dev), __func__)); 5486 KASSERT(sc->sc_type != 0); 5487 5488 /* 5489 * Allocate on-chip memory according to the MTU size. 5490 * The Packet Buffer Allocation register must be written 5491 * before the chip is reset. 5492 */ 5493 switch (sc->sc_type) { 5494 case WM_T_82547: 5495 case WM_T_82547_2: 5496 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 8192 ? 5497 PBA_22K : PBA_30K; 5498 for (i = 0; i < sc->sc_nqueues; i++) { 5499 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 5500 txq->txq_fifo_head = 0; 5501 txq->txq_fifo_addr = sc->sc_pba << PBA_ADDR_SHIFT; 5502 txq->txq_fifo_size = 5503 (PBA_40K - sc->sc_pba) << PBA_BYTE_SHIFT; 5504 txq->txq_fifo_stall = 0; 5505 } 5506 break; 5507 case WM_T_82571: 5508 case WM_T_82572: 5509 case WM_T_82575: /* XXX need special handing for jumbo frames */ 5510 case WM_T_80003: 5511 sc->sc_pba = PBA_32K; 5512 break; 5513 case WM_T_82573: 5514 sc->sc_pba = PBA_12K; 5515 break; 5516 case WM_T_82574: 5517 case WM_T_82583: 5518 sc->sc_pba = PBA_20K; 5519 break; 5520 case WM_T_82576: 5521 sc->sc_pba = CSR_READ(sc, WMREG_RXPBS); 5522 sc->sc_pba &= RXPBS_SIZE_MASK_82576; 5523 break; 5524 case WM_T_82580: 5525 case WM_T_I350: 5526 case WM_T_I354: 5527 sc->sc_pba = wm_rxpbs_adjust_82580(CSR_READ(sc, WMREG_RXPBS)); 5528 break; 5529 case WM_T_I210: 5530 case WM_T_I211: 5531 sc->sc_pba = PBA_34K; 5532 break; 5533 case WM_T_ICH8: 5534 /* Workaround for a bit corruption issue in FIFO memory */ 5535 sc->sc_pba = PBA_8K; 5536 CSR_WRITE(sc, WMREG_PBS, PBA_16K); 5537 break; 5538 case WM_T_ICH9: 5539 case WM_T_ICH10: 5540 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 4096 ? 5541 PBA_14K : PBA_10K; 5542 break; 5543 case WM_T_PCH: 5544 case WM_T_PCH2: /* XXX 14K? */ 5545 case WM_T_PCH_LPT: 5546 case WM_T_PCH_SPT: 5547 case WM_T_PCH_CNP: 5548 case WM_T_PCH_TGP: 5549 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 1500 ? 5550 PBA_12K : PBA_26K; 5551 break; 5552 default: 5553 sc->sc_pba = sc->sc_ethercom.ec_if.if_mtu > 8192 ? 5554 PBA_40K : PBA_48K; 5555 break; 5556 } 5557 /* 5558 * Only old or non-multiqueue devices have the PBA register 5559 * XXX Need special handling for 82575. 5560 */ 5561 if (((sc->sc_flags & WM_F_NEWQUEUE) == 0) 5562 || (sc->sc_type == WM_T_82575)) 5563 CSR_WRITE(sc, WMREG_PBA, sc->sc_pba); 5564 5565 /* Prevent the PCI-E bus from sticking */ 5566 if (sc->sc_flags & WM_F_PCIE) { 5567 int timeout = 800; 5568 5569 sc->sc_ctrl |= CTRL_GIO_M_DIS; 5570 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 5571 5572 while (timeout--) { 5573 if ((CSR_READ(sc, WMREG_STATUS) & STATUS_GIO_M_ENA) 5574 == 0) 5575 break; 5576 delay(100); 5577 } 5578 if (timeout == 0) 5579 device_printf(sc->sc_dev, 5580 "failed to disable bus mastering\n"); 5581 } 5582 5583 /* Set the completion timeout for interface */ 5584 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576) 5585 || (sc->sc_type == WM_T_82580) 5586 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354) 5587 || (sc->sc_type == WM_T_I210) || (sc->sc_type == WM_T_I211)) 5588 wm_set_pcie_completion_timeout(sc); 5589 5590 /* Clear interrupt */ 5591 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU); 5592 if (wm_is_using_msix(sc)) { 5593 if (sc->sc_type != WM_T_82574) { 5594 CSR_WRITE(sc, WMREG_EIMC, 0xffffffffU); 5595 CSR_WRITE(sc, WMREG_EIAC, 0); 5596 } else 5597 CSR_WRITE(sc, WMREG_EIAC_82574, 0); 5598 } 5599 5600 /* Stop the transmit and receive processes. */ 5601 CSR_WRITE(sc, WMREG_RCTL, 0); 5602 sc->sc_rctl &= ~RCTL_EN; 5603 CSR_WRITE(sc, WMREG_TCTL, TCTL_PSP); 5604 CSR_WRITE_FLUSH(sc); 5605 5606 /* XXX set_tbi_sbp_82543() */ 5607 5608 delay(10*1000); 5609 5610 /* Must acquire the MDIO ownership before MAC reset */ 5611 switch (sc->sc_type) { 5612 case WM_T_82573: 5613 case WM_T_82574: 5614 case WM_T_82583: 5615 error = wm_get_hw_semaphore_82573(sc); 5616 break; 5617 default: 5618 break; 5619 } 5620 5621 /* 5622 * 82541 Errata 29? & 82547 Errata 28? 5623 * See also the description about PHY_RST bit in CTRL register 5624 * in 8254x_GBe_SDM.pdf. 5625 */ 5626 if ((sc->sc_type == WM_T_82541) || (sc->sc_type == WM_T_82547)) { 5627 CSR_WRITE(sc, WMREG_CTRL, 5628 CSR_READ(sc, WMREG_CTRL) | CTRL_PHY_RESET); 5629 CSR_WRITE_FLUSH(sc); 5630 delay(5000); 5631 } 5632 5633 switch (sc->sc_type) { 5634 case WM_T_82544: /* XXX check whether WM_F_IOH_VALID is set */ 5635 case WM_T_82541: 5636 case WM_T_82541_2: 5637 case WM_T_82547: 5638 case WM_T_82547_2: 5639 /* 5640 * On some chipsets, a reset through a memory-mapped write 5641 * cycle can cause the chip to reset before completing the 5642 * write cycle. This causes major headache that can be avoided 5643 * by issuing the reset via indirect register writes through 5644 * I/O space. 5645 * 5646 * So, if we successfully mapped the I/O BAR at attach time, 5647 * use that. Otherwise, try our luck with a memory-mapped 5648 * reset. 5649 */ 5650 if (sc->sc_flags & WM_F_IOH_VALID) 5651 wm_io_write(sc, WMREG_CTRL, CTRL_RST); 5652 else 5653 CSR_WRITE(sc, WMREG_CTRL, CTRL_RST); 5654 break; 5655 case WM_T_82545_3: 5656 case WM_T_82546_3: 5657 /* Use the shadow control register on these chips. */ 5658 CSR_WRITE(sc, WMREG_CTRL_SHADOW, CTRL_RST); 5659 break; 5660 case WM_T_80003: 5661 reg = CSR_READ(sc, WMREG_CTRL) | CTRL_RST; 5662 if (sc->phy.acquire(sc) != 0) 5663 break; 5664 CSR_WRITE(sc, WMREG_CTRL, reg); 5665 sc->phy.release(sc); 5666 break; 5667 case WM_T_ICH8: 5668 case WM_T_ICH9: 5669 case WM_T_ICH10: 5670 case WM_T_PCH: 5671 case WM_T_PCH2: 5672 case WM_T_PCH_LPT: 5673 case WM_T_PCH_SPT: 5674 case WM_T_PCH_CNP: 5675 case WM_T_PCH_TGP: 5676 reg = CSR_READ(sc, WMREG_CTRL) | CTRL_RST; 5677 if (wm_phy_resetisblocked(sc) == false) { 5678 /* 5679 * Gate automatic PHY configuration by hardware on 5680 * non-managed 82579 5681 */ 5682 if ((sc->sc_type == WM_T_PCH2) 5683 && ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID) 5684 == 0)) 5685 wm_gate_hw_phy_config_ich8lan(sc, true); 5686 5687 reg |= CTRL_PHY_RESET; 5688 phy_reset = 1; 5689 } else 5690 device_printf(sc->sc_dev, "XXX reset is blocked!!!\n"); 5691 if (sc->phy.acquire(sc) != 0) 5692 break; 5693 CSR_WRITE(sc, WMREG_CTRL, reg); 5694 /* Don't insert a completion barrier when reset */ 5695 delay(20*1000); 5696 /* 5697 * The EXTCNFCTR_MDIO_SW_OWNERSHIP bit is cleared by the reset, 5698 * so don't use sc->phy.release(sc). Release sc_ich_phymtx 5699 * only. See also wm_get_swflag_ich8lan(). 5700 */ 5701 mutex_exit(sc->sc_ich_phymtx); 5702 break; 5703 case WM_T_82580: 5704 case WM_T_I350: 5705 case WM_T_I354: 5706 case WM_T_I210: 5707 case WM_T_I211: 5708 CSR_WRITE(sc, WMREG_CTRL, CSR_READ(sc, WMREG_CTRL) | CTRL_RST); 5709 if (sc->sc_pcidevid != PCI_PRODUCT_INTEL_DH89XXCC_SGMII) 5710 CSR_WRITE_FLUSH(sc); 5711 delay(5000); 5712 break; 5713 case WM_T_82542_2_0: 5714 case WM_T_82542_2_1: 5715 case WM_T_82543: 5716 case WM_T_82540: 5717 case WM_T_82545: 5718 case WM_T_82546: 5719 case WM_T_82571: 5720 case WM_T_82572: 5721 case WM_T_82573: 5722 case WM_T_82574: 5723 case WM_T_82575: 5724 case WM_T_82576: 5725 case WM_T_82583: 5726 default: 5727 /* Everything else can safely use the documented method. */ 5728 CSR_WRITE(sc, WMREG_CTRL, CSR_READ(sc, WMREG_CTRL) | CTRL_RST); 5729 break; 5730 } 5731 5732 /* Must release the MDIO ownership after MAC reset */ 5733 switch (sc->sc_type) { 5734 case WM_T_82573: 5735 case WM_T_82574: 5736 case WM_T_82583: 5737 if (error == 0) 5738 wm_put_hw_semaphore_82573(sc); 5739 break; 5740 default: 5741 break; 5742 } 5743 5744 /* Set Phy Config Counter to 50msec */ 5745 if (sc->sc_type == WM_T_PCH2) { 5746 reg = CSR_READ(sc, WMREG_FEXTNVM3); 5747 reg &= ~FEXTNVM3_PHY_CFG_COUNTER_MASK; 5748 reg |= FEXTNVM3_PHY_CFG_COUNTER_50MS; 5749 CSR_WRITE(sc, WMREG_FEXTNVM3, reg); 5750 } 5751 5752 if (phy_reset != 0) 5753 wm_get_cfg_done(sc); 5754 5755 /* Reload EEPROM */ 5756 switch (sc->sc_type) { 5757 case WM_T_82542_2_0: 5758 case WM_T_82542_2_1: 5759 case WM_T_82543: 5760 case WM_T_82544: 5761 delay(10); 5762 reg = CSR_READ(sc, WMREG_CTRL_EXT) | CTRL_EXT_EE_RST; 5763 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 5764 CSR_WRITE_FLUSH(sc); 5765 delay(2000); 5766 break; 5767 case WM_T_82540: 5768 case WM_T_82545: 5769 case WM_T_82545_3: 5770 case WM_T_82546: 5771 case WM_T_82546_3: 5772 delay(5*1000); 5773 /* XXX Disable HW ARPs on ASF enabled adapters */ 5774 break; 5775 case WM_T_82541: 5776 case WM_T_82541_2: 5777 case WM_T_82547: 5778 case WM_T_82547_2: 5779 delay(20000); 5780 /* XXX Disable HW ARPs on ASF enabled adapters */ 5781 break; 5782 case WM_T_82571: 5783 case WM_T_82572: 5784 case WM_T_82573: 5785 case WM_T_82574: 5786 case WM_T_82583: 5787 if (sc->sc_flags & WM_F_EEPROM_FLASH) { 5788 delay(10); 5789 reg = CSR_READ(sc, WMREG_CTRL_EXT) | CTRL_EXT_EE_RST; 5790 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 5791 CSR_WRITE_FLUSH(sc); 5792 } 5793 /* check EECD_EE_AUTORD */ 5794 wm_get_auto_rd_done(sc); 5795 /* 5796 * Phy configuration from NVM just starts after EECD_AUTO_RD 5797 * is set. 5798 */ 5799 if ((sc->sc_type == WM_T_82573) || (sc->sc_type == WM_T_82574) 5800 || (sc->sc_type == WM_T_82583)) 5801 delay(25*1000); 5802 break; 5803 case WM_T_82575: 5804 case WM_T_82576: 5805 case WM_T_82580: 5806 case WM_T_I350: 5807 case WM_T_I354: 5808 case WM_T_I210: 5809 case WM_T_I211: 5810 case WM_T_80003: 5811 /* check EECD_EE_AUTORD */ 5812 wm_get_auto_rd_done(sc); 5813 break; 5814 case WM_T_ICH8: 5815 case WM_T_ICH9: 5816 case WM_T_ICH10: 5817 case WM_T_PCH: 5818 case WM_T_PCH2: 5819 case WM_T_PCH_LPT: 5820 case WM_T_PCH_SPT: 5821 case WM_T_PCH_CNP: 5822 case WM_T_PCH_TGP: 5823 break; 5824 default: 5825 panic("%s: unknown type\n", __func__); 5826 } 5827 5828 /* Check whether EEPROM is present or not */ 5829 switch (sc->sc_type) { 5830 case WM_T_82575: 5831 case WM_T_82576: 5832 case WM_T_82580: 5833 case WM_T_I350: 5834 case WM_T_I354: 5835 case WM_T_ICH8: 5836 case WM_T_ICH9: 5837 if ((CSR_READ(sc, WMREG_EECD) & EECD_EE_PRES) == 0) { 5838 /* Not found */ 5839 sc->sc_flags |= WM_F_EEPROM_INVALID; 5840 if (sc->sc_type == WM_T_82575) 5841 wm_reset_init_script_82575(sc); 5842 } 5843 break; 5844 default: 5845 break; 5846 } 5847 5848 if (phy_reset != 0) 5849 wm_phy_post_reset(sc); 5850 5851 if ((sc->sc_type == WM_T_82580) 5852 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354)) { 5853 /* Clear global device reset status bit */ 5854 CSR_WRITE(sc, WMREG_STATUS, STATUS_DEV_RST_SET); 5855 } 5856 5857 /* Clear any pending interrupt events. */ 5858 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU); 5859 reg = CSR_READ(sc, WMREG_ICR); 5860 if (wm_is_using_msix(sc)) { 5861 if (sc->sc_type != WM_T_82574) { 5862 CSR_WRITE(sc, WMREG_EIMC, 0xffffffffU); 5863 CSR_WRITE(sc, WMREG_EIAC, 0); 5864 } else 5865 CSR_WRITE(sc, WMREG_EIAC_82574, 0); 5866 } 5867 5868 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 5869 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 5870 || (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT) 5871 || (sc->sc_type == WM_T_PCH_SPT) || (sc->sc_type == WM_T_PCH_CNP) 5872 || (sc->sc_type == WM_T_PCH_TGP)) { 5873 reg = CSR_READ(sc, WMREG_KABGTXD); 5874 reg |= KABGTXD_BGSQLBIAS; 5875 CSR_WRITE(sc, WMREG_KABGTXD, reg); 5876 } 5877 5878 /* Reload sc_ctrl */ 5879 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL); 5880 5881 wm_set_eee(sc); 5882 5883 /* 5884 * For PCH, this write will make sure that any noise will be detected 5885 * as a CRC error and be dropped rather than show up as a bad packet 5886 * to the DMA engine 5887 */ 5888 if (sc->sc_type == WM_T_PCH) 5889 CSR_WRITE(sc, WMREG_CRC_OFFSET, 0x65656565); 5890 5891 if (sc->sc_type >= WM_T_82544) 5892 CSR_WRITE(sc, WMREG_WUC, 0); 5893 5894 if (sc->sc_type < WM_T_82575) 5895 wm_disable_aspm(sc); /* Workaround for some chips */ 5896 5897 wm_reset_mdicnfg_82580(sc); 5898 5899 if ((sc->sc_flags & WM_F_PLL_WA_I210) != 0) 5900 wm_pll_workaround_i210(sc); 5901 5902 if (sc->sc_type == WM_T_80003) { 5903 /* Default to TRUE to enable the MDIC W/A */ 5904 sc->sc_flags |= WM_F_80003_MDIC_WA; 5905 5906 rv = wm_kmrn_readreg(sc, 5907 KUMCTRLSTA_OFFSET >> KUMCTRLSTA_OFFSET_SHIFT, &kmreg); 5908 if (rv == 0) { 5909 if ((kmreg & KUMCTRLSTA_OPMODE_MASK) 5910 == KUMCTRLSTA_OPMODE_INBAND_MDIO) 5911 sc->sc_flags &= ~WM_F_80003_MDIC_WA; 5912 else 5913 sc->sc_flags |= WM_F_80003_MDIC_WA; 5914 } 5915 } 5916 } 5917 5918 /* 5919 * wm_add_rxbuf: 5920 * 5921 * Add a receive buffer to the indiciated descriptor. 5922 */ 5923 static int 5924 wm_add_rxbuf(struct wm_rxqueue *rxq, int idx) 5925 { 5926 struct wm_softc *sc = rxq->rxq_sc; 5927 struct wm_rxsoft *rxs = &rxq->rxq_soft[idx]; 5928 struct mbuf *m; 5929 int error; 5930 5931 KASSERT(mutex_owned(rxq->rxq_lock)); 5932 5933 MGETHDR(m, M_DONTWAIT, MT_DATA); 5934 if (m == NULL) 5935 return ENOBUFS; 5936 5937 MCLGET(m, M_DONTWAIT); 5938 if ((m->m_flags & M_EXT) == 0) { 5939 m_freem(m); 5940 return ENOBUFS; 5941 } 5942 5943 if (rxs->rxs_mbuf != NULL) 5944 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap); 5945 5946 rxs->rxs_mbuf = m; 5947 5948 m->m_len = m->m_pkthdr.len = m->m_ext.ext_size; 5949 /* 5950 * Cannot use bus_dmamap_load_mbuf() here because m_data may be 5951 * sc_align_tweak'd between bus_dmamap_load() and bus_dmamap_sync(). 5952 */ 5953 error = bus_dmamap_load(sc->sc_dmat, rxs->rxs_dmamap, m->m_ext.ext_buf, 5954 m->m_ext.ext_size, NULL, BUS_DMA_READ | BUS_DMA_NOWAIT); 5955 if (error) { 5956 /* XXX XXX XXX */ 5957 aprint_error_dev(sc->sc_dev, 5958 "unable to load rx DMA map %d, error = %d\n", idx, error); 5959 panic("wm_add_rxbuf"); 5960 } 5961 5962 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 5963 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD); 5964 5965 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 5966 if ((sc->sc_rctl & RCTL_EN) != 0) 5967 wm_init_rxdesc(rxq, idx); 5968 } else 5969 wm_init_rxdesc(rxq, idx); 5970 5971 return 0; 5972 } 5973 5974 /* 5975 * wm_rxdrain: 5976 * 5977 * Drain the receive queue. 5978 */ 5979 static void 5980 wm_rxdrain(struct wm_rxqueue *rxq) 5981 { 5982 struct wm_softc *sc = rxq->rxq_sc; 5983 struct wm_rxsoft *rxs; 5984 int i; 5985 5986 KASSERT(mutex_owned(rxq->rxq_lock)); 5987 5988 for (i = 0; i < WM_NRXDESC; i++) { 5989 rxs = &rxq->rxq_soft[i]; 5990 if (rxs->rxs_mbuf != NULL) { 5991 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap); 5992 m_freem(rxs->rxs_mbuf); 5993 rxs->rxs_mbuf = NULL; 5994 } 5995 } 5996 } 5997 5998 /* 5999 * Setup registers for RSS. 6000 * 6001 * XXX not yet VMDq support 6002 */ 6003 static void 6004 wm_init_rss(struct wm_softc *sc) 6005 { 6006 uint32_t mrqc, reta_reg, rss_key[RSSRK_NUM_REGS]; 6007 int i; 6008 6009 CTASSERT(sizeof(rss_key) == RSS_KEYSIZE); 6010 6011 for (i = 0; i < RETA_NUM_ENTRIES; i++) { 6012 unsigned int qid, reta_ent; 6013 6014 qid = i % sc->sc_nqueues; 6015 switch (sc->sc_type) { 6016 case WM_T_82574: 6017 reta_ent = __SHIFTIN(qid, 6018 RETA_ENT_QINDEX_MASK_82574); 6019 break; 6020 case WM_T_82575: 6021 reta_ent = __SHIFTIN(qid, 6022 RETA_ENT_QINDEX1_MASK_82575); 6023 break; 6024 default: 6025 reta_ent = __SHIFTIN(qid, RETA_ENT_QINDEX_MASK); 6026 break; 6027 } 6028 6029 reta_reg = CSR_READ(sc, WMREG_RETA_Q(i)); 6030 reta_reg &= ~RETA_ENTRY_MASK_Q(i); 6031 reta_reg |= __SHIFTIN(reta_ent, RETA_ENTRY_MASK_Q(i)); 6032 CSR_WRITE(sc, WMREG_RETA_Q(i), reta_reg); 6033 } 6034 6035 rss_getkey((uint8_t *)rss_key); 6036 for (i = 0; i < RSSRK_NUM_REGS; i++) 6037 CSR_WRITE(sc, WMREG_RSSRK(i), rss_key[i]); 6038 6039 if (sc->sc_type == WM_T_82574) 6040 mrqc = MRQC_ENABLE_RSS_MQ_82574; 6041 else 6042 mrqc = MRQC_ENABLE_RSS_MQ; 6043 6044 /* 6045 * MRQC_RSS_FIELD_IPV6_EX is not set because of an errata. 6046 * See IPV6EXDIS bit in wm_initialize_hardware_bits(). 6047 */ 6048 mrqc |= (MRQC_RSS_FIELD_IPV4 | MRQC_RSS_FIELD_IPV4_TCP); 6049 mrqc |= (MRQC_RSS_FIELD_IPV6 | MRQC_RSS_FIELD_IPV6_TCP); 6050 #if 0 6051 mrqc |= (MRQC_RSS_FIELD_IPV4_UDP | MRQC_RSS_FIELD_IPV6_UDP); 6052 mrqc |= MRQC_RSS_FIELD_IPV6_UDP_EX; 6053 #endif 6054 mrqc |= MRQC_RSS_FIELD_IPV6_TCP_EX; 6055 6056 CSR_WRITE(sc, WMREG_MRQC, mrqc); 6057 } 6058 6059 /* 6060 * Adjust TX and RX queue numbers which the system actulally uses. 6061 * 6062 * The numbers are affected by below parameters. 6063 * - The nubmer of hardware queues 6064 * - The number of MSI-X vectors (= "nvectors" argument) 6065 * - ncpu 6066 */ 6067 static void 6068 wm_adjust_qnum(struct wm_softc *sc, int nvectors) 6069 { 6070 int hw_ntxqueues, hw_nrxqueues, hw_nqueues; 6071 6072 if (nvectors < 2) { 6073 sc->sc_nqueues = 1; 6074 return; 6075 } 6076 6077 switch (sc->sc_type) { 6078 case WM_T_82572: 6079 hw_ntxqueues = 2; 6080 hw_nrxqueues = 2; 6081 break; 6082 case WM_T_82574: 6083 hw_ntxqueues = 2; 6084 hw_nrxqueues = 2; 6085 break; 6086 case WM_T_82575: 6087 hw_ntxqueues = 4; 6088 hw_nrxqueues = 4; 6089 break; 6090 case WM_T_82576: 6091 hw_ntxqueues = 16; 6092 hw_nrxqueues = 16; 6093 break; 6094 case WM_T_82580: 6095 case WM_T_I350: 6096 case WM_T_I354: 6097 hw_ntxqueues = 8; 6098 hw_nrxqueues = 8; 6099 break; 6100 case WM_T_I210: 6101 hw_ntxqueues = 4; 6102 hw_nrxqueues = 4; 6103 break; 6104 case WM_T_I211: 6105 hw_ntxqueues = 2; 6106 hw_nrxqueues = 2; 6107 break; 6108 /* 6109 * The below Ethernet controllers do not support MSI-X; 6110 * this driver doesn't let them use multiqueue. 6111 * - WM_T_80003 6112 * - WM_T_ICH8 6113 * - WM_T_ICH9 6114 * - WM_T_ICH10 6115 * - WM_T_PCH 6116 * - WM_T_PCH2 6117 * - WM_T_PCH_LPT 6118 */ 6119 default: 6120 hw_ntxqueues = 1; 6121 hw_nrxqueues = 1; 6122 break; 6123 } 6124 6125 hw_nqueues = uimin(hw_ntxqueues, hw_nrxqueues); 6126 6127 /* 6128 * As queues more than MSI-X vectors cannot improve scaling, we limit 6129 * the number of queues used actually. 6130 */ 6131 if (nvectors < hw_nqueues + 1) 6132 sc->sc_nqueues = nvectors - 1; 6133 else 6134 sc->sc_nqueues = hw_nqueues; 6135 6136 /* 6137 * As queues more than CPUs cannot improve scaling, we limit 6138 * the number of queues used actually. 6139 */ 6140 if (ncpu < sc->sc_nqueues) 6141 sc->sc_nqueues = ncpu; 6142 } 6143 6144 static inline bool 6145 wm_is_using_msix(struct wm_softc *sc) 6146 { 6147 6148 return (sc->sc_nintrs > 1); 6149 } 6150 6151 static inline bool 6152 wm_is_using_multiqueue(struct wm_softc *sc) 6153 { 6154 6155 return (sc->sc_nqueues > 1); 6156 } 6157 6158 static int 6159 wm_softint_establish_queue(struct wm_softc *sc, int qidx, int intr_idx) 6160 { 6161 struct wm_queue *wmq = &sc->sc_queue[qidx]; 6162 6163 wmq->wmq_id = qidx; 6164 wmq->wmq_intr_idx = intr_idx; 6165 wmq->wmq_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, 6166 wm_handle_queue, wmq); 6167 if (wmq->wmq_si != NULL) 6168 return 0; 6169 6170 aprint_error_dev(sc->sc_dev, "unable to establish queue[%d] handler\n", 6171 wmq->wmq_id); 6172 pci_intr_disestablish(sc->sc_pc, sc->sc_ihs[wmq->wmq_intr_idx]); 6173 sc->sc_ihs[wmq->wmq_intr_idx] = NULL; 6174 return ENOMEM; 6175 } 6176 6177 /* 6178 * Both single interrupt MSI and INTx can use this function. 6179 */ 6180 static int 6181 wm_setup_legacy(struct wm_softc *sc) 6182 { 6183 pci_chipset_tag_t pc = sc->sc_pc; 6184 const char *intrstr = NULL; 6185 char intrbuf[PCI_INTRSTR_LEN]; 6186 int error; 6187 6188 error = wm_alloc_txrx_queues(sc); 6189 if (error) { 6190 aprint_error_dev(sc->sc_dev, "cannot allocate queues %d\n", 6191 error); 6192 return ENOMEM; 6193 } 6194 intrstr = pci_intr_string(pc, sc->sc_intrs[0], intrbuf, 6195 sizeof(intrbuf)); 6196 pci_intr_setattr(pc, &sc->sc_intrs[0], PCI_INTR_MPSAFE, true); 6197 sc->sc_ihs[0] = pci_intr_establish_xname(pc, sc->sc_intrs[0], 6198 IPL_NET, wm_intr_legacy, sc, device_xname(sc->sc_dev)); 6199 if (sc->sc_ihs[0] == NULL) { 6200 aprint_error_dev(sc->sc_dev,"unable to establish %s\n", 6201 (pci_intr_type(pc, sc->sc_intrs[0]) 6202 == PCI_INTR_TYPE_MSI) ? "MSI" : "INTx"); 6203 return ENOMEM; 6204 } 6205 6206 aprint_normal_dev(sc->sc_dev, "interrupting at %s\n", intrstr); 6207 sc->sc_nintrs = 1; 6208 6209 return wm_softint_establish_queue(sc, 0, 0); 6210 } 6211 6212 static int 6213 wm_setup_msix(struct wm_softc *sc) 6214 { 6215 void *vih; 6216 kcpuset_t *affinity; 6217 int qidx, error, intr_idx, txrx_established; 6218 pci_chipset_tag_t pc = sc->sc_pc; 6219 const char *intrstr = NULL; 6220 char intrbuf[PCI_INTRSTR_LEN]; 6221 char intr_xname[INTRDEVNAMEBUF]; 6222 6223 if (sc->sc_nqueues < ncpu) { 6224 /* 6225 * To avoid other devices' interrupts, the affinity of Tx/Rx 6226 * interrupts start from CPU#1. 6227 */ 6228 sc->sc_affinity_offset = 1; 6229 } else { 6230 /* 6231 * In this case, this device use all CPUs. So, we unify 6232 * affinitied cpu_index to msix vector number for readability. 6233 */ 6234 sc->sc_affinity_offset = 0; 6235 } 6236 6237 error = wm_alloc_txrx_queues(sc); 6238 if (error) { 6239 aprint_error_dev(sc->sc_dev, "cannot allocate queues %d\n", 6240 error); 6241 return ENOMEM; 6242 } 6243 6244 kcpuset_create(&affinity, false); 6245 intr_idx = 0; 6246 6247 /* 6248 * TX and RX 6249 */ 6250 txrx_established = 0; 6251 for (qidx = 0; qidx < sc->sc_nqueues; qidx++) { 6252 struct wm_queue *wmq = &sc->sc_queue[qidx]; 6253 int affinity_to = (sc->sc_affinity_offset + intr_idx) % ncpu; 6254 6255 intrstr = pci_intr_string(pc, sc->sc_intrs[intr_idx], intrbuf, 6256 sizeof(intrbuf)); 6257 pci_intr_setattr(pc, &sc->sc_intrs[intr_idx], 6258 PCI_INTR_MPSAFE, true); 6259 memset(intr_xname, 0, sizeof(intr_xname)); 6260 snprintf(intr_xname, sizeof(intr_xname), "%sTXRX%d", 6261 device_xname(sc->sc_dev), qidx); 6262 vih = pci_intr_establish_xname(pc, sc->sc_intrs[intr_idx], 6263 IPL_NET, wm_txrxintr_msix, wmq, intr_xname); 6264 if (vih == NULL) { 6265 aprint_error_dev(sc->sc_dev, 6266 "unable to establish MSI-X(for TX and RX)%s%s\n", 6267 intrstr ? " at " : "", 6268 intrstr ? intrstr : ""); 6269 6270 goto fail; 6271 } 6272 kcpuset_zero(affinity); 6273 /* Round-robin affinity */ 6274 kcpuset_set(affinity, affinity_to); 6275 error = interrupt_distribute(vih, affinity, NULL); 6276 if (error == 0) { 6277 aprint_normal_dev(sc->sc_dev, 6278 "for TX and RX interrupting at %s affinity to %u\n", 6279 intrstr, affinity_to); 6280 } else { 6281 aprint_normal_dev(sc->sc_dev, 6282 "for TX and RX interrupting at %s\n", intrstr); 6283 } 6284 sc->sc_ihs[intr_idx] = vih; 6285 if (wm_softint_establish_queue(sc, qidx, intr_idx) != 0) 6286 goto fail; 6287 txrx_established++; 6288 intr_idx++; 6289 } 6290 6291 /* LINK */ 6292 intrstr = pci_intr_string(pc, sc->sc_intrs[intr_idx], intrbuf, 6293 sizeof(intrbuf)); 6294 pci_intr_setattr(pc, &sc->sc_intrs[intr_idx], PCI_INTR_MPSAFE, true); 6295 memset(intr_xname, 0, sizeof(intr_xname)); 6296 snprintf(intr_xname, sizeof(intr_xname), "%sLINK", 6297 device_xname(sc->sc_dev)); 6298 vih = pci_intr_establish_xname(pc, sc->sc_intrs[intr_idx], 6299 IPL_NET, wm_linkintr_msix, sc, intr_xname); 6300 if (vih == NULL) { 6301 aprint_error_dev(sc->sc_dev, 6302 "unable to establish MSI-X(for LINK)%s%s\n", 6303 intrstr ? " at " : "", 6304 intrstr ? intrstr : ""); 6305 6306 goto fail; 6307 } 6308 /* Keep default affinity to LINK interrupt */ 6309 aprint_normal_dev(sc->sc_dev, 6310 "for LINK interrupting at %s\n", intrstr); 6311 sc->sc_ihs[intr_idx] = vih; 6312 sc->sc_link_intr_idx = intr_idx; 6313 6314 sc->sc_nintrs = sc->sc_nqueues + 1; 6315 kcpuset_destroy(affinity); 6316 return 0; 6317 6318 fail: 6319 for (qidx = 0; qidx < txrx_established; qidx++) { 6320 struct wm_queue *wmq = &sc->sc_queue[qidx]; 6321 pci_intr_disestablish(sc->sc_pc,sc->sc_ihs[wmq->wmq_intr_idx]); 6322 sc->sc_ihs[wmq->wmq_intr_idx] = NULL; 6323 } 6324 6325 kcpuset_destroy(affinity); 6326 return ENOMEM; 6327 } 6328 6329 static void 6330 wm_unset_stopping_flags(struct wm_softc *sc) 6331 { 6332 int i; 6333 6334 KASSERT(mutex_owned(sc->sc_core_lock)); 6335 6336 /* Must unset stopping flags in ascending order. */ 6337 for (i = 0; i < sc->sc_nqueues; i++) { 6338 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 6339 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 6340 6341 mutex_enter(txq->txq_lock); 6342 txq->txq_stopping = false; 6343 mutex_exit(txq->txq_lock); 6344 6345 mutex_enter(rxq->rxq_lock); 6346 rxq->rxq_stopping = false; 6347 mutex_exit(rxq->rxq_lock); 6348 } 6349 6350 sc->sc_core_stopping = false; 6351 } 6352 6353 static void 6354 wm_set_stopping_flags(struct wm_softc *sc) 6355 { 6356 int i; 6357 6358 KASSERT(mutex_owned(sc->sc_core_lock)); 6359 6360 sc->sc_core_stopping = true; 6361 6362 /* Must set stopping flags in ascending order. */ 6363 for (i = 0; i < sc->sc_nqueues; i++) { 6364 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 6365 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 6366 6367 mutex_enter(rxq->rxq_lock); 6368 rxq->rxq_stopping = true; 6369 mutex_exit(rxq->rxq_lock); 6370 6371 mutex_enter(txq->txq_lock); 6372 txq->txq_stopping = true; 6373 mutex_exit(txq->txq_lock); 6374 } 6375 } 6376 6377 /* 6378 * Write interrupt interval value to ITR or EITR 6379 */ 6380 static void 6381 wm_itrs_writereg(struct wm_softc *sc, struct wm_queue *wmq) 6382 { 6383 6384 if (!wmq->wmq_set_itr) 6385 return; 6386 6387 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 6388 uint32_t eitr = __SHIFTIN(wmq->wmq_itr, EITR_ITR_INT_MASK); 6389 6390 /* 6391 * 82575 doesn't have CNT_INGR field. 6392 * So, overwrite counter field by software. 6393 */ 6394 if (sc->sc_type == WM_T_82575) 6395 eitr |= __SHIFTIN(wmq->wmq_itr, 6396 EITR_COUNTER_MASK_82575); 6397 else 6398 eitr |= EITR_CNT_INGR; 6399 6400 CSR_WRITE(sc, WMREG_EITR(wmq->wmq_intr_idx), eitr); 6401 } else if (sc->sc_type == WM_T_82574 && wm_is_using_msix(sc)) { 6402 /* 6403 * 82574 has both ITR and EITR. SET EITR when we use 6404 * the multi queue function with MSI-X. 6405 */ 6406 CSR_WRITE(sc, WMREG_EITR_82574(wmq->wmq_intr_idx), 6407 wmq->wmq_itr & EITR_ITR_INT_MASK_82574); 6408 } else { 6409 KASSERT(wmq->wmq_id == 0); 6410 CSR_WRITE(sc, WMREG_ITR, wmq->wmq_itr); 6411 } 6412 6413 wmq->wmq_set_itr = false; 6414 } 6415 6416 /* 6417 * TODO 6418 * Below dynamic calculation of itr is almost the same as Linux igb, 6419 * however it does not fit to wm(4). So, we will have been disable AIM 6420 * until we will find appropriate calculation of itr. 6421 */ 6422 /* 6423 * Calculate interrupt interval value to be going to write register in 6424 * wm_itrs_writereg(). This function does not write ITR/EITR register. 6425 */ 6426 static void 6427 wm_itrs_calculate(struct wm_softc *sc, struct wm_queue *wmq) 6428 { 6429 #ifdef NOTYET 6430 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 6431 struct wm_txqueue *txq = &wmq->wmq_txq; 6432 uint32_t avg_size = 0; 6433 uint32_t new_itr; 6434 6435 if (rxq->rxq_packets) 6436 avg_size = rxq->rxq_bytes / rxq->rxq_packets; 6437 if (txq->txq_packets) 6438 avg_size = uimax(avg_size, txq->txq_bytes / txq->txq_packets); 6439 6440 if (avg_size == 0) { 6441 new_itr = 450; /* restore default value */ 6442 goto out; 6443 } 6444 6445 /* Add 24 bytes to size to account for CRC, preamble, and gap */ 6446 avg_size += 24; 6447 6448 /* Don't starve jumbo frames */ 6449 avg_size = uimin(avg_size, 3000); 6450 6451 /* Give a little boost to mid-size frames */ 6452 if ((avg_size > 300) && (avg_size < 1200)) 6453 new_itr = avg_size / 3; 6454 else 6455 new_itr = avg_size / 2; 6456 6457 out: 6458 /* 6459 * The usage of 82574 and 82575 EITR is different from otther NEWQUEUE 6460 * controllers. See sc->sc_itr_init setting in wm_init_locked(). 6461 */ 6462 if ((sc->sc_flags & WM_F_NEWQUEUE) == 0 || sc->sc_type != WM_T_82575) 6463 new_itr *= 4; 6464 6465 if (new_itr != wmq->wmq_itr) { 6466 wmq->wmq_itr = new_itr; 6467 wmq->wmq_set_itr = true; 6468 } else 6469 wmq->wmq_set_itr = false; 6470 6471 rxq->rxq_packets = 0; 6472 rxq->rxq_bytes = 0; 6473 txq->txq_packets = 0; 6474 txq->txq_bytes = 0; 6475 #endif 6476 } 6477 6478 static void 6479 wm_init_sysctls(struct wm_softc *sc) 6480 { 6481 struct sysctllog **log; 6482 const struct sysctlnode *rnode, *qnode, *cnode; 6483 int i, rv; 6484 const char *dvname; 6485 6486 log = &sc->sc_sysctllog; 6487 dvname = device_xname(sc->sc_dev); 6488 6489 rv = sysctl_createv(log, 0, NULL, &rnode, 6490 0, CTLTYPE_NODE, dvname, 6491 SYSCTL_DESCR("wm information and settings"), 6492 NULL, 0, NULL, 0, CTL_HW, CTL_CREATE, CTL_EOL); 6493 if (rv != 0) 6494 goto err; 6495 6496 rv = sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE, 6497 CTLTYPE_BOOL, "txrx_workqueue", 6498 SYSCTL_DESCR("Use workqueue for packet processing"), 6499 NULL, 0, &sc->sc_txrx_use_workqueue, 0, CTL_CREATE, CTL_EOL); 6500 if (rv != 0) 6501 goto teardown; 6502 6503 for (i = 0; i < sc->sc_nqueues; i++) { 6504 struct wm_queue *wmq = &sc->sc_queue[i]; 6505 struct wm_txqueue *txq = &wmq->wmq_txq; 6506 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 6507 6508 snprintf(sc->sc_queue[i].sysctlname, 6509 sizeof(sc->sc_queue[i].sysctlname), "q%d", i); 6510 6511 if (sysctl_createv(log, 0, &rnode, &qnode, 6512 0, CTLTYPE_NODE, 6513 sc->sc_queue[i].sysctlname, SYSCTL_DESCR("Queue Name"), 6514 NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL) != 0) 6515 break; 6516 6517 if (sysctl_createv(log, 0, &qnode, &cnode, 6518 CTLFLAG_READONLY, CTLTYPE_INT, 6519 "txq_free", SYSCTL_DESCR("TX queue free"), 6520 NULL, 0, &txq->txq_free, 6521 0, CTL_CREATE, CTL_EOL) != 0) 6522 break; 6523 if (sysctl_createv(log, 0, &qnode, &cnode, 6524 CTLFLAG_READONLY, CTLTYPE_INT, 6525 "txd_head", SYSCTL_DESCR("TX descriptor head"), 6526 wm_sysctl_tdh_handler, 0, (void *)txq, 6527 0, CTL_CREATE, CTL_EOL) != 0) 6528 break; 6529 if (sysctl_createv(log, 0, &qnode, &cnode, 6530 CTLFLAG_READONLY, CTLTYPE_INT, 6531 "txd_tail", SYSCTL_DESCR("TX descriptor tail"), 6532 wm_sysctl_tdt_handler, 0, (void *)txq, 6533 0, CTL_CREATE, CTL_EOL) != 0) 6534 break; 6535 if (sysctl_createv(log, 0, &qnode, &cnode, 6536 CTLFLAG_READONLY, CTLTYPE_INT, 6537 "txq_next", SYSCTL_DESCR("TX queue next"), 6538 NULL, 0, &txq->txq_next, 6539 0, CTL_CREATE, CTL_EOL) != 0) 6540 break; 6541 if (sysctl_createv(log, 0, &qnode, &cnode, 6542 CTLFLAG_READONLY, CTLTYPE_INT, 6543 "txq_sfree", SYSCTL_DESCR("TX queue sfree"), 6544 NULL, 0, &txq->txq_sfree, 6545 0, CTL_CREATE, CTL_EOL) != 0) 6546 break; 6547 if (sysctl_createv(log, 0, &qnode, &cnode, 6548 CTLFLAG_READONLY, CTLTYPE_INT, 6549 "txq_snext", SYSCTL_DESCR("TX queue snext"), 6550 NULL, 0, &txq->txq_snext, 6551 0, CTL_CREATE, CTL_EOL) != 0) 6552 break; 6553 if (sysctl_createv(log, 0, &qnode, &cnode, 6554 CTLFLAG_READONLY, CTLTYPE_INT, 6555 "txq_sdirty", SYSCTL_DESCR("TX queue sdirty"), 6556 NULL, 0, &txq->txq_sdirty, 6557 0, CTL_CREATE, CTL_EOL) != 0) 6558 break; 6559 if (sysctl_createv(log, 0, &qnode, &cnode, 6560 CTLFLAG_READONLY, CTLTYPE_INT, 6561 "txq_flags", SYSCTL_DESCR("TX queue flags"), 6562 NULL, 0, &txq->txq_flags, 6563 0, CTL_CREATE, CTL_EOL) != 0) 6564 break; 6565 if (sysctl_createv(log, 0, &qnode, &cnode, 6566 CTLFLAG_READONLY, CTLTYPE_BOOL, 6567 "txq_stopping", SYSCTL_DESCR("TX queue stopping"), 6568 NULL, 0, &txq->txq_stopping, 6569 0, CTL_CREATE, CTL_EOL) != 0) 6570 break; 6571 if (sysctl_createv(log, 0, &qnode, &cnode, 6572 CTLFLAG_READONLY, CTLTYPE_BOOL, 6573 "txq_sending", SYSCTL_DESCR("TX queue sending"), 6574 NULL, 0, &txq->txq_sending, 6575 0, CTL_CREATE, CTL_EOL) != 0) 6576 break; 6577 6578 if (sysctl_createv(log, 0, &qnode, &cnode, 6579 CTLFLAG_READONLY, CTLTYPE_INT, 6580 "rxq_ptr", SYSCTL_DESCR("RX queue pointer"), 6581 NULL, 0, &rxq->rxq_ptr, 6582 0, CTL_CREATE, CTL_EOL) != 0) 6583 break; 6584 } 6585 6586 #ifdef WM_DEBUG 6587 rv = sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE, 6588 CTLTYPE_INT, "debug_flags", 6589 SYSCTL_DESCR( 6590 "Debug flags:\n" \ 6591 "\t0x01 LINK\n" \ 6592 "\t0x02 TX\n" \ 6593 "\t0x04 RX\n" \ 6594 "\t0x08 GMII\n" \ 6595 "\t0x10 MANAGE\n" \ 6596 "\t0x20 NVM\n" \ 6597 "\t0x40 INIT\n" \ 6598 "\t0x80 LOCK"), 6599 wm_sysctl_debug, 0, (void *)sc, 0, CTL_CREATE, CTL_EOL); 6600 if (rv != 0) 6601 goto teardown; 6602 rv = sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE, 6603 CTLTYPE_BOOL, "trigger_reset", 6604 SYSCTL_DESCR("Trigger an interface reset"), 6605 NULL, 0, &sc->sc_trigger_reset, 0, CTL_CREATE, CTL_EOL); 6606 if (rv != 0) 6607 goto teardown; 6608 #endif 6609 6610 return; 6611 6612 teardown: 6613 sysctl_teardown(log); 6614 err: 6615 sc->sc_sysctllog = NULL; 6616 device_printf(sc->sc_dev, "%s: sysctl_createv failed, rv = %d\n", 6617 __func__, rv); 6618 } 6619 6620 static void 6621 wm_update_stats(struct wm_softc *sc) 6622 { 6623 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 6624 uint64_t crcerrs, algnerrc, symerrc, mpc, colc, sec, rlec, rxerrc, 6625 cexterr; 6626 6627 crcerrs = CSR_READ(sc, WMREG_CRCERRS); 6628 symerrc = CSR_READ(sc, WMREG_SYMERRC); 6629 mpc = CSR_READ(sc, WMREG_MPC); 6630 colc = CSR_READ(sc, WMREG_COLC); 6631 sec = CSR_READ(sc, WMREG_SEC); 6632 rlec = CSR_READ(sc, WMREG_RLEC); 6633 6634 WM_EVCNT_ADD(&sc->sc_ev_crcerrs, crcerrs); 6635 WM_EVCNT_ADD(&sc->sc_ev_symerrc, symerrc); 6636 WM_EVCNT_ADD(&sc->sc_ev_mpc, mpc); 6637 WM_EVCNT_ADD(&sc->sc_ev_colc, colc); 6638 WM_EVCNT_ADD(&sc->sc_ev_sec, sec); 6639 WM_EVCNT_ADD(&sc->sc_ev_rlec, rlec); 6640 6641 if (sc->sc_type >= WM_T_82543) { 6642 algnerrc = CSR_READ(sc, WMREG_ALGNERRC); 6643 rxerrc = CSR_READ(sc, WMREG_RXERRC); 6644 WM_EVCNT_ADD(&sc->sc_ev_algnerrc, algnerrc); 6645 WM_EVCNT_ADD(&sc->sc_ev_rxerrc, rxerrc); 6646 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) { 6647 cexterr = CSR_READ(sc, WMREG_CEXTERR); 6648 WM_EVCNT_ADD(&sc->sc_ev_cexterr, cexterr); 6649 } else { 6650 cexterr = 0; 6651 /* Excessive collision + Link down */ 6652 WM_EVCNT_ADD(&sc->sc_ev_htdpmc, 6653 CSR_READ(sc, WMREG_HTDPMC)); 6654 } 6655 6656 WM_EVCNT_ADD(&sc->sc_ev_tncrs, CSR_READ(sc, WMREG_TNCRS)); 6657 WM_EVCNT_ADD(&sc->sc_ev_tsctc, CSR_READ(sc, WMREG_TSCTC)); 6658 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 6659 WM_EVCNT_ADD(&sc->sc_ev_tsctfc, 6660 CSR_READ(sc, WMREG_TSCTFC)); 6661 else { 6662 WM_EVCNT_ADD(&sc->sc_ev_cbrdpc, 6663 CSR_READ(sc, WMREG_CBRDPC)); 6664 WM_EVCNT_ADD(&sc->sc_ev_cbrmpc, 6665 CSR_READ(sc, WMREG_CBRMPC)); 6666 } 6667 } else 6668 algnerrc = rxerrc = cexterr = 0; 6669 6670 if (sc->sc_type >= WM_T_82542_2_1) { 6671 WM_EVCNT_ADD(&sc->sc_ev_rx_xon, CSR_READ(sc, WMREG_XONRXC)); 6672 WM_EVCNT_ADD(&sc->sc_ev_tx_xon, CSR_READ(sc, WMREG_XONTXC)); 6673 WM_EVCNT_ADD(&sc->sc_ev_rx_xoff, CSR_READ(sc, WMREG_XOFFRXC)); 6674 WM_EVCNT_ADD(&sc->sc_ev_tx_xoff, CSR_READ(sc, WMREG_XOFFTXC)); 6675 WM_EVCNT_ADD(&sc->sc_ev_rx_macctl, CSR_READ(sc, WMREG_FCRUC)); 6676 } 6677 6678 WM_EVCNT_ADD(&sc->sc_ev_scc, CSR_READ(sc, WMREG_SCC)); 6679 WM_EVCNT_ADD(&sc->sc_ev_ecol, CSR_READ(sc, WMREG_ECOL)); 6680 WM_EVCNT_ADD(&sc->sc_ev_mcc, CSR_READ(sc, WMREG_MCC)); 6681 WM_EVCNT_ADD(&sc->sc_ev_latecol, CSR_READ(sc, WMREG_LATECOL)); 6682 6683 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) { 6684 WM_EVCNT_ADD(&sc->sc_ev_cbtmpc, CSR_READ(sc, WMREG_CBTMPC)); 6685 } 6686 6687 WM_EVCNT_ADD(&sc->sc_ev_dc, CSR_READ(sc, WMREG_DC)); 6688 WM_EVCNT_ADD(&sc->sc_ev_prc64, CSR_READ(sc, WMREG_PRC64)); 6689 WM_EVCNT_ADD(&sc->sc_ev_prc127, CSR_READ(sc, WMREG_PRC127)); 6690 WM_EVCNT_ADD(&sc->sc_ev_prc255, CSR_READ(sc, WMREG_PRC255)); 6691 WM_EVCNT_ADD(&sc->sc_ev_prc511, CSR_READ(sc, WMREG_PRC511)); 6692 WM_EVCNT_ADD(&sc->sc_ev_prc1023, CSR_READ(sc, WMREG_PRC1023)); 6693 WM_EVCNT_ADD(&sc->sc_ev_prc1522, CSR_READ(sc, WMREG_PRC1522)); 6694 WM_EVCNT_ADD(&sc->sc_ev_gprc, CSR_READ(sc, WMREG_GPRC)); 6695 WM_EVCNT_ADD(&sc->sc_ev_bprc, CSR_READ(sc, WMREG_BPRC)); 6696 WM_EVCNT_ADD(&sc->sc_ev_mprc, CSR_READ(sc, WMREG_MPRC)); 6697 WM_EVCNT_ADD(&sc->sc_ev_gptc, CSR_READ(sc, WMREG_GPTC)); 6698 6699 WM_EVCNT_ADD(&sc->sc_ev_gorc, 6700 CSR_READ(sc, WMREG_GORCL) + 6701 ((uint64_t)CSR_READ(sc, WMREG_GORCH) << 32)); 6702 WM_EVCNT_ADD(&sc->sc_ev_gotc, 6703 CSR_READ(sc, WMREG_GOTCL) + 6704 ((uint64_t)CSR_READ(sc, WMREG_GOTCH) << 32)); 6705 6706 WM_EVCNT_ADD(&sc->sc_ev_rnbc, CSR_READ(sc, WMREG_RNBC)); 6707 WM_EVCNT_ADD(&sc->sc_ev_ruc, CSR_READ(sc, WMREG_RUC)); 6708 WM_EVCNT_ADD(&sc->sc_ev_rfc, CSR_READ(sc, WMREG_RFC)); 6709 WM_EVCNT_ADD(&sc->sc_ev_roc, CSR_READ(sc, WMREG_ROC)); 6710 WM_EVCNT_ADD(&sc->sc_ev_rjc, CSR_READ(sc, WMREG_RJC)); 6711 6712 if (sc->sc_type >= WM_T_82540) { 6713 WM_EVCNT_ADD(&sc->sc_ev_mgtprc, CSR_READ(sc, WMREG_MGTPRC)); 6714 WM_EVCNT_ADD(&sc->sc_ev_mgtpdc, CSR_READ(sc, WMREG_MGTPDC)); 6715 WM_EVCNT_ADD(&sc->sc_ev_mgtptc, CSR_READ(sc, WMREG_MGTPTC)); 6716 } 6717 6718 /* 6719 * The TOR(L) register includes: 6720 * - Error 6721 * - Flow control 6722 * - Broadcast rejected (This note is described in 82574 and newer 6723 * datasheets. What does "broadcast rejected" mean?) 6724 */ 6725 WM_EVCNT_ADD(&sc->sc_ev_tor, 6726 CSR_READ(sc, WMREG_TORL) + 6727 ((uint64_t)CSR_READ(sc, WMREG_TORH) << 32)); 6728 WM_EVCNT_ADD(&sc->sc_ev_tot, 6729 CSR_READ(sc, WMREG_TOTL) + 6730 ((uint64_t)CSR_READ(sc, WMREG_TOTH) << 32)); 6731 6732 WM_EVCNT_ADD(&sc->sc_ev_tpr, CSR_READ(sc, WMREG_TPR)); 6733 WM_EVCNT_ADD(&sc->sc_ev_tpt, CSR_READ(sc, WMREG_TPT)); 6734 WM_EVCNT_ADD(&sc->sc_ev_ptc64, CSR_READ(sc, WMREG_PTC64)); 6735 WM_EVCNT_ADD(&sc->sc_ev_ptc127, CSR_READ(sc, WMREG_PTC127)); 6736 WM_EVCNT_ADD(&sc->sc_ev_ptc255, CSR_READ(sc, WMREG_PTC255)); 6737 WM_EVCNT_ADD(&sc->sc_ev_ptc511, CSR_READ(sc, WMREG_PTC511)); 6738 WM_EVCNT_ADD(&sc->sc_ev_ptc1023, CSR_READ(sc, WMREG_PTC1023)); 6739 WM_EVCNT_ADD(&sc->sc_ev_ptc1522, CSR_READ(sc, WMREG_PTC1522)); 6740 WM_EVCNT_ADD(&sc->sc_ev_mptc, CSR_READ(sc, WMREG_MPTC)); 6741 WM_EVCNT_ADD(&sc->sc_ev_bptc, CSR_READ(sc, WMREG_BPTC)); 6742 if (sc->sc_type >= WM_T_82571) 6743 WM_EVCNT_ADD(&sc->sc_ev_iac, CSR_READ(sc, WMREG_IAC)); 6744 if (sc->sc_type < WM_T_82575) { 6745 WM_EVCNT_ADD(&sc->sc_ev_icrxptc, CSR_READ(sc, WMREG_ICRXPTC)); 6746 WM_EVCNT_ADD(&sc->sc_ev_icrxatc, CSR_READ(sc, WMREG_ICRXATC)); 6747 WM_EVCNT_ADD(&sc->sc_ev_ictxptc, CSR_READ(sc, WMREG_ICTXPTC)); 6748 WM_EVCNT_ADD(&sc->sc_ev_ictxatc, CSR_READ(sc, WMREG_ICTXATC)); 6749 WM_EVCNT_ADD(&sc->sc_ev_ictxqec, CSR_READ(sc, WMREG_ICTXQEC)); 6750 WM_EVCNT_ADD(&sc->sc_ev_ictxqmtc, 6751 CSR_READ(sc, WMREG_ICTXQMTC)); 6752 WM_EVCNT_ADD(&sc->sc_ev_rxdmtc, 6753 CSR_READ(sc, WMREG_ICRXDMTC)); 6754 WM_EVCNT_ADD(&sc->sc_ev_icrxoc, CSR_READ(sc, WMREG_ICRXOC)); 6755 } else if (!WM_IS_ICHPCH(sc)) { 6756 WM_EVCNT_ADD(&sc->sc_ev_rpthc, CSR_READ(sc, WMREG_RPTHC)); 6757 WM_EVCNT_ADD(&sc->sc_ev_debug1, CSR_READ(sc, WMREG_DEBUG1)); 6758 WM_EVCNT_ADD(&sc->sc_ev_debug2, CSR_READ(sc, WMREG_DEBUG2)); 6759 WM_EVCNT_ADD(&sc->sc_ev_debug3, CSR_READ(sc, WMREG_DEBUG3)); 6760 WM_EVCNT_ADD(&sc->sc_ev_hgptc, CSR_READ(sc, WMREG_HGPTC)); 6761 WM_EVCNT_ADD(&sc->sc_ev_debug4, CSR_READ(sc, WMREG_DEBUG4)); 6762 WM_EVCNT_ADD(&sc->sc_ev_rxdmtc, CSR_READ(sc, WMREG_RXDMTC)); 6763 WM_EVCNT_ADD(&sc->sc_ev_htcbdpc, CSR_READ(sc, WMREG_HTCBDPC)); 6764 6765 WM_EVCNT_ADD(&sc->sc_ev_hgorc, 6766 CSR_READ(sc, WMREG_HGORCL) + 6767 ((uint64_t)CSR_READ(sc, WMREG_HGORCH) << 32)); 6768 WM_EVCNT_ADD(&sc->sc_ev_hgotc, 6769 CSR_READ(sc, WMREG_HGOTCL) + 6770 ((uint64_t)CSR_READ(sc, WMREG_HGOTCH) << 32)); 6771 WM_EVCNT_ADD(&sc->sc_ev_lenerrs, CSR_READ(sc, WMREG_LENERRS)); 6772 WM_EVCNT_ADD(&sc->sc_ev_scvpc, CSR_READ(sc, WMREG_SCVPC)); 6773 WM_EVCNT_ADD(&sc->sc_ev_hrmpc, CSR_READ(sc, WMREG_HRMPC)); 6774 } 6775 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) { 6776 WM_EVCNT_ADD(&sc->sc_ev_tlpic, CSR_READ(sc, WMREG_TLPIC)); 6777 WM_EVCNT_ADD(&sc->sc_ev_rlpic, CSR_READ(sc, WMREG_RLPIC)); 6778 if ((CSR_READ(sc, WMREG_MANC) & MANC_EN_BMC2OS) != 0) { 6779 WM_EVCNT_ADD(&sc->sc_ev_b2ogprc, 6780 CSR_READ(sc, WMREG_B2OGPRC)); 6781 WM_EVCNT_ADD(&sc->sc_ev_o2bspc, 6782 CSR_READ(sc, WMREG_O2BSPC)); 6783 WM_EVCNT_ADD(&sc->sc_ev_b2ospc, 6784 CSR_READ(sc, WMREG_B2OSPC)); 6785 WM_EVCNT_ADD(&sc->sc_ev_o2bgptc, 6786 CSR_READ(sc, WMREG_O2BGPTC)); 6787 } 6788 } 6789 net_stat_ref_t nsr = IF_STAT_GETREF(ifp); 6790 if_statadd_ref(nsr, if_collisions, colc); 6791 if_statadd_ref(nsr, if_ierrors, 6792 crcerrs + algnerrc + symerrc + rxerrc + sec + cexterr + rlec); 6793 /* 6794 * WMREG_RNBC is incremented when there are no available buffers in 6795 * host memory. It does not mean the number of dropped packets, because 6796 * an Ethernet controller can receive packets in such case if there is 6797 * space in the phy's FIFO. 6798 * 6799 * If you want to know the nubmer of WMREG_RMBC, you should use such as 6800 * own EVCNT instead of if_iqdrops. 6801 */ 6802 if_statadd_ref(nsr, if_iqdrops, mpc); 6803 IF_STAT_PUTREF(ifp); 6804 } 6805 6806 void 6807 wm_clear_evcnt(struct wm_softc *sc) 6808 { 6809 #ifdef WM_EVENT_COUNTERS 6810 int i; 6811 6812 /* RX queues */ 6813 for (i = 0; i < sc->sc_nqueues; i++) { 6814 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 6815 6816 WM_Q_EVCNT_STORE(rxq, intr, 0); 6817 WM_Q_EVCNT_STORE(rxq, defer, 0); 6818 WM_Q_EVCNT_STORE(rxq, ipsum, 0); 6819 WM_Q_EVCNT_STORE(rxq, tusum, 0); 6820 } 6821 6822 /* TX queues */ 6823 for (i = 0; i < sc->sc_nqueues; i++) { 6824 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 6825 int j; 6826 6827 WM_Q_EVCNT_STORE(txq, txsstall, 0); 6828 WM_Q_EVCNT_STORE(txq, txdstall, 0); 6829 WM_Q_EVCNT_STORE(txq, fifo_stall, 0); 6830 WM_Q_EVCNT_STORE(txq, txdw, 0); 6831 WM_Q_EVCNT_STORE(txq, txqe, 0); 6832 WM_Q_EVCNT_STORE(txq, ipsum, 0); 6833 WM_Q_EVCNT_STORE(txq, tusum, 0); 6834 WM_Q_EVCNT_STORE(txq, tusum6, 0); 6835 WM_Q_EVCNT_STORE(txq, tso, 0); 6836 WM_Q_EVCNT_STORE(txq, tso6, 0); 6837 WM_Q_EVCNT_STORE(txq, tsopain, 0); 6838 6839 for (j = 0; j < WM_NTXSEGS; j++) 6840 WM_EVCNT_STORE(&txq->txq_ev_txseg[j], 0); 6841 6842 WM_Q_EVCNT_STORE(txq, pcqdrop, 0); 6843 WM_Q_EVCNT_STORE(txq, descdrop, 0); 6844 WM_Q_EVCNT_STORE(txq, toomanyseg, 0); 6845 WM_Q_EVCNT_STORE(txq, defrag, 0); 6846 if (sc->sc_type <= WM_T_82544) 6847 WM_Q_EVCNT_STORE(txq, underrun, 0); 6848 WM_Q_EVCNT_STORE(txq, skipcontext, 0); 6849 } 6850 6851 /* Miscs */ 6852 WM_EVCNT_STORE(&sc->sc_ev_linkintr, 0); 6853 6854 WM_EVCNT_STORE(&sc->sc_ev_crcerrs, 0); 6855 WM_EVCNT_STORE(&sc->sc_ev_symerrc, 0); 6856 WM_EVCNT_STORE(&sc->sc_ev_mpc, 0); 6857 WM_EVCNT_STORE(&sc->sc_ev_colc, 0); 6858 WM_EVCNT_STORE(&sc->sc_ev_sec, 0); 6859 WM_EVCNT_STORE(&sc->sc_ev_rlec, 0); 6860 6861 if (sc->sc_type >= WM_T_82543) { 6862 WM_EVCNT_STORE(&sc->sc_ev_algnerrc, 0); 6863 WM_EVCNT_STORE(&sc->sc_ev_rxerrc, 0); 6864 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 6865 WM_EVCNT_STORE(&sc->sc_ev_cexterr, 0); 6866 else 6867 WM_EVCNT_STORE(&sc->sc_ev_htdpmc, 0); 6868 6869 WM_EVCNT_STORE(&sc->sc_ev_tncrs, 0); 6870 WM_EVCNT_STORE(&sc->sc_ev_tsctc, 0); 6871 if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc)) 6872 WM_EVCNT_STORE(&sc->sc_ev_tsctfc, 0); 6873 else { 6874 WM_EVCNT_STORE(&sc->sc_ev_cbrdpc, 0); 6875 WM_EVCNT_STORE(&sc->sc_ev_cbrmpc, 0); 6876 } 6877 } 6878 6879 if (sc->sc_type >= WM_T_82542_2_1) { 6880 WM_EVCNT_STORE(&sc->sc_ev_tx_xoff, 0); 6881 WM_EVCNT_STORE(&sc->sc_ev_tx_xon, 0); 6882 WM_EVCNT_STORE(&sc->sc_ev_rx_xoff, 0); 6883 WM_EVCNT_STORE(&sc->sc_ev_rx_xon, 0); 6884 WM_EVCNT_STORE(&sc->sc_ev_rx_macctl, 0); 6885 } 6886 6887 WM_EVCNT_STORE(&sc->sc_ev_scc, 0); 6888 WM_EVCNT_STORE(&sc->sc_ev_ecol, 0); 6889 WM_EVCNT_STORE(&sc->sc_ev_mcc, 0); 6890 WM_EVCNT_STORE(&sc->sc_ev_latecol, 0); 6891 6892 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) 6893 WM_EVCNT_STORE(&sc->sc_ev_cbtmpc, 0); 6894 6895 WM_EVCNT_STORE(&sc->sc_ev_dc, 0); 6896 WM_EVCNT_STORE(&sc->sc_ev_prc64, 0); 6897 WM_EVCNT_STORE(&sc->sc_ev_prc127, 0); 6898 WM_EVCNT_STORE(&sc->sc_ev_prc255, 0); 6899 WM_EVCNT_STORE(&sc->sc_ev_prc511, 0); 6900 WM_EVCNT_STORE(&sc->sc_ev_prc1023, 0); 6901 WM_EVCNT_STORE(&sc->sc_ev_prc1522, 0); 6902 WM_EVCNT_STORE(&sc->sc_ev_gprc, 0); 6903 WM_EVCNT_STORE(&sc->sc_ev_bprc, 0); 6904 WM_EVCNT_STORE(&sc->sc_ev_mprc, 0); 6905 WM_EVCNT_STORE(&sc->sc_ev_gptc, 0); 6906 WM_EVCNT_STORE(&sc->sc_ev_gorc, 0); 6907 WM_EVCNT_STORE(&sc->sc_ev_gotc, 0); 6908 WM_EVCNT_STORE(&sc->sc_ev_rnbc, 0); 6909 WM_EVCNT_STORE(&sc->sc_ev_ruc, 0); 6910 WM_EVCNT_STORE(&sc->sc_ev_rfc, 0); 6911 WM_EVCNT_STORE(&sc->sc_ev_roc, 0); 6912 WM_EVCNT_STORE(&sc->sc_ev_rjc, 0); 6913 if (sc->sc_type >= WM_T_82540) { 6914 WM_EVCNT_STORE(&sc->sc_ev_mgtprc, 0); 6915 WM_EVCNT_STORE(&sc->sc_ev_mgtpdc, 0); 6916 WM_EVCNT_STORE(&sc->sc_ev_mgtptc, 0); 6917 } 6918 WM_EVCNT_STORE(&sc->sc_ev_tor, 0); 6919 WM_EVCNT_STORE(&sc->sc_ev_tot, 0); 6920 WM_EVCNT_STORE(&sc->sc_ev_tpr, 0); 6921 WM_EVCNT_STORE(&sc->sc_ev_tpt, 0); 6922 WM_EVCNT_STORE(&sc->sc_ev_ptc64, 0); 6923 WM_EVCNT_STORE(&sc->sc_ev_ptc127, 0); 6924 WM_EVCNT_STORE(&sc->sc_ev_ptc255, 0); 6925 WM_EVCNT_STORE(&sc->sc_ev_ptc511, 0); 6926 WM_EVCNT_STORE(&sc->sc_ev_ptc1023, 0); 6927 WM_EVCNT_STORE(&sc->sc_ev_ptc1522, 0); 6928 WM_EVCNT_STORE(&sc->sc_ev_mptc, 0); 6929 WM_EVCNT_STORE(&sc->sc_ev_bptc, 0); 6930 if (sc->sc_type >= WM_T_82571) 6931 WM_EVCNT_STORE(&sc->sc_ev_iac, 0); 6932 if (sc->sc_type < WM_T_82575) { 6933 WM_EVCNT_STORE(&sc->sc_ev_icrxptc, 0); 6934 WM_EVCNT_STORE(&sc->sc_ev_icrxatc, 0); 6935 WM_EVCNT_STORE(&sc->sc_ev_ictxptc, 0); 6936 WM_EVCNT_STORE(&sc->sc_ev_ictxatc, 0); 6937 WM_EVCNT_STORE(&sc->sc_ev_ictxqec, 0); 6938 WM_EVCNT_STORE(&sc->sc_ev_ictxqmtc, 0); 6939 WM_EVCNT_STORE(&sc->sc_ev_rxdmtc, 0); 6940 WM_EVCNT_STORE(&sc->sc_ev_icrxoc, 0); 6941 } else if (!WM_IS_ICHPCH(sc)) { 6942 WM_EVCNT_STORE(&sc->sc_ev_rpthc, 0); 6943 WM_EVCNT_STORE(&sc->sc_ev_debug1, 0); 6944 WM_EVCNT_STORE(&sc->sc_ev_debug2, 0); 6945 WM_EVCNT_STORE(&sc->sc_ev_debug3, 0); 6946 WM_EVCNT_STORE(&sc->sc_ev_hgptc, 0); 6947 WM_EVCNT_STORE(&sc->sc_ev_debug4, 0); 6948 WM_EVCNT_STORE(&sc->sc_ev_rxdmtc, 0); 6949 WM_EVCNT_STORE(&sc->sc_ev_htcbdpc, 0); 6950 6951 WM_EVCNT_STORE(&sc->sc_ev_hgorc, 0); 6952 WM_EVCNT_STORE(&sc->sc_ev_hgotc, 0); 6953 WM_EVCNT_STORE(&sc->sc_ev_lenerrs, 0); 6954 WM_EVCNT_STORE(&sc->sc_ev_scvpc, 0); 6955 WM_EVCNT_STORE(&sc->sc_ev_hrmpc, 0); 6956 } 6957 if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) { 6958 WM_EVCNT_STORE(&sc->sc_ev_tlpic, 0); 6959 WM_EVCNT_STORE(&sc->sc_ev_rlpic, 0); 6960 WM_EVCNT_STORE(&sc->sc_ev_b2ogprc, 0); 6961 WM_EVCNT_STORE(&sc->sc_ev_o2bspc, 0); 6962 WM_EVCNT_STORE(&sc->sc_ev_b2ospc, 0); 6963 WM_EVCNT_STORE(&sc->sc_ev_o2bgptc, 0); 6964 } 6965 #endif 6966 } 6967 6968 /* 6969 * wm_init: [ifnet interface function] 6970 * 6971 * Initialize the interface. 6972 */ 6973 static int 6974 wm_init(struct ifnet *ifp) 6975 { 6976 struct wm_softc *sc = ifp->if_softc; 6977 int ret; 6978 6979 KASSERT(IFNET_LOCKED(ifp)); 6980 6981 if (sc->sc_dying) 6982 return ENXIO; 6983 6984 mutex_enter(sc->sc_core_lock); 6985 ret = wm_init_locked(ifp); 6986 mutex_exit(sc->sc_core_lock); 6987 6988 return ret; 6989 } 6990 6991 static int 6992 wm_init_locked(struct ifnet *ifp) 6993 { 6994 struct wm_softc *sc = ifp->if_softc; 6995 struct ethercom *ec = &sc->sc_ethercom; 6996 int i, j, trynum, error = 0; 6997 uint32_t reg, sfp_mask = 0; 6998 6999 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 7000 device_xname(sc->sc_dev), __func__)); 7001 KASSERT(IFNET_LOCKED(ifp)); 7002 KASSERT(mutex_owned(sc->sc_core_lock)); 7003 7004 /* 7005 * *_HDR_ALIGNED_P is constant 1 if __NO_STRICT_ALIGMENT is set. 7006 * There is a small but measurable benefit to avoiding the adjusment 7007 * of the descriptor so that the headers are aligned, for normal mtu, 7008 * on such platforms. One possibility is that the DMA itself is 7009 * slightly more efficient if the front of the entire packet (instead 7010 * of the front of the headers) is aligned. 7011 * 7012 * Note we must always set align_tweak to 0 if we are using 7013 * jumbo frames. 7014 */ 7015 #ifdef __NO_STRICT_ALIGNMENT 7016 sc->sc_align_tweak = 0; 7017 #else 7018 if ((ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN) > (MCLBYTES - 2)) 7019 sc->sc_align_tweak = 0; 7020 else 7021 sc->sc_align_tweak = 2; 7022 #endif /* __NO_STRICT_ALIGNMENT */ 7023 7024 /* Cancel any pending I/O. */ 7025 wm_stop_locked(ifp, false, false); 7026 7027 /* Update statistics before reset */ 7028 if_statadd2(ifp, if_collisions, CSR_READ(sc, WMREG_COLC), 7029 if_ierrors, CSR_READ(sc, WMREG_RXERRC)); 7030 7031 /* >= PCH_SPT hardware workaround before reset. */ 7032 if (sc->sc_type >= WM_T_PCH_SPT) 7033 wm_flush_desc_rings(sc); 7034 7035 /* Reset the chip to a known state. */ 7036 wm_reset(sc); 7037 7038 /* 7039 * AMT based hardware can now take control from firmware 7040 * Do this after reset. 7041 */ 7042 if ((sc->sc_flags & WM_F_HAS_AMT) != 0) 7043 wm_get_hw_control(sc); 7044 7045 if ((sc->sc_type >= WM_T_PCH_SPT) && 7046 pci_intr_type(sc->sc_pc, sc->sc_intrs[0]) == PCI_INTR_TYPE_INTX) 7047 wm_legacy_irq_quirk_spt(sc); 7048 7049 /* Init hardware bits */ 7050 wm_initialize_hardware_bits(sc); 7051 7052 /* Reset the PHY. */ 7053 if (sc->sc_flags & WM_F_HAS_MII) 7054 wm_gmii_reset(sc); 7055 7056 if (sc->sc_type >= WM_T_ICH8) { 7057 reg = CSR_READ(sc, WMREG_GCR); 7058 /* 7059 * ICH8 No-snoop bits are opposite polarity. Set to snoop by 7060 * default after reset. 7061 */ 7062 if (sc->sc_type == WM_T_ICH8) 7063 reg |= GCR_NO_SNOOP_ALL; 7064 else 7065 reg &= ~GCR_NO_SNOOP_ALL; 7066 CSR_WRITE(sc, WMREG_GCR, reg); 7067 } 7068 7069 /* Ungate DMA clock to avoid packet loss */ 7070 if (sc->sc_type >= WM_T_PCH_TGP) { 7071 reg = CSR_READ(sc, WMREG_FFLT_DBG); 7072 reg |= (1 << 12); 7073 CSR_WRITE(sc, WMREG_FFLT_DBG, reg); 7074 } 7075 7076 if ((sc->sc_type >= WM_T_ICH8) 7077 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER) 7078 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_82546GB_QUAD_COPPER_KSP3)) { 7079 7080 reg = CSR_READ(sc, WMREG_CTRL_EXT); 7081 reg |= CTRL_EXT_RO_DIS; 7082 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 7083 } 7084 7085 /* Calculate (E)ITR value */ 7086 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0 && sc->sc_type != WM_T_82575) { 7087 /* 7088 * For NEWQUEUE's EITR (except for 82575). 7089 * 82575's EITR should be set same throttling value as other 7090 * old controllers' ITR because the interrupt/sec calculation 7091 * is the same, that is, 1,000,000,000 / (N * 256). 7092 * 7093 * 82574's EITR should be set same throttling value as ITR. 7094 * 7095 * For N interrupts/sec, set this value to: 7096 * 1,000,000 / N in contrast to ITR throttling value. 7097 */ 7098 sc->sc_itr_init = 450; 7099 } else if (sc->sc_type >= WM_T_82543) { 7100 /* 7101 * Set up the interrupt throttling register (units of 256ns) 7102 * Note that a footnote in Intel's documentation says this 7103 * ticker runs at 1/4 the rate when the chip is in 100Mbit 7104 * or 10Mbit mode. Empirically, it appears to be the case 7105 * that that is also true for the 1024ns units of the other 7106 * interrupt-related timer registers -- so, really, we ought 7107 * to divide this value by 4 when the link speed is low. 7108 * 7109 * XXX implement this division at link speed change! 7110 */ 7111 7112 /* 7113 * For N interrupts/sec, set this value to: 7114 * 1,000,000,000 / (N * 256). Note that we set the 7115 * absolute and packet timer values to this value 7116 * divided by 4 to get "simple timer" behavior. 7117 */ 7118 sc->sc_itr_init = 1500; /* 2604 ints/sec */ 7119 } 7120 7121 error = wm_init_txrx_queues(sc); 7122 if (error) 7123 goto out; 7124 7125 if (((sc->sc_flags & WM_F_SGMII) == 0) && 7126 (sc->sc_mediatype == WM_MEDIATYPE_SERDES) && 7127 (sc->sc_type >= WM_T_82575)) 7128 wm_serdes_power_up_link_82575(sc); 7129 7130 /* Clear out the VLAN table -- we don't use it (yet). */ 7131 CSR_WRITE(sc, WMREG_VET, 0); 7132 if ((sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354)) 7133 trynum = 10; /* Due to hw errata */ 7134 else 7135 trynum = 1; 7136 for (i = 0; i < WM_VLAN_TABSIZE; i++) 7137 for (j = 0; j < trynum; j++) 7138 CSR_WRITE(sc, WMREG_VFTA + (i << 2), 0); 7139 7140 /* 7141 * Set up flow-control parameters. 7142 * 7143 * XXX Values could probably stand some tuning. 7144 */ 7145 if ((sc->sc_type != WM_T_ICH8) && (sc->sc_type != WM_T_ICH9) 7146 && (sc->sc_type != WM_T_ICH10) && (sc->sc_type != WM_T_PCH) 7147 && (sc->sc_type != WM_T_PCH2) && (sc->sc_type != WM_T_PCH_LPT) 7148 && (sc->sc_type != WM_T_PCH_SPT) && (sc->sc_type != WM_T_PCH_CNP) 7149 && (sc->sc_type != WM_T_PCH_TGP)) { 7150 CSR_WRITE(sc, WMREG_FCAL, FCAL_CONST); 7151 CSR_WRITE(sc, WMREG_FCAH, FCAH_CONST); 7152 CSR_WRITE(sc, WMREG_FCT, ETHERTYPE_FLOWCONTROL); 7153 } 7154 7155 sc->sc_fcrtl = FCRTL_DFLT; 7156 if (sc->sc_type < WM_T_82543) { 7157 CSR_WRITE(sc, WMREG_OLD_FCRTH, FCRTH_DFLT); 7158 CSR_WRITE(sc, WMREG_OLD_FCRTL, sc->sc_fcrtl); 7159 } else { 7160 CSR_WRITE(sc, WMREG_FCRTH, FCRTH_DFLT); 7161 CSR_WRITE(sc, WMREG_FCRTL, sc->sc_fcrtl); 7162 } 7163 7164 if (sc->sc_type == WM_T_80003) 7165 CSR_WRITE(sc, WMREG_FCTTV, 0xffff); 7166 else 7167 CSR_WRITE(sc, WMREG_FCTTV, FCTTV_DFLT); 7168 7169 /* Writes the control register. */ 7170 wm_set_vlan(sc); 7171 7172 if (sc->sc_flags & WM_F_HAS_MII) { 7173 uint16_t kmreg; 7174 7175 switch (sc->sc_type) { 7176 case WM_T_80003: 7177 case WM_T_ICH8: 7178 case WM_T_ICH9: 7179 case WM_T_ICH10: 7180 case WM_T_PCH: 7181 case WM_T_PCH2: 7182 case WM_T_PCH_LPT: 7183 case WM_T_PCH_SPT: 7184 case WM_T_PCH_CNP: 7185 case WM_T_PCH_TGP: 7186 /* 7187 * Set the mac to wait the maximum time between each 7188 * iteration and increase the max iterations when 7189 * polling the phy; this fixes erroneous timeouts at 7190 * 10Mbps. 7191 */ 7192 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_TIMEOUTS, 7193 0xFFFF); 7194 wm_kmrn_readreg(sc, KUMCTRLSTA_OFFSET_INB_PARAM, 7195 &kmreg); 7196 kmreg |= 0x3F; 7197 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_INB_PARAM, 7198 kmreg); 7199 break; 7200 default: 7201 break; 7202 } 7203 7204 if (sc->sc_type == WM_T_80003) { 7205 reg = CSR_READ(sc, WMREG_CTRL_EXT); 7206 reg &= ~CTRL_EXT_LINK_MODE_MASK; 7207 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 7208 7209 /* Bypass RX and TX FIFOs */ 7210 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_FIFO_CTRL, 7211 KUMCTRLSTA_FIFO_CTRL_RX_BYPASS 7212 | KUMCTRLSTA_FIFO_CTRL_TX_BYPASS); 7213 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_INB_CTRL, 7214 KUMCTRLSTA_INB_CTRL_DIS_PADDING | 7215 KUMCTRLSTA_INB_CTRL_LINK_TMOUT_DFLT); 7216 } 7217 } 7218 #if 0 7219 CSR_WRITE(sc, WMREG_CTRL_EXT, sc->sc_ctrl_ext); 7220 #endif 7221 7222 /* Set up checksum offload parameters. */ 7223 reg = CSR_READ(sc, WMREG_RXCSUM); 7224 reg &= ~(RXCSUM_IPOFL | RXCSUM_IPV6OFL | RXCSUM_TUOFL); 7225 if (ifp->if_capenable & IFCAP_CSUM_IPv4_Rx) 7226 reg |= RXCSUM_IPOFL; 7227 if (ifp->if_capenable & (IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx)) 7228 reg |= RXCSUM_IPOFL | RXCSUM_TUOFL; 7229 if (ifp->if_capenable & (IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx)) 7230 reg |= RXCSUM_IPV6OFL | RXCSUM_TUOFL; 7231 CSR_WRITE(sc, WMREG_RXCSUM, reg); 7232 7233 /* Set registers about MSI-X */ 7234 if (wm_is_using_msix(sc)) { 7235 uint32_t ivar, qintr_idx; 7236 struct wm_queue *wmq; 7237 unsigned int qid; 7238 7239 if (sc->sc_type == WM_T_82575) { 7240 /* Interrupt control */ 7241 reg = CSR_READ(sc, WMREG_CTRL_EXT); 7242 reg |= CTRL_EXT_PBA | CTRL_EXT_EIAME | CTRL_EXT_NSICR; 7243 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 7244 7245 /* TX and RX */ 7246 for (i = 0; i < sc->sc_nqueues; i++) { 7247 wmq = &sc->sc_queue[i]; 7248 CSR_WRITE(sc, WMREG_MSIXBM(wmq->wmq_intr_idx), 7249 EITR_TX_QUEUE(wmq->wmq_id) 7250 | EITR_RX_QUEUE(wmq->wmq_id)); 7251 } 7252 /* Link status */ 7253 CSR_WRITE(sc, WMREG_MSIXBM(sc->sc_link_intr_idx), 7254 EITR_OTHER); 7255 } else if (sc->sc_type == WM_T_82574) { 7256 /* Interrupt control */ 7257 reg = CSR_READ(sc, WMREG_CTRL_EXT); 7258 reg |= CTRL_EXT_PBA | CTRL_EXT_EIAME; 7259 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 7260 7261 /* 7262 * Work around issue with spurious interrupts 7263 * in MSI-X mode. 7264 * At wm_initialize_hardware_bits(), sc_nintrs has not 7265 * initialized yet. So re-initialize WMREG_RFCTL here. 7266 */ 7267 reg = CSR_READ(sc, WMREG_RFCTL); 7268 reg |= WMREG_RFCTL_ACKDIS; 7269 CSR_WRITE(sc, WMREG_RFCTL, reg); 7270 7271 ivar = 0; 7272 /* TX and RX */ 7273 for (i = 0; i < sc->sc_nqueues; i++) { 7274 wmq = &sc->sc_queue[i]; 7275 qid = wmq->wmq_id; 7276 qintr_idx = wmq->wmq_intr_idx; 7277 7278 ivar |= __SHIFTIN((IVAR_VALID_82574|qintr_idx), 7279 IVAR_TX_MASK_Q_82574(qid)); 7280 ivar |= __SHIFTIN((IVAR_VALID_82574|qintr_idx), 7281 IVAR_RX_MASK_Q_82574(qid)); 7282 } 7283 /* Link status */ 7284 ivar |= __SHIFTIN((IVAR_VALID_82574 7285 | sc->sc_link_intr_idx), IVAR_OTHER_MASK); 7286 CSR_WRITE(sc, WMREG_IVAR, ivar | IVAR_INT_ON_ALL_WB); 7287 } else { 7288 /* Interrupt control */ 7289 CSR_WRITE(sc, WMREG_GPIE, GPIE_NSICR | GPIE_MULTI_MSIX 7290 | GPIE_EIAME | GPIE_PBA); 7291 7292 switch (sc->sc_type) { 7293 case WM_T_82580: 7294 case WM_T_I350: 7295 case WM_T_I354: 7296 case WM_T_I210: 7297 case WM_T_I211: 7298 /* TX and RX */ 7299 for (i = 0; i < sc->sc_nqueues; i++) { 7300 wmq = &sc->sc_queue[i]; 7301 qid = wmq->wmq_id; 7302 qintr_idx = wmq->wmq_intr_idx; 7303 7304 ivar = CSR_READ(sc, WMREG_IVAR_Q(qid)); 7305 ivar &= ~IVAR_TX_MASK_Q(qid); 7306 ivar |= __SHIFTIN((qintr_idx 7307 | IVAR_VALID), 7308 IVAR_TX_MASK_Q(qid)); 7309 ivar &= ~IVAR_RX_MASK_Q(qid); 7310 ivar |= __SHIFTIN((qintr_idx 7311 | IVAR_VALID), 7312 IVAR_RX_MASK_Q(qid)); 7313 CSR_WRITE(sc, WMREG_IVAR_Q(qid), ivar); 7314 } 7315 break; 7316 case WM_T_82576: 7317 /* TX and RX */ 7318 for (i = 0; i < sc->sc_nqueues; i++) { 7319 wmq = &sc->sc_queue[i]; 7320 qid = wmq->wmq_id; 7321 qintr_idx = wmq->wmq_intr_idx; 7322 7323 ivar = CSR_READ(sc, 7324 WMREG_IVAR_Q_82576(qid)); 7325 ivar &= ~IVAR_TX_MASK_Q_82576(qid); 7326 ivar |= __SHIFTIN((qintr_idx 7327 | IVAR_VALID), 7328 IVAR_TX_MASK_Q_82576(qid)); 7329 ivar &= ~IVAR_RX_MASK_Q_82576(qid); 7330 ivar |= __SHIFTIN((qintr_idx 7331 | IVAR_VALID), 7332 IVAR_RX_MASK_Q_82576(qid)); 7333 CSR_WRITE(sc, WMREG_IVAR_Q_82576(qid), 7334 ivar); 7335 } 7336 break; 7337 default: 7338 break; 7339 } 7340 7341 /* Link status */ 7342 ivar = __SHIFTIN((sc->sc_link_intr_idx | IVAR_VALID), 7343 IVAR_MISC_OTHER); 7344 CSR_WRITE(sc, WMREG_IVAR_MISC, ivar); 7345 } 7346 7347 if (wm_is_using_multiqueue(sc)) { 7348 wm_init_rss(sc); 7349 7350 /* 7351 ** NOTE: Receive Full-Packet Checksum Offload 7352 ** is mutually exclusive with Multiqueue. However 7353 ** this is not the same as TCP/IP checksums which 7354 ** still work. 7355 */ 7356 reg = CSR_READ(sc, WMREG_RXCSUM); 7357 reg |= RXCSUM_PCSD; 7358 CSR_WRITE(sc, WMREG_RXCSUM, reg); 7359 } 7360 } 7361 7362 /* Set up the interrupt registers. */ 7363 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU); 7364 7365 /* Enable SFP module insertion interrupt if it's required */ 7366 if ((sc->sc_flags & WM_F_SFP) != 0) { 7367 sc->sc_ctrl |= CTRL_EXTLINK_EN; 7368 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 7369 sfp_mask = ICR_GPI(0); 7370 } 7371 7372 if (wm_is_using_msix(sc)) { 7373 uint32_t mask; 7374 struct wm_queue *wmq; 7375 7376 switch (sc->sc_type) { 7377 case WM_T_82574: 7378 mask = 0; 7379 for (i = 0; i < sc->sc_nqueues; i++) { 7380 wmq = &sc->sc_queue[i]; 7381 mask |= ICR_TXQ(wmq->wmq_id); 7382 mask |= ICR_RXQ(wmq->wmq_id); 7383 } 7384 mask |= ICR_OTHER; 7385 CSR_WRITE(sc, WMREG_EIAC_82574, mask); 7386 CSR_WRITE(sc, WMREG_IMS, mask | ICR_LSC); 7387 break; 7388 default: 7389 if (sc->sc_type == WM_T_82575) { 7390 mask = 0; 7391 for (i = 0; i < sc->sc_nqueues; i++) { 7392 wmq = &sc->sc_queue[i]; 7393 mask |= EITR_TX_QUEUE(wmq->wmq_id); 7394 mask |= EITR_RX_QUEUE(wmq->wmq_id); 7395 } 7396 mask |= EITR_OTHER; 7397 } else { 7398 mask = 0; 7399 for (i = 0; i < sc->sc_nqueues; i++) { 7400 wmq = &sc->sc_queue[i]; 7401 mask |= 1 << wmq->wmq_intr_idx; 7402 } 7403 mask |= 1 << sc->sc_link_intr_idx; 7404 } 7405 CSR_WRITE(sc, WMREG_EIAC, mask); 7406 CSR_WRITE(sc, WMREG_EIAM, mask); 7407 CSR_WRITE(sc, WMREG_EIMS, mask); 7408 7409 /* For other interrupts */ 7410 CSR_WRITE(sc, WMREG_IMS, ICR_LSC | sfp_mask); 7411 break; 7412 } 7413 } else { 7414 sc->sc_icr = ICR_TXDW | ICR_LSC | ICR_RXSEQ | ICR_RXDMT0 | 7415 ICR_RXO | ICR_RXT0 | sfp_mask; 7416 CSR_WRITE(sc, WMREG_IMS, sc->sc_icr); 7417 } 7418 7419 /* Set up the inter-packet gap. */ 7420 CSR_WRITE(sc, WMREG_TIPG, sc->sc_tipg); 7421 7422 if (sc->sc_type >= WM_T_82543) { 7423 for (int qidx = 0; qidx < sc->sc_nqueues; qidx++) { 7424 struct wm_queue *wmq = &sc->sc_queue[qidx]; 7425 wm_itrs_writereg(sc, wmq); 7426 } 7427 /* 7428 * Link interrupts occur much less than TX 7429 * interrupts and RX interrupts. So, we don't 7430 * tune EINTR(WM_MSIX_LINKINTR_IDX) value like 7431 * FreeBSD's if_igb. 7432 */ 7433 } 7434 7435 /* Set the VLAN EtherType. */ 7436 CSR_WRITE(sc, WMREG_VET, ETHERTYPE_VLAN); 7437 7438 /* 7439 * Set up the transmit control register; we start out with 7440 * a collision distance suitable for FDX, but update it when 7441 * we resolve the media type. 7442 */ 7443 sc->sc_tctl = TCTL_EN | TCTL_PSP | TCTL_RTLC 7444 | TCTL_CT(TX_COLLISION_THRESHOLD) 7445 | TCTL_COLD(TX_COLLISION_DISTANCE_FDX); 7446 if (sc->sc_type >= WM_T_82571) 7447 sc->sc_tctl |= TCTL_MULR; 7448 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl); 7449 7450 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 7451 /* Write TDT after TCTL.EN is set. See the document. */ 7452 CSR_WRITE(sc, WMREG_TDT(0), 0); 7453 } 7454 7455 if (sc->sc_type == WM_T_80003) { 7456 reg = CSR_READ(sc, WMREG_TCTL_EXT); 7457 reg &= ~TCTL_EXT_GCEX_MASK; 7458 reg |= DEFAULT_80003ES2LAN_TCTL_EXT_GCEX; 7459 CSR_WRITE(sc, WMREG_TCTL_EXT, reg); 7460 } 7461 7462 /* Set the media. */ 7463 if ((error = mii_ifmedia_change(&sc->sc_mii)) != 0) 7464 goto out; 7465 7466 /* Configure for OS presence */ 7467 wm_init_manageability(sc); 7468 7469 /* 7470 * Set up the receive control register; we actually program the 7471 * register when we set the receive filter. Use multicast address 7472 * offset type 0. 7473 * 7474 * Only the i82544 has the ability to strip the incoming CRC, so we 7475 * don't enable that feature. 7476 */ 7477 sc->sc_mchash_type = 0; 7478 sc->sc_rctl = RCTL_EN | RCTL_LBM_NONE | RCTL_RDMTS_1_2 | RCTL_DPF 7479 | __SHIFTIN(sc->sc_mchash_type, RCTL_MO); 7480 7481 /* 82574 use one buffer extended Rx descriptor. */ 7482 if (sc->sc_type == WM_T_82574) 7483 sc->sc_rctl |= RCTL_DTYP_ONEBUF; 7484 7485 if ((sc->sc_flags & WM_F_CRC_STRIP) != 0) 7486 sc->sc_rctl |= RCTL_SECRC; 7487 7488 if (((ec->ec_capabilities & ETHERCAP_JUMBO_MTU) != 0) 7489 && (ifp->if_mtu > ETHERMTU)) { 7490 sc->sc_rctl |= RCTL_LPE; 7491 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 7492 CSR_WRITE(sc, WMREG_RLPML, ETHER_MAX_LEN_JUMBO); 7493 } 7494 7495 if (MCLBYTES == 2048) 7496 sc->sc_rctl |= RCTL_2k; 7497 else { 7498 if (sc->sc_type >= WM_T_82543) { 7499 switch (MCLBYTES) { 7500 case 4096: 7501 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_4k; 7502 break; 7503 case 8192: 7504 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_8k; 7505 break; 7506 case 16384: 7507 sc->sc_rctl |= RCTL_BSEX | RCTL_BSEX_16k; 7508 break; 7509 default: 7510 panic("wm_init: MCLBYTES %d unsupported", 7511 MCLBYTES); 7512 break; 7513 } 7514 } else 7515 panic("wm_init: i82542 requires MCLBYTES = 2048"); 7516 } 7517 7518 /* Enable ECC */ 7519 switch (sc->sc_type) { 7520 case WM_T_82571: 7521 reg = CSR_READ(sc, WMREG_PBA_ECC); 7522 reg |= PBA_ECC_CORR_EN; 7523 CSR_WRITE(sc, WMREG_PBA_ECC, reg); 7524 break; 7525 case WM_T_PCH_LPT: 7526 case WM_T_PCH_SPT: 7527 case WM_T_PCH_CNP: 7528 case WM_T_PCH_TGP: 7529 reg = CSR_READ(sc, WMREG_PBECCSTS); 7530 reg |= PBECCSTS_UNCORR_ECC_ENABLE; 7531 CSR_WRITE(sc, WMREG_PBECCSTS, reg); 7532 7533 sc->sc_ctrl |= CTRL_MEHE; 7534 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 7535 break; 7536 default: 7537 break; 7538 } 7539 7540 /* 7541 * Set the receive filter. 7542 * 7543 * For 82575 and 82576, the RX descriptors must be initialized after 7544 * the setting of RCTL.EN in wm_set_filter() 7545 */ 7546 wm_set_filter(sc); 7547 7548 /* On 575 and later set RDT only if RX enabled */ 7549 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 7550 int qidx; 7551 for (qidx = 0; qidx < sc->sc_nqueues; qidx++) { 7552 struct wm_rxqueue *rxq = &sc->sc_queue[qidx].wmq_rxq; 7553 for (i = 0; i < WM_NRXDESC; i++) { 7554 mutex_enter(rxq->rxq_lock); 7555 wm_init_rxdesc(rxq, i); 7556 mutex_exit(rxq->rxq_lock); 7557 7558 } 7559 } 7560 } 7561 7562 wm_unset_stopping_flags(sc); 7563 7564 /* Start the one second link check clock. */ 7565 callout_schedule(&sc->sc_tick_ch, hz); 7566 7567 /* 7568 * ...all done! (IFNET_LOCKED asserted above.) 7569 */ 7570 ifp->if_flags |= IFF_RUNNING; 7571 7572 out: 7573 /* Save last flags for the callback */ 7574 sc->sc_if_flags = ifp->if_flags; 7575 sc->sc_ec_capenable = ec->ec_capenable; 7576 if (error) 7577 log(LOG_ERR, "%s: interface not running\n", 7578 device_xname(sc->sc_dev)); 7579 return error; 7580 } 7581 7582 /* 7583 * wm_stop: [ifnet interface function] 7584 * 7585 * Stop transmission on the interface. 7586 */ 7587 static void 7588 wm_stop(struct ifnet *ifp, int disable) 7589 { 7590 struct wm_softc *sc = ifp->if_softc; 7591 7592 ASSERT_SLEEPABLE(); 7593 KASSERT(IFNET_LOCKED(ifp)); 7594 7595 mutex_enter(sc->sc_core_lock); 7596 wm_stop_locked(ifp, disable ? true : false, true); 7597 mutex_exit(sc->sc_core_lock); 7598 7599 /* 7600 * After wm_set_stopping_flags(), it is guaranteed that 7601 * wm_handle_queue_work() does not call workqueue_enqueue(). 7602 * However, workqueue_wait() cannot call in wm_stop_locked() 7603 * because it can sleep... 7604 * so, call workqueue_wait() here. 7605 */ 7606 for (int i = 0; i < sc->sc_nqueues; i++) 7607 workqueue_wait(sc->sc_queue_wq, &sc->sc_queue[i].wmq_cookie); 7608 workqueue_wait(sc->sc_reset_wq, &sc->sc_reset_work); 7609 } 7610 7611 static void 7612 wm_stop_locked(struct ifnet *ifp, bool disable, bool wait) 7613 { 7614 struct wm_softc *sc = ifp->if_softc; 7615 struct wm_txsoft *txs; 7616 int i, qidx; 7617 7618 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 7619 device_xname(sc->sc_dev), __func__)); 7620 KASSERT(IFNET_LOCKED(ifp)); 7621 KASSERT(mutex_owned(sc->sc_core_lock)); 7622 7623 wm_set_stopping_flags(sc); 7624 7625 if (sc->sc_flags & WM_F_HAS_MII) { 7626 /* Down the MII. */ 7627 mii_down(&sc->sc_mii); 7628 } else { 7629 #if 0 7630 /* Should we clear PHY's status properly? */ 7631 wm_reset(sc); 7632 #endif 7633 } 7634 7635 /* Stop the transmit and receive processes. */ 7636 CSR_WRITE(sc, WMREG_TCTL, 0); 7637 CSR_WRITE(sc, WMREG_RCTL, 0); 7638 sc->sc_rctl &= ~RCTL_EN; 7639 7640 /* 7641 * Clear the interrupt mask to ensure the device cannot assert its 7642 * interrupt line. 7643 * Clear sc->sc_icr to ensure wm_intr_legacy() makes no attempt to 7644 * service any currently pending or shared interrupt. 7645 */ 7646 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU); 7647 sc->sc_icr = 0; 7648 if (wm_is_using_msix(sc)) { 7649 if (sc->sc_type != WM_T_82574) { 7650 CSR_WRITE(sc, WMREG_EIMC, 0xffffffffU); 7651 CSR_WRITE(sc, WMREG_EIAC, 0); 7652 } else 7653 CSR_WRITE(sc, WMREG_EIAC_82574, 0); 7654 } 7655 7656 /* 7657 * Stop callouts after interrupts are disabled; if we have 7658 * to wait for them, we will be releasing the CORE_LOCK 7659 * briefly, which will unblock interrupts on the current CPU. 7660 */ 7661 7662 /* Stop the one second clock. */ 7663 if (wait) 7664 callout_halt(&sc->sc_tick_ch, sc->sc_core_lock); 7665 else 7666 callout_stop(&sc->sc_tick_ch); 7667 7668 /* Stop the 82547 Tx FIFO stall check timer. */ 7669 if (sc->sc_type == WM_T_82547) { 7670 if (wait) 7671 callout_halt(&sc->sc_txfifo_ch, sc->sc_core_lock); 7672 else 7673 callout_stop(&sc->sc_txfifo_ch); 7674 } 7675 7676 /* Release any queued transmit buffers. */ 7677 for (qidx = 0; qidx < sc->sc_nqueues; qidx++) { 7678 struct wm_queue *wmq = &sc->sc_queue[qidx]; 7679 struct wm_txqueue *txq = &wmq->wmq_txq; 7680 struct mbuf *m; 7681 7682 mutex_enter(txq->txq_lock); 7683 txq->txq_sending = false; /* Ensure watchdog disabled */ 7684 for (i = 0; i < WM_TXQUEUELEN(txq); i++) { 7685 txs = &txq->txq_soft[i]; 7686 if (txs->txs_mbuf != NULL) { 7687 bus_dmamap_unload(sc->sc_dmat,txs->txs_dmamap); 7688 m_freem(txs->txs_mbuf); 7689 txs->txs_mbuf = NULL; 7690 } 7691 } 7692 /* Drain txq_interq */ 7693 while ((m = pcq_get(txq->txq_interq)) != NULL) 7694 m_freem(m); 7695 mutex_exit(txq->txq_lock); 7696 } 7697 7698 /* Mark the interface as down and cancel the watchdog timer. */ 7699 ifp->if_flags &= ~IFF_RUNNING; 7700 sc->sc_if_flags = ifp->if_flags; 7701 7702 if (disable) { 7703 for (i = 0; i < sc->sc_nqueues; i++) { 7704 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 7705 mutex_enter(rxq->rxq_lock); 7706 wm_rxdrain(rxq); 7707 mutex_exit(rxq->rxq_lock); 7708 } 7709 } 7710 7711 #if 0 /* notyet */ 7712 if (sc->sc_type >= WM_T_82544) 7713 CSR_WRITE(sc, WMREG_WUC, 0); 7714 #endif 7715 } 7716 7717 static void 7718 wm_dump_mbuf_chain(struct wm_softc *sc, struct mbuf *m0) 7719 { 7720 struct mbuf *m; 7721 int i; 7722 7723 log(LOG_DEBUG, "%s: mbuf chain:\n", device_xname(sc->sc_dev)); 7724 for (m = m0, i = 0; m != NULL; m = m->m_next, i++) 7725 log(LOG_DEBUG, "%s:\tm_data = %p, m_len = %d, " 7726 "m_flags = 0x%08x\n", device_xname(sc->sc_dev), 7727 m->m_data, m->m_len, m->m_flags); 7728 log(LOG_DEBUG, "%s:\t%d mbuf%s in chain\n", device_xname(sc->sc_dev), 7729 i, i == 1 ? "" : "s"); 7730 } 7731 7732 /* 7733 * wm_82547_txfifo_stall: 7734 * 7735 * Callout used to wait for the 82547 Tx FIFO to drain, 7736 * reset the FIFO pointers, and restart packet transmission. 7737 */ 7738 static void 7739 wm_82547_txfifo_stall(void *arg) 7740 { 7741 struct wm_softc *sc = arg; 7742 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 7743 7744 mutex_enter(txq->txq_lock); 7745 7746 if (txq->txq_stopping) 7747 goto out; 7748 7749 if (txq->txq_fifo_stall) { 7750 if (CSR_READ(sc, WMREG_TDT(0)) == CSR_READ(sc, WMREG_TDH(0)) && 7751 CSR_READ(sc, WMREG_TDFT) == CSR_READ(sc, WMREG_TDFH) && 7752 CSR_READ(sc, WMREG_TDFTS) == CSR_READ(sc, WMREG_TDFHS)) { 7753 /* 7754 * Packets have drained. Stop transmitter, reset 7755 * FIFO pointers, restart transmitter, and kick 7756 * the packet queue. 7757 */ 7758 uint32_t tctl = CSR_READ(sc, WMREG_TCTL); 7759 CSR_WRITE(sc, WMREG_TCTL, tctl & ~TCTL_EN); 7760 CSR_WRITE(sc, WMREG_TDFT, txq->txq_fifo_addr); 7761 CSR_WRITE(sc, WMREG_TDFH, txq->txq_fifo_addr); 7762 CSR_WRITE(sc, WMREG_TDFTS, txq->txq_fifo_addr); 7763 CSR_WRITE(sc, WMREG_TDFHS, txq->txq_fifo_addr); 7764 CSR_WRITE(sc, WMREG_TCTL, tctl); 7765 CSR_WRITE_FLUSH(sc); 7766 7767 txq->txq_fifo_head = 0; 7768 txq->txq_fifo_stall = 0; 7769 wm_start_locked(&sc->sc_ethercom.ec_if); 7770 } else { 7771 /* 7772 * Still waiting for packets to drain; try again in 7773 * another tick. 7774 */ 7775 callout_schedule(&sc->sc_txfifo_ch, 1); 7776 } 7777 } 7778 7779 out: 7780 mutex_exit(txq->txq_lock); 7781 } 7782 7783 /* 7784 * wm_82547_txfifo_bugchk: 7785 * 7786 * Check for bug condition in the 82547 Tx FIFO. We need to 7787 * prevent enqueueing a packet that would wrap around the end 7788 * if the Tx FIFO ring buffer, otherwise the chip will croak. 7789 * 7790 * We do this by checking the amount of space before the end 7791 * of the Tx FIFO buffer. If the packet will not fit, we "stall" 7792 * the Tx FIFO, wait for all remaining packets to drain, reset 7793 * the internal FIFO pointers to the beginning, and restart 7794 * transmission on the interface. 7795 */ 7796 #define WM_FIFO_HDR 0x10 7797 #define WM_82547_PAD_LEN 0x3e0 7798 static int 7799 wm_82547_txfifo_bugchk(struct wm_softc *sc, struct mbuf *m0) 7800 { 7801 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 7802 int space = txq->txq_fifo_size - txq->txq_fifo_head; 7803 int len = roundup(m0->m_pkthdr.len + WM_FIFO_HDR, WM_FIFO_HDR); 7804 7805 /* Just return if already stalled. */ 7806 if (txq->txq_fifo_stall) 7807 return 1; 7808 7809 if (sc->sc_mii.mii_media_active & IFM_FDX) { 7810 /* Stall only occurs in half-duplex mode. */ 7811 goto send_packet; 7812 } 7813 7814 if (len >= WM_82547_PAD_LEN + space) { 7815 txq->txq_fifo_stall = 1; 7816 callout_schedule(&sc->sc_txfifo_ch, 1); 7817 return 1; 7818 } 7819 7820 send_packet: 7821 txq->txq_fifo_head += len; 7822 if (txq->txq_fifo_head >= txq->txq_fifo_size) 7823 txq->txq_fifo_head -= txq->txq_fifo_size; 7824 7825 return 0; 7826 } 7827 7828 static int 7829 wm_alloc_tx_descs(struct wm_softc *sc, struct wm_txqueue *txq) 7830 { 7831 int error; 7832 7833 /* 7834 * Allocate the control data structures, and create and load the 7835 * DMA map for it. 7836 * 7837 * NOTE: All Tx descriptors must be in the same 4G segment of 7838 * memory. So must Rx descriptors. We simplify by allocating 7839 * both sets within the same 4G segment. 7840 */ 7841 if (sc->sc_type < WM_T_82544) 7842 WM_NTXDESC(txq) = WM_NTXDESC_82542; 7843 else 7844 WM_NTXDESC(txq) = WM_NTXDESC_82544; 7845 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 7846 txq->txq_descsize = sizeof(nq_txdesc_t); 7847 else 7848 txq->txq_descsize = sizeof(wiseman_txdesc_t); 7849 7850 if ((error = bus_dmamem_alloc(sc->sc_dmat, WM_TXDESCS_SIZE(txq), 7851 PAGE_SIZE, (bus_size_t) 0x100000000ULL, &txq->txq_desc_seg, 7852 1, &txq->txq_desc_rseg, 0)) != 0) { 7853 aprint_error_dev(sc->sc_dev, 7854 "unable to allocate TX control data, error = %d\n", 7855 error); 7856 goto fail_0; 7857 } 7858 7859 if ((error = bus_dmamem_map(sc->sc_dmat, &txq->txq_desc_seg, 7860 txq->txq_desc_rseg, WM_TXDESCS_SIZE(txq), 7861 (void **)&txq->txq_descs_u, BUS_DMA_COHERENT)) != 0) { 7862 aprint_error_dev(sc->sc_dev, 7863 "unable to map TX control data, error = %d\n", error); 7864 goto fail_1; 7865 } 7866 7867 if ((error = bus_dmamap_create(sc->sc_dmat, WM_TXDESCS_SIZE(txq), 1, 7868 WM_TXDESCS_SIZE(txq), 0, 0, &txq->txq_desc_dmamap)) != 0) { 7869 aprint_error_dev(sc->sc_dev, 7870 "unable to create TX control data DMA map, error = %d\n", 7871 error); 7872 goto fail_2; 7873 } 7874 7875 if ((error = bus_dmamap_load(sc->sc_dmat, txq->txq_desc_dmamap, 7876 txq->txq_descs_u, WM_TXDESCS_SIZE(txq), NULL, 0)) != 0) { 7877 aprint_error_dev(sc->sc_dev, 7878 "unable to load TX control data DMA map, error = %d\n", 7879 error); 7880 goto fail_3; 7881 } 7882 7883 return 0; 7884 7885 fail_3: 7886 bus_dmamap_destroy(sc->sc_dmat, txq->txq_desc_dmamap); 7887 fail_2: 7888 bus_dmamem_unmap(sc->sc_dmat, (void *)txq->txq_descs_u, 7889 WM_TXDESCS_SIZE(txq)); 7890 fail_1: 7891 bus_dmamem_free(sc->sc_dmat, &txq->txq_desc_seg, txq->txq_desc_rseg); 7892 fail_0: 7893 return error; 7894 } 7895 7896 static void 7897 wm_free_tx_descs(struct wm_softc *sc, struct wm_txqueue *txq) 7898 { 7899 7900 bus_dmamap_unload(sc->sc_dmat, txq->txq_desc_dmamap); 7901 bus_dmamap_destroy(sc->sc_dmat, txq->txq_desc_dmamap); 7902 bus_dmamem_unmap(sc->sc_dmat, (void *)txq->txq_descs_u, 7903 WM_TXDESCS_SIZE(txq)); 7904 bus_dmamem_free(sc->sc_dmat, &txq->txq_desc_seg, txq->txq_desc_rseg); 7905 } 7906 7907 static int 7908 wm_alloc_rx_descs(struct wm_softc *sc, struct wm_rxqueue *rxq) 7909 { 7910 int error; 7911 size_t rxq_descs_size; 7912 7913 /* 7914 * Allocate the control data structures, and create and load the 7915 * DMA map for it. 7916 * 7917 * NOTE: All Tx descriptors must be in the same 4G segment of 7918 * memory. So must Rx descriptors. We simplify by allocating 7919 * both sets within the same 4G segment. 7920 */ 7921 rxq->rxq_ndesc = WM_NRXDESC; 7922 if (sc->sc_type == WM_T_82574) 7923 rxq->rxq_descsize = sizeof(ext_rxdesc_t); 7924 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 7925 rxq->rxq_descsize = sizeof(nq_rxdesc_t); 7926 else 7927 rxq->rxq_descsize = sizeof(wiseman_rxdesc_t); 7928 rxq_descs_size = rxq->rxq_descsize * rxq->rxq_ndesc; 7929 7930 if ((error = bus_dmamem_alloc(sc->sc_dmat, rxq_descs_size, 7931 PAGE_SIZE, (bus_size_t) 0x100000000ULL, &rxq->rxq_desc_seg, 7932 1, &rxq->rxq_desc_rseg, 0)) != 0) { 7933 aprint_error_dev(sc->sc_dev, 7934 "unable to allocate RX control data, error = %d\n", 7935 error); 7936 goto fail_0; 7937 } 7938 7939 if ((error = bus_dmamem_map(sc->sc_dmat, &rxq->rxq_desc_seg, 7940 rxq->rxq_desc_rseg, rxq_descs_size, 7941 (void **)&rxq->rxq_descs_u, BUS_DMA_COHERENT)) != 0) { 7942 aprint_error_dev(sc->sc_dev, 7943 "unable to map RX control data, error = %d\n", error); 7944 goto fail_1; 7945 } 7946 7947 if ((error = bus_dmamap_create(sc->sc_dmat, rxq_descs_size, 1, 7948 rxq_descs_size, 0, 0, &rxq->rxq_desc_dmamap)) != 0) { 7949 aprint_error_dev(sc->sc_dev, 7950 "unable to create RX control data DMA map, error = %d\n", 7951 error); 7952 goto fail_2; 7953 } 7954 7955 if ((error = bus_dmamap_load(sc->sc_dmat, rxq->rxq_desc_dmamap, 7956 rxq->rxq_descs_u, rxq_descs_size, NULL, 0)) != 0) { 7957 aprint_error_dev(sc->sc_dev, 7958 "unable to load RX control data DMA map, error = %d\n", 7959 error); 7960 goto fail_3; 7961 } 7962 7963 return 0; 7964 7965 fail_3: 7966 bus_dmamap_destroy(sc->sc_dmat, rxq->rxq_desc_dmamap); 7967 fail_2: 7968 bus_dmamem_unmap(sc->sc_dmat, (void *)rxq->rxq_descs_u, 7969 rxq_descs_size); 7970 fail_1: 7971 bus_dmamem_free(sc->sc_dmat, &rxq->rxq_desc_seg, rxq->rxq_desc_rseg); 7972 fail_0: 7973 return error; 7974 } 7975 7976 static void 7977 wm_free_rx_descs(struct wm_softc *sc, struct wm_rxqueue *rxq) 7978 { 7979 7980 bus_dmamap_unload(sc->sc_dmat, rxq->rxq_desc_dmamap); 7981 bus_dmamap_destroy(sc->sc_dmat, rxq->rxq_desc_dmamap); 7982 bus_dmamem_unmap(sc->sc_dmat, (void *)rxq->rxq_descs_u, 7983 rxq->rxq_descsize * rxq->rxq_ndesc); 7984 bus_dmamem_free(sc->sc_dmat, &rxq->rxq_desc_seg, rxq->rxq_desc_rseg); 7985 } 7986 7987 7988 static int 7989 wm_alloc_tx_buffer(struct wm_softc *sc, struct wm_txqueue *txq) 7990 { 7991 int i, error; 7992 7993 /* Create the transmit buffer DMA maps. */ 7994 WM_TXQUEUELEN(txq) = 7995 (sc->sc_type == WM_T_82547 || sc->sc_type == WM_T_82547_2) ? 7996 WM_TXQUEUELEN_MAX_82547 : WM_TXQUEUELEN_MAX; 7997 for (i = 0; i < WM_TXQUEUELEN(txq); i++) { 7998 if ((error = bus_dmamap_create(sc->sc_dmat, WM_MAXTXDMA, 7999 WM_NTXSEGS, WTX_MAX_LEN, 0, 0, 8000 &txq->txq_soft[i].txs_dmamap)) != 0) { 8001 aprint_error_dev(sc->sc_dev, 8002 "unable to create Tx DMA map %d, error = %d\n", 8003 i, error); 8004 goto fail; 8005 } 8006 } 8007 8008 return 0; 8009 8010 fail: 8011 for (i = 0; i < WM_TXQUEUELEN(txq); i++) { 8012 if (txq->txq_soft[i].txs_dmamap != NULL) 8013 bus_dmamap_destroy(sc->sc_dmat, 8014 txq->txq_soft[i].txs_dmamap); 8015 } 8016 return error; 8017 } 8018 8019 static void 8020 wm_free_tx_buffer(struct wm_softc *sc, struct wm_txqueue *txq) 8021 { 8022 int i; 8023 8024 for (i = 0; i < WM_TXQUEUELEN(txq); i++) { 8025 if (txq->txq_soft[i].txs_dmamap != NULL) 8026 bus_dmamap_destroy(sc->sc_dmat, 8027 txq->txq_soft[i].txs_dmamap); 8028 } 8029 } 8030 8031 static int 8032 wm_alloc_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq) 8033 { 8034 int i, error; 8035 8036 /* Create the receive buffer DMA maps. */ 8037 for (i = 0; i < rxq->rxq_ndesc; i++) { 8038 if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES, 1, 8039 MCLBYTES, 0, 0, 8040 &rxq->rxq_soft[i].rxs_dmamap)) != 0) { 8041 aprint_error_dev(sc->sc_dev, 8042 "unable to create Rx DMA map %d error = %d\n", 8043 i, error); 8044 goto fail; 8045 } 8046 rxq->rxq_soft[i].rxs_mbuf = NULL; 8047 } 8048 8049 return 0; 8050 8051 fail: 8052 for (i = 0; i < rxq->rxq_ndesc; i++) { 8053 if (rxq->rxq_soft[i].rxs_dmamap != NULL) 8054 bus_dmamap_destroy(sc->sc_dmat, 8055 rxq->rxq_soft[i].rxs_dmamap); 8056 } 8057 return error; 8058 } 8059 8060 static void 8061 wm_free_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq) 8062 { 8063 int i; 8064 8065 for (i = 0; i < rxq->rxq_ndesc; i++) { 8066 if (rxq->rxq_soft[i].rxs_dmamap != NULL) 8067 bus_dmamap_destroy(sc->sc_dmat, 8068 rxq->rxq_soft[i].rxs_dmamap); 8069 } 8070 } 8071 8072 /* 8073 * wm_alloc_quques: 8074 * Allocate {tx,rx}descs and {tx,rx} buffers 8075 */ 8076 static int 8077 wm_alloc_txrx_queues(struct wm_softc *sc) 8078 { 8079 int i, error, tx_done, rx_done; 8080 8081 sc->sc_queue = kmem_zalloc(sizeof(struct wm_queue) * sc->sc_nqueues, 8082 KM_SLEEP); 8083 if (sc->sc_queue == NULL) { 8084 aprint_error_dev(sc->sc_dev,"unable to allocate wm_queue\n"); 8085 error = ENOMEM; 8086 goto fail_0; 8087 } 8088 8089 /* For transmission */ 8090 error = 0; 8091 tx_done = 0; 8092 for (i = 0; i < sc->sc_nqueues; i++) { 8093 #ifdef WM_EVENT_COUNTERS 8094 int j; 8095 const char *xname; 8096 #endif 8097 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 8098 txq->txq_sc = sc; 8099 txq->txq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); 8100 8101 error = wm_alloc_tx_descs(sc, txq); 8102 if (error) 8103 break; 8104 error = wm_alloc_tx_buffer(sc, txq); 8105 if (error) { 8106 wm_free_tx_descs(sc, txq); 8107 break; 8108 } 8109 txq->txq_interq = pcq_create(WM_TXINTERQSIZE, KM_SLEEP); 8110 if (txq->txq_interq == NULL) { 8111 wm_free_tx_descs(sc, txq); 8112 wm_free_tx_buffer(sc, txq); 8113 error = ENOMEM; 8114 break; 8115 } 8116 8117 #ifdef WM_EVENT_COUNTERS 8118 xname = device_xname(sc->sc_dev); 8119 8120 WM_Q_MISC_EVCNT_ATTACH(txq, txsstall, txq, i, xname); 8121 WM_Q_MISC_EVCNT_ATTACH(txq, txdstall, txq, i, xname); 8122 WM_Q_MISC_EVCNT_ATTACH(txq, fifo_stall, txq, i, xname); 8123 WM_Q_INTR_EVCNT_ATTACH(txq, txdw, txq, i, xname); 8124 WM_Q_INTR_EVCNT_ATTACH(txq, txqe, txq, i, xname); 8125 WM_Q_MISC_EVCNT_ATTACH(txq, ipsum, txq, i, xname); 8126 WM_Q_MISC_EVCNT_ATTACH(txq, tusum, txq, i, xname); 8127 WM_Q_MISC_EVCNT_ATTACH(txq, tusum6, txq, i, xname); 8128 WM_Q_MISC_EVCNT_ATTACH(txq, tso, txq, i, xname); 8129 WM_Q_MISC_EVCNT_ATTACH(txq, tso6, txq, i, xname); 8130 WM_Q_MISC_EVCNT_ATTACH(txq, tsopain, txq, i, xname); 8131 8132 for (j = 0; j < WM_NTXSEGS; j++) { 8133 snprintf(txq->txq_txseg_evcnt_names[j], 8134 sizeof(txq->txq_txseg_evcnt_names[j]), 8135 "txq%02dtxseg%d", i, j); 8136 evcnt_attach_dynamic(&txq->txq_ev_txseg[j], 8137 EVCNT_TYPE_MISC, 8138 NULL, xname, txq->txq_txseg_evcnt_names[j]); 8139 } 8140 8141 WM_Q_MISC_EVCNT_ATTACH(txq, pcqdrop, txq, i, xname); 8142 WM_Q_MISC_EVCNT_ATTACH(txq, descdrop, txq, i, xname); 8143 WM_Q_MISC_EVCNT_ATTACH(txq, toomanyseg, txq, i, xname); 8144 WM_Q_MISC_EVCNT_ATTACH(txq, defrag, txq, i, xname); 8145 /* Only for 82544 (and earlier?) */ 8146 if (sc->sc_type <= WM_T_82544) 8147 WM_Q_MISC_EVCNT_ATTACH(txq, underrun, txq, i, xname); 8148 WM_Q_MISC_EVCNT_ATTACH(txq, skipcontext, txq, i, xname); 8149 #endif /* WM_EVENT_COUNTERS */ 8150 8151 tx_done++; 8152 } 8153 if (error) 8154 goto fail_1; 8155 8156 /* For receive */ 8157 error = 0; 8158 rx_done = 0; 8159 for (i = 0; i < sc->sc_nqueues; i++) { 8160 #ifdef WM_EVENT_COUNTERS 8161 const char *xname; 8162 #endif 8163 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 8164 rxq->rxq_sc = sc; 8165 rxq->rxq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET); 8166 8167 error = wm_alloc_rx_descs(sc, rxq); 8168 if (error) 8169 break; 8170 8171 error = wm_alloc_rx_buffer(sc, rxq); 8172 if (error) { 8173 wm_free_rx_descs(sc, rxq); 8174 break; 8175 } 8176 8177 #ifdef WM_EVENT_COUNTERS 8178 xname = device_xname(sc->sc_dev); 8179 8180 WM_Q_INTR_EVCNT_ATTACH(rxq, intr, rxq, i, xname); 8181 WM_Q_INTR_EVCNT_ATTACH(rxq, defer, rxq, i, xname); 8182 8183 WM_Q_MISC_EVCNT_ATTACH(rxq, ipsum, rxq, i, xname); 8184 WM_Q_MISC_EVCNT_ATTACH(rxq, tusum, rxq, i, xname); 8185 #endif /* WM_EVENT_COUNTERS */ 8186 8187 rx_done++; 8188 } 8189 if (error) 8190 goto fail_2; 8191 8192 return 0; 8193 8194 fail_2: 8195 for (i = 0; i < rx_done; i++) { 8196 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 8197 wm_free_rx_buffer(sc, rxq); 8198 wm_free_rx_descs(sc, rxq); 8199 if (rxq->rxq_lock) 8200 mutex_obj_free(rxq->rxq_lock); 8201 } 8202 fail_1: 8203 for (i = 0; i < tx_done; i++) { 8204 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 8205 pcq_destroy(txq->txq_interq); 8206 wm_free_tx_buffer(sc, txq); 8207 wm_free_tx_descs(sc, txq); 8208 if (txq->txq_lock) 8209 mutex_obj_free(txq->txq_lock); 8210 } 8211 8212 kmem_free(sc->sc_queue, 8213 sizeof(struct wm_queue) * sc->sc_nqueues); 8214 fail_0: 8215 return error; 8216 } 8217 8218 /* 8219 * wm_free_quques: 8220 * Free {tx,rx}descs and {tx,rx} buffers 8221 */ 8222 static void 8223 wm_free_txrx_queues(struct wm_softc *sc) 8224 { 8225 int i; 8226 8227 for (i = 0; i < sc->sc_nqueues; i++) { 8228 struct wm_rxqueue *rxq = &sc->sc_queue[i].wmq_rxq; 8229 8230 #ifdef WM_EVENT_COUNTERS 8231 WM_Q_EVCNT_DETACH(rxq, intr, rxq, i); 8232 WM_Q_EVCNT_DETACH(rxq, defer, rxq, i); 8233 WM_Q_EVCNT_DETACH(rxq, ipsum, rxq, i); 8234 WM_Q_EVCNT_DETACH(rxq, tusum, rxq, i); 8235 #endif /* WM_EVENT_COUNTERS */ 8236 8237 wm_free_rx_buffer(sc, rxq); 8238 wm_free_rx_descs(sc, rxq); 8239 if (rxq->rxq_lock) 8240 mutex_obj_free(rxq->rxq_lock); 8241 } 8242 8243 for (i = 0; i < sc->sc_nqueues; i++) { 8244 struct wm_txqueue *txq = &sc->sc_queue[i].wmq_txq; 8245 struct mbuf *m; 8246 #ifdef WM_EVENT_COUNTERS 8247 int j; 8248 8249 WM_Q_EVCNT_DETACH(txq, txsstall, txq, i); 8250 WM_Q_EVCNT_DETACH(txq, txdstall, txq, i); 8251 WM_Q_EVCNT_DETACH(txq, fifo_stall, txq, i); 8252 WM_Q_EVCNT_DETACH(txq, txdw, txq, i); 8253 WM_Q_EVCNT_DETACH(txq, txqe, txq, i); 8254 WM_Q_EVCNT_DETACH(txq, ipsum, txq, i); 8255 WM_Q_EVCNT_DETACH(txq, tusum, txq, i); 8256 WM_Q_EVCNT_DETACH(txq, tusum6, txq, i); 8257 WM_Q_EVCNT_DETACH(txq, tso, txq, i); 8258 WM_Q_EVCNT_DETACH(txq, tso6, txq, i); 8259 WM_Q_EVCNT_DETACH(txq, tsopain, txq, i); 8260 8261 for (j = 0; j < WM_NTXSEGS; j++) 8262 evcnt_detach(&txq->txq_ev_txseg[j]); 8263 8264 WM_Q_EVCNT_DETACH(txq, pcqdrop, txq, i); 8265 WM_Q_EVCNT_DETACH(txq, descdrop, txq, i); 8266 WM_Q_EVCNT_DETACH(txq, toomanyseg, txq, i); 8267 WM_Q_EVCNT_DETACH(txq, defrag, txq, i); 8268 if (sc->sc_type <= WM_T_82544) 8269 WM_Q_EVCNT_DETACH(txq, underrun, txq, i); 8270 WM_Q_EVCNT_DETACH(txq, skipcontext, txq, i); 8271 #endif /* WM_EVENT_COUNTERS */ 8272 8273 /* Drain txq_interq */ 8274 while ((m = pcq_get(txq->txq_interq)) != NULL) 8275 m_freem(m); 8276 pcq_destroy(txq->txq_interq); 8277 8278 wm_free_tx_buffer(sc, txq); 8279 wm_free_tx_descs(sc, txq); 8280 if (txq->txq_lock) 8281 mutex_obj_free(txq->txq_lock); 8282 } 8283 8284 kmem_free(sc->sc_queue, sizeof(struct wm_queue) * sc->sc_nqueues); 8285 } 8286 8287 static void 8288 wm_init_tx_descs(struct wm_softc *sc __unused, struct wm_txqueue *txq) 8289 { 8290 8291 KASSERT(mutex_owned(txq->txq_lock)); 8292 8293 /* Initialize the transmit descriptor ring. */ 8294 memset(txq->txq_descs, 0, WM_TXDESCS_SIZE(txq)); 8295 wm_cdtxsync(txq, 0, WM_NTXDESC(txq), 8296 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 8297 txq->txq_free = WM_NTXDESC(txq); 8298 txq->txq_next = 0; 8299 } 8300 8301 static void 8302 wm_init_tx_regs(struct wm_softc *sc, struct wm_queue *wmq, 8303 struct wm_txqueue *txq) 8304 { 8305 8306 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 8307 device_xname(sc->sc_dev), __func__)); 8308 KASSERT(mutex_owned(txq->txq_lock)); 8309 8310 if (sc->sc_type < WM_T_82543) { 8311 CSR_WRITE(sc, WMREG_OLD_TDBAH, WM_CDTXADDR_HI(txq, 0)); 8312 CSR_WRITE(sc, WMREG_OLD_TDBAL, WM_CDTXADDR_LO(txq, 0)); 8313 CSR_WRITE(sc, WMREG_OLD_TDLEN, WM_TXDESCS_SIZE(txq)); 8314 CSR_WRITE(sc, WMREG_OLD_TDH, 0); 8315 CSR_WRITE(sc, WMREG_OLD_TDT, 0); 8316 CSR_WRITE(sc, WMREG_OLD_TIDV, 128); 8317 } else { 8318 int qid = wmq->wmq_id; 8319 8320 CSR_WRITE(sc, WMREG_TDBAH(qid), WM_CDTXADDR_HI(txq, 0)); 8321 CSR_WRITE(sc, WMREG_TDBAL(qid), WM_CDTXADDR_LO(txq, 0)); 8322 CSR_WRITE(sc, WMREG_TDLEN(qid), WM_TXDESCS_SIZE(txq)); 8323 CSR_WRITE(sc, WMREG_TDH(qid), 0); 8324 8325 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 8326 /* 8327 * Don't write TDT before TCTL.EN is set. 8328 * See the document. 8329 */ 8330 CSR_WRITE(sc, WMREG_TXDCTL(qid), TXDCTL_QUEUE_ENABLE 8331 | TXDCTL_PTHRESH(0) | TXDCTL_HTHRESH(0) 8332 | TXDCTL_WTHRESH(0)); 8333 else { 8334 /* XXX should update with AIM? */ 8335 CSR_WRITE(sc, WMREG_TIDV, wmq->wmq_itr / 4); 8336 if (sc->sc_type >= WM_T_82540) { 8337 /* Should be the same */ 8338 CSR_WRITE(sc, WMREG_TADV, wmq->wmq_itr / 4); 8339 } 8340 8341 CSR_WRITE(sc, WMREG_TDT(qid), 0); 8342 CSR_WRITE(sc, WMREG_TXDCTL(qid), TXDCTL_PTHRESH(0) | 8343 TXDCTL_HTHRESH(0) | TXDCTL_WTHRESH(0)); 8344 } 8345 } 8346 } 8347 8348 static void 8349 wm_init_tx_buffer(struct wm_softc *sc __unused, struct wm_txqueue *txq) 8350 { 8351 int i; 8352 8353 KASSERT(mutex_owned(txq->txq_lock)); 8354 8355 /* Initialize the transmit job descriptors. */ 8356 for (i = 0; i < WM_TXQUEUELEN(txq); i++) 8357 txq->txq_soft[i].txs_mbuf = NULL; 8358 txq->txq_sfree = WM_TXQUEUELEN(txq); 8359 txq->txq_snext = 0; 8360 txq->txq_sdirty = 0; 8361 } 8362 8363 static void 8364 wm_init_tx_queue(struct wm_softc *sc, struct wm_queue *wmq, 8365 struct wm_txqueue *txq) 8366 { 8367 8368 KASSERT(mutex_owned(txq->txq_lock)); 8369 8370 /* 8371 * Set up some register offsets that are different between 8372 * the i82542 and the i82543 and later chips. 8373 */ 8374 if (sc->sc_type < WM_T_82543) 8375 txq->txq_tdt_reg = WMREG_OLD_TDT; 8376 else 8377 txq->txq_tdt_reg = WMREG_TDT(wmq->wmq_id); 8378 8379 wm_init_tx_descs(sc, txq); 8380 wm_init_tx_regs(sc, wmq, txq); 8381 wm_init_tx_buffer(sc, txq); 8382 8383 /* Clear other than WM_TXQ_LINKDOWN_DISCARD */ 8384 txq->txq_flags &= WM_TXQ_LINKDOWN_DISCARD; 8385 8386 txq->txq_sending = false; 8387 } 8388 8389 static void 8390 wm_init_rx_regs(struct wm_softc *sc, struct wm_queue *wmq, 8391 struct wm_rxqueue *rxq) 8392 { 8393 8394 KASSERT(mutex_owned(rxq->rxq_lock)); 8395 8396 /* 8397 * Initialize the receive descriptor and receive job 8398 * descriptor rings. 8399 */ 8400 if (sc->sc_type < WM_T_82543) { 8401 CSR_WRITE(sc, WMREG_OLD_RDBAH0, WM_CDRXADDR_HI(rxq, 0)); 8402 CSR_WRITE(sc, WMREG_OLD_RDBAL0, WM_CDRXADDR_LO(rxq, 0)); 8403 CSR_WRITE(sc, WMREG_OLD_RDLEN0, 8404 rxq->rxq_descsize * rxq->rxq_ndesc); 8405 CSR_WRITE(sc, WMREG_OLD_RDH0, 0); 8406 CSR_WRITE(sc, WMREG_OLD_RDT0, 0); 8407 CSR_WRITE(sc, WMREG_OLD_RDTR0, 28 | RDTR_FPD); 8408 8409 CSR_WRITE(sc, WMREG_OLD_RDBA1_HI, 0); 8410 CSR_WRITE(sc, WMREG_OLD_RDBA1_LO, 0); 8411 CSR_WRITE(sc, WMREG_OLD_RDLEN1, 0); 8412 CSR_WRITE(sc, WMREG_OLD_RDH1, 0); 8413 CSR_WRITE(sc, WMREG_OLD_RDT1, 0); 8414 CSR_WRITE(sc, WMREG_OLD_RDTR1, 0); 8415 } else { 8416 int qid = wmq->wmq_id; 8417 8418 CSR_WRITE(sc, WMREG_RDBAH(qid), WM_CDRXADDR_HI(rxq, 0)); 8419 CSR_WRITE(sc, WMREG_RDBAL(qid), WM_CDRXADDR_LO(rxq, 0)); 8420 CSR_WRITE(sc, WMREG_RDLEN(qid), 8421 rxq->rxq_descsize * rxq->rxq_ndesc); 8422 8423 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 8424 if (MCLBYTES & ((1 << SRRCTL_BSIZEPKT_SHIFT) - 1)) 8425 panic("%s: MCLBYTES %d unsupported for 82575 " 8426 "or higher\n", __func__, MCLBYTES); 8427 8428 /* 8429 * Currently, support SRRCTL_DESCTYPE_ADV_ONEBUF 8430 * only. 8431 */ 8432 CSR_WRITE(sc, WMREG_SRRCTL(qid), 8433 SRRCTL_DESCTYPE_ADV_ONEBUF 8434 | (MCLBYTES >> SRRCTL_BSIZEPKT_SHIFT)); 8435 CSR_WRITE(sc, WMREG_RXDCTL(qid), RXDCTL_QUEUE_ENABLE 8436 | RXDCTL_PTHRESH(16) | RXDCTL_HTHRESH(8) 8437 | RXDCTL_WTHRESH(1)); 8438 CSR_WRITE(sc, WMREG_RDH(qid), 0); 8439 CSR_WRITE(sc, WMREG_RDT(qid), 0); 8440 } else { 8441 CSR_WRITE(sc, WMREG_RDH(qid), 0); 8442 CSR_WRITE(sc, WMREG_RDT(qid), 0); 8443 /* XXX should update with AIM? */ 8444 CSR_WRITE(sc, WMREG_RDTR, 8445 (wmq->wmq_itr / 4) | RDTR_FPD); 8446 /* MUST be same */ 8447 CSR_WRITE(sc, WMREG_RADV, wmq->wmq_itr / 4); 8448 CSR_WRITE(sc, WMREG_RXDCTL(qid), RXDCTL_PTHRESH(0) | 8449 RXDCTL_HTHRESH(0) | RXDCTL_WTHRESH(1)); 8450 } 8451 } 8452 } 8453 8454 static int 8455 wm_init_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq) 8456 { 8457 struct wm_rxsoft *rxs; 8458 int error, i; 8459 8460 KASSERT(mutex_owned(rxq->rxq_lock)); 8461 8462 for (i = 0; i < rxq->rxq_ndesc; i++) { 8463 rxs = &rxq->rxq_soft[i]; 8464 if (rxs->rxs_mbuf == NULL) { 8465 if ((error = wm_add_rxbuf(rxq, i)) != 0) { 8466 log(LOG_ERR, "%s: unable to allocate or map " 8467 "rx buffer %d, error = %d\n", 8468 device_xname(sc->sc_dev), i, error); 8469 /* 8470 * XXX Should attempt to run with fewer receive 8471 * XXX buffers instead of just failing. 8472 */ 8473 wm_rxdrain(rxq); 8474 return ENOMEM; 8475 } 8476 } else { 8477 /* 8478 * For 82575 and 82576, the RX descriptors must be 8479 * initialized after the setting of RCTL.EN in 8480 * wm_set_filter() 8481 */ 8482 if ((sc->sc_flags & WM_F_NEWQUEUE) == 0) 8483 wm_init_rxdesc(rxq, i); 8484 } 8485 } 8486 rxq->rxq_ptr = 0; 8487 rxq->rxq_discard = 0; 8488 WM_RXCHAIN_RESET(rxq); 8489 8490 return 0; 8491 } 8492 8493 static int 8494 wm_init_rx_queue(struct wm_softc *sc, struct wm_queue *wmq, 8495 struct wm_rxqueue *rxq) 8496 { 8497 8498 KASSERT(mutex_owned(rxq->rxq_lock)); 8499 8500 /* 8501 * Set up some register offsets that are different between 8502 * the i82542 and the i82543 and later chips. 8503 */ 8504 if (sc->sc_type < WM_T_82543) 8505 rxq->rxq_rdt_reg = WMREG_OLD_RDT0; 8506 else 8507 rxq->rxq_rdt_reg = WMREG_RDT(wmq->wmq_id); 8508 8509 wm_init_rx_regs(sc, wmq, rxq); 8510 return wm_init_rx_buffer(sc, rxq); 8511 } 8512 8513 /* 8514 * wm_init_quques: 8515 * Initialize {tx,rx}descs and {tx,rx} buffers 8516 */ 8517 static int 8518 wm_init_txrx_queues(struct wm_softc *sc) 8519 { 8520 int i, error = 0; 8521 8522 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 8523 device_xname(sc->sc_dev), __func__)); 8524 8525 for (i = 0; i < sc->sc_nqueues; i++) { 8526 struct wm_queue *wmq = &sc->sc_queue[i]; 8527 struct wm_txqueue *txq = &wmq->wmq_txq; 8528 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 8529 8530 /* 8531 * TODO 8532 * Currently, use constant variable instead of AIM. 8533 * Furthermore, the interrupt interval of multiqueue which use 8534 * polling mode is less than default value. 8535 * More tuning and AIM are required. 8536 */ 8537 if (wm_is_using_multiqueue(sc)) 8538 wmq->wmq_itr = 50; 8539 else 8540 wmq->wmq_itr = sc->sc_itr_init; 8541 wmq->wmq_set_itr = true; 8542 8543 mutex_enter(txq->txq_lock); 8544 wm_init_tx_queue(sc, wmq, txq); 8545 mutex_exit(txq->txq_lock); 8546 8547 mutex_enter(rxq->rxq_lock); 8548 error = wm_init_rx_queue(sc, wmq, rxq); 8549 mutex_exit(rxq->rxq_lock); 8550 if (error) 8551 break; 8552 } 8553 8554 return error; 8555 } 8556 8557 /* 8558 * wm_tx_offload: 8559 * 8560 * Set up TCP/IP checksumming parameters for the 8561 * specified packet. 8562 */ 8563 static void 8564 wm_tx_offload(struct wm_softc *sc, struct wm_txqueue *txq, 8565 struct wm_txsoft *txs, uint32_t *cmdp, uint8_t *fieldsp) 8566 { 8567 struct mbuf *m0 = txs->txs_mbuf; 8568 struct livengood_tcpip_ctxdesc *t; 8569 uint32_t ipcs, tucs, cmd, cmdlen, seg; 8570 uint32_t ipcse; 8571 struct ether_header *eh; 8572 int offset, iphl; 8573 uint8_t fields; 8574 8575 /* 8576 * XXX It would be nice if the mbuf pkthdr had offset 8577 * fields for the protocol headers. 8578 */ 8579 8580 eh = mtod(m0, struct ether_header *); 8581 switch (htons(eh->ether_type)) { 8582 case ETHERTYPE_IP: 8583 case ETHERTYPE_IPV6: 8584 offset = ETHER_HDR_LEN; 8585 break; 8586 8587 case ETHERTYPE_VLAN: 8588 offset = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN; 8589 break; 8590 8591 default: 8592 /* Don't support this protocol or encapsulation. */ 8593 txq->txq_last_hw_cmd = txq->txq_last_hw_fields = 0; 8594 txq->txq_last_hw_ipcs = 0; 8595 txq->txq_last_hw_tucs = 0; 8596 *fieldsp = 0; 8597 *cmdp = 0; 8598 return; 8599 } 8600 8601 if ((m0->m_pkthdr.csum_flags & 8602 (M_CSUM_TSOv4 | M_CSUM_UDPv4 | M_CSUM_TCPv4 | M_CSUM_IPv4)) != 0) { 8603 iphl = M_CSUM_DATA_IPv4_IPHL(m0->m_pkthdr.csum_data); 8604 } else 8605 iphl = M_CSUM_DATA_IPv6_IPHL(m0->m_pkthdr.csum_data); 8606 8607 ipcse = offset + iphl - 1; 8608 8609 cmd = WTX_CMD_DEXT | WTX_DTYP_D; 8610 cmdlen = WTX_CMD_DEXT | WTX_DTYP_C | WTX_CMD_IDE; 8611 seg = 0; 8612 fields = 0; 8613 8614 if ((m0->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0) { 8615 int hlen = offset + iphl; 8616 bool v4 = (m0->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0; 8617 8618 if (__predict_false(m0->m_len < 8619 (hlen + sizeof(struct tcphdr)))) { 8620 /* 8621 * TCP/IP headers are not in the first mbuf; we need 8622 * to do this the slow and painful way. Let's just 8623 * hope this doesn't happen very often. 8624 */ 8625 struct tcphdr th; 8626 8627 WM_Q_EVCNT_INCR(txq, tsopain); 8628 8629 m_copydata(m0, hlen, sizeof(th), &th); 8630 if (v4) { 8631 struct ip ip; 8632 8633 m_copydata(m0, offset, sizeof(ip), &ip); 8634 ip.ip_len = 0; 8635 m_copyback(m0, 8636 offset + offsetof(struct ip, ip_len), 8637 sizeof(ip.ip_len), &ip.ip_len); 8638 th.th_sum = in_cksum_phdr(ip.ip_src.s_addr, 8639 ip.ip_dst.s_addr, htons(IPPROTO_TCP)); 8640 } else { 8641 struct ip6_hdr ip6; 8642 8643 m_copydata(m0, offset, sizeof(ip6), &ip6); 8644 ip6.ip6_plen = 0; 8645 m_copyback(m0, 8646 offset + offsetof(struct ip6_hdr, ip6_plen), 8647 sizeof(ip6.ip6_plen), &ip6.ip6_plen); 8648 th.th_sum = in6_cksum_phdr(&ip6.ip6_src, 8649 &ip6.ip6_dst, 0, htonl(IPPROTO_TCP)); 8650 } 8651 m_copyback(m0, hlen + offsetof(struct tcphdr, th_sum), 8652 sizeof(th.th_sum), &th.th_sum); 8653 8654 hlen += th.th_off << 2; 8655 } else { 8656 /* 8657 * TCP/IP headers are in the first mbuf; we can do 8658 * this the easy way. 8659 */ 8660 struct tcphdr *th; 8661 8662 if (v4) { 8663 struct ip *ip = 8664 (void *)(mtod(m0, char *) + offset); 8665 th = (void *)(mtod(m0, char *) + hlen); 8666 8667 ip->ip_len = 0; 8668 th->th_sum = in_cksum_phdr(ip->ip_src.s_addr, 8669 ip->ip_dst.s_addr, htons(IPPROTO_TCP)); 8670 } else { 8671 struct ip6_hdr *ip6 = 8672 (void *)(mtod(m0, char *) + offset); 8673 th = (void *)(mtod(m0, char *) + hlen); 8674 8675 ip6->ip6_plen = 0; 8676 th->th_sum = in6_cksum_phdr(&ip6->ip6_src, 8677 &ip6->ip6_dst, 0, htonl(IPPROTO_TCP)); 8678 } 8679 hlen += th->th_off << 2; 8680 } 8681 8682 if (v4) { 8683 WM_Q_EVCNT_INCR(txq, tso); 8684 cmdlen |= WTX_TCPIP_CMD_IP; 8685 } else { 8686 WM_Q_EVCNT_INCR(txq, tso6); 8687 ipcse = 0; 8688 } 8689 cmd |= WTX_TCPIP_CMD_TSE; 8690 cmdlen |= WTX_TCPIP_CMD_TSE | 8691 WTX_TCPIP_CMD_TCP | (m0->m_pkthdr.len - hlen); 8692 seg = WTX_TCPIP_SEG_HDRLEN(hlen) | 8693 WTX_TCPIP_SEG_MSS(m0->m_pkthdr.segsz); 8694 } 8695 8696 /* 8697 * NOTE: Even if we're not using the IP or TCP/UDP checksum 8698 * offload feature, if we load the context descriptor, we 8699 * MUST provide valid values for IPCSS and TUCSS fields. 8700 */ 8701 8702 ipcs = WTX_TCPIP_IPCSS(offset) | 8703 WTX_TCPIP_IPCSO(offset + offsetof(struct ip, ip_sum)) | 8704 WTX_TCPIP_IPCSE(ipcse); 8705 if (m0->m_pkthdr.csum_flags & (M_CSUM_IPv4 | M_CSUM_TSOv4)) { 8706 WM_Q_EVCNT_INCR(txq, ipsum); 8707 fields |= WTX_IXSM; 8708 } 8709 8710 offset += iphl; 8711 8712 if (m0->m_pkthdr.csum_flags & 8713 (M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_TSOv4)) { 8714 WM_Q_EVCNT_INCR(txq, tusum); 8715 fields |= WTX_TXSM; 8716 tucs = WTX_TCPIP_TUCSS(offset) | 8717 WTX_TCPIP_TUCSO(offset + 8718 M_CSUM_DATA_IPv4_OFFSET(m0->m_pkthdr.csum_data)) | 8719 WTX_TCPIP_TUCSE(0) /* Rest of packet */; 8720 } else if ((m0->m_pkthdr.csum_flags & 8721 (M_CSUM_TCPv6 | M_CSUM_UDPv6 | M_CSUM_TSOv6)) != 0) { 8722 WM_Q_EVCNT_INCR(txq, tusum6); 8723 fields |= WTX_TXSM; 8724 tucs = WTX_TCPIP_TUCSS(offset) | 8725 WTX_TCPIP_TUCSO(offset + 8726 M_CSUM_DATA_IPv6_OFFSET(m0->m_pkthdr.csum_data)) | 8727 WTX_TCPIP_TUCSE(0) /* Rest of packet */; 8728 } else { 8729 /* Just initialize it to a valid TCP context. */ 8730 tucs = WTX_TCPIP_TUCSS(offset) | 8731 WTX_TCPIP_TUCSO(offset + offsetof(struct tcphdr, th_sum)) | 8732 WTX_TCPIP_TUCSE(0) /* Rest of packet */; 8733 } 8734 8735 *cmdp = cmd; 8736 *fieldsp = fields; 8737 8738 /* 8739 * We don't have to write context descriptor for every packet 8740 * except for 82574. For 82574, we must write context descriptor 8741 * for every packet when we use two descriptor queues. 8742 * 8743 * The 82574L can only remember the *last* context used 8744 * regardless of queue that it was use for. We cannot reuse 8745 * contexts on this hardware platform and must generate a new 8746 * context every time. 82574L hardware spec, section 7.2.6, 8747 * second note. 8748 */ 8749 if (sc->sc_nqueues < 2) { 8750 /* 8751 * Setting up new checksum offload context for every 8752 * frames takes a lot of processing time for hardware. 8753 * This also reduces performance a lot for small sized 8754 * frames so avoid it if driver can use previously 8755 * configured checksum offload context. 8756 * For TSO, in theory we can use the same TSO context only if 8757 * frame is the same type(IP/TCP) and the same MSS. However 8758 * checking whether a frame has the same IP/TCP structure is a 8759 * hard thing so just ignore that and always restablish a 8760 * new TSO context. 8761 */ 8762 if ((m0->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) 8763 == 0) { 8764 if (txq->txq_last_hw_cmd == cmd && 8765 txq->txq_last_hw_fields == fields && 8766 txq->txq_last_hw_ipcs == (ipcs & 0xffff) && 8767 txq->txq_last_hw_tucs == (tucs & 0xffff)) { 8768 WM_Q_EVCNT_INCR(txq, skipcontext); 8769 return; 8770 } 8771 } 8772 8773 txq->txq_last_hw_cmd = cmd; 8774 txq->txq_last_hw_fields = fields; 8775 txq->txq_last_hw_ipcs = (ipcs & 0xffff); 8776 txq->txq_last_hw_tucs = (tucs & 0xffff); 8777 } 8778 8779 /* Fill in the context descriptor. */ 8780 t = (struct livengood_tcpip_ctxdesc *) 8781 &txq->txq_descs[txq->txq_next]; 8782 t->tcpip_ipcs = htole32(ipcs); 8783 t->tcpip_tucs = htole32(tucs); 8784 t->tcpip_cmdlen = htole32(cmdlen); 8785 t->tcpip_seg = htole32(seg); 8786 wm_cdtxsync(txq, txq->txq_next, 1, BUS_DMASYNC_PREWRITE); 8787 8788 txq->txq_next = WM_NEXTTX(txq, txq->txq_next); 8789 txs->txs_ndesc++; 8790 } 8791 8792 static inline int 8793 wm_select_txqueue(struct ifnet *ifp, struct mbuf *m) 8794 { 8795 struct wm_softc *sc = ifp->if_softc; 8796 u_int cpuid = cpu_index(curcpu()); 8797 8798 /* 8799 * Currently, simple distribute strategy. 8800 * TODO: 8801 * distribute by flowid(RSS has value). 8802 */ 8803 return ((cpuid + ncpu - sc->sc_affinity_offset) % ncpu) % sc->sc_nqueues; 8804 } 8805 8806 static inline bool 8807 wm_linkdown_discard(struct wm_txqueue *txq) 8808 { 8809 8810 if ((txq->txq_flags & WM_TXQ_LINKDOWN_DISCARD) != 0) 8811 return true; 8812 8813 return false; 8814 } 8815 8816 /* 8817 * wm_start: [ifnet interface function] 8818 * 8819 * Start packet transmission on the interface. 8820 */ 8821 static void 8822 wm_start(struct ifnet *ifp) 8823 { 8824 struct wm_softc *sc = ifp->if_softc; 8825 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 8826 8827 KASSERT(if_is_mpsafe(ifp)); 8828 /* 8829 * if_obytes and if_omcasts are added in if_transmit()@if.c. 8830 */ 8831 8832 mutex_enter(txq->txq_lock); 8833 if (!txq->txq_stopping) 8834 wm_start_locked(ifp); 8835 mutex_exit(txq->txq_lock); 8836 } 8837 8838 static void 8839 wm_start_locked(struct ifnet *ifp) 8840 { 8841 struct wm_softc *sc = ifp->if_softc; 8842 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 8843 8844 wm_send_common_locked(ifp, txq, false); 8845 } 8846 8847 static int 8848 wm_transmit(struct ifnet *ifp, struct mbuf *m) 8849 { 8850 int qid; 8851 struct wm_softc *sc = ifp->if_softc; 8852 struct wm_txqueue *txq; 8853 8854 qid = wm_select_txqueue(ifp, m); 8855 txq = &sc->sc_queue[qid].wmq_txq; 8856 8857 if (__predict_false(!pcq_put(txq->txq_interq, m))) { 8858 m_freem(m); 8859 WM_Q_EVCNT_INCR(txq, pcqdrop); 8860 return ENOBUFS; 8861 } 8862 8863 net_stat_ref_t nsr = IF_STAT_GETREF(ifp); 8864 if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len); 8865 if (m->m_flags & M_MCAST) 8866 if_statinc_ref(nsr, if_omcasts); 8867 IF_STAT_PUTREF(ifp); 8868 8869 if (mutex_tryenter(txq->txq_lock)) { 8870 if (!txq->txq_stopping) 8871 wm_transmit_locked(ifp, txq); 8872 mutex_exit(txq->txq_lock); 8873 } 8874 8875 return 0; 8876 } 8877 8878 static void 8879 wm_transmit_locked(struct ifnet *ifp, struct wm_txqueue *txq) 8880 { 8881 8882 wm_send_common_locked(ifp, txq, true); 8883 } 8884 8885 static void 8886 wm_send_common_locked(struct ifnet *ifp, struct wm_txqueue *txq, 8887 bool is_transmit) 8888 { 8889 struct wm_softc *sc = ifp->if_softc; 8890 struct mbuf *m0; 8891 struct wm_txsoft *txs; 8892 bus_dmamap_t dmamap; 8893 int error, nexttx, lasttx = -1, ofree, seg, segs_needed, use_tso; 8894 bus_addr_t curaddr; 8895 bus_size_t seglen, curlen; 8896 uint32_t cksumcmd; 8897 uint8_t cksumfields; 8898 bool remap = true; 8899 8900 KASSERT(mutex_owned(txq->txq_lock)); 8901 KASSERT(!txq->txq_stopping); 8902 8903 if ((txq->txq_flags & WM_TXQ_NO_SPACE) != 0) 8904 return; 8905 8906 if (__predict_false(wm_linkdown_discard(txq))) { 8907 do { 8908 if (is_transmit) 8909 m0 = pcq_get(txq->txq_interq); 8910 else 8911 IFQ_DEQUEUE(&ifp->if_snd, m0); 8912 /* 8913 * increment successed packet counter as in the case 8914 * which the packet is discarded by link down PHY. 8915 */ 8916 if (m0 != NULL) { 8917 if_statinc(ifp, if_opackets); 8918 m_freem(m0); 8919 } 8920 } while (m0 != NULL); 8921 return; 8922 } 8923 8924 /* Remember the previous number of free descriptors. */ 8925 ofree = txq->txq_free; 8926 8927 /* 8928 * Loop through the send queue, setting up transmit descriptors 8929 * until we drain the queue, or use up all available transmit 8930 * descriptors. 8931 */ 8932 for (;;) { 8933 m0 = NULL; 8934 8935 /* Get a work queue entry. */ 8936 if (txq->txq_sfree < WM_TXQUEUE_GC(txq)) { 8937 wm_txeof(txq, UINT_MAX); 8938 if (txq->txq_sfree == 0) { 8939 DPRINTF(sc, WM_DEBUG_TX, 8940 ("%s: TX: no free job descriptors\n", 8941 device_xname(sc->sc_dev))); 8942 WM_Q_EVCNT_INCR(txq, txsstall); 8943 break; 8944 } 8945 } 8946 8947 /* Grab a packet off the queue. */ 8948 if (is_transmit) 8949 m0 = pcq_get(txq->txq_interq); 8950 else 8951 IFQ_DEQUEUE(&ifp->if_snd, m0); 8952 if (m0 == NULL) 8953 break; 8954 8955 DPRINTF(sc, WM_DEBUG_TX, 8956 ("%s: TX: have packet to transmit: %p\n", 8957 device_xname(sc->sc_dev), m0)); 8958 8959 txs = &txq->txq_soft[txq->txq_snext]; 8960 dmamap = txs->txs_dmamap; 8961 8962 use_tso = (m0->m_pkthdr.csum_flags & 8963 (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0; 8964 8965 /* 8966 * So says the Linux driver: 8967 * The controller does a simple calculation to make sure 8968 * there is enough room in the FIFO before initiating the 8969 * DMA for each buffer. The calc is: 8970 * 4 = ceil(buffer len / MSS) 8971 * To make sure we don't overrun the FIFO, adjust the max 8972 * buffer len if the MSS drops. 8973 */ 8974 dmamap->dm_maxsegsz = 8975 (use_tso && (m0->m_pkthdr.segsz << 2) < WTX_MAX_LEN) 8976 ? m0->m_pkthdr.segsz << 2 8977 : WTX_MAX_LEN; 8978 8979 /* 8980 * Load the DMA map. If this fails, the packet either 8981 * didn't fit in the allotted number of segments, or we 8982 * were short on resources. For the too-many-segments 8983 * case, we simply report an error and drop the packet, 8984 * since we can't sanely copy a jumbo packet to a single 8985 * buffer. 8986 */ 8987 retry: 8988 error = bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, m0, 8989 BUS_DMA_WRITE | BUS_DMA_NOWAIT); 8990 if (__predict_false(error)) { 8991 if (error == EFBIG) { 8992 if (remap == true) { 8993 struct mbuf *m; 8994 8995 remap = false; 8996 m = m_defrag(m0, M_NOWAIT); 8997 if (m != NULL) { 8998 WM_Q_EVCNT_INCR(txq, defrag); 8999 m0 = m; 9000 goto retry; 9001 } 9002 } 9003 WM_Q_EVCNT_INCR(txq, toomanyseg); 9004 log(LOG_ERR, "%s: Tx packet consumes too many " 9005 "DMA segments, dropping...\n", 9006 device_xname(sc->sc_dev)); 9007 wm_dump_mbuf_chain(sc, m0); 9008 m_freem(m0); 9009 continue; 9010 } 9011 /* Short on resources, just stop for now. */ 9012 DPRINTF(sc, WM_DEBUG_TX, 9013 ("%s: TX: dmamap load failed: %d\n", 9014 device_xname(sc->sc_dev), error)); 9015 break; 9016 } 9017 9018 segs_needed = dmamap->dm_nsegs; 9019 if (use_tso) { 9020 /* For sentinel descriptor; see below. */ 9021 segs_needed++; 9022 } 9023 9024 /* 9025 * Ensure we have enough descriptors free to describe 9026 * the packet. Note, we always reserve one descriptor 9027 * at the end of the ring due to the semantics of the 9028 * TDT register, plus one more in the event we need 9029 * to load offload context. 9030 */ 9031 if (segs_needed > txq->txq_free - 2) { 9032 /* 9033 * Not enough free descriptors to transmit this 9034 * packet. We haven't committed anything yet, 9035 * so just unload the DMA map, put the packet 9036 * pack on the queue, and punt. Notify the upper 9037 * layer that there are no more slots left. 9038 */ 9039 DPRINTF(sc, WM_DEBUG_TX, 9040 ("%s: TX: need %d (%d) descriptors, have %d\n", 9041 device_xname(sc->sc_dev), dmamap->dm_nsegs, 9042 segs_needed, txq->txq_free - 1)); 9043 txq->txq_flags |= WM_TXQ_NO_SPACE; 9044 bus_dmamap_unload(sc->sc_dmat, dmamap); 9045 WM_Q_EVCNT_INCR(txq, txdstall); 9046 break; 9047 } 9048 9049 /* 9050 * Check for 82547 Tx FIFO bug. We need to do this 9051 * once we know we can transmit the packet, since we 9052 * do some internal FIFO space accounting here. 9053 */ 9054 if (sc->sc_type == WM_T_82547 && 9055 wm_82547_txfifo_bugchk(sc, m0)) { 9056 DPRINTF(sc, WM_DEBUG_TX, 9057 ("%s: TX: 82547 Tx FIFO bug detected\n", 9058 device_xname(sc->sc_dev))); 9059 txq->txq_flags |= WM_TXQ_NO_SPACE; 9060 bus_dmamap_unload(sc->sc_dmat, dmamap); 9061 WM_Q_EVCNT_INCR(txq, fifo_stall); 9062 break; 9063 } 9064 9065 /* WE ARE NOW COMMITTED TO TRANSMITTING THE PACKET. */ 9066 9067 DPRINTF(sc, WM_DEBUG_TX, 9068 ("%s: TX: packet has %d (%d) DMA segments\n", 9069 device_xname(sc->sc_dev), dmamap->dm_nsegs, segs_needed)); 9070 9071 WM_EVCNT_INCR(&txq->txq_ev_txseg[dmamap->dm_nsegs - 1]); 9072 9073 /* 9074 * Store a pointer to the packet so that we can free it 9075 * later. 9076 * 9077 * Initially, we consider the number of descriptors the 9078 * packet uses the number of DMA segments. This may be 9079 * incremented by 1 if we do checksum offload (a descriptor 9080 * is used to set the checksum context). 9081 */ 9082 txs->txs_mbuf = m0; 9083 txs->txs_firstdesc = txq->txq_next; 9084 txs->txs_ndesc = segs_needed; 9085 9086 /* Set up offload parameters for this packet. */ 9087 if (m0->m_pkthdr.csum_flags & 9088 (M_CSUM_TSOv4 | M_CSUM_TSOv6 | 9089 M_CSUM_IPv4 | M_CSUM_TCPv4 | M_CSUM_UDPv4 | 9090 M_CSUM_TCPv6 | M_CSUM_UDPv6)) { 9091 wm_tx_offload(sc, txq, txs, &cksumcmd, &cksumfields); 9092 } else { 9093 txq->txq_last_hw_cmd = txq->txq_last_hw_fields = 0; 9094 txq->txq_last_hw_ipcs = txq->txq_last_hw_tucs = 0; 9095 cksumcmd = 0; 9096 cksumfields = 0; 9097 } 9098 9099 cksumcmd |= WTX_CMD_IDE | WTX_CMD_IFCS; 9100 9101 /* Sync the DMA map. */ 9102 bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize, 9103 BUS_DMASYNC_PREWRITE); 9104 9105 /* Initialize the transmit descriptor. */ 9106 for (nexttx = txq->txq_next, seg = 0; 9107 seg < dmamap->dm_nsegs; seg++) { 9108 for (seglen = dmamap->dm_segs[seg].ds_len, 9109 curaddr = dmamap->dm_segs[seg].ds_addr; 9110 seglen != 0; 9111 curaddr += curlen, seglen -= curlen, 9112 nexttx = WM_NEXTTX(txq, nexttx)) { 9113 curlen = seglen; 9114 9115 /* 9116 * So says the Linux driver: 9117 * Work around for premature descriptor 9118 * write-backs in TSO mode. Append a 9119 * 4-byte sentinel descriptor. 9120 */ 9121 if (use_tso && seg == dmamap->dm_nsegs - 1 && 9122 curlen > 8) 9123 curlen -= 4; 9124 9125 wm_set_dma_addr( 9126 &txq->txq_descs[nexttx].wtx_addr, curaddr); 9127 txq->txq_descs[nexttx].wtx_cmdlen 9128 = htole32(cksumcmd | curlen); 9129 txq->txq_descs[nexttx].wtx_fields.wtxu_status 9130 = 0; 9131 txq->txq_descs[nexttx].wtx_fields.wtxu_options 9132 = cksumfields; 9133 txq->txq_descs[nexttx].wtx_fields.wtxu_vlan =0; 9134 lasttx = nexttx; 9135 9136 DPRINTF(sc, WM_DEBUG_TX, 9137 ("%s: TX: desc %d: low %#" PRIx64 ", " 9138 "len %#04zx\n", 9139 device_xname(sc->sc_dev), nexttx, 9140 (uint64_t)curaddr, curlen)); 9141 } 9142 } 9143 9144 KASSERT(lasttx != -1); 9145 9146 /* 9147 * Set up the command byte on the last descriptor of 9148 * the packet. If we're in the interrupt delay window, 9149 * delay the interrupt. 9150 */ 9151 txq->txq_descs[lasttx].wtx_cmdlen |= 9152 htole32(WTX_CMD_EOP | WTX_CMD_RS); 9153 9154 /* 9155 * If VLANs are enabled and the packet has a VLAN tag, set 9156 * up the descriptor to encapsulate the packet for us. 9157 * 9158 * This is only valid on the last descriptor of the packet. 9159 */ 9160 if (vlan_has_tag(m0)) { 9161 txq->txq_descs[lasttx].wtx_cmdlen |= 9162 htole32(WTX_CMD_VLE); 9163 txq->txq_descs[lasttx].wtx_fields.wtxu_vlan 9164 = htole16(vlan_get_tag(m0)); 9165 } 9166 9167 txs->txs_lastdesc = lasttx; 9168 9169 DPRINTF(sc, WM_DEBUG_TX, 9170 ("%s: TX: desc %d: cmdlen 0x%08x\n", 9171 device_xname(sc->sc_dev), 9172 lasttx, le32toh(txq->txq_descs[lasttx].wtx_cmdlen))); 9173 9174 /* Sync the descriptors we're using. */ 9175 wm_cdtxsync(txq, txq->txq_next, txs->txs_ndesc, 9176 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 9177 9178 /* Give the packet to the chip. */ 9179 CSR_WRITE(sc, txq->txq_tdt_reg, nexttx); 9180 9181 DPRINTF(sc, WM_DEBUG_TX, 9182 ("%s: TX: TDT -> %d\n", device_xname(sc->sc_dev), nexttx)); 9183 9184 DPRINTF(sc, WM_DEBUG_TX, 9185 ("%s: TX: finished transmitting packet, job %d\n", 9186 device_xname(sc->sc_dev), txq->txq_snext)); 9187 9188 /* Advance the tx pointer. */ 9189 txq->txq_free -= txs->txs_ndesc; 9190 txq->txq_next = nexttx; 9191 9192 txq->txq_sfree--; 9193 txq->txq_snext = WM_NEXTTXS(txq, txq->txq_snext); 9194 9195 /* Pass the packet to any BPF listeners. */ 9196 bpf_mtap(ifp, m0, BPF_D_OUT); 9197 } 9198 9199 if (m0 != NULL) { 9200 txq->txq_flags |= WM_TXQ_NO_SPACE; 9201 WM_Q_EVCNT_INCR(txq, descdrop); 9202 DPRINTF(sc, WM_DEBUG_TX, ("%s: TX: error after IFQ_DEQUEUE\n", 9203 __func__)); 9204 m_freem(m0); 9205 } 9206 9207 if (txq->txq_sfree == 0 || txq->txq_free <= 2) { 9208 /* No more slots; notify upper layer. */ 9209 txq->txq_flags |= WM_TXQ_NO_SPACE; 9210 } 9211 9212 if (txq->txq_free != ofree) { 9213 /* Set a watchdog timer in case the chip flakes out. */ 9214 txq->txq_lastsent = time_uptime; 9215 txq->txq_sending = true; 9216 } 9217 } 9218 9219 /* 9220 * wm_nq_tx_offload: 9221 * 9222 * Set up TCP/IP checksumming parameters for the 9223 * specified packet, for NEWQUEUE devices 9224 */ 9225 static void 9226 wm_nq_tx_offload(struct wm_softc *sc, struct wm_txqueue *txq, 9227 struct wm_txsoft *txs, uint32_t *cmdlenp, uint32_t *fieldsp, bool *do_csum) 9228 { 9229 struct mbuf *m0 = txs->txs_mbuf; 9230 uint32_t vl_len, mssidx, cmdc; 9231 struct ether_header *eh; 9232 int offset, iphl; 9233 9234 /* 9235 * XXX It would be nice if the mbuf pkthdr had offset 9236 * fields for the protocol headers. 9237 */ 9238 *cmdlenp = 0; 9239 *fieldsp = 0; 9240 9241 eh = mtod(m0, struct ether_header *); 9242 switch (htons(eh->ether_type)) { 9243 case ETHERTYPE_IP: 9244 case ETHERTYPE_IPV6: 9245 offset = ETHER_HDR_LEN; 9246 break; 9247 9248 case ETHERTYPE_VLAN: 9249 offset = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN; 9250 break; 9251 9252 default: 9253 /* Don't support this protocol or encapsulation. */ 9254 *do_csum = false; 9255 return; 9256 } 9257 *do_csum = true; 9258 *cmdlenp = NQTX_DTYP_D | NQTX_CMD_DEXT | NQTX_CMD_IFCS; 9259 cmdc = NQTX_DTYP_C | NQTX_CMD_DEXT; 9260 9261 vl_len = (offset << NQTXC_VLLEN_MACLEN_SHIFT); 9262 KASSERT((offset & ~NQTXC_VLLEN_MACLEN_MASK) == 0); 9263 9264 if ((m0->m_pkthdr.csum_flags & 9265 (M_CSUM_TSOv4 | M_CSUM_UDPv4 | M_CSUM_TCPv4 | M_CSUM_IPv4)) != 0) { 9266 iphl = M_CSUM_DATA_IPv4_IPHL(m0->m_pkthdr.csum_data); 9267 } else { 9268 iphl = M_CSUM_DATA_IPv6_IPHL(m0->m_pkthdr.csum_data); 9269 } 9270 vl_len |= (iphl << NQTXC_VLLEN_IPLEN_SHIFT); 9271 KASSERT((iphl & ~NQTXC_VLLEN_IPLEN_MASK) == 0); 9272 9273 if (vlan_has_tag(m0)) { 9274 vl_len |= ((vlan_get_tag(m0) & NQTXC_VLLEN_VLAN_MASK) 9275 << NQTXC_VLLEN_VLAN_SHIFT); 9276 *cmdlenp |= NQTX_CMD_VLE; 9277 } 9278 9279 mssidx = 0; 9280 9281 if ((m0->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0) { 9282 int hlen = offset + iphl; 9283 int tcp_hlen; 9284 bool v4 = (m0->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0; 9285 9286 if (__predict_false(m0->m_len < 9287 (hlen + sizeof(struct tcphdr)))) { 9288 /* 9289 * TCP/IP headers are not in the first mbuf; we need 9290 * to do this the slow and painful way. Let's just 9291 * hope this doesn't happen very often. 9292 */ 9293 struct tcphdr th; 9294 9295 WM_Q_EVCNT_INCR(txq, tsopain); 9296 9297 m_copydata(m0, hlen, sizeof(th), &th); 9298 if (v4) { 9299 struct ip ip; 9300 9301 m_copydata(m0, offset, sizeof(ip), &ip); 9302 ip.ip_len = 0; 9303 m_copyback(m0, 9304 offset + offsetof(struct ip, ip_len), 9305 sizeof(ip.ip_len), &ip.ip_len); 9306 th.th_sum = in_cksum_phdr(ip.ip_src.s_addr, 9307 ip.ip_dst.s_addr, htons(IPPROTO_TCP)); 9308 } else { 9309 struct ip6_hdr ip6; 9310 9311 m_copydata(m0, offset, sizeof(ip6), &ip6); 9312 ip6.ip6_plen = 0; 9313 m_copyback(m0, 9314 offset + offsetof(struct ip6_hdr, ip6_plen), 9315 sizeof(ip6.ip6_plen), &ip6.ip6_plen); 9316 th.th_sum = in6_cksum_phdr(&ip6.ip6_src, 9317 &ip6.ip6_dst, 0, htonl(IPPROTO_TCP)); 9318 } 9319 m_copyback(m0, hlen + offsetof(struct tcphdr, th_sum), 9320 sizeof(th.th_sum), &th.th_sum); 9321 9322 tcp_hlen = th.th_off << 2; 9323 } else { 9324 /* 9325 * TCP/IP headers are in the first mbuf; we can do 9326 * this the easy way. 9327 */ 9328 struct tcphdr *th; 9329 9330 if (v4) { 9331 struct ip *ip = 9332 (void *)(mtod(m0, char *) + offset); 9333 th = (void *)(mtod(m0, char *) + hlen); 9334 9335 ip->ip_len = 0; 9336 th->th_sum = in_cksum_phdr(ip->ip_src.s_addr, 9337 ip->ip_dst.s_addr, htons(IPPROTO_TCP)); 9338 } else { 9339 struct ip6_hdr *ip6 = 9340 (void *)(mtod(m0, char *) + offset); 9341 th = (void *)(mtod(m0, char *) + hlen); 9342 9343 ip6->ip6_plen = 0; 9344 th->th_sum = in6_cksum_phdr(&ip6->ip6_src, 9345 &ip6->ip6_dst, 0, htonl(IPPROTO_TCP)); 9346 } 9347 tcp_hlen = th->th_off << 2; 9348 } 9349 hlen += tcp_hlen; 9350 *cmdlenp |= NQTX_CMD_TSE; 9351 9352 if (v4) { 9353 WM_Q_EVCNT_INCR(txq, tso); 9354 *fieldsp |= NQTXD_FIELDS_IXSM | NQTXD_FIELDS_TUXSM; 9355 } else { 9356 WM_Q_EVCNT_INCR(txq, tso6); 9357 *fieldsp |= NQTXD_FIELDS_TUXSM; 9358 } 9359 *fieldsp |= ((m0->m_pkthdr.len - hlen) << NQTXD_FIELDS_PAYLEN_SHIFT); 9360 KASSERT(((m0->m_pkthdr.len - hlen) & ~NQTXD_FIELDS_PAYLEN_MASK) == 0); 9361 mssidx |= (m0->m_pkthdr.segsz << NQTXC_MSSIDX_MSS_SHIFT); 9362 KASSERT((m0->m_pkthdr.segsz & ~NQTXC_MSSIDX_MSS_MASK) == 0); 9363 mssidx |= (tcp_hlen << NQTXC_MSSIDX_L4LEN_SHIFT); 9364 KASSERT((tcp_hlen & ~NQTXC_MSSIDX_L4LEN_MASK) == 0); 9365 } else { 9366 *fieldsp |= (m0->m_pkthdr.len << NQTXD_FIELDS_PAYLEN_SHIFT); 9367 KASSERT((m0->m_pkthdr.len & ~NQTXD_FIELDS_PAYLEN_MASK) == 0); 9368 } 9369 9370 if (m0->m_pkthdr.csum_flags & M_CSUM_IPv4) { 9371 *fieldsp |= NQTXD_FIELDS_IXSM; 9372 cmdc |= NQTXC_CMD_IP4; 9373 } 9374 9375 if (m0->m_pkthdr.csum_flags & 9376 (M_CSUM_UDPv4 | M_CSUM_TCPv4 | M_CSUM_TSOv4)) { 9377 WM_Q_EVCNT_INCR(txq, tusum); 9378 if (m0->m_pkthdr.csum_flags & (M_CSUM_TCPv4 | M_CSUM_TSOv4)) 9379 cmdc |= NQTXC_CMD_TCP; 9380 else 9381 cmdc |= NQTXC_CMD_UDP; 9382 9383 cmdc |= NQTXC_CMD_IP4; 9384 *fieldsp |= NQTXD_FIELDS_TUXSM; 9385 } 9386 if (m0->m_pkthdr.csum_flags & 9387 (M_CSUM_UDPv6 | M_CSUM_TCPv6 | M_CSUM_TSOv6)) { 9388 WM_Q_EVCNT_INCR(txq, tusum6); 9389 if (m0->m_pkthdr.csum_flags & (M_CSUM_TCPv6 | M_CSUM_TSOv6)) 9390 cmdc |= NQTXC_CMD_TCP; 9391 else 9392 cmdc |= NQTXC_CMD_UDP; 9393 9394 cmdc |= NQTXC_CMD_IP6; 9395 *fieldsp |= NQTXD_FIELDS_TUXSM; 9396 } 9397 9398 /* 9399 * We don't have to write context descriptor for every packet to 9400 * NEWQUEUE controllers, that is 82575, 82576, 82580, I350, I354, 9401 * I210 and I211. It is enough to write once per a Tx queue for these 9402 * controllers. 9403 * It would be overhead to write context descriptor for every packet, 9404 * however it does not cause problems. 9405 */ 9406 /* Fill in the context descriptor. */ 9407 txq->txq_nq_descs[txq->txq_next].nqtx_ctx.nqtxc_vl_len = 9408 htole32(vl_len); 9409 txq->txq_nq_descs[txq->txq_next].nqtx_ctx.nqtxc_sn = 0; 9410 txq->txq_nq_descs[txq->txq_next].nqtx_ctx.nqtxc_cmd = 9411 htole32(cmdc); 9412 txq->txq_nq_descs[txq->txq_next].nqtx_ctx.nqtxc_mssidx = 9413 htole32(mssidx); 9414 wm_cdtxsync(txq, txq->txq_next, 1, BUS_DMASYNC_PREWRITE); 9415 DPRINTF(sc, WM_DEBUG_TX, 9416 ("%s: TX: context desc %d 0x%08x%08x\n", device_xname(sc->sc_dev), 9417 txq->txq_next, 0, vl_len)); 9418 DPRINTF(sc, WM_DEBUG_TX, ("\t0x%08x%08x\n", mssidx, cmdc)); 9419 txq->txq_next = WM_NEXTTX(txq, txq->txq_next); 9420 txs->txs_ndesc++; 9421 } 9422 9423 /* 9424 * wm_nq_start: [ifnet interface function] 9425 * 9426 * Start packet transmission on the interface for NEWQUEUE devices 9427 */ 9428 static void 9429 wm_nq_start(struct ifnet *ifp) 9430 { 9431 struct wm_softc *sc = ifp->if_softc; 9432 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 9433 9434 KASSERT(if_is_mpsafe(ifp)); 9435 /* 9436 * if_obytes and if_omcasts are added in if_transmit()@if.c. 9437 */ 9438 9439 mutex_enter(txq->txq_lock); 9440 if (!txq->txq_stopping) 9441 wm_nq_start_locked(ifp); 9442 mutex_exit(txq->txq_lock); 9443 } 9444 9445 static void 9446 wm_nq_start_locked(struct ifnet *ifp) 9447 { 9448 struct wm_softc *sc = ifp->if_softc; 9449 struct wm_txqueue *txq = &sc->sc_queue[0].wmq_txq; 9450 9451 wm_nq_send_common_locked(ifp, txq, false); 9452 } 9453 9454 static int 9455 wm_nq_transmit(struct ifnet *ifp, struct mbuf *m) 9456 { 9457 int qid; 9458 struct wm_softc *sc = ifp->if_softc; 9459 struct wm_txqueue *txq; 9460 9461 qid = wm_select_txqueue(ifp, m); 9462 txq = &sc->sc_queue[qid].wmq_txq; 9463 9464 if (__predict_false(!pcq_put(txq->txq_interq, m))) { 9465 m_freem(m); 9466 WM_Q_EVCNT_INCR(txq, pcqdrop); 9467 return ENOBUFS; 9468 } 9469 9470 net_stat_ref_t nsr = IF_STAT_GETREF(ifp); 9471 if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len); 9472 if (m->m_flags & M_MCAST) 9473 if_statinc_ref(nsr, if_omcasts); 9474 IF_STAT_PUTREF(ifp); 9475 9476 /* 9477 * The situations which this mutex_tryenter() fails at running time 9478 * are below two patterns. 9479 * (1) contention with interrupt handler(wm_txrxintr_msix()) 9480 * (2) contention with deferred if_start softint(wm_handle_queue()) 9481 * In the case of (1), the last packet enqueued to txq->txq_interq is 9482 * dequeued by wm_deferred_start_locked(). So, it does not get stuck. 9483 * In the case of (2), the last packet enqueued to txq->txq_interq is 9484 * also dequeued by wm_deferred_start_locked(). So, it does not get 9485 * stuck, either. 9486 */ 9487 if (mutex_tryenter(txq->txq_lock)) { 9488 if (!txq->txq_stopping) 9489 wm_nq_transmit_locked(ifp, txq); 9490 mutex_exit(txq->txq_lock); 9491 } 9492 9493 return 0; 9494 } 9495 9496 static void 9497 wm_nq_transmit_locked(struct ifnet *ifp, struct wm_txqueue *txq) 9498 { 9499 9500 wm_nq_send_common_locked(ifp, txq, true); 9501 } 9502 9503 static void 9504 wm_nq_send_common_locked(struct ifnet *ifp, struct wm_txqueue *txq, 9505 bool is_transmit) 9506 { 9507 struct wm_softc *sc = ifp->if_softc; 9508 struct mbuf *m0; 9509 struct wm_txsoft *txs; 9510 bus_dmamap_t dmamap; 9511 int error, nexttx, lasttx = -1, seg, segs_needed; 9512 bool do_csum, sent; 9513 bool remap = true; 9514 9515 KASSERT(mutex_owned(txq->txq_lock)); 9516 KASSERT(!txq->txq_stopping); 9517 9518 if ((txq->txq_flags & WM_TXQ_NO_SPACE) != 0) 9519 return; 9520 9521 if (__predict_false(wm_linkdown_discard(txq))) { 9522 do { 9523 if (is_transmit) 9524 m0 = pcq_get(txq->txq_interq); 9525 else 9526 IFQ_DEQUEUE(&ifp->if_snd, m0); 9527 /* 9528 * increment successed packet counter as in the case 9529 * which the packet is discarded by link down PHY. 9530 */ 9531 if (m0 != NULL) { 9532 if_statinc(ifp, if_opackets); 9533 m_freem(m0); 9534 } 9535 } while (m0 != NULL); 9536 return; 9537 } 9538 9539 sent = false; 9540 9541 /* 9542 * Loop through the send queue, setting up transmit descriptors 9543 * until we drain the queue, or use up all available transmit 9544 * descriptors. 9545 */ 9546 for (;;) { 9547 m0 = NULL; 9548 9549 /* Get a work queue entry. */ 9550 if (txq->txq_sfree < WM_TXQUEUE_GC(txq)) { 9551 wm_txeof(txq, UINT_MAX); 9552 if (txq->txq_sfree == 0) { 9553 DPRINTF(sc, WM_DEBUG_TX, 9554 ("%s: TX: no free job descriptors\n", 9555 device_xname(sc->sc_dev))); 9556 WM_Q_EVCNT_INCR(txq, txsstall); 9557 break; 9558 } 9559 } 9560 9561 /* Grab a packet off the queue. */ 9562 if (is_transmit) 9563 m0 = pcq_get(txq->txq_interq); 9564 else 9565 IFQ_DEQUEUE(&ifp->if_snd, m0); 9566 if (m0 == NULL) 9567 break; 9568 9569 DPRINTF(sc, WM_DEBUG_TX, 9570 ("%s: TX: have packet to transmit: %p\n", 9571 device_xname(sc->sc_dev), m0)); 9572 9573 txs = &txq->txq_soft[txq->txq_snext]; 9574 dmamap = txs->txs_dmamap; 9575 9576 /* 9577 * Load the DMA map. If this fails, the packet either 9578 * didn't fit in the allotted number of segments, or we 9579 * were short on resources. For the too-many-segments 9580 * case, we simply report an error and drop the packet, 9581 * since we can't sanely copy a jumbo packet to a single 9582 * buffer. 9583 */ 9584 retry: 9585 error = bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, m0, 9586 BUS_DMA_WRITE | BUS_DMA_NOWAIT); 9587 if (__predict_false(error)) { 9588 if (error == EFBIG) { 9589 if (remap == true) { 9590 struct mbuf *m; 9591 9592 remap = false; 9593 m = m_defrag(m0, M_NOWAIT); 9594 if (m != NULL) { 9595 WM_Q_EVCNT_INCR(txq, defrag); 9596 m0 = m; 9597 goto retry; 9598 } 9599 } 9600 WM_Q_EVCNT_INCR(txq, toomanyseg); 9601 log(LOG_ERR, "%s: Tx packet consumes too many " 9602 "DMA segments, dropping...\n", 9603 device_xname(sc->sc_dev)); 9604 wm_dump_mbuf_chain(sc, m0); 9605 m_freem(m0); 9606 continue; 9607 } 9608 /* Short on resources, just stop for now. */ 9609 DPRINTF(sc, WM_DEBUG_TX, 9610 ("%s: TX: dmamap load failed: %d\n", 9611 device_xname(sc->sc_dev), error)); 9612 break; 9613 } 9614 9615 segs_needed = dmamap->dm_nsegs; 9616 9617 /* 9618 * Ensure we have enough descriptors free to describe 9619 * the packet. Note, we always reserve one descriptor 9620 * at the end of the ring due to the semantics of the 9621 * TDT register, plus one more in the event we need 9622 * to load offload context. 9623 */ 9624 if (segs_needed > txq->txq_free - 2) { 9625 /* 9626 * Not enough free descriptors to transmit this 9627 * packet. We haven't committed anything yet, 9628 * so just unload the DMA map, put the packet 9629 * pack on the queue, and punt. Notify the upper 9630 * layer that there are no more slots left. 9631 */ 9632 DPRINTF(sc, WM_DEBUG_TX, 9633 ("%s: TX: need %d (%d) descriptors, have %d\n", 9634 device_xname(sc->sc_dev), dmamap->dm_nsegs, 9635 segs_needed, txq->txq_free - 1)); 9636 txq->txq_flags |= WM_TXQ_NO_SPACE; 9637 bus_dmamap_unload(sc->sc_dmat, dmamap); 9638 WM_Q_EVCNT_INCR(txq, txdstall); 9639 break; 9640 } 9641 9642 /* WE ARE NOW COMMITTED TO TRANSMITTING THE PACKET. */ 9643 9644 DPRINTF(sc, WM_DEBUG_TX, 9645 ("%s: TX: packet has %d (%d) DMA segments\n", 9646 device_xname(sc->sc_dev), dmamap->dm_nsegs, segs_needed)); 9647 9648 WM_EVCNT_INCR(&txq->txq_ev_txseg[dmamap->dm_nsegs - 1]); 9649 9650 /* 9651 * Store a pointer to the packet so that we can free it 9652 * later. 9653 * 9654 * Initially, we consider the number of descriptors the 9655 * packet uses the number of DMA segments. This may be 9656 * incremented by 1 if we do checksum offload (a descriptor 9657 * is used to set the checksum context). 9658 */ 9659 txs->txs_mbuf = m0; 9660 txs->txs_firstdesc = txq->txq_next; 9661 txs->txs_ndesc = segs_needed; 9662 9663 /* Set up offload parameters for this packet. */ 9664 uint32_t cmdlen, fields, dcmdlen; 9665 if (m0->m_pkthdr.csum_flags & 9666 (M_CSUM_TSOv4 | M_CSUM_TSOv6 | 9667 M_CSUM_IPv4 | M_CSUM_TCPv4 | M_CSUM_UDPv4 | 9668 M_CSUM_TCPv6 | M_CSUM_UDPv6)) { 9669 wm_nq_tx_offload(sc, txq, txs, &cmdlen, &fields, 9670 &do_csum); 9671 } else { 9672 do_csum = false; 9673 cmdlen = 0; 9674 fields = 0; 9675 } 9676 9677 /* Sync the DMA map. */ 9678 bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize, 9679 BUS_DMASYNC_PREWRITE); 9680 9681 /* Initialize the first transmit descriptor. */ 9682 nexttx = txq->txq_next; 9683 if (!do_csum) { 9684 /* Set up a legacy descriptor */ 9685 wm_set_dma_addr(&txq->txq_descs[nexttx].wtx_addr, 9686 dmamap->dm_segs[0].ds_addr); 9687 txq->txq_descs[nexttx].wtx_cmdlen = 9688 htole32(WTX_CMD_IFCS | dmamap->dm_segs[0].ds_len); 9689 txq->txq_descs[nexttx].wtx_fields.wtxu_status = 0; 9690 txq->txq_descs[nexttx].wtx_fields.wtxu_options = 0; 9691 if (vlan_has_tag(m0)) { 9692 txq->txq_descs[nexttx].wtx_cmdlen |= 9693 htole32(WTX_CMD_VLE); 9694 txq->txq_descs[nexttx].wtx_fields.wtxu_vlan = 9695 htole16(vlan_get_tag(m0)); 9696 } else 9697 txq->txq_descs[nexttx].wtx_fields.wtxu_vlan =0; 9698 9699 dcmdlen = 0; 9700 } else { 9701 /* Set up an advanced data descriptor */ 9702 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_addr = 9703 htole64(dmamap->dm_segs[0].ds_addr); 9704 KASSERT((dmamap->dm_segs[0].ds_len & cmdlen) == 0); 9705 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_cmdlen = 9706 htole32(dmamap->dm_segs[0].ds_len | cmdlen); 9707 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_fields = 9708 htole32(fields); 9709 DPRINTF(sc, WM_DEBUG_TX, 9710 ("%s: TX: adv data desc %d 0x%" PRIx64 "\n", 9711 device_xname(sc->sc_dev), nexttx, 9712 (uint64_t)dmamap->dm_segs[0].ds_addr)); 9713 DPRINTF(sc, WM_DEBUG_TX, 9714 ("\t 0x%08x%08x\n", fields, 9715 (uint32_t)dmamap->dm_segs[0].ds_len | cmdlen)); 9716 dcmdlen = NQTX_DTYP_D | NQTX_CMD_DEXT; 9717 } 9718 9719 lasttx = nexttx; 9720 nexttx = WM_NEXTTX(txq, nexttx); 9721 /* 9722 * Fill in the next descriptors. Legacy or advanced format 9723 * is the same here. 9724 */ 9725 for (seg = 1; seg < dmamap->dm_nsegs; 9726 seg++, nexttx = WM_NEXTTX(txq, nexttx)) { 9727 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_addr = 9728 htole64(dmamap->dm_segs[seg].ds_addr); 9729 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_cmdlen = 9730 htole32(dcmdlen | dmamap->dm_segs[seg].ds_len); 9731 KASSERT((dcmdlen & dmamap->dm_segs[seg].ds_len) == 0); 9732 txq->txq_nq_descs[nexttx].nqtx_data.nqtxd_fields = 0; 9733 lasttx = nexttx; 9734 9735 DPRINTF(sc, WM_DEBUG_TX, 9736 ("%s: TX: desc %d: %#" PRIx64 ", len %#04zx\n", 9737 device_xname(sc->sc_dev), nexttx, 9738 (uint64_t)dmamap->dm_segs[seg].ds_addr, 9739 dmamap->dm_segs[seg].ds_len)); 9740 } 9741 9742 KASSERT(lasttx != -1); 9743 9744 /* 9745 * Set up the command byte on the last descriptor of 9746 * the packet. If we're in the interrupt delay window, 9747 * delay the interrupt. 9748 */ 9749 KASSERT((WTX_CMD_EOP | WTX_CMD_RS) == 9750 (NQTX_CMD_EOP | NQTX_CMD_RS)); 9751 txq->txq_descs[lasttx].wtx_cmdlen |= 9752 htole32(WTX_CMD_EOP | WTX_CMD_RS); 9753 9754 txs->txs_lastdesc = lasttx; 9755 9756 DPRINTF(sc, WM_DEBUG_TX, ("%s: TX: desc %d: cmdlen 0x%08x\n", 9757 device_xname(sc->sc_dev), 9758 lasttx, le32toh(txq->txq_descs[lasttx].wtx_cmdlen))); 9759 9760 /* Sync the descriptors we're using. */ 9761 wm_cdtxsync(txq, txq->txq_next, txs->txs_ndesc, 9762 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 9763 9764 /* Give the packet to the chip. */ 9765 CSR_WRITE(sc, txq->txq_tdt_reg, nexttx); 9766 sent = true; 9767 9768 DPRINTF(sc, WM_DEBUG_TX, 9769 ("%s: TX: TDT -> %d\n", device_xname(sc->sc_dev), nexttx)); 9770 9771 DPRINTF(sc, WM_DEBUG_TX, 9772 ("%s: TX: finished transmitting packet, job %d\n", 9773 device_xname(sc->sc_dev), txq->txq_snext)); 9774 9775 /* Advance the tx pointer. */ 9776 txq->txq_free -= txs->txs_ndesc; 9777 txq->txq_next = nexttx; 9778 9779 txq->txq_sfree--; 9780 txq->txq_snext = WM_NEXTTXS(txq, txq->txq_snext); 9781 9782 /* Pass the packet to any BPF listeners. */ 9783 bpf_mtap(ifp, m0, BPF_D_OUT); 9784 } 9785 9786 if (m0 != NULL) { 9787 txq->txq_flags |= WM_TXQ_NO_SPACE; 9788 WM_Q_EVCNT_INCR(txq, descdrop); 9789 DPRINTF(sc, WM_DEBUG_TX, ("%s: TX: error after IFQ_DEQUEUE\n", 9790 __func__)); 9791 m_freem(m0); 9792 } 9793 9794 if (txq->txq_sfree == 0 || txq->txq_free <= 2) { 9795 /* No more slots; notify upper layer. */ 9796 txq->txq_flags |= WM_TXQ_NO_SPACE; 9797 } 9798 9799 if (sent) { 9800 /* Set a watchdog timer in case the chip flakes out. */ 9801 txq->txq_lastsent = time_uptime; 9802 txq->txq_sending = true; 9803 } 9804 } 9805 9806 static void 9807 wm_deferred_start_locked(struct wm_txqueue *txq) 9808 { 9809 struct wm_softc *sc = txq->txq_sc; 9810 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 9811 struct wm_queue *wmq = container_of(txq, struct wm_queue, wmq_txq); 9812 int qid = wmq->wmq_id; 9813 9814 KASSERT(mutex_owned(txq->txq_lock)); 9815 KASSERT(!txq->txq_stopping); 9816 9817 if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { 9818 /* XXX need for ALTQ or one CPU system */ 9819 if (qid == 0) 9820 wm_nq_start_locked(ifp); 9821 wm_nq_transmit_locked(ifp, txq); 9822 } else { 9823 /* XXX need for ALTQ or one CPU system */ 9824 if (qid == 0) 9825 wm_start_locked(ifp); 9826 wm_transmit_locked(ifp, txq); 9827 } 9828 } 9829 9830 /* Interrupt */ 9831 9832 /* 9833 * wm_txeof: 9834 * 9835 * Helper; handle transmit interrupts. 9836 */ 9837 static bool 9838 wm_txeof(struct wm_txqueue *txq, u_int limit) 9839 { 9840 struct wm_softc *sc = txq->txq_sc; 9841 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 9842 struct wm_txsoft *txs; 9843 int count = 0; 9844 int i; 9845 uint8_t status; 9846 bool more = false; 9847 9848 KASSERT(mutex_owned(txq->txq_lock)); 9849 9850 if (txq->txq_stopping) 9851 return false; 9852 9853 txq->txq_flags &= ~WM_TXQ_NO_SPACE; 9854 9855 /* 9856 * Go through the Tx list and free mbufs for those 9857 * frames which have been transmitted. 9858 */ 9859 for (i = txq->txq_sdirty; txq->txq_sfree != WM_TXQUEUELEN(txq); 9860 i = WM_NEXTTXS(txq, i), txq->txq_sfree++) { 9861 txs = &txq->txq_soft[i]; 9862 9863 DPRINTF(sc, WM_DEBUG_TX, ("%s: TX: checking job %d\n", 9864 device_xname(sc->sc_dev), i)); 9865 9866 wm_cdtxsync(txq, txs->txs_firstdesc, txs->txs_ndesc, 9867 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 9868 9869 status = 9870 txq->txq_descs[txs->txs_lastdesc].wtx_fields.wtxu_status; 9871 if ((status & WTX_ST_DD) == 0) { 9872 wm_cdtxsync(txq, txs->txs_lastdesc, 1, 9873 BUS_DMASYNC_PREREAD); 9874 break; 9875 } 9876 9877 if (limit-- == 0) { 9878 more = true; 9879 DPRINTF(sc, WM_DEBUG_TX, 9880 ("%s: TX: loop limited, job %d is not processed\n", 9881 device_xname(sc->sc_dev), i)); 9882 break; 9883 } 9884 9885 count++; 9886 DPRINTF(sc, WM_DEBUG_TX, 9887 ("%s: TX: job %d done: descs %d..%d\n", 9888 device_xname(sc->sc_dev), i, txs->txs_firstdesc, 9889 txs->txs_lastdesc)); 9890 9891 #ifdef WM_EVENT_COUNTERS 9892 if ((status & WTX_ST_TU) && (sc->sc_type <= WM_T_82544)) 9893 WM_Q_EVCNT_INCR(txq, underrun); 9894 #endif /* WM_EVENT_COUNTERS */ 9895 9896 /* 9897 * 82574 and newer's document says the status field has neither 9898 * EC (Excessive Collision) bit nor LC (Late Collision) bit 9899 * (reserved). Refer "PCIe GbE Controller Open Source Software 9900 * Developer's Manual", 82574 datasheet and newer. 9901 * 9902 * XXX I saw the LC bit was set on I218 even though the media 9903 * was full duplex, so the bit might be used for other 9904 * meaning ...(I have no document). 9905 */ 9906 9907 if (((status & (WTX_ST_EC | WTX_ST_LC)) != 0) 9908 && ((sc->sc_type < WM_T_82574) 9909 || (sc->sc_type == WM_T_80003))) { 9910 if_statinc(ifp, if_oerrors); 9911 if (status & WTX_ST_LC) 9912 log(LOG_WARNING, "%s: late collision\n", 9913 device_xname(sc->sc_dev)); 9914 else if (status & WTX_ST_EC) { 9915 if_statadd(ifp, if_collisions, 9916 TX_COLLISION_THRESHOLD + 1); 9917 log(LOG_WARNING, "%s: excessive collisions\n", 9918 device_xname(sc->sc_dev)); 9919 } 9920 } else 9921 if_statinc(ifp, if_opackets); 9922 9923 txq->txq_packets++; 9924 txq->txq_bytes += txs->txs_mbuf->m_pkthdr.len; 9925 9926 txq->txq_free += txs->txs_ndesc; 9927 bus_dmamap_sync(sc->sc_dmat, txs->txs_dmamap, 9928 0, txs->txs_dmamap->dm_mapsize, BUS_DMASYNC_POSTWRITE); 9929 bus_dmamap_unload(sc->sc_dmat, txs->txs_dmamap); 9930 m_freem(txs->txs_mbuf); 9931 txs->txs_mbuf = NULL; 9932 } 9933 9934 /* Update the dirty transmit buffer pointer. */ 9935 txq->txq_sdirty = i; 9936 DPRINTF(sc, WM_DEBUG_TX, 9937 ("%s: TX: txsdirty -> %d\n", device_xname(sc->sc_dev), i)); 9938 9939 if (count != 0) 9940 rnd_add_uint32(&sc->rnd_source, count); 9941 9942 /* 9943 * If there are no more pending transmissions, cancel the watchdog 9944 * timer. 9945 */ 9946 if (txq->txq_sfree == WM_TXQUEUELEN(txq)) 9947 txq->txq_sending = false; 9948 9949 return more; 9950 } 9951 9952 static inline uint32_t 9953 wm_rxdesc_get_status(struct wm_rxqueue *rxq, int idx) 9954 { 9955 struct wm_softc *sc = rxq->rxq_sc; 9956 9957 if (sc->sc_type == WM_T_82574) 9958 return EXTRXC_STATUS( 9959 le32toh(rxq->rxq_ext_descs[idx].erx_ctx.erxc_err_stat)); 9960 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 9961 return NQRXC_STATUS( 9962 le32toh(rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_err_stat)); 9963 else 9964 return rxq->rxq_descs[idx].wrx_status; 9965 } 9966 9967 static inline uint32_t 9968 wm_rxdesc_get_errors(struct wm_rxqueue *rxq, int idx) 9969 { 9970 struct wm_softc *sc = rxq->rxq_sc; 9971 9972 if (sc->sc_type == WM_T_82574) 9973 return EXTRXC_ERROR( 9974 le32toh(rxq->rxq_ext_descs[idx].erx_ctx.erxc_err_stat)); 9975 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 9976 return NQRXC_ERROR( 9977 le32toh(rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_err_stat)); 9978 else 9979 return rxq->rxq_descs[idx].wrx_errors; 9980 } 9981 9982 static inline uint16_t 9983 wm_rxdesc_get_vlantag(struct wm_rxqueue *rxq, int idx) 9984 { 9985 struct wm_softc *sc = rxq->rxq_sc; 9986 9987 if (sc->sc_type == WM_T_82574) 9988 return rxq->rxq_ext_descs[idx].erx_ctx.erxc_vlan; 9989 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 9990 return rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_vlan; 9991 else 9992 return rxq->rxq_descs[idx].wrx_special; 9993 } 9994 9995 static inline int 9996 wm_rxdesc_get_pktlen(struct wm_rxqueue *rxq, int idx) 9997 { 9998 struct wm_softc *sc = rxq->rxq_sc; 9999 10000 if (sc->sc_type == WM_T_82574) 10001 return rxq->rxq_ext_descs[idx].erx_ctx.erxc_pktlen; 10002 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 10003 return rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_pktlen; 10004 else 10005 return rxq->rxq_descs[idx].wrx_len; 10006 } 10007 10008 #ifdef WM_DEBUG 10009 static inline uint32_t 10010 wm_rxdesc_get_rsshash(struct wm_rxqueue *rxq, int idx) 10011 { 10012 struct wm_softc *sc = rxq->rxq_sc; 10013 10014 if (sc->sc_type == WM_T_82574) 10015 return rxq->rxq_ext_descs[idx].erx_ctx.erxc_rsshash; 10016 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 10017 return rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_rsshash; 10018 else 10019 return 0; 10020 } 10021 10022 static inline uint8_t 10023 wm_rxdesc_get_rsstype(struct wm_rxqueue *rxq, int idx) 10024 { 10025 struct wm_softc *sc = rxq->rxq_sc; 10026 10027 if (sc->sc_type == WM_T_82574) 10028 return EXTRXC_RSS_TYPE(rxq->rxq_ext_descs[idx].erx_ctx.erxc_mrq); 10029 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 10030 return NQRXC_RSS_TYPE(rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_misc); 10031 else 10032 return 0; 10033 } 10034 #endif /* WM_DEBUG */ 10035 10036 static inline bool 10037 wm_rxdesc_is_set_status(struct wm_softc *sc, uint32_t status, 10038 uint32_t legacy_bit, uint32_t ext_bit, uint32_t nq_bit) 10039 { 10040 10041 if (sc->sc_type == WM_T_82574) 10042 return (status & ext_bit) != 0; 10043 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 10044 return (status & nq_bit) != 0; 10045 else 10046 return (status & legacy_bit) != 0; 10047 } 10048 10049 static inline bool 10050 wm_rxdesc_is_set_error(struct wm_softc *sc, uint32_t error, 10051 uint32_t legacy_bit, uint32_t ext_bit, uint32_t nq_bit) 10052 { 10053 10054 if (sc->sc_type == WM_T_82574) 10055 return (error & ext_bit) != 0; 10056 else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) 10057 return (error & nq_bit) != 0; 10058 else 10059 return (error & legacy_bit) != 0; 10060 } 10061 10062 static inline bool 10063 wm_rxdesc_is_eop(struct wm_rxqueue *rxq, uint32_t status) 10064 { 10065 10066 if (wm_rxdesc_is_set_status(rxq->rxq_sc, status, 10067 WRX_ST_EOP, EXTRXC_STATUS_EOP, NQRXC_STATUS_EOP)) 10068 return true; 10069 else 10070 return false; 10071 } 10072 10073 static inline bool 10074 wm_rxdesc_has_errors(struct wm_rxqueue *rxq, uint32_t errors) 10075 { 10076 struct wm_softc *sc = rxq->rxq_sc; 10077 10078 /* XXX missing error bit for newqueue? */ 10079 if (wm_rxdesc_is_set_error(sc, errors, 10080 WRX_ER_CE | WRX_ER_SE | WRX_ER_SEQ | WRX_ER_CXE | WRX_ER_RXE, 10081 EXTRXC_ERROR_CE | EXTRXC_ERROR_SE | EXTRXC_ERROR_SEQ 10082 | EXTRXC_ERROR_CXE | EXTRXC_ERROR_RXE, 10083 NQRXC_ERROR_RXE)) { 10084 if (wm_rxdesc_is_set_error(sc, errors, WRX_ER_SE, 10085 EXTRXC_ERROR_SE, 0)) 10086 log(LOG_WARNING, "%s: symbol error\n", 10087 device_xname(sc->sc_dev)); 10088 else if (wm_rxdesc_is_set_error(sc, errors, WRX_ER_SEQ, 10089 EXTRXC_ERROR_SEQ, 0)) 10090 log(LOG_WARNING, "%s: receive sequence error\n", 10091 device_xname(sc->sc_dev)); 10092 else if (wm_rxdesc_is_set_error(sc, errors, WRX_ER_CE, 10093 EXTRXC_ERROR_CE, 0)) 10094 log(LOG_WARNING, "%s: CRC error\n", 10095 device_xname(sc->sc_dev)); 10096 return true; 10097 } 10098 10099 return false; 10100 } 10101 10102 static inline bool 10103 wm_rxdesc_dd(struct wm_rxqueue *rxq, int idx, uint32_t status) 10104 { 10105 struct wm_softc *sc = rxq->rxq_sc; 10106 10107 if (!wm_rxdesc_is_set_status(sc, status, WRX_ST_DD, EXTRXC_STATUS_DD, 10108 NQRXC_STATUS_DD)) { 10109 /* We have processed all of the receive descriptors. */ 10110 wm_cdrxsync(rxq, idx, BUS_DMASYNC_PREREAD); 10111 return false; 10112 } 10113 10114 return true; 10115 } 10116 10117 static inline bool 10118 wm_rxdesc_input_vlantag(struct wm_rxqueue *rxq, uint32_t status, 10119 uint16_t vlantag, struct mbuf *m) 10120 { 10121 10122 if (wm_rxdesc_is_set_status(rxq->rxq_sc, status, 10123 WRX_ST_VP, EXTRXC_STATUS_VP, NQRXC_STATUS_VP)) { 10124 vlan_set_tag(m, le16toh(vlantag)); 10125 } 10126 10127 return true; 10128 } 10129 10130 static inline void 10131 wm_rxdesc_ensure_checksum(struct wm_rxqueue *rxq, uint32_t status, 10132 uint32_t errors, struct mbuf *m) 10133 { 10134 struct wm_softc *sc = rxq->rxq_sc; 10135 10136 if (!wm_rxdesc_is_set_status(sc, status, WRX_ST_IXSM, 0, 0)) { 10137 if (wm_rxdesc_is_set_status(sc, status, 10138 WRX_ST_IPCS, EXTRXC_STATUS_IPCS, NQRXC_STATUS_IPCS)) { 10139 WM_Q_EVCNT_INCR(rxq, ipsum); 10140 m->m_pkthdr.csum_flags |= M_CSUM_IPv4; 10141 if (wm_rxdesc_is_set_error(sc, errors, 10142 WRX_ER_IPE, EXTRXC_ERROR_IPE, NQRXC_ERROR_IPE)) 10143 m->m_pkthdr.csum_flags |= M_CSUM_IPv4_BAD; 10144 } 10145 if (wm_rxdesc_is_set_status(sc, status, 10146 WRX_ST_TCPCS, EXTRXC_STATUS_TCPCS, NQRXC_STATUS_L4I)) { 10147 /* 10148 * Note: we don't know if this was TCP or UDP, 10149 * so we just set both bits, and expect the 10150 * upper layers to deal. 10151 */ 10152 WM_Q_EVCNT_INCR(rxq, tusum); 10153 m->m_pkthdr.csum_flags |= 10154 M_CSUM_TCPv4 | M_CSUM_UDPv4 | 10155 M_CSUM_TCPv6 | M_CSUM_UDPv6; 10156 if (wm_rxdesc_is_set_error(sc, errors, WRX_ER_TCPE, 10157 EXTRXC_ERROR_TCPE, NQRXC_ERROR_L4E)) 10158 m->m_pkthdr.csum_flags |= M_CSUM_TCP_UDP_BAD; 10159 } 10160 } 10161 } 10162 10163 /* 10164 * wm_rxeof: 10165 * 10166 * Helper; handle receive interrupts. 10167 */ 10168 static bool 10169 wm_rxeof(struct wm_rxqueue *rxq, u_int limit) 10170 { 10171 struct wm_softc *sc = rxq->rxq_sc; 10172 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 10173 struct wm_rxsoft *rxs; 10174 struct mbuf *m; 10175 int i, len; 10176 int count = 0; 10177 uint32_t status, errors; 10178 uint16_t vlantag; 10179 bool more = false; 10180 10181 KASSERT(mutex_owned(rxq->rxq_lock)); 10182 10183 for (i = rxq->rxq_ptr;; i = WM_NEXTRX(i)) { 10184 rxs = &rxq->rxq_soft[i]; 10185 10186 DPRINTF(sc, WM_DEBUG_RX, 10187 ("%s: RX: checking descriptor %d\n", 10188 device_xname(sc->sc_dev), i)); 10189 wm_cdrxsync(rxq, i, 10190 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 10191 10192 status = wm_rxdesc_get_status(rxq, i); 10193 errors = wm_rxdesc_get_errors(rxq, i); 10194 len = le16toh(wm_rxdesc_get_pktlen(rxq, i)); 10195 vlantag = wm_rxdesc_get_vlantag(rxq, i); 10196 #ifdef WM_DEBUG 10197 uint32_t rsshash = le32toh(wm_rxdesc_get_rsshash(rxq, i)); 10198 uint8_t rsstype = wm_rxdesc_get_rsstype(rxq, i); 10199 #endif 10200 10201 if (!wm_rxdesc_dd(rxq, i, status)) 10202 break; 10203 10204 if (limit-- == 0) { 10205 more = true; 10206 DPRINTF(sc, WM_DEBUG_RX, 10207 ("%s: RX: loop limited, descriptor %d is not processed\n", 10208 device_xname(sc->sc_dev), i)); 10209 break; 10210 } 10211 10212 count++; 10213 if (__predict_false(rxq->rxq_discard)) { 10214 DPRINTF(sc, WM_DEBUG_RX, 10215 ("%s: RX: discarding contents of descriptor %d\n", 10216 device_xname(sc->sc_dev), i)); 10217 wm_init_rxdesc(rxq, i); 10218 if (wm_rxdesc_is_eop(rxq, status)) { 10219 /* Reset our state. */ 10220 DPRINTF(sc, WM_DEBUG_RX, 10221 ("%s: RX: resetting rxdiscard -> 0\n", 10222 device_xname(sc->sc_dev))); 10223 rxq->rxq_discard = 0; 10224 } 10225 continue; 10226 } 10227 10228 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 10229 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_POSTREAD); 10230 10231 m = rxs->rxs_mbuf; 10232 10233 /* 10234 * Add a new receive buffer to the ring, unless of 10235 * course the length is zero. Treat the latter as a 10236 * failed mapping. 10237 */ 10238 if ((len == 0) || (wm_add_rxbuf(rxq, i) != 0)) { 10239 /* 10240 * Failed, throw away what we've done so 10241 * far, and discard the rest of the packet. 10242 */ 10243 if_statinc(ifp, if_ierrors); 10244 bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0, 10245 rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD); 10246 wm_init_rxdesc(rxq, i); 10247 if (!wm_rxdesc_is_eop(rxq, status)) 10248 rxq->rxq_discard = 1; 10249 if (rxq->rxq_head != NULL) 10250 m_freem(rxq->rxq_head); 10251 WM_RXCHAIN_RESET(rxq); 10252 DPRINTF(sc, WM_DEBUG_RX, 10253 ("%s: RX: Rx buffer allocation failed, " 10254 "dropping packet%s\n", device_xname(sc->sc_dev), 10255 rxq->rxq_discard ? " (discard)" : "")); 10256 continue; 10257 } 10258 10259 m->m_len = len; 10260 rxq->rxq_len += len; 10261 DPRINTF(sc, WM_DEBUG_RX, 10262 ("%s: RX: buffer at %p len %d\n", 10263 device_xname(sc->sc_dev), m->m_data, len)); 10264 10265 /* If this is not the end of the packet, keep looking. */ 10266 if (!wm_rxdesc_is_eop(rxq, status)) { 10267 WM_RXCHAIN_LINK(rxq, m); 10268 DPRINTF(sc, WM_DEBUG_RX, 10269 ("%s: RX: not yet EOP, rxlen -> %d\n", 10270 device_xname(sc->sc_dev), rxq->rxq_len)); 10271 continue; 10272 } 10273 10274 /* 10275 * Okay, we have the entire packet now. The chip is 10276 * configured to include the FCS except I35[04], I21[01]. 10277 * (not all chips can be configured to strip it), so we need 10278 * to trim it. Those chips have an eratta, the RCTL_SECRC bit 10279 * in RCTL register is always set, so we don't trim it. 10280 * PCH2 and newer chip also not include FCS when jumbo 10281 * frame is used to do workaround an errata. 10282 * May need to adjust length of previous mbuf in the 10283 * chain if the current mbuf is too short. 10284 */ 10285 if ((sc->sc_flags & WM_F_CRC_STRIP) == 0) { 10286 if (m->m_len < ETHER_CRC_LEN) { 10287 rxq->rxq_tail->m_len 10288 -= (ETHER_CRC_LEN - m->m_len); 10289 m->m_len = 0; 10290 } else 10291 m->m_len -= ETHER_CRC_LEN; 10292 len = rxq->rxq_len - ETHER_CRC_LEN; 10293 } else 10294 len = rxq->rxq_len; 10295 10296 WM_RXCHAIN_LINK(rxq, m); 10297 10298 *rxq->rxq_tailp = NULL; 10299 m = rxq->rxq_head; 10300 10301 WM_RXCHAIN_RESET(rxq); 10302 10303 DPRINTF(sc, WM_DEBUG_RX, 10304 ("%s: RX: have entire packet, len -> %d\n", 10305 device_xname(sc->sc_dev), len)); 10306 10307 /* If an error occurred, update stats and drop the packet. */ 10308 if (wm_rxdesc_has_errors(rxq, errors)) { 10309 m_freem(m); 10310 continue; 10311 } 10312 10313 /* No errors. Receive the packet. */ 10314 m_set_rcvif(m, ifp); 10315 m->m_pkthdr.len = len; 10316 /* 10317 * TODO 10318 * should be save rsshash and rsstype to this mbuf. 10319 */ 10320 DPRINTF(sc, WM_DEBUG_RX, 10321 ("%s: RX: RSS type=%" PRIu8 ", RSS hash=%" PRIu32 "\n", 10322 device_xname(sc->sc_dev), rsstype, rsshash)); 10323 10324 /* 10325 * If VLANs are enabled, VLAN packets have been unwrapped 10326 * for us. Associate the tag with the packet. 10327 */ 10328 if (!wm_rxdesc_input_vlantag(rxq, status, vlantag, m)) 10329 continue; 10330 10331 /* Set up checksum info for this packet. */ 10332 wm_rxdesc_ensure_checksum(rxq, status, errors, m); 10333 10334 rxq->rxq_packets++; 10335 rxq->rxq_bytes += len; 10336 /* Pass it on. */ 10337 if_percpuq_enqueue(sc->sc_ipq, m); 10338 10339 if (rxq->rxq_stopping) 10340 break; 10341 } 10342 rxq->rxq_ptr = i; 10343 10344 if (count != 0) 10345 rnd_add_uint32(&sc->rnd_source, count); 10346 10347 DPRINTF(sc, WM_DEBUG_RX, 10348 ("%s: RX: rxptr -> %d\n", device_xname(sc->sc_dev), i)); 10349 10350 return more; 10351 } 10352 10353 /* 10354 * wm_linkintr_gmii: 10355 * 10356 * Helper; handle link interrupts for GMII. 10357 */ 10358 static void 10359 wm_linkintr_gmii(struct wm_softc *sc, uint32_t icr) 10360 { 10361 device_t dev = sc->sc_dev; 10362 uint32_t status, reg; 10363 bool link; 10364 bool dopoll = true; 10365 int rv; 10366 10367 KASSERT(mutex_owned(sc->sc_core_lock)); 10368 10369 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s:\n", device_xname(dev), 10370 __func__)); 10371 10372 if ((icr & ICR_LSC) == 0) { 10373 if (icr & ICR_RXSEQ) 10374 DPRINTF(sc, WM_DEBUG_LINK, 10375 ("%s: LINK Receive sequence error\n", 10376 device_xname(dev))); 10377 return; 10378 } 10379 10380 /* Link status changed */ 10381 status = CSR_READ(sc, WMREG_STATUS); 10382 link = status & STATUS_LU; 10383 if (link) { 10384 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> up %s\n", 10385 device_xname(dev), 10386 (status & STATUS_FD) ? "FDX" : "HDX")); 10387 if (wm_phy_need_linkdown_discard(sc)) { 10388 DPRINTF(sc, WM_DEBUG_LINK, 10389 ("%s: linkintr: Clear linkdown discard flag\n", 10390 device_xname(dev))); 10391 wm_clear_linkdown_discard(sc); 10392 } 10393 } else { 10394 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n", 10395 device_xname(dev))); 10396 if (wm_phy_need_linkdown_discard(sc)) { 10397 DPRINTF(sc, WM_DEBUG_LINK, 10398 ("%s: linkintr: Set linkdown discard flag\n", 10399 device_xname(dev))); 10400 wm_set_linkdown_discard(sc); 10401 } 10402 } 10403 if ((sc->sc_type == WM_T_ICH8) && (link == false)) 10404 wm_gig_downshift_workaround_ich8lan(sc); 10405 10406 if ((sc->sc_type == WM_T_ICH8) && (sc->sc_phytype == WMPHY_IGP_3)) 10407 wm_kmrn_lock_loss_workaround_ich8lan(sc); 10408 10409 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> mii_pollstat\n", 10410 device_xname(dev))); 10411 if ((sc->sc_flags & WM_F_DELAY_LINKUP) != 0) { 10412 if (link) { 10413 /* 10414 * To workaround the problem, it's required to wait 10415 * several hundred miliseconds. The time depend 10416 * on the environment. Wait 1 second for the safety. 10417 */ 10418 dopoll = false; 10419 getmicrotime(&sc->sc_linkup_delay_time); 10420 sc->sc_linkup_delay_time.tv_sec += 1; 10421 } else if (sc->sc_linkup_delay_time.tv_sec != 0) { 10422 /* 10423 * Simplify by checking tv_sec only. It's enough. 10424 * 10425 * Currently, it's not required to clear the time. 10426 * It's just to know the timer is stopped 10427 * (for debugging). 10428 */ 10429 10430 sc->sc_linkup_delay_time.tv_sec = 0; 10431 sc->sc_linkup_delay_time.tv_usec = 0; 10432 } 10433 } 10434 10435 /* 10436 * Call mii_pollstat(). 10437 * 10438 * Some (not all) systems use I35[04] or I21[01] don't send packet soon 10439 * after linkup. The MAC send a packet to the PHY and any error is not 10440 * observed. This behavior causes a problem that gratuitous ARP and/or 10441 * IPv6 DAD packet are silently dropped. To avoid this problem, don't 10442 * call mii_pollstat() here which will send LINK_STATE_UP notification 10443 * to the upper layer. Instead, mii_pollstat() will be called in 10444 * wm_gmii_mediastatus() or mii_tick() will be called in wm_tick(). 10445 */ 10446 if (dopoll) 10447 mii_pollstat(&sc->sc_mii); 10448 10449 /* Do some workarounds soon after link status is changed. */ 10450 10451 if (sc->sc_type == WM_T_82543) { 10452 int miistatus, active; 10453 10454 /* 10455 * With 82543, we need to force speed and 10456 * duplex on the MAC equal to what the PHY 10457 * speed and duplex configuration is. 10458 */ 10459 miistatus = sc->sc_mii.mii_media_status; 10460 10461 if (miistatus & IFM_ACTIVE) { 10462 active = sc->sc_mii.mii_media_active; 10463 sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD); 10464 switch (IFM_SUBTYPE(active)) { 10465 case IFM_10_T: 10466 sc->sc_ctrl |= CTRL_SPEED_10; 10467 break; 10468 case IFM_100_TX: 10469 sc->sc_ctrl |= CTRL_SPEED_100; 10470 break; 10471 case IFM_1000_T: 10472 sc->sc_ctrl |= CTRL_SPEED_1000; 10473 break; 10474 default: 10475 /* 10476 * Fiber? 10477 * Shoud not enter here. 10478 */ 10479 device_printf(dev, "unknown media (%x)\n", 10480 active); 10481 break; 10482 } 10483 if (active & IFM_FDX) 10484 sc->sc_ctrl |= CTRL_FD; 10485 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 10486 } 10487 } else if (sc->sc_type == WM_T_PCH) { 10488 wm_k1_gig_workaround_hv(sc, 10489 ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); 10490 } 10491 10492 /* 10493 * When connected at 10Mbps half-duplex, some parts are excessively 10494 * aggressive resulting in many collisions. To avoid this, increase 10495 * the IPG and reduce Rx latency in the PHY. 10496 */ 10497 if ((sc->sc_type >= WM_T_PCH2) && (sc->sc_type <= WM_T_PCH_TGP) 10498 && link) { 10499 uint32_t tipg_reg; 10500 uint32_t speed = __SHIFTOUT(status, STATUS_SPEED); 10501 bool fdx; 10502 uint16_t emi_addr, emi_val; 10503 10504 tipg_reg = CSR_READ(sc, WMREG_TIPG); 10505 tipg_reg &= ~TIPG_IPGT_MASK; 10506 fdx = status & STATUS_FD; 10507 10508 if (!fdx && (speed == STATUS_SPEED_10)) { 10509 tipg_reg |= 0xff; 10510 /* Reduce Rx latency in analog PHY */ 10511 emi_val = 0; 10512 } else if ((sc->sc_type >= WM_T_PCH_SPT) && 10513 fdx && speed != STATUS_SPEED_1000) { 10514 tipg_reg |= 0xc; 10515 emi_val = 1; 10516 } else { 10517 /* Roll back the default values */ 10518 tipg_reg |= 0x08; 10519 emi_val = 1; 10520 } 10521 10522 CSR_WRITE(sc, WMREG_TIPG, tipg_reg); 10523 10524 rv = sc->phy.acquire(sc); 10525 if (rv) 10526 return; 10527 10528 if (sc->sc_type == WM_T_PCH2) 10529 emi_addr = I82579_RX_CONFIG; 10530 else 10531 emi_addr = I217_RX_CONFIG; 10532 rv = wm_write_emi_reg_locked(dev, emi_addr, emi_val); 10533 10534 if (sc->sc_type >= WM_T_PCH_LPT) { 10535 uint16_t phy_reg; 10536 10537 sc->phy.readreg_locked(dev, 2, 10538 I217_PLL_CLOCK_GATE_REG, &phy_reg); 10539 phy_reg &= ~I217_PLL_CLOCK_GATE_MASK; 10540 if (speed == STATUS_SPEED_100 10541 || speed == STATUS_SPEED_10) 10542 phy_reg |= 0x3e8; 10543 else 10544 phy_reg |= 0xfa; 10545 sc->phy.writereg_locked(dev, 2, 10546 I217_PLL_CLOCK_GATE_REG, phy_reg); 10547 10548 if (speed == STATUS_SPEED_1000) { 10549 sc->phy.readreg_locked(dev, 2, 10550 HV_PM_CTRL, &phy_reg); 10551 10552 phy_reg |= HV_PM_CTRL_K1_CLK_REQ; 10553 10554 sc->phy.writereg_locked(dev, 2, 10555 HV_PM_CTRL, phy_reg); 10556 } 10557 } 10558 sc->phy.release(sc); 10559 10560 if (rv) 10561 return; 10562 10563 if (sc->sc_type >= WM_T_PCH_SPT) { 10564 uint16_t data, ptr_gap; 10565 10566 if (speed == STATUS_SPEED_1000) { 10567 rv = sc->phy.acquire(sc); 10568 if (rv) 10569 return; 10570 10571 rv = sc->phy.readreg_locked(dev, 2, 10572 I82579_UNKNOWN1, &data); 10573 if (rv) { 10574 sc->phy.release(sc); 10575 return; 10576 } 10577 10578 ptr_gap = (data & (0x3ff << 2)) >> 2; 10579 if (ptr_gap < 0x18) { 10580 data &= ~(0x3ff << 2); 10581 data |= (0x18 << 2); 10582 rv = sc->phy.writereg_locked(dev, 10583 2, I82579_UNKNOWN1, data); 10584 } 10585 sc->phy.release(sc); 10586 if (rv) 10587 return; 10588 } else { 10589 rv = sc->phy.acquire(sc); 10590 if (rv) 10591 return; 10592 10593 rv = sc->phy.writereg_locked(dev, 2, 10594 I82579_UNKNOWN1, 0xc023); 10595 sc->phy.release(sc); 10596 if (rv) 10597 return; 10598 10599 } 10600 } 10601 } 10602 10603 /* 10604 * I217 Packet Loss issue: 10605 * ensure that FEXTNVM4 Beacon Duration is set correctly 10606 * on power up. 10607 * Set the Beacon Duration for I217 to 8 usec 10608 */ 10609 if (sc->sc_type >= WM_T_PCH_LPT) { 10610 reg = CSR_READ(sc, WMREG_FEXTNVM4); 10611 reg &= ~FEXTNVM4_BEACON_DURATION; 10612 reg |= FEXTNVM4_BEACON_DURATION_8US; 10613 CSR_WRITE(sc, WMREG_FEXTNVM4, reg); 10614 } 10615 10616 /* Work-around I218 hang issue */ 10617 if ((sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM) || 10618 (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V) || 10619 (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM3) || 10620 (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V3)) 10621 wm_k1_workaround_lpt_lp(sc, link); 10622 10623 if (sc->sc_type >= WM_T_PCH_LPT) { 10624 /* 10625 * Set platform power management values for Latency 10626 * Tolerance Reporting (LTR) 10627 */ 10628 wm_platform_pm_pch_lpt(sc, 10629 ((sc->sc_mii.mii_media_status & IFM_ACTIVE) != 0)); 10630 } 10631 10632 /* Clear link partner's EEE ability */ 10633 sc->eee_lp_ability = 0; 10634 10635 /* FEXTNVM6 K1-off workaround */ 10636 if (sc->sc_type == WM_T_PCH_SPT) { 10637 reg = CSR_READ(sc, WMREG_FEXTNVM6); 10638 if (CSR_READ(sc, WMREG_PCIEANACFG) & FEXTNVM6_K1_OFF_ENABLE) 10639 reg |= FEXTNVM6_K1_OFF_ENABLE; 10640 else 10641 reg &= ~FEXTNVM6_K1_OFF_ENABLE; 10642 CSR_WRITE(sc, WMREG_FEXTNVM6, reg); 10643 } 10644 10645 if (!link) 10646 return; 10647 10648 switch (sc->sc_type) { 10649 case WM_T_PCH2: 10650 wm_k1_workaround_lv(sc); 10651 /* FALLTHROUGH */ 10652 case WM_T_PCH: 10653 if (sc->sc_phytype == WMPHY_82578) 10654 wm_link_stall_workaround_hv(sc); 10655 break; 10656 default: 10657 break; 10658 } 10659 10660 /* Enable/Disable EEE after link up */ 10661 if (sc->sc_phytype > WMPHY_82579) 10662 wm_set_eee_pchlan(sc); 10663 } 10664 10665 /* 10666 * wm_linkintr_tbi: 10667 * 10668 * Helper; handle link interrupts for TBI mode. 10669 */ 10670 static void 10671 wm_linkintr_tbi(struct wm_softc *sc, uint32_t icr) 10672 { 10673 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 10674 uint32_t status; 10675 10676 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s:\n", device_xname(sc->sc_dev), 10677 __func__)); 10678 10679 status = CSR_READ(sc, WMREG_STATUS); 10680 if (icr & ICR_LSC) { 10681 wm_check_for_link(sc); 10682 if (status & STATUS_LU) { 10683 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> up %s\n", 10684 device_xname(sc->sc_dev), 10685 (status & STATUS_FD) ? "FDX" : "HDX")); 10686 /* 10687 * NOTE: CTRL will update TFCE and RFCE automatically, 10688 * so we should update sc->sc_ctrl 10689 */ 10690 10691 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL); 10692 sc->sc_tctl &= ~TCTL_COLD(0x3ff); 10693 sc->sc_fcrtl &= ~FCRTL_XONE; 10694 if (status & STATUS_FD) 10695 sc->sc_tctl |= 10696 TCTL_COLD(TX_COLLISION_DISTANCE_FDX); 10697 else 10698 sc->sc_tctl |= 10699 TCTL_COLD(TX_COLLISION_DISTANCE_HDX); 10700 if (sc->sc_ctrl & CTRL_TFCE) 10701 sc->sc_fcrtl |= FCRTL_XONE; 10702 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl); 10703 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ? 10704 WMREG_OLD_FCRTL : WMREG_FCRTL, sc->sc_fcrtl); 10705 sc->sc_tbi_linkup = 1; 10706 if_link_state_change(ifp, LINK_STATE_UP); 10707 } else { 10708 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n", 10709 device_xname(sc->sc_dev))); 10710 sc->sc_tbi_linkup = 0; 10711 if_link_state_change(ifp, LINK_STATE_DOWN); 10712 } 10713 /* Update LED */ 10714 wm_tbi_serdes_set_linkled(sc); 10715 } else if (icr & ICR_RXSEQ) 10716 DPRINTF(sc, WM_DEBUG_LINK, 10717 ("%s: LINK: Receive sequence error\n", 10718 device_xname(sc->sc_dev))); 10719 } 10720 10721 /* 10722 * wm_linkintr_serdes: 10723 * 10724 * Helper; handle link interrupts for TBI mode. 10725 */ 10726 static void 10727 wm_linkintr_serdes(struct wm_softc *sc, uint32_t icr) 10728 { 10729 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 10730 struct mii_data *mii = &sc->sc_mii; 10731 struct ifmedia_entry *ife = mii->mii_media.ifm_cur; 10732 uint32_t pcs_adv, pcs_lpab, reg; 10733 10734 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s:\n", device_xname(sc->sc_dev), 10735 __func__)); 10736 10737 if (icr & ICR_LSC) { 10738 /* Check PCS */ 10739 reg = CSR_READ(sc, WMREG_PCS_LSTS); 10740 if ((reg & PCS_LSTS_LINKOK) != 0) { 10741 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> up\n", 10742 device_xname(sc->sc_dev))); 10743 mii->mii_media_status |= IFM_ACTIVE; 10744 sc->sc_tbi_linkup = 1; 10745 if_link_state_change(ifp, LINK_STATE_UP); 10746 } else { 10747 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: LSC -> down\n", 10748 device_xname(sc->sc_dev))); 10749 mii->mii_media_status |= IFM_NONE; 10750 sc->sc_tbi_linkup = 0; 10751 if_link_state_change(ifp, LINK_STATE_DOWN); 10752 wm_tbi_serdes_set_linkled(sc); 10753 return; 10754 } 10755 mii->mii_media_active |= IFM_1000_SX; 10756 if ((reg & PCS_LSTS_FDX) != 0) 10757 mii->mii_media_active |= IFM_FDX; 10758 else 10759 mii->mii_media_active |= IFM_HDX; 10760 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) { 10761 /* Check flow */ 10762 reg = CSR_READ(sc, WMREG_PCS_LSTS); 10763 if ((reg & PCS_LSTS_AN_COMP) == 0) { 10764 DPRINTF(sc, WM_DEBUG_LINK, 10765 ("XXX LINKOK but not ACOMP\n")); 10766 return; 10767 } 10768 pcs_adv = CSR_READ(sc, WMREG_PCS_ANADV); 10769 pcs_lpab = CSR_READ(sc, WMREG_PCS_LPAB); 10770 DPRINTF(sc, WM_DEBUG_LINK, 10771 ("XXX AN result %08x, %08x\n", pcs_adv, pcs_lpab)); 10772 if ((pcs_adv & TXCW_SYM_PAUSE) 10773 && (pcs_lpab & TXCW_SYM_PAUSE)) { 10774 mii->mii_media_active |= IFM_FLOW 10775 | IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE; 10776 } else if (((pcs_adv & TXCW_SYM_PAUSE) == 0) 10777 && (pcs_adv & TXCW_ASYM_PAUSE) 10778 && (pcs_lpab & TXCW_SYM_PAUSE) 10779 && (pcs_lpab & TXCW_ASYM_PAUSE)) 10780 mii->mii_media_active |= IFM_FLOW 10781 | IFM_ETH_TXPAUSE; 10782 else if ((pcs_adv & TXCW_SYM_PAUSE) 10783 && (pcs_adv & TXCW_ASYM_PAUSE) 10784 && ((pcs_lpab & TXCW_SYM_PAUSE) == 0) 10785 && (pcs_lpab & TXCW_ASYM_PAUSE)) 10786 mii->mii_media_active |= IFM_FLOW 10787 | IFM_ETH_RXPAUSE; 10788 } 10789 /* Update LED */ 10790 wm_tbi_serdes_set_linkled(sc); 10791 } else 10792 DPRINTF(sc, WM_DEBUG_LINK, 10793 ("%s: LINK: Receive sequence error\n", 10794 device_xname(sc->sc_dev))); 10795 } 10796 10797 /* 10798 * wm_linkintr: 10799 * 10800 * Helper; handle link interrupts. 10801 */ 10802 static void 10803 wm_linkintr(struct wm_softc *sc, uint32_t icr) 10804 { 10805 10806 KASSERT(mutex_owned(sc->sc_core_lock)); 10807 10808 if (sc->sc_flags & WM_F_HAS_MII) 10809 wm_linkintr_gmii(sc, icr); 10810 else if ((sc->sc_mediatype == WM_MEDIATYPE_SERDES) 10811 && ((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211))) 10812 wm_linkintr_serdes(sc, icr); 10813 else 10814 wm_linkintr_tbi(sc, icr); 10815 } 10816 10817 10818 static inline void 10819 wm_sched_handle_queue(struct wm_softc *sc, struct wm_queue *wmq) 10820 { 10821 10822 if (wmq->wmq_txrx_use_workqueue) { 10823 if (!wmq->wmq_wq_enqueued) { 10824 wmq->wmq_wq_enqueued = true; 10825 workqueue_enqueue(sc->sc_queue_wq, &wmq->wmq_cookie, 10826 curcpu()); 10827 } 10828 } else 10829 softint_schedule(wmq->wmq_si); 10830 } 10831 10832 static inline void 10833 wm_legacy_intr_disable(struct wm_softc *sc) 10834 { 10835 10836 CSR_WRITE(sc, WMREG_IMC, 0xffffffffU); 10837 } 10838 10839 static inline void 10840 wm_legacy_intr_enable(struct wm_softc *sc) 10841 { 10842 10843 CSR_WRITE(sc, WMREG_IMS, sc->sc_icr); 10844 } 10845 10846 /* 10847 * wm_intr_legacy: 10848 * 10849 * Interrupt service routine for INTx and MSI. 10850 */ 10851 static int 10852 wm_intr_legacy(void *arg) 10853 { 10854 struct wm_softc *sc = arg; 10855 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 10856 struct wm_queue *wmq = &sc->sc_queue[0]; 10857 struct wm_txqueue *txq = &wmq->wmq_txq; 10858 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 10859 u_int txlimit = sc->sc_tx_intr_process_limit; 10860 u_int rxlimit = sc->sc_rx_intr_process_limit; 10861 uint32_t icr, rndval = 0; 10862 bool more = false; 10863 10864 icr = CSR_READ(sc, WMREG_ICR); 10865 if ((icr & sc->sc_icr) == 0) 10866 return 0; 10867 10868 DPRINTF(sc, WM_DEBUG_TX, 10869 ("%s: INTx: got intr\n",device_xname(sc->sc_dev))); 10870 if (rndval == 0) 10871 rndval = icr; 10872 10873 mutex_enter(txq->txq_lock); 10874 10875 if (txq->txq_stopping) { 10876 mutex_exit(txq->txq_lock); 10877 return 1; 10878 } 10879 10880 #if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS) 10881 if (icr & ICR_TXDW) { 10882 DPRINTF(sc, WM_DEBUG_TX, 10883 ("%s: TX: got TXDW interrupt\n", 10884 device_xname(sc->sc_dev))); 10885 WM_Q_EVCNT_INCR(txq, txdw); 10886 } 10887 #endif 10888 if (txlimit > 0) { 10889 more |= wm_txeof(txq, txlimit); 10890 if (!IF_IS_EMPTY(&ifp->if_snd)) 10891 more = true; 10892 } else 10893 more = true; 10894 mutex_exit(txq->txq_lock); 10895 10896 mutex_enter(rxq->rxq_lock); 10897 10898 if (rxq->rxq_stopping) { 10899 mutex_exit(rxq->rxq_lock); 10900 return 1; 10901 } 10902 10903 #if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS) 10904 if (icr & (ICR_RXDMT0 | ICR_RXT0)) { 10905 DPRINTF(sc, WM_DEBUG_RX, 10906 ("%s: RX: got Rx intr %#" __PRIxBIT "\n", 10907 device_xname(sc->sc_dev), 10908 icr & (ICR_RXDMT0 | ICR_RXT0))); 10909 WM_Q_EVCNT_INCR(rxq, intr); 10910 } 10911 #endif 10912 if (rxlimit > 0) { 10913 /* 10914 * wm_rxeof() does *not* call upper layer functions directly, 10915 * as if_percpuq_enqueue() just call softint_schedule(). 10916 * So, we can call wm_rxeof() in interrupt context. 10917 */ 10918 more = wm_rxeof(rxq, rxlimit); 10919 } else 10920 more = true; 10921 10922 mutex_exit(rxq->rxq_lock); 10923 10924 mutex_enter(sc->sc_core_lock); 10925 10926 if (sc->sc_core_stopping) { 10927 mutex_exit(sc->sc_core_lock); 10928 return 1; 10929 } 10930 10931 if (icr & (ICR_LSC | ICR_RXSEQ)) { 10932 WM_EVCNT_INCR(&sc->sc_ev_linkintr); 10933 wm_linkintr(sc, icr); 10934 } 10935 if ((icr & ICR_GPI(0)) != 0) 10936 device_printf(sc->sc_dev, "got module interrupt\n"); 10937 10938 mutex_exit(sc->sc_core_lock); 10939 10940 if (icr & ICR_RXO) { 10941 #if defined(WM_DEBUG) 10942 log(LOG_WARNING, "%s: Receive overrun\n", 10943 device_xname(sc->sc_dev)); 10944 #endif /* defined(WM_DEBUG) */ 10945 } 10946 10947 rnd_add_uint32(&sc->rnd_source, rndval); 10948 10949 if (more) { 10950 /* Try to get more packets going. */ 10951 wm_legacy_intr_disable(sc); 10952 wmq->wmq_txrx_use_workqueue = sc->sc_txrx_use_workqueue; 10953 wm_sched_handle_queue(sc, wmq); 10954 } 10955 10956 return 1; 10957 } 10958 10959 static inline void 10960 wm_txrxintr_disable(struct wm_queue *wmq) 10961 { 10962 struct wm_softc *sc = wmq->wmq_txq.txq_sc; 10963 10964 if (__predict_false(!wm_is_using_msix(sc))) { 10965 wm_legacy_intr_disable(sc); 10966 return; 10967 } 10968 10969 if (sc->sc_type == WM_T_82574) 10970 CSR_WRITE(sc, WMREG_IMC, 10971 ICR_TXQ(wmq->wmq_id) | ICR_RXQ(wmq->wmq_id)); 10972 else if (sc->sc_type == WM_T_82575) 10973 CSR_WRITE(sc, WMREG_EIMC, 10974 EITR_TX_QUEUE(wmq->wmq_id) | EITR_RX_QUEUE(wmq->wmq_id)); 10975 else 10976 CSR_WRITE(sc, WMREG_EIMC, 1 << wmq->wmq_intr_idx); 10977 } 10978 10979 static inline void 10980 wm_txrxintr_enable(struct wm_queue *wmq) 10981 { 10982 struct wm_softc *sc = wmq->wmq_txq.txq_sc; 10983 10984 wm_itrs_calculate(sc, wmq); 10985 10986 if (__predict_false(!wm_is_using_msix(sc))) { 10987 wm_legacy_intr_enable(sc); 10988 return; 10989 } 10990 10991 /* 10992 * ICR_OTHER which is disabled in wm_linkintr_msix() is enabled here. 10993 * There is no need to care about which of RXQ(0) and RXQ(1) enable 10994 * ICR_OTHER in first, because each RXQ/TXQ interrupt is disabled 10995 * while each wm_handle_queue(wmq) is runnig. 10996 */ 10997 if (sc->sc_type == WM_T_82574) 10998 CSR_WRITE(sc, WMREG_IMS, 10999 ICR_TXQ(wmq->wmq_id) | ICR_RXQ(wmq->wmq_id) | ICR_OTHER); 11000 else if (sc->sc_type == WM_T_82575) 11001 CSR_WRITE(sc, WMREG_EIMS, 11002 EITR_TX_QUEUE(wmq->wmq_id) | EITR_RX_QUEUE(wmq->wmq_id)); 11003 else 11004 CSR_WRITE(sc, WMREG_EIMS, 1 << wmq->wmq_intr_idx); 11005 } 11006 11007 static int 11008 wm_txrxintr_msix(void *arg) 11009 { 11010 struct wm_queue *wmq = arg; 11011 struct wm_txqueue *txq = &wmq->wmq_txq; 11012 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 11013 struct wm_softc *sc = txq->txq_sc; 11014 u_int txlimit = sc->sc_tx_intr_process_limit; 11015 u_int rxlimit = sc->sc_rx_intr_process_limit; 11016 bool txmore; 11017 bool rxmore; 11018 11019 KASSERT(wmq->wmq_intr_idx == wmq->wmq_id); 11020 11021 DPRINTF(sc, WM_DEBUG_TX, 11022 ("%s: TX: got Tx intr\n", device_xname(sc->sc_dev))); 11023 11024 wm_txrxintr_disable(wmq); 11025 11026 mutex_enter(txq->txq_lock); 11027 11028 if (txq->txq_stopping) { 11029 mutex_exit(txq->txq_lock); 11030 return 1; 11031 } 11032 11033 WM_Q_EVCNT_INCR(txq, txdw); 11034 if (txlimit > 0) { 11035 txmore = wm_txeof(txq, txlimit); 11036 /* wm_deferred start() is done in wm_handle_queue(). */ 11037 } else 11038 txmore = true; 11039 mutex_exit(txq->txq_lock); 11040 11041 DPRINTF(sc, WM_DEBUG_RX, 11042 ("%s: RX: got Rx intr\n", device_xname(sc->sc_dev))); 11043 mutex_enter(rxq->rxq_lock); 11044 11045 if (rxq->rxq_stopping) { 11046 mutex_exit(rxq->rxq_lock); 11047 return 1; 11048 } 11049 11050 WM_Q_EVCNT_INCR(rxq, intr); 11051 if (rxlimit > 0) { 11052 rxmore = wm_rxeof(rxq, rxlimit); 11053 } else 11054 rxmore = true; 11055 mutex_exit(rxq->rxq_lock); 11056 11057 wm_itrs_writereg(sc, wmq); 11058 11059 if (txmore || rxmore) { 11060 wmq->wmq_txrx_use_workqueue = sc->sc_txrx_use_workqueue; 11061 wm_sched_handle_queue(sc, wmq); 11062 } else 11063 wm_txrxintr_enable(wmq); 11064 11065 return 1; 11066 } 11067 11068 static void 11069 wm_handle_queue(void *arg) 11070 { 11071 struct wm_queue *wmq = arg; 11072 struct wm_txqueue *txq = &wmq->wmq_txq; 11073 struct wm_rxqueue *rxq = &wmq->wmq_rxq; 11074 struct wm_softc *sc = txq->txq_sc; 11075 u_int txlimit = sc->sc_tx_process_limit; 11076 u_int rxlimit = sc->sc_rx_process_limit; 11077 bool txmore; 11078 bool rxmore; 11079 11080 mutex_enter(txq->txq_lock); 11081 if (txq->txq_stopping) { 11082 mutex_exit(txq->txq_lock); 11083 return; 11084 } 11085 txmore = wm_txeof(txq, txlimit); 11086 wm_deferred_start_locked(txq); 11087 mutex_exit(txq->txq_lock); 11088 11089 mutex_enter(rxq->rxq_lock); 11090 if (rxq->rxq_stopping) { 11091 mutex_exit(rxq->rxq_lock); 11092 return; 11093 } 11094 WM_Q_EVCNT_INCR(rxq, defer); 11095 rxmore = wm_rxeof(rxq, rxlimit); 11096 mutex_exit(rxq->rxq_lock); 11097 11098 if (txmore || rxmore) { 11099 wmq->wmq_txrx_use_workqueue = sc->sc_txrx_use_workqueue; 11100 wm_sched_handle_queue(sc, wmq); 11101 } else 11102 wm_txrxintr_enable(wmq); 11103 } 11104 11105 static void 11106 wm_handle_queue_work(struct work *wk, void *context) 11107 { 11108 struct wm_queue *wmq = container_of(wk, struct wm_queue, wmq_cookie); 11109 11110 /* 11111 * Some qemu environment workaround. They don't stop interrupt 11112 * immediately. 11113 */ 11114 wmq->wmq_wq_enqueued = false; 11115 wm_handle_queue(wmq); 11116 } 11117 11118 /* 11119 * wm_linkintr_msix: 11120 * 11121 * Interrupt service routine for link status change for MSI-X. 11122 */ 11123 static int 11124 wm_linkintr_msix(void *arg) 11125 { 11126 struct wm_softc *sc = arg; 11127 uint32_t reg; 11128 bool has_rxo; 11129 11130 reg = CSR_READ(sc, WMREG_ICR); 11131 mutex_enter(sc->sc_core_lock); 11132 DPRINTF(sc, WM_DEBUG_LINK, 11133 ("%s: LINK: got link intr. ICR = %08x\n", 11134 device_xname(sc->sc_dev), reg)); 11135 11136 if (sc->sc_core_stopping) 11137 goto out; 11138 11139 if ((reg & ICR_LSC) != 0) { 11140 WM_EVCNT_INCR(&sc->sc_ev_linkintr); 11141 wm_linkintr(sc, ICR_LSC); 11142 } 11143 if ((reg & ICR_GPI(0)) != 0) 11144 device_printf(sc->sc_dev, "got module interrupt\n"); 11145 11146 /* 11147 * XXX 82574 MSI-X mode workaround 11148 * 11149 * 82574 MSI-X mode causes a receive overrun(RXO) interrupt as an 11150 * ICR_OTHER MSI-X vector; furthermore it causes neither ICR_RXQ(0) 11151 * nor ICR_RXQ(1) vectors. So, we generate ICR_RXQ(0) and ICR_RXQ(1) 11152 * interrupts by writing WMREG_ICS to process receive packets. 11153 */ 11154 if (sc->sc_type == WM_T_82574 && ((reg & ICR_RXO) != 0)) { 11155 #if defined(WM_DEBUG) 11156 log(LOG_WARNING, "%s: Receive overrun\n", 11157 device_xname(sc->sc_dev)); 11158 #endif /* defined(WM_DEBUG) */ 11159 11160 has_rxo = true; 11161 /* 11162 * The RXO interrupt is very high rate when receive traffic is 11163 * high rate. We use polling mode for ICR_OTHER like Tx/Rx 11164 * interrupts. ICR_OTHER will be enabled at the end of 11165 * wm_txrxintr_msix() which is kicked by both ICR_RXQ(0) and 11166 * ICR_RXQ(1) interrupts. 11167 */ 11168 CSR_WRITE(sc, WMREG_IMC, ICR_OTHER); 11169 11170 CSR_WRITE(sc, WMREG_ICS, ICR_RXQ(0) | ICR_RXQ(1)); 11171 } 11172 11173 11174 11175 out: 11176 mutex_exit(sc->sc_core_lock); 11177 11178 if (sc->sc_type == WM_T_82574) { 11179 if (!has_rxo) 11180 CSR_WRITE(sc, WMREG_IMS, ICR_OTHER | ICR_LSC); 11181 else 11182 CSR_WRITE(sc, WMREG_IMS, ICR_LSC); 11183 } else if (sc->sc_type == WM_T_82575) 11184 CSR_WRITE(sc, WMREG_EIMS, EITR_OTHER); 11185 else 11186 CSR_WRITE(sc, WMREG_EIMS, 1 << sc->sc_link_intr_idx); 11187 11188 return 1; 11189 } 11190 11191 /* 11192 * Media related. 11193 * GMII, SGMII, TBI (and SERDES) 11194 */ 11195 11196 /* Common */ 11197 11198 /* 11199 * wm_tbi_serdes_set_linkled: 11200 * 11201 * Update the link LED on TBI and SERDES devices. 11202 */ 11203 static void 11204 wm_tbi_serdes_set_linkled(struct wm_softc *sc) 11205 { 11206 11207 if (sc->sc_tbi_linkup) 11208 sc->sc_ctrl |= CTRL_SWDPIN(0); 11209 else 11210 sc->sc_ctrl &= ~CTRL_SWDPIN(0); 11211 11212 /* 82540 or newer devices are active low */ 11213 sc->sc_ctrl ^= (sc->sc_type >= WM_T_82540) ? CTRL_SWDPIN(0) : 0; 11214 11215 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11216 } 11217 11218 /* GMII related */ 11219 11220 /* 11221 * wm_gmii_reset: 11222 * 11223 * Reset the PHY. 11224 */ 11225 static void 11226 wm_gmii_reset(struct wm_softc *sc) 11227 { 11228 uint32_t reg; 11229 int rv; 11230 11231 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 11232 device_xname(sc->sc_dev), __func__)); 11233 11234 rv = sc->phy.acquire(sc); 11235 if (rv != 0) { 11236 aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n", 11237 __func__); 11238 return; 11239 } 11240 11241 switch (sc->sc_type) { 11242 case WM_T_82542_2_0: 11243 case WM_T_82542_2_1: 11244 /* null */ 11245 break; 11246 case WM_T_82543: 11247 /* 11248 * With 82543, we need to force speed and duplex on the MAC 11249 * equal to what the PHY speed and duplex configuration is. 11250 * In addition, we need to perform a hardware reset on the PHY 11251 * to take it out of reset. 11252 */ 11253 sc->sc_ctrl |= CTRL_FRCSPD | CTRL_FRCFDX; 11254 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11255 11256 /* The PHY reset pin is active-low. */ 11257 reg = CSR_READ(sc, WMREG_CTRL_EXT); 11258 reg &= ~((CTRL_EXT_SWDPIO_MASK << CTRL_EXT_SWDPIO_SHIFT) | 11259 CTRL_EXT_SWDPIN(4)); 11260 reg |= CTRL_EXT_SWDPIO(4); 11261 11262 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 11263 CSR_WRITE_FLUSH(sc); 11264 delay(10*1000); 11265 11266 CSR_WRITE(sc, WMREG_CTRL_EXT, reg | CTRL_EXT_SWDPIN(4)); 11267 CSR_WRITE_FLUSH(sc); 11268 delay(150); 11269 #if 0 11270 sc->sc_ctrl_ext = reg | CTRL_EXT_SWDPIN(4); 11271 #endif 11272 delay(20*1000); /* XXX extra delay to get PHY ID? */ 11273 break; 11274 case WM_T_82544: /* Reset 10000us */ 11275 case WM_T_82540: 11276 case WM_T_82545: 11277 case WM_T_82545_3: 11278 case WM_T_82546: 11279 case WM_T_82546_3: 11280 case WM_T_82541: 11281 case WM_T_82541_2: 11282 case WM_T_82547: 11283 case WM_T_82547_2: 11284 case WM_T_82571: /* Reset 100us */ 11285 case WM_T_82572: 11286 case WM_T_82573: 11287 case WM_T_82574: 11288 case WM_T_82575: 11289 case WM_T_82576: 11290 case WM_T_82580: 11291 case WM_T_I350: 11292 case WM_T_I354: 11293 case WM_T_I210: 11294 case WM_T_I211: 11295 case WM_T_82583: 11296 case WM_T_80003: 11297 /* Generic reset */ 11298 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET); 11299 CSR_WRITE_FLUSH(sc); 11300 delay(20000); 11301 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11302 CSR_WRITE_FLUSH(sc); 11303 delay(20000); 11304 11305 if ((sc->sc_type == WM_T_82541) 11306 || (sc->sc_type == WM_T_82541_2) 11307 || (sc->sc_type == WM_T_82547) 11308 || (sc->sc_type == WM_T_82547_2)) { 11309 /* Workaround for igp are done in igp_reset() */ 11310 /* XXX add code to set LED after phy reset */ 11311 } 11312 break; 11313 case WM_T_ICH8: 11314 case WM_T_ICH9: 11315 case WM_T_ICH10: 11316 case WM_T_PCH: 11317 case WM_T_PCH2: 11318 case WM_T_PCH_LPT: 11319 case WM_T_PCH_SPT: 11320 case WM_T_PCH_CNP: 11321 case WM_T_PCH_TGP: 11322 /* Generic reset */ 11323 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET); 11324 CSR_WRITE_FLUSH(sc); 11325 delay(100); 11326 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11327 CSR_WRITE_FLUSH(sc); 11328 delay(150); 11329 break; 11330 default: 11331 panic("%s: %s: unknown type\n", device_xname(sc->sc_dev), 11332 __func__); 11333 break; 11334 } 11335 11336 sc->phy.release(sc); 11337 11338 /* get_cfg_done */ 11339 wm_get_cfg_done(sc); 11340 11341 /* Extra setup */ 11342 switch (sc->sc_type) { 11343 case WM_T_82542_2_0: 11344 case WM_T_82542_2_1: 11345 case WM_T_82543: 11346 case WM_T_82544: 11347 case WM_T_82540: 11348 case WM_T_82545: 11349 case WM_T_82545_3: 11350 case WM_T_82546: 11351 case WM_T_82546_3: 11352 case WM_T_82541_2: 11353 case WM_T_82547_2: 11354 case WM_T_82571: 11355 case WM_T_82572: 11356 case WM_T_82573: 11357 case WM_T_82574: 11358 case WM_T_82583: 11359 case WM_T_82575: 11360 case WM_T_82576: 11361 case WM_T_82580: 11362 case WM_T_I350: 11363 case WM_T_I354: 11364 case WM_T_I210: 11365 case WM_T_I211: 11366 case WM_T_80003: 11367 /* Null */ 11368 break; 11369 case WM_T_82541: 11370 case WM_T_82547: 11371 /* XXX Configure actively LED after PHY reset */ 11372 break; 11373 case WM_T_ICH8: 11374 case WM_T_ICH9: 11375 case WM_T_ICH10: 11376 case WM_T_PCH: 11377 case WM_T_PCH2: 11378 case WM_T_PCH_LPT: 11379 case WM_T_PCH_SPT: 11380 case WM_T_PCH_CNP: 11381 case WM_T_PCH_TGP: 11382 wm_phy_post_reset(sc); 11383 break; 11384 default: 11385 panic("%s: unknown type\n", __func__); 11386 break; 11387 } 11388 } 11389 11390 /* 11391 * Set up sc_phytype and mii_{read|write}reg. 11392 * 11393 * To identify PHY type, correct read/write function should be selected. 11394 * To select correct read/write function, PCI ID or MAC type are required 11395 * without accessing PHY registers. 11396 * 11397 * On the first call of this function, PHY ID is not known yet. Check 11398 * PCI ID or MAC type. The list of the PCI ID may not be perfect, so the 11399 * result might be incorrect. 11400 * 11401 * In the second call, PHY OUI and model is used to identify PHY type. 11402 * It might not be perfect because of the lack of compared entry, but it 11403 * would be better than the first call. 11404 * 11405 * If the detected new result and previous assumption is different, 11406 * a diagnostic message will be printed. 11407 */ 11408 static void 11409 wm_gmii_setup_phytype(struct wm_softc *sc, uint32_t phy_oui, 11410 uint16_t phy_model) 11411 { 11412 device_t dev = sc->sc_dev; 11413 struct mii_data *mii = &sc->sc_mii; 11414 uint16_t new_phytype = WMPHY_UNKNOWN; 11415 uint16_t doubt_phytype = WMPHY_UNKNOWN; 11416 mii_readreg_t new_readreg; 11417 mii_writereg_t new_writereg; 11418 bool dodiag = true; 11419 11420 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 11421 device_xname(sc->sc_dev), __func__)); 11422 11423 /* 11424 * 1000BASE-T SFP uses SGMII and the first asumed PHY type is always 11425 * incorrect. So don't print diag output when it's 2nd call. 11426 */ 11427 if ((sc->sc_sfptype != 0) && (phy_oui == 0) && (phy_model == 0)) 11428 dodiag = false; 11429 11430 if (mii->mii_readreg == NULL) { 11431 /* 11432 * This is the first call of this function. For ICH and PCH 11433 * variants, it's difficult to determine the PHY access method 11434 * by sc_type, so use the PCI product ID for some devices. 11435 */ 11436 11437 switch (sc->sc_pcidevid) { 11438 case PCI_PRODUCT_INTEL_PCH_M_LM: 11439 case PCI_PRODUCT_INTEL_PCH_M_LC: 11440 /* 82577 */ 11441 new_phytype = WMPHY_82577; 11442 break; 11443 case PCI_PRODUCT_INTEL_PCH_D_DM: 11444 case PCI_PRODUCT_INTEL_PCH_D_DC: 11445 /* 82578 */ 11446 new_phytype = WMPHY_82578; 11447 break; 11448 case PCI_PRODUCT_INTEL_PCH2_LV_LM: 11449 case PCI_PRODUCT_INTEL_PCH2_LV_V: 11450 /* 82579 */ 11451 new_phytype = WMPHY_82579; 11452 break; 11453 case PCI_PRODUCT_INTEL_82801H_82567V_3: 11454 case PCI_PRODUCT_INTEL_82801I_BM: 11455 case PCI_PRODUCT_INTEL_82801I_IGP_M_AMT: /* Not IGP but BM */ 11456 case PCI_PRODUCT_INTEL_82801J_R_BM_LM: 11457 case PCI_PRODUCT_INTEL_82801J_R_BM_LF: 11458 case PCI_PRODUCT_INTEL_82801J_D_BM_LM: 11459 case PCI_PRODUCT_INTEL_82801J_D_BM_LF: 11460 case PCI_PRODUCT_INTEL_82801J_R_BM_V: 11461 /* ICH8, 9, 10 with 82567 */ 11462 new_phytype = WMPHY_BM; 11463 break; 11464 default: 11465 break; 11466 } 11467 } else { 11468 /* It's not the first call. Use PHY OUI and model */ 11469 switch (phy_oui) { 11470 case MII_OUI_ATTANSIC: /* atphy(4) */ 11471 switch (phy_model) { 11472 case MII_MODEL_ATTANSIC_AR8021: 11473 new_phytype = WMPHY_82578; 11474 break; 11475 default: 11476 break; 11477 } 11478 break; 11479 case MII_OUI_xxMARVELL: 11480 switch (phy_model) { 11481 case MII_MODEL_xxMARVELL_I210: 11482 new_phytype = WMPHY_I210; 11483 break; 11484 case MII_MODEL_xxMARVELL_E1011: 11485 case MII_MODEL_xxMARVELL_E1000_3: 11486 case MII_MODEL_xxMARVELL_E1000_5: 11487 case MII_MODEL_xxMARVELL_E1112: 11488 new_phytype = WMPHY_M88; 11489 break; 11490 case MII_MODEL_xxMARVELL_E1149: 11491 new_phytype = WMPHY_BM; 11492 break; 11493 case MII_MODEL_xxMARVELL_E1111: 11494 case MII_MODEL_xxMARVELL_I347: 11495 case MII_MODEL_xxMARVELL_E1512: 11496 case MII_MODEL_xxMARVELL_E1340M: 11497 case MII_MODEL_xxMARVELL_E1543: 11498 new_phytype = WMPHY_M88; 11499 break; 11500 case MII_MODEL_xxMARVELL_I82563: 11501 new_phytype = WMPHY_GG82563; 11502 break; 11503 default: 11504 break; 11505 } 11506 break; 11507 case MII_OUI_INTEL: 11508 switch (phy_model) { 11509 case MII_MODEL_INTEL_I82577: 11510 new_phytype = WMPHY_82577; 11511 break; 11512 case MII_MODEL_INTEL_I82579: 11513 new_phytype = WMPHY_82579; 11514 break; 11515 case MII_MODEL_INTEL_I217: 11516 new_phytype = WMPHY_I217; 11517 break; 11518 case MII_MODEL_INTEL_I82580: 11519 new_phytype = WMPHY_82580; 11520 break; 11521 case MII_MODEL_INTEL_I350: 11522 new_phytype = WMPHY_I350; 11523 break; 11524 default: 11525 break; 11526 } 11527 break; 11528 case MII_OUI_yyINTEL: 11529 switch (phy_model) { 11530 case MII_MODEL_yyINTEL_I82562G: 11531 case MII_MODEL_yyINTEL_I82562EM: 11532 case MII_MODEL_yyINTEL_I82562ET: 11533 new_phytype = WMPHY_IFE; 11534 break; 11535 case MII_MODEL_yyINTEL_IGP01E1000: 11536 new_phytype = WMPHY_IGP; 11537 break; 11538 case MII_MODEL_yyINTEL_I82566: 11539 new_phytype = WMPHY_IGP_3; 11540 break; 11541 default: 11542 break; 11543 } 11544 break; 11545 default: 11546 break; 11547 } 11548 11549 if (dodiag) { 11550 if (new_phytype == WMPHY_UNKNOWN) 11551 aprint_verbose_dev(dev, 11552 "%s: Unknown PHY model. OUI=%06x, " 11553 "model=%04x\n", __func__, phy_oui, 11554 phy_model); 11555 11556 if ((sc->sc_phytype != WMPHY_UNKNOWN) 11557 && (sc->sc_phytype != new_phytype)) { 11558 aprint_error_dev(dev, "Previously assumed PHY " 11559 "type(%u) was incorrect. PHY type from PHY" 11560 "ID = %u\n", sc->sc_phytype, new_phytype); 11561 } 11562 } 11563 } 11564 11565 /* Next, use sc->sc_flags and sc->sc_type to set read/write funcs. */ 11566 if (((sc->sc_flags & WM_F_SGMII) != 0) && !wm_sgmii_uses_mdio(sc)) { 11567 /* SGMII */ 11568 new_readreg = wm_sgmii_readreg; 11569 new_writereg = wm_sgmii_writereg; 11570 } else if ((sc->sc_type == WM_T_82574) || (sc->sc_type == WM_T_82583)){ 11571 /* BM2 (phyaddr == 1) */ 11572 if ((sc->sc_phytype != WMPHY_UNKNOWN) 11573 && (new_phytype != WMPHY_BM) 11574 && (new_phytype != WMPHY_UNKNOWN)) 11575 doubt_phytype = new_phytype; 11576 new_phytype = WMPHY_BM; 11577 new_readreg = wm_gmii_bm_readreg; 11578 new_writereg = wm_gmii_bm_writereg; 11579 } else if (sc->sc_type >= WM_T_PCH) { 11580 /* All PCH* use _hv_ */ 11581 new_readreg = wm_gmii_hv_readreg; 11582 new_writereg = wm_gmii_hv_writereg; 11583 } else if (sc->sc_type >= WM_T_ICH8) { 11584 /* non-82567 ICH8, 9 and 10 */ 11585 new_readreg = wm_gmii_i82544_readreg; 11586 new_writereg = wm_gmii_i82544_writereg; 11587 } else if (sc->sc_type >= WM_T_80003) { 11588 /* 80003 */ 11589 if ((sc->sc_phytype != WMPHY_UNKNOWN) 11590 && (new_phytype != WMPHY_GG82563) 11591 && (new_phytype != WMPHY_UNKNOWN)) 11592 doubt_phytype = new_phytype; 11593 new_phytype = WMPHY_GG82563; 11594 new_readreg = wm_gmii_i80003_readreg; 11595 new_writereg = wm_gmii_i80003_writereg; 11596 } else if (sc->sc_type >= WM_T_I210) { 11597 /* I210 and I211 */ 11598 if ((sc->sc_phytype != WMPHY_UNKNOWN) 11599 && (new_phytype != WMPHY_I210) 11600 && (new_phytype != WMPHY_UNKNOWN)) 11601 doubt_phytype = new_phytype; 11602 new_phytype = WMPHY_I210; 11603 new_readreg = wm_gmii_gs40g_readreg; 11604 new_writereg = wm_gmii_gs40g_writereg; 11605 } else if (sc->sc_type >= WM_T_82580) { 11606 /* 82580, I350 and I354 */ 11607 new_readreg = wm_gmii_82580_readreg; 11608 new_writereg = wm_gmii_82580_writereg; 11609 } else if (sc->sc_type >= WM_T_82544) { 11610 /* 82544, 0, [56], [17], 8257[1234] and 82583 */ 11611 new_readreg = wm_gmii_i82544_readreg; 11612 new_writereg = wm_gmii_i82544_writereg; 11613 } else { 11614 new_readreg = wm_gmii_i82543_readreg; 11615 new_writereg = wm_gmii_i82543_writereg; 11616 } 11617 11618 if (new_phytype == WMPHY_BM) { 11619 /* All BM use _bm_ */ 11620 new_readreg = wm_gmii_bm_readreg; 11621 new_writereg = wm_gmii_bm_writereg; 11622 } 11623 if ((sc->sc_type >= WM_T_PCH) && (sc->sc_type <= WM_T_PCH_TGP)) { 11624 /* All PCH* use _hv_ */ 11625 new_readreg = wm_gmii_hv_readreg; 11626 new_writereg = wm_gmii_hv_writereg; 11627 } 11628 11629 /* Diag output */ 11630 if (dodiag) { 11631 if (doubt_phytype != WMPHY_UNKNOWN) 11632 aprint_error_dev(dev, "Assumed new PHY type was " 11633 "incorrect. old = %u, new = %u\n", sc->sc_phytype, 11634 new_phytype); 11635 else if ((sc->sc_phytype != WMPHY_UNKNOWN) 11636 && (sc->sc_phytype != new_phytype)) 11637 aprint_error_dev(dev, "Previously assumed PHY type(%u)" 11638 "was incorrect. New PHY type = %u\n", 11639 sc->sc_phytype, new_phytype); 11640 11641 if ((mii->mii_readreg != NULL) && 11642 (new_phytype == WMPHY_UNKNOWN)) 11643 aprint_error_dev(dev, "PHY type is still unknown.\n"); 11644 11645 if ((mii->mii_readreg != NULL) && 11646 (mii->mii_readreg != new_readreg)) 11647 aprint_error_dev(dev, "Previously assumed PHY " 11648 "read/write function was incorrect.\n"); 11649 } 11650 11651 /* Update now */ 11652 sc->sc_phytype = new_phytype; 11653 mii->mii_readreg = new_readreg; 11654 mii->mii_writereg = new_writereg; 11655 if (new_readreg == wm_gmii_hv_readreg) { 11656 sc->phy.readreg_locked = wm_gmii_hv_readreg_locked; 11657 sc->phy.writereg_locked = wm_gmii_hv_writereg_locked; 11658 } else if (new_readreg == wm_sgmii_readreg) { 11659 sc->phy.readreg_locked = wm_sgmii_readreg_locked; 11660 sc->phy.writereg_locked = wm_sgmii_writereg_locked; 11661 } else if (new_readreg == wm_gmii_i82544_readreg) { 11662 sc->phy.readreg_locked = wm_gmii_i82544_readreg_locked; 11663 sc->phy.writereg_locked = wm_gmii_i82544_writereg_locked; 11664 } 11665 } 11666 11667 /* 11668 * wm_get_phy_id_82575: 11669 * 11670 * Return PHY ID. Return -1 if it failed. 11671 */ 11672 static int 11673 wm_get_phy_id_82575(struct wm_softc *sc) 11674 { 11675 uint32_t reg; 11676 int phyid = -1; 11677 11678 /* XXX */ 11679 if ((sc->sc_flags & WM_F_SGMII) == 0) 11680 return -1; 11681 11682 if (wm_sgmii_uses_mdio(sc)) { 11683 switch (sc->sc_type) { 11684 case WM_T_82575: 11685 case WM_T_82576: 11686 reg = CSR_READ(sc, WMREG_MDIC); 11687 phyid = (reg & MDIC_PHY_MASK) >> MDIC_PHY_SHIFT; 11688 break; 11689 case WM_T_82580: 11690 case WM_T_I350: 11691 case WM_T_I354: 11692 case WM_T_I210: 11693 case WM_T_I211: 11694 reg = CSR_READ(sc, WMREG_MDICNFG); 11695 phyid = (reg & MDICNFG_PHY_MASK) >> MDICNFG_PHY_SHIFT; 11696 break; 11697 default: 11698 return -1; 11699 } 11700 } 11701 11702 return phyid; 11703 } 11704 11705 /* 11706 * wm_gmii_mediainit: 11707 * 11708 * Initialize media for use on 1000BASE-T devices. 11709 */ 11710 static void 11711 wm_gmii_mediainit(struct wm_softc *sc, pci_product_id_t prodid) 11712 { 11713 device_t dev = sc->sc_dev; 11714 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 11715 struct mii_data *mii = &sc->sc_mii; 11716 11717 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s called\n", 11718 device_xname(sc->sc_dev), __func__)); 11719 11720 /* We have GMII. */ 11721 sc->sc_flags |= WM_F_HAS_MII; 11722 11723 if (sc->sc_type == WM_T_80003) 11724 sc->sc_tipg = TIPG_1000T_80003_DFLT; 11725 else 11726 sc->sc_tipg = TIPG_1000T_DFLT; 11727 11728 /* 11729 * Let the chip set speed/duplex on its own based on 11730 * signals from the PHY. 11731 * XXXbouyer - I'm not sure this is right for the 80003, 11732 * the em driver only sets CTRL_SLU here - but it seems to work. 11733 */ 11734 sc->sc_ctrl |= CTRL_SLU; 11735 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11736 11737 /* Initialize our media structures and probe the GMII. */ 11738 mii->mii_ifp = ifp; 11739 11740 mii->mii_statchg = wm_gmii_statchg; 11741 11742 /* get PHY control from SMBus to PCIe */ 11743 if ((sc->sc_type == WM_T_PCH) || (sc->sc_type == WM_T_PCH2) 11744 || (sc->sc_type == WM_T_PCH_LPT) || (sc->sc_type == WM_T_PCH_SPT) 11745 || (sc->sc_type == WM_T_PCH_CNP) || (sc->sc_type == WM_T_PCH_TGP)) 11746 wm_init_phy_workarounds_pchlan(sc); 11747 11748 wm_gmii_reset(sc); 11749 11750 sc->sc_ethercom.ec_mii = &sc->sc_mii; 11751 ifmedia_init_with_lock(&mii->mii_media, IFM_IMASK, wm_gmii_mediachange, 11752 wm_gmii_mediastatus, sc->sc_core_lock); 11753 11754 /* Setup internal SGMII PHY for SFP */ 11755 wm_sgmii_sfp_preconfig(sc); 11756 11757 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576) 11758 || (sc->sc_type == WM_T_82580) 11759 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I354) 11760 || (sc->sc_type == WM_T_I210) || (sc->sc_type == WM_T_I211)) { 11761 if ((sc->sc_flags & WM_F_SGMII) == 0) { 11762 /* Attach only one port */ 11763 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, 1, 11764 MII_OFFSET_ANY, MIIF_DOPAUSE); 11765 } else { 11766 int i, id; 11767 uint32_t ctrl_ext; 11768 11769 id = wm_get_phy_id_82575(sc); 11770 if (id != -1) { 11771 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, 11772 id, MII_OFFSET_ANY, MIIF_DOPAUSE); 11773 } 11774 if ((id == -1) 11775 || (LIST_FIRST(&mii->mii_phys) == NULL)) { 11776 /* Power on sgmii phy if it is disabled */ 11777 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT); 11778 CSR_WRITE(sc, WMREG_CTRL_EXT, 11779 ctrl_ext &~ CTRL_EXT_SWDPIN(3)); 11780 CSR_WRITE_FLUSH(sc); 11781 delay(300*1000); /* XXX too long */ 11782 11783 /* 11784 * From 1 to 8. 11785 * 11786 * I2C access fails with I2C register's ERROR 11787 * bit set, so prevent error message while 11788 * scanning. 11789 */ 11790 sc->phy.no_errprint = true; 11791 for (i = 1; i < 8; i++) 11792 mii_attach(sc->sc_dev, &sc->sc_mii, 11793 0xffffffff, i, MII_OFFSET_ANY, 11794 MIIF_DOPAUSE); 11795 sc->phy.no_errprint = false; 11796 11797 /* Restore previous sfp cage power state */ 11798 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext); 11799 } 11800 } 11801 } else 11802 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, 11803 MII_OFFSET_ANY, MIIF_DOPAUSE); 11804 11805 /* 11806 * If the MAC is PCH2 or PCH_LPT and failed to detect MII PHY, call 11807 * wm_set_mdio_slow_mode_hv() for a workaround and retry. 11808 */ 11809 if (((sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT) || 11810 (sc->sc_type == WM_T_PCH_SPT) || (sc->sc_type == WM_T_PCH_CNP) 11811 || (sc->sc_type == WM_T_PCH_TGP)) 11812 && (LIST_FIRST(&mii->mii_phys) == NULL)) { 11813 wm_set_mdio_slow_mode_hv(sc); 11814 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, 11815 MII_OFFSET_ANY, MIIF_DOPAUSE); 11816 } 11817 11818 /* 11819 * (For ICH8 variants) 11820 * If PHY detection failed, use BM's r/w function and retry. 11821 */ 11822 if (LIST_FIRST(&mii->mii_phys) == NULL) { 11823 /* if failed, retry with *_bm_* */ 11824 aprint_verbose_dev(dev, "Assumed PHY access function " 11825 "(type = %d) might be incorrect. Use BM and retry.\n", 11826 sc->sc_phytype); 11827 sc->sc_phytype = WMPHY_BM; 11828 mii->mii_readreg = wm_gmii_bm_readreg; 11829 mii->mii_writereg = wm_gmii_bm_writereg; 11830 11831 mii_attach(sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, 11832 MII_OFFSET_ANY, MIIF_DOPAUSE); 11833 } 11834 11835 if (LIST_FIRST(&mii->mii_phys) == NULL) { 11836 /* Any PHY wasn't found */ 11837 ifmedia_add(&mii->mii_media, IFM_ETHER | IFM_NONE, 0, NULL); 11838 ifmedia_set(&mii->mii_media, IFM_ETHER | IFM_NONE); 11839 sc->sc_phytype = WMPHY_NONE; 11840 } else { 11841 struct mii_softc *child = LIST_FIRST(&mii->mii_phys); 11842 11843 /* 11844 * PHY found! Check PHY type again by the second call of 11845 * wm_gmii_setup_phytype. 11846 */ 11847 wm_gmii_setup_phytype(sc, child->mii_mpd_oui, 11848 child->mii_mpd_model); 11849 11850 ifmedia_set(&mii->mii_media, IFM_ETHER | IFM_AUTO); 11851 } 11852 } 11853 11854 /* 11855 * wm_gmii_mediachange: [ifmedia interface function] 11856 * 11857 * Set hardware to newly-selected media on a 1000BASE-T device. 11858 */ 11859 static int 11860 wm_gmii_mediachange(struct ifnet *ifp) 11861 { 11862 struct wm_softc *sc = ifp->if_softc; 11863 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur; 11864 uint32_t reg; 11865 int rc; 11866 11867 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s called\n", 11868 device_xname(sc->sc_dev), __func__)); 11869 11870 KASSERT(mutex_owned(sc->sc_core_lock)); 11871 11872 if ((sc->sc_if_flags & IFF_UP) == 0) 11873 return 0; 11874 11875 /* XXX Not for I354? FreeBSD's e1000_82575.c doesn't include it */ 11876 if ((sc->sc_type == WM_T_82580) 11877 || (sc->sc_type == WM_T_I350) || (sc->sc_type == WM_T_I210) 11878 || (sc->sc_type == WM_T_I211)) { 11879 reg = CSR_READ(sc, WMREG_PHPM); 11880 reg &= ~PHPM_GO_LINK_D; 11881 CSR_WRITE(sc, WMREG_PHPM, reg); 11882 } 11883 11884 /* Disable D0 LPLU. */ 11885 wm_lplu_d0_disable(sc); 11886 11887 sc->sc_ctrl &= ~(CTRL_SPEED_MASK | CTRL_FD); 11888 sc->sc_ctrl |= CTRL_SLU; 11889 if ((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) 11890 || (sc->sc_type > WM_T_82543)) { 11891 sc->sc_ctrl &= ~(CTRL_FRCSPD | CTRL_FRCFDX); 11892 } else { 11893 sc->sc_ctrl &= ~CTRL_ASDE; 11894 sc->sc_ctrl |= CTRL_FRCSPD | CTRL_FRCFDX; 11895 if (ife->ifm_media & IFM_FDX) 11896 sc->sc_ctrl |= CTRL_FD; 11897 switch (IFM_SUBTYPE(ife->ifm_media)) { 11898 case IFM_10_T: 11899 sc->sc_ctrl |= CTRL_SPEED_10; 11900 break; 11901 case IFM_100_TX: 11902 sc->sc_ctrl |= CTRL_SPEED_100; 11903 break; 11904 case IFM_1000_T: 11905 sc->sc_ctrl |= CTRL_SPEED_1000; 11906 break; 11907 case IFM_NONE: 11908 /* There is no specific setting for IFM_NONE */ 11909 break; 11910 default: 11911 panic("wm_gmii_mediachange: bad media 0x%x", 11912 ife->ifm_media); 11913 } 11914 } 11915 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 11916 CSR_WRITE_FLUSH(sc); 11917 11918 if ((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211)) 11919 wm_serdes_mediachange(ifp); 11920 11921 if (sc->sc_type <= WM_T_82543) 11922 wm_gmii_reset(sc); 11923 else if ((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211) 11924 && ((sc->sc_flags & WM_F_SGMII) != 0)) { 11925 /* allow time for SFP cage time to power up phy */ 11926 delay(300 * 1000); 11927 wm_gmii_reset(sc); 11928 } 11929 11930 if ((rc = mii_mediachg(&sc->sc_mii)) == ENXIO) 11931 return 0; 11932 return rc; 11933 } 11934 11935 /* 11936 * wm_gmii_mediastatus: [ifmedia interface function] 11937 * 11938 * Get the current interface media status on a 1000BASE-T device. 11939 */ 11940 static void 11941 wm_gmii_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) 11942 { 11943 struct wm_softc *sc = ifp->if_softc; 11944 struct ethercom *ec = &sc->sc_ethercom; 11945 struct mii_data *mii; 11946 bool dopoll = true; 11947 11948 /* 11949 * In normal drivers, ether_mediastatus() is called here. 11950 * To avoid calling mii_pollstat(), ether_mediastatus() is open coded. 11951 */ 11952 KASSERT(mutex_owned(sc->sc_core_lock)); 11953 KASSERT(ec->ec_mii != NULL); 11954 KASSERT(mii_locked(ec->ec_mii)); 11955 11956 mii = ec->ec_mii; 11957 if ((sc->sc_flags & WM_F_DELAY_LINKUP) != 0) { 11958 struct timeval now; 11959 11960 getmicrotime(&now); 11961 if (timercmp(&now, &sc->sc_linkup_delay_time, <)) 11962 dopoll = false; 11963 else if (sc->sc_linkup_delay_time.tv_sec != 0) { 11964 /* Simplify by checking tv_sec only. It's enough. */ 11965 11966 sc->sc_linkup_delay_time.tv_sec = 0; 11967 sc->sc_linkup_delay_time.tv_usec = 0; 11968 } 11969 } 11970 11971 /* 11972 * Don't call mii_pollstat() while doing workaround. 11973 * See also wm_linkintr_gmii() and wm_tick(). 11974 */ 11975 if (dopoll) 11976 mii_pollstat(mii); 11977 ifmr->ifm_active = mii->mii_media_active; 11978 ifmr->ifm_status = mii->mii_media_status; 11979 11980 ifmr->ifm_active = (ifmr->ifm_active & ~IFM_ETH_FMASK) 11981 | sc->sc_flowflags; 11982 } 11983 11984 #define MDI_IO CTRL_SWDPIN(2) 11985 #define MDI_DIR CTRL_SWDPIO(2) /* host -> PHY */ 11986 #define MDI_CLK CTRL_SWDPIN(3) 11987 11988 static void 11989 wm_i82543_mii_sendbits(struct wm_softc *sc, uint32_t data, int nbits) 11990 { 11991 uint32_t i, v; 11992 11993 v = CSR_READ(sc, WMREG_CTRL); 11994 v &= ~(MDI_IO | MDI_CLK | (CTRL_SWDPIO_MASK << CTRL_SWDPIO_SHIFT)); 11995 v |= MDI_DIR | CTRL_SWDPIO(3); 11996 11997 for (i = __BIT(nbits - 1); i != 0; i >>= 1) { 11998 if (data & i) 11999 v |= MDI_IO; 12000 else 12001 v &= ~MDI_IO; 12002 CSR_WRITE(sc, WMREG_CTRL, v); 12003 CSR_WRITE_FLUSH(sc); 12004 delay(10); 12005 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK); 12006 CSR_WRITE_FLUSH(sc); 12007 delay(10); 12008 CSR_WRITE(sc, WMREG_CTRL, v); 12009 CSR_WRITE_FLUSH(sc); 12010 delay(10); 12011 } 12012 } 12013 12014 static uint16_t 12015 wm_i82543_mii_recvbits(struct wm_softc *sc) 12016 { 12017 uint32_t v, i; 12018 uint16_t data = 0; 12019 12020 v = CSR_READ(sc, WMREG_CTRL); 12021 v &= ~(MDI_IO | MDI_CLK | (CTRL_SWDPIO_MASK << CTRL_SWDPIO_SHIFT)); 12022 v |= CTRL_SWDPIO(3); 12023 12024 CSR_WRITE(sc, WMREG_CTRL, v); 12025 CSR_WRITE_FLUSH(sc); 12026 delay(10); 12027 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK); 12028 CSR_WRITE_FLUSH(sc); 12029 delay(10); 12030 CSR_WRITE(sc, WMREG_CTRL, v); 12031 CSR_WRITE_FLUSH(sc); 12032 delay(10); 12033 12034 for (i = 0; i < 16; i++) { 12035 data <<= 1; 12036 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK); 12037 CSR_WRITE_FLUSH(sc); 12038 delay(10); 12039 if (CSR_READ(sc, WMREG_CTRL) & MDI_IO) 12040 data |= 1; 12041 CSR_WRITE(sc, WMREG_CTRL, v); 12042 CSR_WRITE_FLUSH(sc); 12043 delay(10); 12044 } 12045 12046 CSR_WRITE(sc, WMREG_CTRL, v | MDI_CLK); 12047 CSR_WRITE_FLUSH(sc); 12048 delay(10); 12049 CSR_WRITE(sc, WMREG_CTRL, v); 12050 CSR_WRITE_FLUSH(sc); 12051 delay(10); 12052 12053 return data; 12054 } 12055 12056 #undef MDI_IO 12057 #undef MDI_DIR 12058 #undef MDI_CLK 12059 12060 /* 12061 * wm_gmii_i82543_readreg: [mii interface function] 12062 * 12063 * Read a PHY register on the GMII (i82543 version). 12064 */ 12065 static int 12066 wm_gmii_i82543_readreg(device_t dev, int phy, int reg, uint16_t *val) 12067 { 12068 struct wm_softc *sc = device_private(dev); 12069 12070 wm_i82543_mii_sendbits(sc, 0xffffffffU, 32); 12071 wm_i82543_mii_sendbits(sc, reg | (phy << 5) | 12072 (MII_COMMAND_READ << 10) | (MII_COMMAND_START << 12), 14); 12073 *val = wm_i82543_mii_recvbits(sc) & 0xffff; 12074 12075 DPRINTF(sc, WM_DEBUG_GMII, 12076 ("%s: GMII: read phy %d reg %d -> 0x%04hx\n", 12077 device_xname(dev), phy, reg, *val)); 12078 12079 return 0; 12080 } 12081 12082 /* 12083 * wm_gmii_i82543_writereg: [mii interface function] 12084 * 12085 * Write a PHY register on the GMII (i82543 version). 12086 */ 12087 static int 12088 wm_gmii_i82543_writereg(device_t dev, int phy, int reg, uint16_t val) 12089 { 12090 struct wm_softc *sc = device_private(dev); 12091 12092 wm_i82543_mii_sendbits(sc, 0xffffffffU, 32); 12093 wm_i82543_mii_sendbits(sc, val | (MII_COMMAND_ACK << 16) | 12094 (reg << 18) | (phy << 23) | (MII_COMMAND_WRITE << 28) | 12095 (MII_COMMAND_START << 30), 32); 12096 12097 return 0; 12098 } 12099 12100 /* 12101 * wm_gmii_mdic_readreg: [mii interface function] 12102 * 12103 * Read a PHY register on the GMII. 12104 */ 12105 static int 12106 wm_gmii_mdic_readreg(device_t dev, int phy, int reg, uint16_t *val) 12107 { 12108 struct wm_softc *sc = device_private(dev); 12109 uint32_t mdic = 0; 12110 int i; 12111 12112 if ((sc->sc_phytype != WMPHY_82579) && (sc->sc_phytype != WMPHY_I217) 12113 && (reg > MII_ADDRMASK)) { 12114 device_printf(dev, "%s: PHYTYPE = %d, addr 0x%x > 0x1f\n", 12115 __func__, sc->sc_phytype, reg); 12116 reg &= MII_ADDRMASK; 12117 } 12118 12119 CSR_WRITE(sc, WMREG_MDIC, MDIC_OP_READ | MDIC_PHYADD(phy) | 12120 MDIC_REGADD(reg)); 12121 12122 for (i = 0; i < WM_GEN_POLL_TIMEOUT * 3; i++) { 12123 delay(50); 12124 mdic = CSR_READ(sc, WMREG_MDIC); 12125 if (mdic & MDIC_READY) 12126 break; 12127 } 12128 12129 if ((mdic & MDIC_READY) == 0) { 12130 DPRINTF(sc, WM_DEBUG_GMII, 12131 ("%s: MDIC read timed out: phy %d reg %d\n", 12132 device_xname(dev), phy, reg)); 12133 return ETIMEDOUT; 12134 } else if (mdic & MDIC_E) { 12135 /* This is normal if no PHY is present. */ 12136 DPRINTF(sc, WM_DEBUG_GMII, 12137 ("%s: MDIC read error: phy %d reg %d\n", 12138 device_xname(sc->sc_dev), phy, reg)); 12139 return -1; 12140 } else 12141 *val = MDIC_DATA(mdic); 12142 12143 /* 12144 * Allow some time after each MDIC transaction to avoid 12145 * reading duplicate data in the next MDIC transaction. 12146 */ 12147 if (sc->sc_type == WM_T_PCH2) 12148 delay(100); 12149 12150 return 0; 12151 } 12152 12153 /* 12154 * wm_gmii_mdic_writereg: [mii interface function] 12155 * 12156 * Write a PHY register on the GMII. 12157 */ 12158 static int 12159 wm_gmii_mdic_writereg(device_t dev, int phy, int reg, uint16_t val) 12160 { 12161 struct wm_softc *sc = device_private(dev); 12162 uint32_t mdic = 0; 12163 int i; 12164 12165 if ((sc->sc_phytype != WMPHY_82579) && (sc->sc_phytype != WMPHY_I217) 12166 && (reg > MII_ADDRMASK)) { 12167 device_printf(dev, "%s: PHYTYPE = %d, addr 0x%x > 0x1f\n", 12168 __func__, sc->sc_phytype, reg); 12169 reg &= MII_ADDRMASK; 12170 } 12171 12172 CSR_WRITE(sc, WMREG_MDIC, MDIC_OP_WRITE | MDIC_PHYADD(phy) | 12173 MDIC_REGADD(reg) | MDIC_DATA(val)); 12174 12175 for (i = 0; i < WM_GEN_POLL_TIMEOUT * 3; i++) { 12176 delay(50); 12177 mdic = CSR_READ(sc, WMREG_MDIC); 12178 if (mdic & MDIC_READY) 12179 break; 12180 } 12181 12182 if ((mdic & MDIC_READY) == 0) { 12183 DPRINTF(sc, WM_DEBUG_GMII, 12184 ("%s: MDIC write timed out: phy %d reg %d\n", 12185 device_xname(dev), phy, reg)); 12186 return ETIMEDOUT; 12187 } else if (mdic & MDIC_E) { 12188 DPRINTF(sc, WM_DEBUG_GMII, 12189 ("%s: MDIC write error: phy %d reg %d\n", 12190 device_xname(dev), phy, reg)); 12191 return -1; 12192 } 12193 12194 /* 12195 * Allow some time after each MDIC transaction to avoid 12196 * reading duplicate data in the next MDIC transaction. 12197 */ 12198 if (sc->sc_type == WM_T_PCH2) 12199 delay(100); 12200 12201 return 0; 12202 } 12203 12204 /* 12205 * wm_gmii_i82544_readreg: [mii interface function] 12206 * 12207 * Read a PHY register on the GMII. 12208 */ 12209 static int 12210 wm_gmii_i82544_readreg(device_t dev, int phy, int reg, uint16_t *val) 12211 { 12212 struct wm_softc *sc = device_private(dev); 12213 int rv; 12214 12215 rv = sc->phy.acquire(sc); 12216 if (rv != 0) { 12217 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12218 return rv; 12219 } 12220 12221 rv = wm_gmii_i82544_readreg_locked(dev, phy, reg, val); 12222 12223 sc->phy.release(sc); 12224 12225 return rv; 12226 } 12227 12228 static int 12229 wm_gmii_i82544_readreg_locked(device_t dev, int phy, int reg, uint16_t *val) 12230 { 12231 struct wm_softc *sc = device_private(dev); 12232 int rv; 12233 12234 switch (sc->sc_phytype) { 12235 case WMPHY_IGP: 12236 case WMPHY_IGP_2: 12237 case WMPHY_IGP_3: 12238 if (reg > BME1000_MAX_MULTI_PAGE_REG) { 12239 rv = wm_gmii_mdic_writereg(dev, phy, 12240 IGPHY_PAGE_SELECT, reg); 12241 if (rv != 0) 12242 return rv; 12243 } 12244 break; 12245 default: 12246 #ifdef WM_DEBUG 12247 if ((reg >> MII_ADDRBITS) != 0) 12248 device_printf(dev, 12249 "%s: PHYTYPE = 0x%x, addr = 0x%02x\n", 12250 __func__, sc->sc_phytype, reg); 12251 #endif 12252 break; 12253 } 12254 12255 return wm_gmii_mdic_readreg(dev, phy, reg & MII_ADDRMASK, val); 12256 } 12257 12258 /* 12259 * wm_gmii_i82544_writereg: [mii interface function] 12260 * 12261 * Write a PHY register on the GMII. 12262 */ 12263 static int 12264 wm_gmii_i82544_writereg(device_t dev, int phy, int reg, uint16_t val) 12265 { 12266 struct wm_softc *sc = device_private(dev); 12267 int rv; 12268 12269 rv = sc->phy.acquire(sc); 12270 if (rv != 0) { 12271 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12272 return rv; 12273 } 12274 12275 rv = wm_gmii_i82544_writereg_locked(dev, phy, reg & MII_ADDRMASK, val); 12276 sc->phy.release(sc); 12277 12278 return rv; 12279 } 12280 12281 static int 12282 wm_gmii_i82544_writereg_locked(device_t dev, int phy, int reg, uint16_t val) 12283 { 12284 struct wm_softc *sc = device_private(dev); 12285 int rv; 12286 12287 switch (sc->sc_phytype) { 12288 case WMPHY_IGP: 12289 case WMPHY_IGP_2: 12290 case WMPHY_IGP_3: 12291 if (reg > BME1000_MAX_MULTI_PAGE_REG) { 12292 rv = wm_gmii_mdic_writereg(dev, phy, 12293 IGPHY_PAGE_SELECT, reg); 12294 if (rv != 0) 12295 return rv; 12296 } 12297 break; 12298 default: 12299 #ifdef WM_DEBUG 12300 if ((reg >> MII_ADDRBITS) != 0) 12301 device_printf(dev, 12302 "%s: PHYTYPE == 0x%x, addr = 0x%02x", 12303 __func__, sc->sc_phytype, reg); 12304 #endif 12305 break; 12306 } 12307 12308 return wm_gmii_mdic_writereg(dev, phy, reg & MII_ADDRMASK, val); 12309 } 12310 12311 /* 12312 * wm_gmii_i80003_readreg: [mii interface function] 12313 * 12314 * Read a PHY register on the kumeran 12315 * This could be handled by the PHY layer if we didn't have to lock the 12316 * resource ... 12317 */ 12318 static int 12319 wm_gmii_i80003_readreg(device_t dev, int phy, int reg, uint16_t *val) 12320 { 12321 struct wm_softc *sc = device_private(dev); 12322 int page_select; 12323 uint16_t temp, temp2; 12324 int rv; 12325 12326 if (phy != 1) /* Only one PHY on kumeran bus */ 12327 return -1; 12328 12329 rv = sc->phy.acquire(sc); 12330 if (rv != 0) { 12331 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12332 return rv; 12333 } 12334 12335 if ((reg & MII_ADDRMASK) < GG82563_MIN_ALT_REG) 12336 page_select = GG82563_PHY_PAGE_SELECT; 12337 else { 12338 /* 12339 * Use Alternative Page Select register to access registers 12340 * 30 and 31. 12341 */ 12342 page_select = GG82563_PHY_PAGE_SELECT_ALT; 12343 } 12344 temp = reg >> GG82563_PAGE_SHIFT; 12345 if ((rv = wm_gmii_mdic_writereg(dev, phy, page_select, temp)) != 0) 12346 goto out; 12347 12348 if ((sc->sc_flags & WM_F_80003_MDIC_WA) != 0) { 12349 /* 12350 * Wait more 200us for a bug of the ready bit in the MDIC 12351 * register. 12352 */ 12353 delay(200); 12354 rv = wm_gmii_mdic_readreg(dev, phy, page_select, &temp2); 12355 if ((rv != 0) || (temp2 != temp)) { 12356 device_printf(dev, "%s failed\n", __func__); 12357 rv = -1; 12358 goto out; 12359 } 12360 delay(200); 12361 rv = wm_gmii_mdic_readreg(dev, phy, reg & MII_ADDRMASK, val); 12362 delay(200); 12363 } else 12364 rv = wm_gmii_mdic_readreg(dev, phy, reg & MII_ADDRMASK, val); 12365 12366 out: 12367 sc->phy.release(sc); 12368 return rv; 12369 } 12370 12371 /* 12372 * wm_gmii_i80003_writereg: [mii interface function] 12373 * 12374 * Write a PHY register on the kumeran. 12375 * This could be handled by the PHY layer if we didn't have to lock the 12376 * resource ... 12377 */ 12378 static int 12379 wm_gmii_i80003_writereg(device_t dev, int phy, int reg, uint16_t val) 12380 { 12381 struct wm_softc *sc = device_private(dev); 12382 int page_select, rv; 12383 uint16_t temp, temp2; 12384 12385 if (phy != 1) /* Only one PHY on kumeran bus */ 12386 return -1; 12387 12388 rv = sc->phy.acquire(sc); 12389 if (rv != 0) { 12390 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12391 return rv; 12392 } 12393 12394 if ((reg & MII_ADDRMASK) < GG82563_MIN_ALT_REG) 12395 page_select = GG82563_PHY_PAGE_SELECT; 12396 else { 12397 /* 12398 * Use Alternative Page Select register to access registers 12399 * 30 and 31. 12400 */ 12401 page_select = GG82563_PHY_PAGE_SELECT_ALT; 12402 } 12403 temp = (uint16_t)reg >> GG82563_PAGE_SHIFT; 12404 if ((rv = wm_gmii_mdic_writereg(dev, phy, page_select, temp)) != 0) 12405 goto out; 12406 12407 if ((sc->sc_flags & WM_F_80003_MDIC_WA) != 0) { 12408 /* 12409 * Wait more 200us for a bug of the ready bit in the MDIC 12410 * register. 12411 */ 12412 delay(200); 12413 rv = wm_gmii_mdic_readreg(dev, phy, page_select, &temp2); 12414 if ((rv != 0) || (temp2 != temp)) { 12415 device_printf(dev, "%s failed\n", __func__); 12416 rv = -1; 12417 goto out; 12418 } 12419 delay(200); 12420 rv = wm_gmii_mdic_writereg(dev, phy, reg & MII_ADDRMASK, val); 12421 delay(200); 12422 } else 12423 rv = wm_gmii_mdic_writereg(dev, phy, reg & MII_ADDRMASK, val); 12424 12425 out: 12426 sc->phy.release(sc); 12427 return rv; 12428 } 12429 12430 /* 12431 * wm_gmii_bm_readreg: [mii interface function] 12432 * 12433 * Read a PHY register on the kumeran 12434 * This could be handled by the PHY layer if we didn't have to lock the 12435 * resource ... 12436 */ 12437 static int 12438 wm_gmii_bm_readreg(device_t dev, int phy, int reg, uint16_t *val) 12439 { 12440 struct wm_softc *sc = device_private(dev); 12441 uint16_t page = reg >> BME1000_PAGE_SHIFT; 12442 int rv; 12443 12444 rv = sc->phy.acquire(sc); 12445 if (rv != 0) { 12446 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12447 return rv; 12448 } 12449 12450 if ((sc->sc_type != WM_T_82574) && (sc->sc_type != WM_T_82583)) 12451 phy = ((page >= 768) || ((page == 0) && (reg == 25)) 12452 || (reg == 31)) ? 1 : phy; 12453 /* Page 800 works differently than the rest so it has its own func */ 12454 if (page == BM_WUC_PAGE) { 12455 rv = wm_access_phy_wakeup_reg_bm(dev, reg, val, true, false); 12456 goto release; 12457 } 12458 12459 if (reg > BME1000_MAX_MULTI_PAGE_REG) { 12460 if ((phy == 1) && (sc->sc_type != WM_T_82574) 12461 && (sc->sc_type != WM_T_82583)) 12462 rv = wm_gmii_mdic_writereg(dev, phy, 12463 IGPHY_PAGE_SELECT, page << BME1000_PAGE_SHIFT); 12464 else 12465 rv = wm_gmii_mdic_writereg(dev, phy, 12466 BME1000_PHY_PAGE_SELECT, page); 12467 if (rv != 0) 12468 goto release; 12469 } 12470 12471 rv = wm_gmii_mdic_readreg(dev, phy, reg & MII_ADDRMASK, val); 12472 12473 release: 12474 sc->phy.release(sc); 12475 return rv; 12476 } 12477 12478 /* 12479 * wm_gmii_bm_writereg: [mii interface function] 12480 * 12481 * Write a PHY register on the kumeran. 12482 * This could be handled by the PHY layer if we didn't have to lock the 12483 * resource ... 12484 */ 12485 static int 12486 wm_gmii_bm_writereg(device_t dev, int phy, int reg, uint16_t val) 12487 { 12488 struct wm_softc *sc = device_private(dev); 12489 uint16_t page = reg >> BME1000_PAGE_SHIFT; 12490 int rv; 12491 12492 rv = sc->phy.acquire(sc); 12493 if (rv != 0) { 12494 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12495 return rv; 12496 } 12497 12498 if ((sc->sc_type != WM_T_82574) && (sc->sc_type != WM_T_82583)) 12499 phy = ((page >= 768) || ((page == 0) && (reg == 25)) 12500 || (reg == 31)) ? 1 : phy; 12501 /* Page 800 works differently than the rest so it has its own func */ 12502 if (page == BM_WUC_PAGE) { 12503 rv = wm_access_phy_wakeup_reg_bm(dev, reg, &val, false, false); 12504 goto release; 12505 } 12506 12507 if (reg > BME1000_MAX_MULTI_PAGE_REG) { 12508 if ((phy == 1) && (sc->sc_type != WM_T_82574) 12509 && (sc->sc_type != WM_T_82583)) 12510 rv = wm_gmii_mdic_writereg(dev, phy, 12511 IGPHY_PAGE_SELECT, page << BME1000_PAGE_SHIFT); 12512 else 12513 rv = wm_gmii_mdic_writereg(dev, phy, 12514 BME1000_PHY_PAGE_SELECT, page); 12515 if (rv != 0) 12516 goto release; 12517 } 12518 12519 rv = wm_gmii_mdic_writereg(dev, phy, reg & MII_ADDRMASK, val); 12520 12521 release: 12522 sc->phy.release(sc); 12523 return rv; 12524 } 12525 12526 /* 12527 * wm_enable_phy_wakeup_reg_access_bm - enable access to BM wakeup registers 12528 * @dev: pointer to the HW structure 12529 * @phy_reg: pointer to store original contents of BM_WUC_ENABLE_REG 12530 * 12531 * Assumes semaphore already acquired and phy_reg points to a valid memory 12532 * address to store contents of the BM_WUC_ENABLE_REG register. 12533 */ 12534 static int 12535 wm_enable_phy_wakeup_reg_access_bm(device_t dev, uint16_t *phy_regp) 12536 { 12537 #ifdef WM_DEBUG 12538 struct wm_softc *sc = device_private(dev); 12539 #endif 12540 uint16_t temp; 12541 int rv; 12542 12543 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 12544 device_xname(dev), __func__)); 12545 12546 if (!phy_regp) 12547 return -1; 12548 12549 /* All page select, port ctrl and wakeup registers use phy address 1 */ 12550 12551 /* Select Port Control Registers page */ 12552 rv = wm_gmii_mdic_writereg(dev, 1, IGPHY_PAGE_SELECT, 12553 BM_PORT_CTRL_PAGE << IGP3_PAGE_SHIFT); 12554 if (rv != 0) 12555 return rv; 12556 12557 /* Read WUCE and save it */ 12558 rv = wm_gmii_mdic_readreg(dev, 1, BM_WUC_ENABLE_REG, phy_regp); 12559 if (rv != 0) 12560 return rv; 12561 12562 /* Enable both PHY wakeup mode and Wakeup register page writes. 12563 * Prevent a power state change by disabling ME and Host PHY wakeup. 12564 */ 12565 temp = *phy_regp; 12566 temp |= BM_WUC_ENABLE_BIT; 12567 temp &= ~(BM_WUC_ME_WU_BIT | BM_WUC_HOST_WU_BIT); 12568 12569 if ((rv = wm_gmii_mdic_writereg(dev, 1, BM_WUC_ENABLE_REG, temp)) != 0) 12570 return rv; 12571 12572 /* Select Host Wakeup Registers page - caller now able to write 12573 * registers on the Wakeup registers page 12574 */ 12575 return wm_gmii_mdic_writereg(dev, 1, IGPHY_PAGE_SELECT, 12576 BM_WUC_PAGE << IGP3_PAGE_SHIFT); 12577 } 12578 12579 /* 12580 * wm_disable_phy_wakeup_reg_access_bm - disable access to BM wakeup regs 12581 * @dev: pointer to the HW structure 12582 * @phy_reg: pointer to original contents of BM_WUC_ENABLE_REG 12583 * 12584 * Restore BM_WUC_ENABLE_REG to its original value. 12585 * 12586 * Assumes semaphore already acquired and *phy_reg is the contents of the 12587 * BM_WUC_ENABLE_REG before register(s) on BM_WUC_PAGE were accessed by 12588 * caller. 12589 */ 12590 static int 12591 wm_disable_phy_wakeup_reg_access_bm(device_t dev, uint16_t *phy_regp) 12592 { 12593 #ifdef WM_DEBUG 12594 struct wm_softc *sc = device_private(dev); 12595 #endif 12596 12597 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 12598 device_xname(dev), __func__)); 12599 12600 if (!phy_regp) 12601 return -1; 12602 12603 /* Select Port Control Registers page */ 12604 wm_gmii_mdic_writereg(dev, 1, IGPHY_PAGE_SELECT, 12605 BM_PORT_CTRL_PAGE << IGP3_PAGE_SHIFT); 12606 12607 /* Restore 769.17 to its original value */ 12608 wm_gmii_mdic_writereg(dev, 1, BM_WUC_ENABLE_REG, *phy_regp); 12609 12610 return 0; 12611 } 12612 12613 /* 12614 * wm_access_phy_wakeup_reg_bm - Read/write BM PHY wakeup register 12615 * @sc: pointer to the HW structure 12616 * @offset: register offset to be read or written 12617 * @val: pointer to the data to read or write 12618 * @rd: determines if operation is read or write 12619 * @page_set: BM_WUC_PAGE already set and access enabled 12620 * 12621 * Read the PHY register at offset and store the retrieved information in 12622 * data, or write data to PHY register at offset. Note the procedure to 12623 * access the PHY wakeup registers is different than reading the other PHY 12624 * registers. It works as such: 12625 * 1) Set 769.17.2 (page 769, register 17, bit 2) = 1 12626 * 2) Set page to 800 for host (801 if we were manageability) 12627 * 3) Write the address using the address opcode (0x11) 12628 * 4) Read or write the data using the data opcode (0x12) 12629 * 5) Restore 769.17.2 to its original value 12630 * 12631 * Steps 1 and 2 are done by wm_enable_phy_wakeup_reg_access_bm() and 12632 * step 5 is done by wm_disable_phy_wakeup_reg_access_bm(). 12633 * 12634 * Assumes semaphore is already acquired. When page_set==TRUE, assumes 12635 * the PHY page is set to BM_WUC_PAGE (i.e. a function in the call stack 12636 * is responsible for calls to wm_[enable|disable]_phy_wakeup_reg_bm()). 12637 */ 12638 static int 12639 wm_access_phy_wakeup_reg_bm(device_t dev, int offset, int16_t *val, int rd, 12640 bool page_set) 12641 { 12642 struct wm_softc *sc = device_private(dev); 12643 uint16_t regnum = BM_PHY_REG_NUM(offset); 12644 uint16_t page = BM_PHY_REG_PAGE(offset); 12645 uint16_t wuce; 12646 int rv = 0; 12647 12648 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s called\n", 12649 device_xname(dev), __func__)); 12650 /* XXX Gig must be disabled for MDIO accesses to page 800 */ 12651 if ((sc->sc_type == WM_T_PCH) 12652 && ((CSR_READ(sc, WMREG_PHY_CTRL) & PHY_CTRL_GBE_DIS) == 0)) { 12653 device_printf(dev, 12654 "Attempting to access page %d while gig enabled.\n", page); 12655 } 12656 12657 if (!page_set) { 12658 /* Enable access to PHY wakeup registers */ 12659 rv = wm_enable_phy_wakeup_reg_access_bm(dev, &wuce); 12660 if (rv != 0) { 12661 device_printf(dev, 12662 "%s: Could not enable PHY wakeup reg access\n", 12663 __func__); 12664 return rv; 12665 } 12666 } 12667 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s: Accessing PHY page %d reg 0x%x\n", 12668 device_xname(sc->sc_dev), __func__, page, regnum)); 12669 12670 /* 12671 * 2) Access PHY wakeup register. 12672 * See wm_access_phy_wakeup_reg_bm. 12673 */ 12674 12675 /* Write the Wakeup register page offset value using opcode 0x11 */ 12676 rv = wm_gmii_mdic_writereg(dev, 1, BM_WUC_ADDRESS_OPCODE, regnum); 12677 if (rv != 0) 12678 return rv; 12679 12680 if (rd) { 12681 /* Read the Wakeup register page value using opcode 0x12 */ 12682 rv = wm_gmii_mdic_readreg(dev, 1, BM_WUC_DATA_OPCODE, val); 12683 } else { 12684 /* Write the Wakeup register page value using opcode 0x12 */ 12685 rv = wm_gmii_mdic_writereg(dev, 1, BM_WUC_DATA_OPCODE, *val); 12686 } 12687 if (rv != 0) 12688 return rv; 12689 12690 if (!page_set) 12691 rv = wm_disable_phy_wakeup_reg_access_bm(dev, &wuce); 12692 12693 return rv; 12694 } 12695 12696 /* 12697 * wm_gmii_hv_readreg: [mii interface function] 12698 * 12699 * Read a PHY register on the kumeran 12700 * This could be handled by the PHY layer if we didn't have to lock the 12701 * resource ... 12702 */ 12703 static int 12704 wm_gmii_hv_readreg(device_t dev, int phy, int reg, uint16_t *val) 12705 { 12706 struct wm_softc *sc = device_private(dev); 12707 int rv; 12708 12709 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s called\n", 12710 device_xname(dev), __func__)); 12711 12712 rv = sc->phy.acquire(sc); 12713 if (rv != 0) { 12714 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12715 return rv; 12716 } 12717 12718 rv = wm_gmii_hv_readreg_locked(dev, phy, reg, val); 12719 sc->phy.release(sc); 12720 return rv; 12721 } 12722 12723 static int 12724 wm_gmii_hv_readreg_locked(device_t dev, int phy, int reg, uint16_t *val) 12725 { 12726 uint16_t page = BM_PHY_REG_PAGE(reg); 12727 uint16_t regnum = BM_PHY_REG_NUM(reg); 12728 int rv; 12729 12730 phy = (page >= HV_INTC_FC_PAGE_START) ? 1 : phy; 12731 12732 /* Page 800 works differently than the rest so it has its own func */ 12733 if (page == BM_WUC_PAGE) 12734 return wm_access_phy_wakeup_reg_bm(dev, reg, val, true, false); 12735 12736 /* 12737 * Lower than page 768 works differently than the rest so it has its 12738 * own func 12739 */ 12740 if ((page > 0) && (page < HV_INTC_FC_PAGE_START)) { 12741 device_printf(dev, "gmii_hv_readreg!!!\n"); 12742 return -1; 12743 } 12744 12745 /* 12746 * XXX I21[789] documents say that the SMBus Address register is at 12747 * PHY address 01, Page 0 (not 768), Register 26. 12748 */ 12749 if (page == HV_INTC_FC_PAGE_START) 12750 page = 0; 12751 12752 if (regnum > BME1000_MAX_MULTI_PAGE_REG) { 12753 rv = wm_gmii_mdic_writereg(dev, 1, IGPHY_PAGE_SELECT, 12754 page << BME1000_PAGE_SHIFT); 12755 if (rv != 0) 12756 return rv; 12757 } 12758 12759 return wm_gmii_mdic_readreg(dev, phy, regnum & MII_ADDRMASK, val); 12760 } 12761 12762 /* 12763 * wm_gmii_hv_writereg: [mii interface function] 12764 * 12765 * Write a PHY register on the kumeran. 12766 * This could be handled by the PHY layer if we didn't have to lock the 12767 * resource ... 12768 */ 12769 static int 12770 wm_gmii_hv_writereg(device_t dev, int phy, int reg, uint16_t val) 12771 { 12772 struct wm_softc *sc = device_private(dev); 12773 int rv; 12774 12775 DPRINTF(sc, WM_DEBUG_GMII, ("%s: %s called\n", 12776 device_xname(dev), __func__)); 12777 12778 rv = sc->phy.acquire(sc); 12779 if (rv != 0) { 12780 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12781 return rv; 12782 } 12783 12784 rv = wm_gmii_hv_writereg_locked(dev, phy, reg, val); 12785 sc->phy.release(sc); 12786 12787 return rv; 12788 } 12789 12790 static int 12791 wm_gmii_hv_writereg_locked(device_t dev, int phy, int reg, uint16_t val) 12792 { 12793 struct wm_softc *sc = device_private(dev); 12794 uint16_t page = BM_PHY_REG_PAGE(reg); 12795 uint16_t regnum = BM_PHY_REG_NUM(reg); 12796 int rv; 12797 12798 phy = (page >= HV_INTC_FC_PAGE_START) ? 1 : phy; 12799 12800 /* Page 800 works differently than the rest so it has its own func */ 12801 if (page == BM_WUC_PAGE) 12802 return wm_access_phy_wakeup_reg_bm(dev, reg, &val, false, 12803 false); 12804 12805 /* 12806 * Lower than page 768 works differently than the rest so it has its 12807 * own func 12808 */ 12809 if ((page > 0) && (page < HV_INTC_FC_PAGE_START)) { 12810 device_printf(dev, "gmii_hv_writereg!!!\n"); 12811 return -1; 12812 } 12813 12814 { 12815 /* 12816 * XXX I21[789] documents say that the SMBus Address register 12817 * is at PHY address 01, Page 0 (not 768), Register 26. 12818 */ 12819 if (page == HV_INTC_FC_PAGE_START) 12820 page = 0; 12821 12822 /* 12823 * XXX Workaround MDIO accesses being disabled after entering 12824 * IEEE Power Down (whenever bit 11 of the PHY control 12825 * register is set) 12826 */ 12827 if (sc->sc_phytype == WMPHY_82578) { 12828 struct mii_softc *child; 12829 12830 child = LIST_FIRST(&sc->sc_mii.mii_phys); 12831 if ((child != NULL) && (child->mii_mpd_rev >= 1) 12832 && (phy == 2) && ((regnum & MII_ADDRMASK) == 0) 12833 && ((val & (1 << 11)) != 0)) { 12834 device_printf(dev, "XXX need workaround\n"); 12835 } 12836 } 12837 12838 if (regnum > BME1000_MAX_MULTI_PAGE_REG) { 12839 rv = wm_gmii_mdic_writereg(dev, 1, 12840 IGPHY_PAGE_SELECT, page << BME1000_PAGE_SHIFT); 12841 if (rv != 0) 12842 return rv; 12843 } 12844 } 12845 12846 return wm_gmii_mdic_writereg(dev, phy, regnum & MII_ADDRMASK, val); 12847 } 12848 12849 /* 12850 * wm_gmii_82580_readreg: [mii interface function] 12851 * 12852 * Read a PHY register on the 82580 and I350. 12853 * This could be handled by the PHY layer if we didn't have to lock the 12854 * resource ... 12855 */ 12856 static int 12857 wm_gmii_82580_readreg(device_t dev, int phy, int reg, uint16_t *val) 12858 { 12859 struct wm_softc *sc = device_private(dev); 12860 int rv; 12861 12862 rv = sc->phy.acquire(sc); 12863 if (rv != 0) { 12864 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12865 return rv; 12866 } 12867 12868 #ifdef DIAGNOSTIC 12869 if (reg > MII_ADDRMASK) { 12870 device_printf(dev, "%s: PHYTYPE = %d, addr 0x%x > 0x1f\n", 12871 __func__, sc->sc_phytype, reg); 12872 reg &= MII_ADDRMASK; 12873 } 12874 #endif 12875 rv = wm_gmii_mdic_readreg(dev, phy, reg, val); 12876 12877 sc->phy.release(sc); 12878 return rv; 12879 } 12880 12881 /* 12882 * wm_gmii_82580_writereg: [mii interface function] 12883 * 12884 * Write a PHY register on the 82580 and I350. 12885 * This could be handled by the PHY layer if we didn't have to lock the 12886 * resource ... 12887 */ 12888 static int 12889 wm_gmii_82580_writereg(device_t dev, int phy, int reg, uint16_t val) 12890 { 12891 struct wm_softc *sc = device_private(dev); 12892 int rv; 12893 12894 rv = sc->phy.acquire(sc); 12895 if (rv != 0) { 12896 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12897 return rv; 12898 } 12899 12900 #ifdef DIAGNOSTIC 12901 if (reg > MII_ADDRMASK) { 12902 device_printf(dev, "%s: PHYTYPE = %d, addr 0x%x > 0x1f\n", 12903 __func__, sc->sc_phytype, reg); 12904 reg &= MII_ADDRMASK; 12905 } 12906 #endif 12907 rv = wm_gmii_mdic_writereg(dev, phy, reg, val); 12908 12909 sc->phy.release(sc); 12910 return rv; 12911 } 12912 12913 /* 12914 * wm_gmii_gs40g_readreg: [mii interface function] 12915 * 12916 * Read a PHY register on the I2100 and I211. 12917 * This could be handled by the PHY layer if we didn't have to lock the 12918 * resource ... 12919 */ 12920 static int 12921 wm_gmii_gs40g_readreg(device_t dev, int phy, int reg, uint16_t *val) 12922 { 12923 struct wm_softc *sc = device_private(dev); 12924 int page, offset; 12925 int rv; 12926 12927 /* Acquire semaphore */ 12928 rv = sc->phy.acquire(sc); 12929 if (rv != 0) { 12930 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12931 return rv; 12932 } 12933 12934 /* Page select */ 12935 page = reg >> GS40G_PAGE_SHIFT; 12936 rv = wm_gmii_mdic_writereg(dev, phy, GS40G_PAGE_SELECT, page); 12937 if (rv != 0) 12938 goto release; 12939 12940 /* Read reg */ 12941 offset = reg & GS40G_OFFSET_MASK; 12942 rv = wm_gmii_mdic_readreg(dev, phy, offset, val); 12943 12944 release: 12945 sc->phy.release(sc); 12946 return rv; 12947 } 12948 12949 /* 12950 * wm_gmii_gs40g_writereg: [mii interface function] 12951 * 12952 * Write a PHY register on the I210 and I211. 12953 * This could be handled by the PHY layer if we didn't have to lock the 12954 * resource ... 12955 */ 12956 static int 12957 wm_gmii_gs40g_writereg(device_t dev, int phy, int reg, uint16_t val) 12958 { 12959 struct wm_softc *sc = device_private(dev); 12960 uint16_t page; 12961 int offset, rv; 12962 12963 /* Acquire semaphore */ 12964 rv = sc->phy.acquire(sc); 12965 if (rv != 0) { 12966 device_printf(dev, "%s: failed to get semaphore\n", __func__); 12967 return rv; 12968 } 12969 12970 /* Page select */ 12971 page = reg >> GS40G_PAGE_SHIFT; 12972 rv = wm_gmii_mdic_writereg(dev, phy, GS40G_PAGE_SELECT, page); 12973 if (rv != 0) 12974 goto release; 12975 12976 /* Write reg */ 12977 offset = reg & GS40G_OFFSET_MASK; 12978 rv = wm_gmii_mdic_writereg(dev, phy, offset, val); 12979 12980 release: 12981 /* Release semaphore */ 12982 sc->phy.release(sc); 12983 return rv; 12984 } 12985 12986 /* 12987 * wm_gmii_statchg: [mii interface function] 12988 * 12989 * Callback from MII layer when media changes. 12990 */ 12991 static void 12992 wm_gmii_statchg(struct ifnet *ifp) 12993 { 12994 struct wm_softc *sc = ifp->if_softc; 12995 struct mii_data *mii = &sc->sc_mii; 12996 12997 sc->sc_ctrl &= ~(CTRL_TFCE | CTRL_RFCE); 12998 sc->sc_tctl &= ~TCTL_COLD(0x3ff); 12999 sc->sc_fcrtl &= ~FCRTL_XONE; 13000 13001 /* Get flow control negotiation result. */ 13002 if (IFM_SUBTYPE(mii->mii_media.ifm_cur->ifm_media) == IFM_AUTO && 13003 (mii->mii_media_active & IFM_ETH_FMASK) != sc->sc_flowflags) { 13004 sc->sc_flowflags = mii->mii_media_active & IFM_ETH_FMASK; 13005 mii->mii_media_active &= ~IFM_ETH_FMASK; 13006 } 13007 13008 if (sc->sc_flowflags & IFM_FLOW) { 13009 if (sc->sc_flowflags & IFM_ETH_TXPAUSE) { 13010 sc->sc_ctrl |= CTRL_TFCE; 13011 sc->sc_fcrtl |= FCRTL_XONE; 13012 } 13013 if (sc->sc_flowflags & IFM_ETH_RXPAUSE) 13014 sc->sc_ctrl |= CTRL_RFCE; 13015 } 13016 13017 if (mii->mii_media_active & IFM_FDX) { 13018 DPRINTF(sc, WM_DEBUG_LINK, 13019 ("%s: LINK: statchg: FDX\n", ifp->if_xname)); 13020 sc->sc_tctl |= TCTL_COLD(TX_COLLISION_DISTANCE_FDX); 13021 } else { 13022 DPRINTF(sc, WM_DEBUG_LINK, 13023 ("%s: LINK: statchg: HDX\n", ifp->if_xname)); 13024 sc->sc_tctl |= TCTL_COLD(TX_COLLISION_DISTANCE_HDX); 13025 } 13026 13027 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13028 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl); 13029 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ? 13030 WMREG_OLD_FCRTL : WMREG_FCRTL, sc->sc_fcrtl); 13031 if (sc->sc_type == WM_T_80003) { 13032 switch (IFM_SUBTYPE(mii->mii_media_active)) { 13033 case IFM_1000_T: 13034 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_HD_CTRL, 13035 KUMCTRLSTA_HD_CTRL_1000_DEFAULT); 13036 sc->sc_tipg = TIPG_1000T_80003_DFLT; 13037 break; 13038 default: 13039 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_HD_CTRL, 13040 KUMCTRLSTA_HD_CTRL_10_100_DEFAULT); 13041 sc->sc_tipg = TIPG_10_100_80003_DFLT; 13042 break; 13043 } 13044 CSR_WRITE(sc, WMREG_TIPG, sc->sc_tipg); 13045 } 13046 } 13047 13048 /* kumeran related (80003, ICH* and PCH*) */ 13049 13050 /* 13051 * wm_kmrn_readreg: 13052 * 13053 * Read a kumeran register 13054 */ 13055 static int 13056 wm_kmrn_readreg(struct wm_softc *sc, int reg, uint16_t *val) 13057 { 13058 int rv; 13059 13060 if (sc->sc_type == WM_T_80003) 13061 rv = wm_get_swfw_semaphore(sc, SWFW_MAC_CSR_SM); 13062 else 13063 rv = sc->phy.acquire(sc); 13064 if (rv != 0) { 13065 device_printf(sc->sc_dev, "%s: failed to get semaphore\n", 13066 __func__); 13067 return rv; 13068 } 13069 13070 rv = wm_kmrn_readreg_locked(sc, reg, val); 13071 13072 if (sc->sc_type == WM_T_80003) 13073 wm_put_swfw_semaphore(sc, SWFW_MAC_CSR_SM); 13074 else 13075 sc->phy.release(sc); 13076 13077 return rv; 13078 } 13079 13080 static int 13081 wm_kmrn_readreg_locked(struct wm_softc *sc, int reg, uint16_t *val) 13082 { 13083 13084 CSR_WRITE(sc, WMREG_KUMCTRLSTA, 13085 ((reg << KUMCTRLSTA_OFFSET_SHIFT) & KUMCTRLSTA_OFFSET) | 13086 KUMCTRLSTA_REN); 13087 CSR_WRITE_FLUSH(sc); 13088 delay(2); 13089 13090 *val = CSR_READ(sc, WMREG_KUMCTRLSTA) & KUMCTRLSTA_MASK; 13091 13092 return 0; 13093 } 13094 13095 /* 13096 * wm_kmrn_writereg: 13097 * 13098 * Write a kumeran register 13099 */ 13100 static int 13101 wm_kmrn_writereg(struct wm_softc *sc, int reg, uint16_t val) 13102 { 13103 int rv; 13104 13105 if (sc->sc_type == WM_T_80003) 13106 rv = wm_get_swfw_semaphore(sc, SWFW_MAC_CSR_SM); 13107 else 13108 rv = sc->phy.acquire(sc); 13109 if (rv != 0) { 13110 device_printf(sc->sc_dev, "%s: failed to get semaphore\n", 13111 __func__); 13112 return rv; 13113 } 13114 13115 rv = wm_kmrn_writereg_locked(sc, reg, val); 13116 13117 if (sc->sc_type == WM_T_80003) 13118 wm_put_swfw_semaphore(sc, SWFW_MAC_CSR_SM); 13119 else 13120 sc->phy.release(sc); 13121 13122 return rv; 13123 } 13124 13125 static int 13126 wm_kmrn_writereg_locked(struct wm_softc *sc, int reg, uint16_t val) 13127 { 13128 13129 CSR_WRITE(sc, WMREG_KUMCTRLSTA, 13130 ((reg << KUMCTRLSTA_OFFSET_SHIFT) & KUMCTRLSTA_OFFSET) | val); 13131 13132 return 0; 13133 } 13134 13135 /* 13136 * EMI register related (82579, WMPHY_I217(PCH2 and newer)) 13137 * This access method is different from IEEE MMD. 13138 */ 13139 static int 13140 wm_access_emi_reg_locked(device_t dev, int reg, uint16_t *val, bool rd) 13141 { 13142 struct wm_softc *sc = device_private(dev); 13143 int rv; 13144 13145 rv = sc->phy.writereg_locked(dev, 2, I82579_EMI_ADDR, reg); 13146 if (rv != 0) 13147 return rv; 13148 13149 if (rd) 13150 rv = sc->phy.readreg_locked(dev, 2, I82579_EMI_DATA, val); 13151 else 13152 rv = sc->phy.writereg_locked(dev, 2, I82579_EMI_DATA, *val); 13153 return rv; 13154 } 13155 13156 static int 13157 wm_read_emi_reg_locked(device_t dev, int reg, uint16_t *val) 13158 { 13159 13160 return wm_access_emi_reg_locked(dev, reg, val, true); 13161 } 13162 13163 static int 13164 wm_write_emi_reg_locked(device_t dev, int reg, uint16_t val) 13165 { 13166 13167 return wm_access_emi_reg_locked(dev, reg, &val, false); 13168 } 13169 13170 /* SGMII related */ 13171 13172 /* 13173 * wm_sgmii_uses_mdio 13174 * 13175 * Check whether the transaction is to the internal PHY or the external 13176 * MDIO interface. Return true if it's MDIO. 13177 */ 13178 static bool 13179 wm_sgmii_uses_mdio(struct wm_softc *sc) 13180 { 13181 uint32_t reg; 13182 bool ismdio = false; 13183 13184 switch (sc->sc_type) { 13185 case WM_T_82575: 13186 case WM_T_82576: 13187 reg = CSR_READ(sc, WMREG_MDIC); 13188 ismdio = ((reg & MDIC_DEST) != 0); 13189 break; 13190 case WM_T_82580: 13191 case WM_T_I350: 13192 case WM_T_I354: 13193 case WM_T_I210: 13194 case WM_T_I211: 13195 reg = CSR_READ(sc, WMREG_MDICNFG); 13196 ismdio = ((reg & MDICNFG_DEST) != 0); 13197 break; 13198 default: 13199 break; 13200 } 13201 13202 return ismdio; 13203 } 13204 13205 /* Setup internal SGMII PHY for SFP */ 13206 static void 13207 wm_sgmii_sfp_preconfig(struct wm_softc *sc) 13208 { 13209 uint16_t id1, id2, phyreg; 13210 int i, rv; 13211 13212 if (((sc->sc_flags & WM_F_SGMII) == 0) 13213 || ((sc->sc_flags & WM_F_SFP) == 0)) 13214 return; 13215 13216 for (i = 0; i < MII_NPHY; i++) { 13217 sc->phy.no_errprint = true; 13218 rv = sc->phy.readreg_locked(sc->sc_dev, i, MII_PHYIDR1, &id1); 13219 if (rv != 0) 13220 continue; 13221 rv = sc->phy.readreg_locked(sc->sc_dev, i, MII_PHYIDR2, &id2); 13222 if (rv != 0) 13223 continue; 13224 if (MII_OUI(id1, id2) != MII_OUI_xxMARVELL) 13225 continue; 13226 sc->phy.no_errprint = false; 13227 13228 sc->phy.readreg_locked(sc->sc_dev, i, MAKPHY_ESSR, &phyreg); 13229 phyreg &= ~(ESSR_SER_ANEG_BYPASS | ESSR_HWCFG_MODE); 13230 phyreg |= ESSR_SGMII_WOC_COPPER; 13231 sc->phy.writereg_locked(sc->sc_dev, i, MAKPHY_ESSR, phyreg); 13232 break; 13233 } 13234 13235 } 13236 13237 /* 13238 * wm_sgmii_readreg: [mii interface function] 13239 * 13240 * Read a PHY register on the SGMII 13241 * This could be handled by the PHY layer if we didn't have to lock the 13242 * resource ... 13243 */ 13244 static int 13245 wm_sgmii_readreg(device_t dev, int phy, int reg, uint16_t *val) 13246 { 13247 struct wm_softc *sc = device_private(dev); 13248 int rv; 13249 13250 rv = sc->phy.acquire(sc); 13251 if (rv != 0) { 13252 device_printf(dev, "%s: failed to get semaphore\n", __func__); 13253 return rv; 13254 } 13255 13256 rv = wm_sgmii_readreg_locked(dev, phy, reg, val); 13257 13258 sc->phy.release(sc); 13259 return rv; 13260 } 13261 13262 static int 13263 wm_sgmii_readreg_locked(device_t dev, int phy, int reg, uint16_t *val) 13264 { 13265 struct wm_softc *sc = device_private(dev); 13266 uint32_t i2ccmd; 13267 int i, rv = 0; 13268 13269 i2ccmd = (reg << I2CCMD_REG_ADDR_SHIFT) 13270 | (phy << I2CCMD_PHY_ADDR_SHIFT) | I2CCMD_OPCODE_READ; 13271 CSR_WRITE(sc, WMREG_I2CCMD, i2ccmd); 13272 13273 /* Poll the ready bit */ 13274 for (i = 0; i < I2CCMD_PHY_TIMEOUT; i++) { 13275 delay(50); 13276 i2ccmd = CSR_READ(sc, WMREG_I2CCMD); 13277 if (i2ccmd & I2CCMD_READY) 13278 break; 13279 } 13280 if ((i2ccmd & I2CCMD_READY) == 0) { 13281 device_printf(dev, "I2CCMD Read did not complete\n"); 13282 rv = ETIMEDOUT; 13283 } 13284 if ((i2ccmd & I2CCMD_ERROR) != 0) { 13285 if (!sc->phy.no_errprint) 13286 device_printf(dev, "I2CCMD Error bit set\n"); 13287 rv = EIO; 13288 } 13289 13290 *val = (uint16_t)((i2ccmd >> 8) & 0x00ff) | ((i2ccmd << 8) & 0xff00); 13291 13292 return rv; 13293 } 13294 13295 /* 13296 * wm_sgmii_writereg: [mii interface function] 13297 * 13298 * Write a PHY register on the SGMII. 13299 * This could be handled by the PHY layer if we didn't have to lock the 13300 * resource ... 13301 */ 13302 static int 13303 wm_sgmii_writereg(device_t dev, int phy, int reg, uint16_t val) 13304 { 13305 struct wm_softc *sc = device_private(dev); 13306 int rv; 13307 13308 rv = sc->phy.acquire(sc); 13309 if (rv != 0) { 13310 device_printf(dev, "%s: failed to get semaphore\n", __func__); 13311 return rv; 13312 } 13313 13314 rv = wm_sgmii_writereg_locked(dev, phy, reg, val); 13315 13316 sc->phy.release(sc); 13317 13318 return rv; 13319 } 13320 13321 static int 13322 wm_sgmii_writereg_locked(device_t dev, int phy, int reg, uint16_t val) 13323 { 13324 struct wm_softc *sc = device_private(dev); 13325 uint32_t i2ccmd; 13326 uint16_t swapdata; 13327 int rv = 0; 13328 int i; 13329 13330 /* Swap the data bytes for the I2C interface */ 13331 swapdata = ((val >> 8) & 0x00FF) | ((val << 8) & 0xFF00); 13332 i2ccmd = (reg << I2CCMD_REG_ADDR_SHIFT) 13333 | (phy << I2CCMD_PHY_ADDR_SHIFT) | I2CCMD_OPCODE_WRITE | swapdata; 13334 CSR_WRITE(sc, WMREG_I2CCMD, i2ccmd); 13335 13336 /* Poll the ready bit */ 13337 for (i = 0; i < I2CCMD_PHY_TIMEOUT; i++) { 13338 delay(50); 13339 i2ccmd = CSR_READ(sc, WMREG_I2CCMD); 13340 if (i2ccmd & I2CCMD_READY) 13341 break; 13342 } 13343 if ((i2ccmd & I2CCMD_READY) == 0) { 13344 device_printf(dev, "I2CCMD Write did not complete\n"); 13345 rv = ETIMEDOUT; 13346 } 13347 if ((i2ccmd & I2CCMD_ERROR) != 0) { 13348 device_printf(dev, "I2CCMD Error bit set\n"); 13349 rv = EIO; 13350 } 13351 13352 return rv; 13353 } 13354 13355 /* TBI related */ 13356 13357 static bool 13358 wm_tbi_havesignal(struct wm_softc *sc, uint32_t ctrl) 13359 { 13360 bool sig; 13361 13362 sig = ctrl & CTRL_SWDPIN(1); 13363 13364 /* 13365 * On 82543 and 82544, the CTRL_SWDPIN(1) bit will be 0 if the optics 13366 * detect a signal, 1 if they don't. 13367 */ 13368 if ((sc->sc_type == WM_T_82543) || (sc->sc_type == WM_T_82544)) 13369 sig = !sig; 13370 13371 return sig; 13372 } 13373 13374 /* 13375 * wm_tbi_mediainit: 13376 * 13377 * Initialize media for use on 1000BASE-X devices. 13378 */ 13379 static void 13380 wm_tbi_mediainit(struct wm_softc *sc) 13381 { 13382 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 13383 const char *sep = ""; 13384 13385 if (sc->sc_type < WM_T_82543) 13386 sc->sc_tipg = TIPG_WM_DFLT; 13387 else 13388 sc->sc_tipg = TIPG_LG_DFLT; 13389 13390 sc->sc_tbi_serdes_anegticks = 5; 13391 13392 /* Initialize our media structures */ 13393 sc->sc_mii.mii_ifp = ifp; 13394 sc->sc_ethercom.ec_mii = &sc->sc_mii; 13395 13396 ifp->if_baudrate = IF_Gbps(1); 13397 if (((sc->sc_type >= WM_T_82575) && (sc->sc_type <= WM_T_I211)) 13398 && (sc->sc_mediatype == WM_MEDIATYPE_SERDES)) { 13399 ifmedia_init_with_lock(&sc->sc_mii.mii_media, IFM_IMASK, 13400 wm_serdes_mediachange, wm_serdes_mediastatus, 13401 sc->sc_core_lock); 13402 } else { 13403 ifmedia_init_with_lock(&sc->sc_mii.mii_media, IFM_IMASK, 13404 wm_tbi_mediachange, wm_tbi_mediastatus, sc->sc_core_lock); 13405 } 13406 13407 /* 13408 * SWD Pins: 13409 * 13410 * 0 = Link LED (output) 13411 * 1 = Loss Of Signal (input) 13412 */ 13413 sc->sc_ctrl |= CTRL_SWDPIO(0); 13414 13415 /* XXX Perhaps this is only for TBI */ 13416 if (sc->sc_mediatype != WM_MEDIATYPE_SERDES) 13417 sc->sc_ctrl &= ~CTRL_SWDPIO(1); 13418 13419 if (sc->sc_mediatype == WM_MEDIATYPE_SERDES) 13420 sc->sc_ctrl &= ~CTRL_LRST; 13421 13422 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13423 13424 #define ADD(ss, mm, dd) \ 13425 do { \ 13426 aprint_normal("%s%s", sep, ss); \ 13427 ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER | (mm), (dd), NULL); \ 13428 sep = ", "; \ 13429 } while (/*CONSTCOND*/0) 13430 13431 aprint_normal_dev(sc->sc_dev, ""); 13432 13433 if (sc->sc_type == WM_T_I354) { 13434 uint32_t status; 13435 13436 status = CSR_READ(sc, WMREG_STATUS); 13437 if (((status & STATUS_2P5_SKU) != 0) 13438 && ((status & STATUS_2P5_SKU_OVER) == 0)) { 13439 ADD("2500baseKX-FDX", IFM_2500_KX | IFM_FDX,ANAR_X_FD); 13440 } else 13441 ADD("1000baseKX-FDX", IFM_1000_KX | IFM_FDX,ANAR_X_FD); 13442 } else if (sc->sc_type == WM_T_82545) { 13443 /* Only 82545 is LX (XXX except SFP) */ 13444 ADD("1000baseLX", IFM_1000_LX, ANAR_X_HD); 13445 ADD("1000baseLX-FDX", IFM_1000_LX | IFM_FDX, ANAR_X_FD); 13446 } else if (sc->sc_sfptype != 0) { 13447 /* XXX wm(4) fiber/serdes don't use ifm_data */ 13448 switch (sc->sc_sfptype) { 13449 default: 13450 case SFF_SFP_ETH_FLAGS_1000SX: 13451 ADD("1000baseSX", IFM_1000_SX, ANAR_X_HD); 13452 ADD("1000baseSX-FDX", IFM_1000_SX | IFM_FDX, ANAR_X_FD); 13453 break; 13454 case SFF_SFP_ETH_FLAGS_1000LX: 13455 ADD("1000baseLX", IFM_1000_LX, ANAR_X_HD); 13456 ADD("1000baseLX-FDX", IFM_1000_LX | IFM_FDX, ANAR_X_FD); 13457 break; 13458 case SFF_SFP_ETH_FLAGS_1000CX: 13459 ADD("1000baseCX", IFM_1000_CX, ANAR_X_HD); 13460 ADD("1000baseCX-FDX", IFM_1000_CX | IFM_FDX, ANAR_X_FD); 13461 break; 13462 case SFF_SFP_ETH_FLAGS_1000T: 13463 ADD("1000baseT", IFM_1000_T, 0); 13464 ADD("1000baseT-FDX", IFM_1000_T | IFM_FDX, 0); 13465 break; 13466 case SFF_SFP_ETH_FLAGS_100FX: 13467 ADD("100baseFX", IFM_100_FX, ANAR_TX); 13468 ADD("100baseFX-FDX", IFM_100_FX | IFM_FDX, ANAR_TX_FD); 13469 break; 13470 } 13471 } else { 13472 ADD("1000baseSX", IFM_1000_SX, ANAR_X_HD); 13473 ADD("1000baseSX-FDX", IFM_1000_SX | IFM_FDX, ANAR_X_FD); 13474 } 13475 ADD("auto", IFM_AUTO, ANAR_X_FD | ANAR_X_HD); 13476 aprint_normal("\n"); 13477 13478 #undef ADD 13479 13480 ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER | IFM_AUTO); 13481 } 13482 13483 /* 13484 * wm_tbi_mediachange: [ifmedia interface function] 13485 * 13486 * Set hardware to newly-selected media on a 1000BASE-X device. 13487 */ 13488 static int 13489 wm_tbi_mediachange(struct ifnet *ifp) 13490 { 13491 struct wm_softc *sc = ifp->if_softc; 13492 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur; 13493 uint32_t status, ctrl; 13494 bool signal; 13495 int i; 13496 13497 KASSERT(sc->sc_mediatype != WM_MEDIATYPE_COPPER); 13498 if (sc->sc_mediatype == WM_MEDIATYPE_SERDES) { 13499 /* XXX need some work for >= 82571 and < 82575 */ 13500 if (sc->sc_type < WM_T_82575) 13501 return 0; 13502 } 13503 13504 if ((sc->sc_type == WM_T_82571) || (sc->sc_type == WM_T_82572) 13505 || (sc->sc_type >= WM_T_82575)) 13506 CSR_WRITE(sc, WMREG_SCTL, SCTL_DISABLE_SERDES_LOOPBACK); 13507 13508 sc->sc_ctrl &= ~CTRL_LRST; 13509 sc->sc_txcw = TXCW_ANE; 13510 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) 13511 sc->sc_txcw |= TXCW_FD | TXCW_HD; 13512 else if (ife->ifm_media & IFM_FDX) 13513 sc->sc_txcw |= TXCW_FD; 13514 else 13515 sc->sc_txcw |= TXCW_HD; 13516 13517 if ((sc->sc_mii.mii_media.ifm_media & IFM_FLOW) != 0) 13518 sc->sc_txcw |= TXCW_SYM_PAUSE | TXCW_ASYM_PAUSE; 13519 13520 DPRINTF(sc, WM_DEBUG_LINK,("%s: sc_txcw = 0x%x after autoneg check\n", 13521 device_xname(sc->sc_dev), sc->sc_txcw)); 13522 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw); 13523 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13524 CSR_WRITE_FLUSH(sc); 13525 delay(1000); 13526 13527 ctrl = CSR_READ(sc, WMREG_CTRL); 13528 signal = wm_tbi_havesignal(sc, ctrl); 13529 13530 DPRINTF(sc, WM_DEBUG_LINK, 13531 ("%s: signal = %d\n", device_xname(sc->sc_dev), signal)); 13532 13533 if (signal) { 13534 /* Have signal; wait for the link to come up. */ 13535 for (i = 0; i < WM_LINKUP_TIMEOUT; i++) { 13536 delay(10000); 13537 if (CSR_READ(sc, WMREG_STATUS) & STATUS_LU) 13538 break; 13539 } 13540 13541 DPRINTF(sc, WM_DEBUG_LINK, 13542 ("%s: i = %d after waiting for link\n", 13543 device_xname(sc->sc_dev), i)); 13544 13545 status = CSR_READ(sc, WMREG_STATUS); 13546 DPRINTF(sc, WM_DEBUG_LINK, 13547 ("%s: status after final read = 0x%x, STATUS_LU = %#" 13548 __PRIxBIT "\n", 13549 device_xname(sc->sc_dev), status, STATUS_LU)); 13550 if (status & STATUS_LU) { 13551 /* Link is up. */ 13552 DPRINTF(sc, WM_DEBUG_LINK, 13553 ("%s: LINK: set media -> link up %s\n", 13554 device_xname(sc->sc_dev), 13555 (status & STATUS_FD) ? "FDX" : "HDX")); 13556 13557 /* 13558 * NOTE: CTRL will update TFCE and RFCE automatically, 13559 * so we should update sc->sc_ctrl 13560 */ 13561 sc->sc_ctrl = CSR_READ(sc, WMREG_CTRL); 13562 sc->sc_tctl &= ~TCTL_COLD(0x3ff); 13563 sc->sc_fcrtl &= ~FCRTL_XONE; 13564 if (status & STATUS_FD) 13565 sc->sc_tctl |= 13566 TCTL_COLD(TX_COLLISION_DISTANCE_FDX); 13567 else 13568 sc->sc_tctl |= 13569 TCTL_COLD(TX_COLLISION_DISTANCE_HDX); 13570 if (CSR_READ(sc, WMREG_CTRL) & CTRL_TFCE) 13571 sc->sc_fcrtl |= FCRTL_XONE; 13572 CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl); 13573 CSR_WRITE(sc, (sc->sc_type < WM_T_82543) ? 13574 WMREG_OLD_FCRTL : WMREG_FCRTL, sc->sc_fcrtl); 13575 sc->sc_tbi_linkup = 1; 13576 } else { 13577 if (i == WM_LINKUP_TIMEOUT) 13578 wm_check_for_link(sc); 13579 /* Link is down. */ 13580 DPRINTF(sc, WM_DEBUG_LINK, 13581 ("%s: LINK: set media -> link down\n", 13582 device_xname(sc->sc_dev))); 13583 sc->sc_tbi_linkup = 0; 13584 } 13585 } else { 13586 DPRINTF(sc, WM_DEBUG_LINK, 13587 ("%s: LINK: set media -> no signal\n", 13588 device_xname(sc->sc_dev))); 13589 sc->sc_tbi_linkup = 0; 13590 } 13591 13592 wm_tbi_serdes_set_linkled(sc); 13593 13594 return 0; 13595 } 13596 13597 /* 13598 * wm_tbi_mediastatus: [ifmedia interface function] 13599 * 13600 * Get the current interface media status on a 1000BASE-X device. 13601 */ 13602 static void 13603 wm_tbi_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) 13604 { 13605 struct wm_softc *sc = ifp->if_softc; 13606 uint32_t ctrl, status; 13607 13608 ifmr->ifm_status = IFM_AVALID; 13609 ifmr->ifm_active = IFM_ETHER; 13610 13611 status = CSR_READ(sc, WMREG_STATUS); 13612 if ((status & STATUS_LU) == 0) { 13613 ifmr->ifm_active |= IFM_NONE; 13614 return; 13615 } 13616 13617 ifmr->ifm_status |= IFM_ACTIVE; 13618 /* Only 82545 is LX */ 13619 if (sc->sc_type == WM_T_82545) 13620 ifmr->ifm_active |= IFM_1000_LX; 13621 else 13622 ifmr->ifm_active |= IFM_1000_SX; 13623 if (CSR_READ(sc, WMREG_STATUS) & STATUS_FD) 13624 ifmr->ifm_active |= IFM_FDX; 13625 else 13626 ifmr->ifm_active |= IFM_HDX; 13627 ctrl = CSR_READ(sc, WMREG_CTRL); 13628 if (ctrl & CTRL_RFCE) 13629 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_RXPAUSE; 13630 if (ctrl & CTRL_TFCE) 13631 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_TXPAUSE; 13632 } 13633 13634 /* XXX TBI only */ 13635 static int 13636 wm_check_for_link(struct wm_softc *sc) 13637 { 13638 struct ifmedia_entry *ife = sc->sc_mii.mii_media.ifm_cur; 13639 uint32_t rxcw; 13640 uint32_t ctrl; 13641 uint32_t status; 13642 bool signal; 13643 13644 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s called\n", 13645 device_xname(sc->sc_dev), __func__)); 13646 13647 if (sc->sc_mediatype == WM_MEDIATYPE_SERDES) { 13648 /* XXX need some work for >= 82571 */ 13649 if (sc->sc_type >= WM_T_82571) { 13650 sc->sc_tbi_linkup = 1; 13651 return 0; 13652 } 13653 } 13654 13655 rxcw = CSR_READ(sc, WMREG_RXCW); 13656 ctrl = CSR_READ(sc, WMREG_CTRL); 13657 status = CSR_READ(sc, WMREG_STATUS); 13658 signal = wm_tbi_havesignal(sc, ctrl); 13659 13660 DPRINTF(sc, WM_DEBUG_LINK, 13661 ("%s: %s: signal = %d, status_lu = %d, rxcw_c = %d\n", 13662 device_xname(sc->sc_dev), __func__, signal, 13663 ((status & STATUS_LU) != 0), ((rxcw & RXCW_C) != 0))); 13664 13665 /* 13666 * SWDPIN LU RXCW 13667 * 0 0 0 13668 * 0 0 1 (should not happen) 13669 * 0 1 0 (should not happen) 13670 * 0 1 1 (should not happen) 13671 * 1 0 0 Disable autonego and force linkup 13672 * 1 0 1 got /C/ but not linkup yet 13673 * 1 1 0 (linkup) 13674 * 1 1 1 If IFM_AUTO, back to autonego 13675 * 13676 */ 13677 if (signal && ((status & STATUS_LU) == 0) && ((rxcw & RXCW_C) == 0)) { 13678 DPRINTF(sc, WM_DEBUG_LINK, 13679 ("%s: %s: force linkup and fullduplex\n", 13680 device_xname(sc->sc_dev), __func__)); 13681 sc->sc_tbi_linkup = 0; 13682 /* Disable auto-negotiation in the TXCW register */ 13683 CSR_WRITE(sc, WMREG_TXCW, (sc->sc_txcw & ~TXCW_ANE)); 13684 13685 /* 13686 * Force link-up and also force full-duplex. 13687 * 13688 * NOTE: CTRL was updated TFCE and RFCE automatically, 13689 * so we should update sc->sc_ctrl 13690 */ 13691 sc->sc_ctrl = ctrl | CTRL_SLU | CTRL_FD; 13692 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13693 } else if (((status & STATUS_LU) != 0) 13694 && ((rxcw & RXCW_C) != 0) 13695 && (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO)) { 13696 sc->sc_tbi_linkup = 1; 13697 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s: go back to autonego\n", 13698 device_xname(sc->sc_dev), __func__)); 13699 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw); 13700 CSR_WRITE(sc, WMREG_CTRL, (ctrl & ~CTRL_SLU)); 13701 } else if (signal && ((rxcw & RXCW_C) != 0)) { 13702 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s: /C/", 13703 device_xname(sc->sc_dev), __func__)); 13704 } else { 13705 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s: linkup %08x,%08x,%08x\n", 13706 device_xname(sc->sc_dev), __func__, rxcw, ctrl, 13707 status)); 13708 } 13709 13710 return 0; 13711 } 13712 13713 /* 13714 * wm_tbi_tick: 13715 * 13716 * Check the link on TBI devices. 13717 * This function acts as mii_tick(). 13718 */ 13719 static void 13720 wm_tbi_tick(struct wm_softc *sc) 13721 { 13722 struct mii_data *mii = &sc->sc_mii; 13723 struct ifmedia_entry *ife = mii->mii_media.ifm_cur; 13724 uint32_t status; 13725 13726 KASSERT(mutex_owned(sc->sc_core_lock)); 13727 13728 status = CSR_READ(sc, WMREG_STATUS); 13729 13730 /* XXX is this needed? */ 13731 (void)CSR_READ(sc, WMREG_RXCW); 13732 (void)CSR_READ(sc, WMREG_CTRL); 13733 13734 /* set link status */ 13735 if ((status & STATUS_LU) == 0) { 13736 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: checklink -> down\n", 13737 device_xname(sc->sc_dev))); 13738 sc->sc_tbi_linkup = 0; 13739 } else if (sc->sc_tbi_linkup == 0) { 13740 DPRINTF(sc, WM_DEBUG_LINK, ("%s: LINK: checklink -> up %s\n", 13741 device_xname(sc->sc_dev), 13742 (status & STATUS_FD) ? "FDX" : "HDX")); 13743 sc->sc_tbi_linkup = 1; 13744 sc->sc_tbi_serdes_ticks = 0; 13745 } 13746 13747 if ((sc->sc_if_flags & IFF_UP) == 0) 13748 goto setled; 13749 13750 if ((status & STATUS_LU) == 0) { 13751 sc->sc_tbi_linkup = 0; 13752 /* If the timer expired, retry autonegotiation */ 13753 if ((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) 13754 && (++sc->sc_tbi_serdes_ticks 13755 >= sc->sc_tbi_serdes_anegticks)) { 13756 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s: EXPIRE\n", 13757 device_xname(sc->sc_dev), __func__)); 13758 sc->sc_tbi_serdes_ticks = 0; 13759 /* 13760 * Reset the link, and let autonegotiation do 13761 * its thing 13762 */ 13763 sc->sc_ctrl |= CTRL_LRST; 13764 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13765 CSR_WRITE_FLUSH(sc); 13766 delay(1000); 13767 sc->sc_ctrl &= ~CTRL_LRST; 13768 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13769 CSR_WRITE_FLUSH(sc); 13770 delay(1000); 13771 CSR_WRITE(sc, WMREG_TXCW, 13772 sc->sc_txcw & ~TXCW_ANE); 13773 CSR_WRITE(sc, WMREG_TXCW, sc->sc_txcw); 13774 } 13775 } 13776 13777 setled: 13778 wm_tbi_serdes_set_linkled(sc); 13779 } 13780 13781 /* SERDES related */ 13782 static void 13783 wm_serdes_power_up_link_82575(struct wm_softc *sc) 13784 { 13785 uint32_t reg; 13786 13787 if ((sc->sc_mediatype != WM_MEDIATYPE_SERDES) 13788 && ((sc->sc_flags & WM_F_SGMII) == 0)) 13789 return; 13790 13791 /* Enable PCS to turn on link */ 13792 reg = CSR_READ(sc, WMREG_PCS_CFG); 13793 reg |= PCS_CFG_PCS_EN; 13794 CSR_WRITE(sc, WMREG_PCS_CFG, reg); 13795 13796 /* Power up the laser */ 13797 reg = CSR_READ(sc, WMREG_CTRL_EXT); 13798 reg &= ~CTRL_EXT_SWDPIN(3); 13799 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 13800 13801 /* Flush the write to verify completion */ 13802 CSR_WRITE_FLUSH(sc); 13803 delay(1000); 13804 } 13805 13806 static int 13807 wm_serdes_mediachange(struct ifnet *ifp) 13808 { 13809 struct wm_softc *sc = ifp->if_softc; 13810 bool pcs_autoneg = true; /* XXX */ 13811 uint32_t ctrl_ext, pcs_lctl, reg; 13812 13813 if ((sc->sc_mediatype != WM_MEDIATYPE_SERDES) 13814 && ((sc->sc_flags & WM_F_SGMII) == 0)) 13815 return 0; 13816 13817 /* XXX Currently, this function is not called on 8257[12] */ 13818 if ((sc->sc_type == WM_T_82571) || (sc->sc_type == WM_T_82572) 13819 || (sc->sc_type >= WM_T_82575)) 13820 CSR_WRITE(sc, WMREG_SCTL, SCTL_DISABLE_SERDES_LOOPBACK); 13821 13822 /* Power on the sfp cage if present */ 13823 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT); 13824 ctrl_ext &= ~CTRL_EXT_SWDPIN(3); 13825 ctrl_ext |= CTRL_EXT_I2C_ENA; 13826 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext); 13827 13828 sc->sc_ctrl |= CTRL_SLU; 13829 13830 if ((sc->sc_type == WM_T_82575) || (sc->sc_type == WM_T_82576)) { 13831 sc->sc_ctrl |= CTRL_SWDPIN(0) | CTRL_SWDPIN(1); 13832 13833 reg = CSR_READ(sc, WMREG_CONNSW); 13834 reg |= CONNSW_ENRGSRC; 13835 CSR_WRITE(sc, WMREG_CONNSW, reg); 13836 } 13837 13838 pcs_lctl = CSR_READ(sc, WMREG_PCS_LCTL); 13839 switch (ctrl_ext & CTRL_EXT_LINK_MODE_MASK) { 13840 case CTRL_EXT_LINK_MODE_SGMII: 13841 /* SGMII mode lets the phy handle forcing speed/duplex */ 13842 pcs_autoneg = true; 13843 /* Autoneg time out should be disabled for SGMII mode */ 13844 pcs_lctl &= ~PCS_LCTL_AN_TIMEOUT; 13845 break; 13846 case CTRL_EXT_LINK_MODE_1000KX: 13847 pcs_autoneg = false; 13848 /* FALLTHROUGH */ 13849 default: 13850 if ((sc->sc_type == WM_T_82575) 13851 || (sc->sc_type == WM_T_82576)) { 13852 if ((sc->sc_flags & WM_F_PCS_DIS_AUTONEGO) != 0) 13853 pcs_autoneg = false; 13854 } 13855 sc->sc_ctrl |= CTRL_SPEED_1000 | CTRL_FRCSPD | CTRL_FD 13856 | CTRL_FRCFDX; 13857 13858 /* Set speed of 1000/Full if speed/duplex is forced */ 13859 pcs_lctl |= PCS_LCTL_FSV_1000 | PCS_LCTL_FDV_FULL; 13860 } 13861 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl); 13862 13863 pcs_lctl &= ~(PCS_LCTL_AN_ENABLE | PCS_LCTL_FLV_LINK_UP | 13864 PCS_LCTL_FSD | PCS_LCTL_FORCE_LINK); 13865 13866 if (pcs_autoneg) { 13867 /* Set PCS register for autoneg */ 13868 pcs_lctl |= PCS_LCTL_AN_ENABLE | PCS_LCTL_AN_RESTART; 13869 13870 /* Disable force flow control for autoneg */ 13871 pcs_lctl &= ~PCS_LCTL_FORCE_FC; 13872 13873 /* Configure flow control advertisement for autoneg */ 13874 reg = CSR_READ(sc, WMREG_PCS_ANADV); 13875 reg &= ~(TXCW_ASYM_PAUSE | TXCW_SYM_PAUSE); 13876 reg |= TXCW_ASYM_PAUSE | TXCW_SYM_PAUSE; 13877 CSR_WRITE(sc, WMREG_PCS_ANADV, reg); 13878 } else 13879 pcs_lctl |= PCS_LCTL_FSD | PCS_LCTL_FORCE_FC; 13880 13881 CSR_WRITE(sc, WMREG_PCS_LCTL, pcs_lctl); 13882 13883 return 0; 13884 } 13885 13886 static void 13887 wm_serdes_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) 13888 { 13889 struct wm_softc *sc = ifp->if_softc; 13890 struct mii_data *mii = &sc->sc_mii; 13891 struct ifmedia_entry *ife = mii->mii_media.ifm_cur; 13892 uint32_t pcs_adv, pcs_lpab, reg; 13893 13894 ifmr->ifm_status = IFM_AVALID; 13895 ifmr->ifm_active = IFM_ETHER; 13896 13897 /* Check PCS */ 13898 reg = CSR_READ(sc, WMREG_PCS_LSTS); 13899 if ((reg & PCS_LSTS_LINKOK) == 0) { 13900 ifmr->ifm_active |= IFM_NONE; 13901 sc->sc_tbi_linkup = 0; 13902 goto setled; 13903 } 13904 13905 sc->sc_tbi_linkup = 1; 13906 ifmr->ifm_status |= IFM_ACTIVE; 13907 if (sc->sc_type == WM_T_I354) { 13908 uint32_t status; 13909 13910 status = CSR_READ(sc, WMREG_STATUS); 13911 if (((status & STATUS_2P5_SKU) != 0) 13912 && ((status & STATUS_2P5_SKU_OVER) == 0)) { 13913 ifmr->ifm_active |= IFM_2500_KX; 13914 } else 13915 ifmr->ifm_active |= IFM_1000_KX; 13916 } else { 13917 switch (__SHIFTOUT(reg, PCS_LSTS_SPEED)) { 13918 case PCS_LSTS_SPEED_10: 13919 ifmr->ifm_active |= IFM_10_T; /* XXX */ 13920 break; 13921 case PCS_LSTS_SPEED_100: 13922 ifmr->ifm_active |= IFM_100_FX; /* XXX */ 13923 break; 13924 case PCS_LSTS_SPEED_1000: 13925 ifmr->ifm_active |= IFM_1000_SX; /* XXX */ 13926 break; 13927 default: 13928 device_printf(sc->sc_dev, "Unknown speed\n"); 13929 ifmr->ifm_active |= IFM_1000_SX; /* XXX */ 13930 break; 13931 } 13932 } 13933 ifp->if_baudrate = ifmedia_baudrate(ifmr->ifm_active); 13934 if ((reg & PCS_LSTS_FDX) != 0) 13935 ifmr->ifm_active |= IFM_FDX; 13936 else 13937 ifmr->ifm_active |= IFM_HDX; 13938 mii->mii_media_active &= ~IFM_ETH_FMASK; 13939 if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) { 13940 /* Check flow */ 13941 reg = CSR_READ(sc, WMREG_PCS_LSTS); 13942 if ((reg & PCS_LSTS_AN_COMP) == 0) { 13943 DPRINTF(sc, WM_DEBUG_LINK, 13944 ("XXX LINKOK but not ACOMP\n")); 13945 goto setled; 13946 } 13947 pcs_adv = CSR_READ(sc, WMREG_PCS_ANADV); 13948 pcs_lpab = CSR_READ(sc, WMREG_PCS_LPAB); 13949 DPRINTF(sc, WM_DEBUG_LINK, 13950 ("XXX AN result(2) %08x, %08x\n", pcs_adv, pcs_lpab)); 13951 if ((pcs_adv & TXCW_SYM_PAUSE) 13952 && (pcs_lpab & TXCW_SYM_PAUSE)) { 13953 mii->mii_media_active |= IFM_FLOW 13954 | IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE; 13955 } else if (((pcs_adv & TXCW_SYM_PAUSE) == 0) 13956 && (pcs_adv & TXCW_ASYM_PAUSE) 13957 && (pcs_lpab & TXCW_SYM_PAUSE) 13958 && (pcs_lpab & TXCW_ASYM_PAUSE)) { 13959 mii->mii_media_active |= IFM_FLOW 13960 | IFM_ETH_TXPAUSE; 13961 } else if ((pcs_adv & TXCW_SYM_PAUSE) 13962 && (pcs_adv & TXCW_ASYM_PAUSE) 13963 && ((pcs_lpab & TXCW_SYM_PAUSE) == 0) 13964 && (pcs_lpab & TXCW_ASYM_PAUSE)) { 13965 mii->mii_media_active |= IFM_FLOW 13966 | IFM_ETH_RXPAUSE; 13967 } 13968 } 13969 ifmr->ifm_active = (ifmr->ifm_active & ~IFM_ETH_FMASK) 13970 | (mii->mii_media_active & IFM_ETH_FMASK); 13971 setled: 13972 wm_tbi_serdes_set_linkled(sc); 13973 } 13974 13975 /* 13976 * wm_serdes_tick: 13977 * 13978 * Check the link on serdes devices. 13979 */ 13980 static void 13981 wm_serdes_tick(struct wm_softc *sc) 13982 { 13983 struct ifnet *ifp = &sc->sc_ethercom.ec_if; 13984 struct mii_data *mii = &sc->sc_mii; 13985 struct ifmedia_entry *ife = mii->mii_media.ifm_cur; 13986 uint32_t reg; 13987 13988 KASSERT(mutex_owned(sc->sc_core_lock)); 13989 13990 mii->mii_media_status = IFM_AVALID; 13991 mii->mii_media_active = IFM_ETHER; 13992 13993 /* Check PCS */ 13994 reg = CSR_READ(sc, WMREG_PCS_LSTS); 13995 if ((reg & PCS_LSTS_LINKOK) != 0) { 13996 mii->mii_media_status |= IFM_ACTIVE; 13997 sc->sc_tbi_linkup = 1; 13998 sc->sc_tbi_serdes_ticks = 0; 13999 mii->mii_media_active |= IFM_1000_SX; /* XXX */ 14000 if ((reg & PCS_LSTS_FDX) != 0) 14001 mii->mii_media_active |= IFM_FDX; 14002 else 14003 mii->mii_media_active |= IFM_HDX; 14004 } else { 14005 mii->mii_media_status |= IFM_NONE; 14006 sc->sc_tbi_linkup = 0; 14007 /* If the timer expired, retry autonegotiation */ 14008 if ((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) 14009 && (++sc->sc_tbi_serdes_ticks 14010 >= sc->sc_tbi_serdes_anegticks)) { 14011 DPRINTF(sc, WM_DEBUG_LINK, ("%s: %s: EXPIRE\n", 14012 device_xname(sc->sc_dev), __func__)); 14013 sc->sc_tbi_serdes_ticks = 0; 14014 /* XXX */ 14015 wm_serdes_mediachange(ifp); 14016 } 14017 } 14018 14019 wm_tbi_serdes_set_linkled(sc); 14020 } 14021 14022 /* SFP related */ 14023 14024 static int 14025 wm_sfp_read_data_byte(struct wm_softc *sc, uint16_t offset, uint8_t *data) 14026 { 14027 uint32_t i2ccmd; 14028 int i; 14029 14030 i2ccmd = (offset << I2CCMD_REG_ADDR_SHIFT) | I2CCMD_OPCODE_READ; 14031 CSR_WRITE(sc, WMREG_I2CCMD, i2ccmd); 14032 14033 /* Poll the ready bit */ 14034 for (i = 0; i < I2CCMD_PHY_TIMEOUT; i++) { 14035 delay(50); 14036 i2ccmd = CSR_READ(sc, WMREG_I2CCMD); 14037 if (i2ccmd & I2CCMD_READY) 14038 break; 14039 } 14040 if ((i2ccmd & I2CCMD_READY) == 0) 14041 return -1; 14042 if ((i2ccmd & I2CCMD_ERROR) != 0) 14043 return -1; 14044 14045 *data = i2ccmd & 0x00ff; 14046 14047 return 0; 14048 } 14049 14050 static uint32_t 14051 wm_sfp_get_media_type(struct wm_softc *sc) 14052 { 14053 uint32_t ctrl_ext; 14054 uint8_t val = 0; 14055 int timeout = 3; 14056 uint32_t mediatype = WM_MEDIATYPE_UNKNOWN; 14057 int rv = -1; 14058 14059 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT); 14060 ctrl_ext &= ~CTRL_EXT_SWDPIN(3); 14061 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext | CTRL_EXT_I2C_ENA); 14062 CSR_WRITE_FLUSH(sc); 14063 14064 /* Read SFP module data */ 14065 while (timeout) { 14066 rv = wm_sfp_read_data_byte(sc, SFF_SFP_ID_OFF, &val); 14067 if (rv == 0) 14068 break; 14069 delay(100*1000); /* XXX too big */ 14070 timeout--; 14071 } 14072 if (rv != 0) 14073 goto out; 14074 14075 switch (val) { 14076 case SFF_SFP_ID_SFF: 14077 aprint_normal_dev(sc->sc_dev, 14078 "Module/Connector soldered to board\n"); 14079 break; 14080 case SFF_SFP_ID_SFP: 14081 sc->sc_flags |= WM_F_SFP; 14082 break; 14083 case SFF_SFP_ID_UNKNOWN: 14084 goto out; 14085 default: 14086 break; 14087 } 14088 14089 rv = wm_sfp_read_data_byte(sc, SFF_SFP_ETH_FLAGS_OFF, &val); 14090 if (rv != 0) 14091 goto out; 14092 14093 sc->sc_sfptype = val; 14094 if ((val & (SFF_SFP_ETH_FLAGS_1000SX | SFF_SFP_ETH_FLAGS_1000LX)) != 0) 14095 mediatype = WM_MEDIATYPE_SERDES; 14096 else if ((val & SFF_SFP_ETH_FLAGS_1000T) != 0) { 14097 sc->sc_flags |= WM_F_SGMII; 14098 mediatype = WM_MEDIATYPE_COPPER; 14099 } else if ((val & SFF_SFP_ETH_FLAGS_100FX) != 0) { 14100 sc->sc_flags |= WM_F_SGMII; 14101 mediatype = WM_MEDIATYPE_SERDES; 14102 } else { 14103 device_printf(sc->sc_dev, "%s: unknown media type? (0x%hhx)\n", 14104 __func__, sc->sc_sfptype); 14105 sc->sc_sfptype = 0; /* XXX unknown */ 14106 } 14107 14108 out: 14109 /* Restore I2C interface setting */ 14110 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext); 14111 14112 return mediatype; 14113 } 14114 14115 /* 14116 * NVM related. 14117 * Microwire, SPI (w/wo EERD) and Flash. 14118 */ 14119 14120 /* Both spi and uwire */ 14121 14122 /* 14123 * wm_eeprom_sendbits: 14124 * 14125 * Send a series of bits to the EEPROM. 14126 */ 14127 static void 14128 wm_eeprom_sendbits(struct wm_softc *sc, uint32_t bits, int nbits) 14129 { 14130 uint32_t reg; 14131 int x; 14132 14133 reg = CSR_READ(sc, WMREG_EECD); 14134 14135 for (x = nbits; x > 0; x--) { 14136 if (bits & (1U << (x - 1))) 14137 reg |= EECD_DI; 14138 else 14139 reg &= ~EECD_DI; 14140 CSR_WRITE(sc, WMREG_EECD, reg); 14141 CSR_WRITE_FLUSH(sc); 14142 delay(2); 14143 CSR_WRITE(sc, WMREG_EECD, reg | EECD_SK); 14144 CSR_WRITE_FLUSH(sc); 14145 delay(2); 14146 CSR_WRITE(sc, WMREG_EECD, reg); 14147 CSR_WRITE_FLUSH(sc); 14148 delay(2); 14149 } 14150 } 14151 14152 /* 14153 * wm_eeprom_recvbits: 14154 * 14155 * Receive a series of bits from the EEPROM. 14156 */ 14157 static void 14158 wm_eeprom_recvbits(struct wm_softc *sc, uint32_t *valp, int nbits) 14159 { 14160 uint32_t reg, val; 14161 int x; 14162 14163 reg = CSR_READ(sc, WMREG_EECD) & ~EECD_DI; 14164 14165 val = 0; 14166 for (x = nbits; x > 0; x--) { 14167 CSR_WRITE(sc, WMREG_EECD, reg | EECD_SK); 14168 CSR_WRITE_FLUSH(sc); 14169 delay(2); 14170 if (CSR_READ(sc, WMREG_EECD) & EECD_DO) 14171 val |= (1U << (x - 1)); 14172 CSR_WRITE(sc, WMREG_EECD, reg); 14173 CSR_WRITE_FLUSH(sc); 14174 delay(2); 14175 } 14176 *valp = val; 14177 } 14178 14179 /* Microwire */ 14180 14181 /* 14182 * wm_nvm_read_uwire: 14183 * 14184 * Read a word from the EEPROM using the MicroWire protocol. 14185 */ 14186 static int 14187 wm_nvm_read_uwire(struct wm_softc *sc, int word, int wordcnt, uint16_t *data) 14188 { 14189 uint32_t reg, val; 14190 int i, rv; 14191 14192 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14193 device_xname(sc->sc_dev), __func__)); 14194 14195 rv = sc->nvm.acquire(sc); 14196 if (rv != 0) 14197 return rv; 14198 14199 for (i = 0; i < wordcnt; i++) { 14200 /* Clear SK and DI. */ 14201 reg = CSR_READ(sc, WMREG_EECD) & ~(EECD_SK | EECD_DI); 14202 CSR_WRITE(sc, WMREG_EECD, reg); 14203 14204 /* 14205 * XXX: workaround for a bug in qemu-0.12.x and prior 14206 * and Xen. 14207 * 14208 * We use this workaround only for 82540 because qemu's 14209 * e1000 act as 82540. 14210 */ 14211 if (sc->sc_type == WM_T_82540) { 14212 reg |= EECD_SK; 14213 CSR_WRITE(sc, WMREG_EECD, reg); 14214 reg &= ~EECD_SK; 14215 CSR_WRITE(sc, WMREG_EECD, reg); 14216 CSR_WRITE_FLUSH(sc); 14217 delay(2); 14218 } 14219 /* XXX: end of workaround */ 14220 14221 /* Set CHIP SELECT. */ 14222 reg |= EECD_CS; 14223 CSR_WRITE(sc, WMREG_EECD, reg); 14224 CSR_WRITE_FLUSH(sc); 14225 delay(2); 14226 14227 /* Shift in the READ command. */ 14228 wm_eeprom_sendbits(sc, UWIRE_OPC_READ, 3); 14229 14230 /* Shift in address. */ 14231 wm_eeprom_sendbits(sc, word + i, sc->sc_nvm_addrbits); 14232 14233 /* Shift out the data. */ 14234 wm_eeprom_recvbits(sc, &val, 16); 14235 data[i] = val & 0xffff; 14236 14237 /* Clear CHIP SELECT. */ 14238 reg = CSR_READ(sc, WMREG_EECD) & ~EECD_CS; 14239 CSR_WRITE(sc, WMREG_EECD, reg); 14240 CSR_WRITE_FLUSH(sc); 14241 delay(2); 14242 } 14243 14244 sc->nvm.release(sc); 14245 return 0; 14246 } 14247 14248 /* SPI */ 14249 14250 /* 14251 * Set SPI and FLASH related information from the EECD register. 14252 * For 82541 and 82547, the word size is taken from EEPROM. 14253 */ 14254 static int 14255 wm_nvm_set_addrbits_size_eecd(struct wm_softc *sc) 14256 { 14257 int size; 14258 uint32_t reg; 14259 uint16_t data; 14260 14261 reg = CSR_READ(sc, WMREG_EECD); 14262 sc->sc_nvm_addrbits = (reg & EECD_EE_ABITS) ? 16 : 8; 14263 14264 /* Read the size of NVM from EECD by default */ 14265 size = __SHIFTOUT(reg, EECD_EE_SIZE_EX_MASK); 14266 switch (sc->sc_type) { 14267 case WM_T_82541: 14268 case WM_T_82541_2: 14269 case WM_T_82547: 14270 case WM_T_82547_2: 14271 /* Set dummy value to access EEPROM */ 14272 sc->sc_nvm_wordsize = 64; 14273 if (wm_nvm_read(sc, NVM_OFF_EEPROM_SIZE, 1, &data) != 0) { 14274 aprint_error_dev(sc->sc_dev, 14275 "%s: failed to read EEPROM size\n", __func__); 14276 } 14277 reg = data; 14278 size = __SHIFTOUT(reg, EECD_EE_SIZE_EX_MASK); 14279 if (size == 0) 14280 size = 6; /* 64 word size */ 14281 else 14282 size += NVM_WORD_SIZE_BASE_SHIFT + 1; 14283 break; 14284 case WM_T_80003: 14285 case WM_T_82571: 14286 case WM_T_82572: 14287 case WM_T_82573: /* SPI case */ 14288 case WM_T_82574: /* SPI case */ 14289 case WM_T_82583: /* SPI case */ 14290 size += NVM_WORD_SIZE_BASE_SHIFT; 14291 if (size > 14) 14292 size = 14; 14293 break; 14294 case WM_T_82575: 14295 case WM_T_82576: 14296 case WM_T_82580: 14297 case WM_T_I350: 14298 case WM_T_I354: 14299 case WM_T_I210: 14300 case WM_T_I211: 14301 size += NVM_WORD_SIZE_BASE_SHIFT; 14302 if (size > 15) 14303 size = 15; 14304 break; 14305 default: 14306 aprint_error_dev(sc->sc_dev, 14307 "%s: unknown device(%d)?\n", __func__, sc->sc_type); 14308 return -1; 14309 break; 14310 } 14311 14312 sc->sc_nvm_wordsize = 1 << size; 14313 14314 return 0; 14315 } 14316 14317 /* 14318 * wm_nvm_ready_spi: 14319 * 14320 * Wait for a SPI EEPROM to be ready for commands. 14321 */ 14322 static int 14323 wm_nvm_ready_spi(struct wm_softc *sc) 14324 { 14325 uint32_t val; 14326 int usec; 14327 14328 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14329 device_xname(sc->sc_dev), __func__)); 14330 14331 for (usec = 0; usec < SPI_MAX_RETRIES; delay(5), usec += 5) { 14332 wm_eeprom_sendbits(sc, SPI_OPC_RDSR, 8); 14333 wm_eeprom_recvbits(sc, &val, 8); 14334 if ((val & SPI_SR_RDY) == 0) 14335 break; 14336 } 14337 if (usec >= SPI_MAX_RETRIES) { 14338 aprint_error_dev(sc->sc_dev,"EEPROM failed to become ready\n"); 14339 return -1; 14340 } 14341 return 0; 14342 } 14343 14344 /* 14345 * wm_nvm_read_spi: 14346 * 14347 * Read a work from the EEPROM using the SPI protocol. 14348 */ 14349 static int 14350 wm_nvm_read_spi(struct wm_softc *sc, int word, int wordcnt, uint16_t *data) 14351 { 14352 uint32_t reg, val; 14353 int i; 14354 uint8_t opc; 14355 int rv; 14356 14357 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14358 device_xname(sc->sc_dev), __func__)); 14359 14360 rv = sc->nvm.acquire(sc); 14361 if (rv != 0) 14362 return rv; 14363 14364 /* Clear SK and CS. */ 14365 reg = CSR_READ(sc, WMREG_EECD) & ~(EECD_SK | EECD_CS); 14366 CSR_WRITE(sc, WMREG_EECD, reg); 14367 CSR_WRITE_FLUSH(sc); 14368 delay(2); 14369 14370 if ((rv = wm_nvm_ready_spi(sc)) != 0) 14371 goto out; 14372 14373 /* Toggle CS to flush commands. */ 14374 CSR_WRITE(sc, WMREG_EECD, reg | EECD_CS); 14375 CSR_WRITE_FLUSH(sc); 14376 delay(2); 14377 CSR_WRITE(sc, WMREG_EECD, reg); 14378 CSR_WRITE_FLUSH(sc); 14379 delay(2); 14380 14381 opc = SPI_OPC_READ; 14382 if (sc->sc_nvm_addrbits == 8 && word >= 128) 14383 opc |= SPI_OPC_A8; 14384 14385 wm_eeprom_sendbits(sc, opc, 8); 14386 wm_eeprom_sendbits(sc, word << 1, sc->sc_nvm_addrbits); 14387 14388 for (i = 0; i < wordcnt; i++) { 14389 wm_eeprom_recvbits(sc, &val, 16); 14390 data[i] = ((val >> 8) & 0xff) | ((val & 0xff) << 8); 14391 } 14392 14393 /* Raise CS and clear SK. */ 14394 reg = (CSR_READ(sc, WMREG_EECD) & ~EECD_SK) | EECD_CS; 14395 CSR_WRITE(sc, WMREG_EECD, reg); 14396 CSR_WRITE_FLUSH(sc); 14397 delay(2); 14398 14399 out: 14400 sc->nvm.release(sc); 14401 return rv; 14402 } 14403 14404 /* Using with EERD */ 14405 14406 static int 14407 wm_poll_eerd_eewr_done(struct wm_softc *sc, int rw) 14408 { 14409 uint32_t attempts = 100000; 14410 uint32_t i, reg = 0; 14411 int32_t done = -1; 14412 14413 for (i = 0; i < attempts; i++) { 14414 reg = CSR_READ(sc, rw); 14415 14416 if (reg & EERD_DONE) { 14417 done = 0; 14418 break; 14419 } 14420 delay(5); 14421 } 14422 14423 return done; 14424 } 14425 14426 static int 14427 wm_nvm_read_eerd(struct wm_softc *sc, int offset, int wordcnt, uint16_t *data) 14428 { 14429 int i, eerd = 0; 14430 int rv; 14431 14432 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14433 device_xname(sc->sc_dev), __func__)); 14434 14435 rv = sc->nvm.acquire(sc); 14436 if (rv != 0) 14437 return rv; 14438 14439 for (i = 0; i < wordcnt; i++) { 14440 eerd = ((offset + i) << EERD_ADDR_SHIFT) | EERD_START; 14441 CSR_WRITE(sc, WMREG_EERD, eerd); 14442 rv = wm_poll_eerd_eewr_done(sc, WMREG_EERD); 14443 if (rv != 0) { 14444 aprint_error_dev(sc->sc_dev, "EERD polling failed: " 14445 "offset=%d. wordcnt=%d\n", offset, wordcnt); 14446 break; 14447 } 14448 data[i] = (CSR_READ(sc, WMREG_EERD) >> EERD_DATA_SHIFT); 14449 } 14450 14451 sc->nvm.release(sc); 14452 return rv; 14453 } 14454 14455 /* Flash */ 14456 14457 static int 14458 wm_nvm_valid_bank_detect_ich8lan(struct wm_softc *sc, unsigned int *bank) 14459 { 14460 uint32_t eecd; 14461 uint32_t act_offset = ICH_NVM_SIG_WORD * 2 + 1; 14462 uint32_t bank1_offset = sc->sc_ich8_flash_bank_size * sizeof(uint16_t); 14463 uint32_t nvm_dword = 0; 14464 uint8_t sig_byte = 0; 14465 int rv; 14466 14467 switch (sc->sc_type) { 14468 case WM_T_PCH_SPT: 14469 case WM_T_PCH_CNP: 14470 case WM_T_PCH_TGP: 14471 bank1_offset = sc->sc_ich8_flash_bank_size * 2; 14472 act_offset = ICH_NVM_SIG_WORD * 2; 14473 14474 /* Set bank to 0 in case flash read fails. */ 14475 *bank = 0; 14476 14477 /* Check bank 0 */ 14478 rv = wm_read_ich8_dword(sc, act_offset, &nvm_dword); 14479 if (rv != 0) 14480 return rv; 14481 sig_byte = (uint8_t)((nvm_dword & 0xFF00) >> 8); 14482 if ((sig_byte & ICH_NVM_VALID_SIG_MASK) == ICH_NVM_SIG_VALUE) { 14483 *bank = 0; 14484 return 0; 14485 } 14486 14487 /* Check bank 1 */ 14488 rv = wm_read_ich8_dword(sc, act_offset + bank1_offset, 14489 &nvm_dword); 14490 sig_byte = (uint8_t)((nvm_dword & 0xFF00) >> 8); 14491 if ((sig_byte & ICH_NVM_VALID_SIG_MASK) == ICH_NVM_SIG_VALUE) { 14492 *bank = 1; 14493 return 0; 14494 } 14495 aprint_error_dev(sc->sc_dev, 14496 "%s: no valid NVM bank present (%u)\n", __func__, *bank); 14497 return -1; 14498 case WM_T_ICH8: 14499 case WM_T_ICH9: 14500 eecd = CSR_READ(sc, WMREG_EECD); 14501 if ((eecd & EECD_SEC1VAL_VALMASK) == EECD_SEC1VAL_VALMASK) { 14502 *bank = ((eecd & EECD_SEC1VAL) != 0) ? 1 : 0; 14503 return 0; 14504 } 14505 /* FALLTHROUGH */ 14506 default: 14507 /* Default to 0 */ 14508 *bank = 0; 14509 14510 /* Check bank 0 */ 14511 wm_read_ich8_byte(sc, act_offset, &sig_byte); 14512 if ((sig_byte & ICH_NVM_VALID_SIG_MASK) == ICH_NVM_SIG_VALUE) { 14513 *bank = 0; 14514 return 0; 14515 } 14516 14517 /* Check bank 1 */ 14518 wm_read_ich8_byte(sc, act_offset + bank1_offset, 14519 &sig_byte); 14520 if ((sig_byte & ICH_NVM_VALID_SIG_MASK) == ICH_NVM_SIG_VALUE) { 14521 *bank = 1; 14522 return 0; 14523 } 14524 } 14525 14526 DPRINTF(sc, WM_DEBUG_NVM, ("%s: No valid NVM bank present\n", 14527 device_xname(sc->sc_dev))); 14528 return -1; 14529 } 14530 14531 /****************************************************************************** 14532 * This function does initial flash setup so that a new read/write/erase cycle 14533 * can be started. 14534 * 14535 * sc - The pointer to the hw structure 14536 ****************************************************************************/ 14537 static int32_t 14538 wm_ich8_cycle_init(struct wm_softc *sc) 14539 { 14540 uint16_t hsfsts; 14541 int32_t error = 1; 14542 int32_t i = 0; 14543 14544 if (sc->sc_type >= WM_T_PCH_SPT) 14545 hsfsts = ICH8_FLASH_READ32(sc, ICH_FLASH_HSFSTS) & 0xffffUL; 14546 else 14547 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS); 14548 14549 /* May be check the Flash Des Valid bit in Hw status */ 14550 if ((hsfsts & HSFSTS_FLDVAL) == 0) 14551 return error; 14552 14553 /* Clear FCERR in Hw status by writing 1 */ 14554 /* Clear DAEL in Hw status by writing a 1 */ 14555 hsfsts |= HSFSTS_ERR | HSFSTS_DAEL; 14556 14557 if (sc->sc_type >= WM_T_PCH_SPT) 14558 ICH8_FLASH_WRITE32(sc, ICH_FLASH_HSFSTS, hsfsts & 0xffffUL); 14559 else 14560 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, hsfsts); 14561 14562 /* 14563 * Either we should have a hardware SPI cycle in progress bit to check 14564 * against, in order to start a new cycle or FDONE bit should be 14565 * changed in the hardware so that it is 1 after hardware reset, which 14566 * can then be used as an indication whether a cycle is in progress or 14567 * has been completed .. we should also have some software semaphore 14568 * mechanism to guard FDONE or the cycle in progress bit so that two 14569 * threads access to those bits can be sequentiallized or a way so that 14570 * 2 threads don't start the cycle at the same time 14571 */ 14572 14573 if ((hsfsts & HSFSTS_FLINPRO) == 0) { 14574 /* 14575 * There is no cycle running at present, so we can start a 14576 * cycle 14577 */ 14578 14579 /* Begin by setting Flash Cycle Done. */ 14580 hsfsts |= HSFSTS_DONE; 14581 if (sc->sc_type >= WM_T_PCH_SPT) 14582 ICH8_FLASH_WRITE32(sc, ICH_FLASH_HSFSTS, 14583 hsfsts & 0xffffUL); 14584 else 14585 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, hsfsts); 14586 error = 0; 14587 } else { 14588 /* 14589 * Otherwise poll for sometime so the current cycle has a 14590 * chance to end before giving up. 14591 */ 14592 for (i = 0; i < ICH_FLASH_COMMAND_TIMEOUT; i++) { 14593 if (sc->sc_type >= WM_T_PCH_SPT) 14594 hsfsts = ICH8_FLASH_READ32(sc, 14595 ICH_FLASH_HSFSTS) & 0xffffUL; 14596 else 14597 hsfsts = ICH8_FLASH_READ16(sc, 14598 ICH_FLASH_HSFSTS); 14599 if ((hsfsts & HSFSTS_FLINPRO) == 0) { 14600 error = 0; 14601 break; 14602 } 14603 delay(1); 14604 } 14605 if (error == 0) { 14606 /* 14607 * Successful in waiting for previous cycle to timeout, 14608 * now set the Flash Cycle Done. 14609 */ 14610 hsfsts |= HSFSTS_DONE; 14611 if (sc->sc_type >= WM_T_PCH_SPT) 14612 ICH8_FLASH_WRITE32(sc, ICH_FLASH_HSFSTS, 14613 hsfsts & 0xffffUL); 14614 else 14615 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFSTS, 14616 hsfsts); 14617 } 14618 } 14619 return error; 14620 } 14621 14622 /****************************************************************************** 14623 * This function starts a flash cycle and waits for its completion 14624 * 14625 * sc - The pointer to the hw structure 14626 ****************************************************************************/ 14627 static int32_t 14628 wm_ich8_flash_cycle(struct wm_softc *sc, uint32_t timeout) 14629 { 14630 uint16_t hsflctl; 14631 uint16_t hsfsts; 14632 int32_t error = 1; 14633 uint32_t i = 0; 14634 14635 /* Start a cycle by writing 1 in Flash Cycle Go in Hw Flash Control */ 14636 if (sc->sc_type >= WM_T_PCH_SPT) 14637 hsflctl = ICH8_FLASH_READ32(sc, ICH_FLASH_HSFSTS) >> 16; 14638 else 14639 hsflctl = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFCTL); 14640 hsflctl |= HSFCTL_GO; 14641 if (sc->sc_type >= WM_T_PCH_SPT) 14642 ICH8_FLASH_WRITE32(sc, ICH_FLASH_HSFSTS, 14643 (uint32_t)hsflctl << 16); 14644 else 14645 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFCTL, hsflctl); 14646 14647 /* Wait till FDONE bit is set to 1 */ 14648 do { 14649 if (sc->sc_type >= WM_T_PCH_SPT) 14650 hsfsts = ICH8_FLASH_READ32(sc, ICH_FLASH_HSFSTS) 14651 & 0xffffUL; 14652 else 14653 hsfsts = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFSTS); 14654 if (hsfsts & HSFSTS_DONE) 14655 break; 14656 delay(1); 14657 i++; 14658 } while (i < timeout); 14659 if ((hsfsts & HSFSTS_DONE) == 1 && (hsfsts & HSFSTS_ERR) == 0) 14660 error = 0; 14661 14662 return error; 14663 } 14664 14665 /****************************************************************************** 14666 * Reads a byte or (d)word from the NVM using the ICH8 flash access registers. 14667 * 14668 * sc - The pointer to the hw structure 14669 * index - The index of the byte or word to read. 14670 * size - Size of data to read, 1=byte 2=word, 4=dword 14671 * data - Pointer to the word to store the value read. 14672 *****************************************************************************/ 14673 static int32_t 14674 wm_read_ich8_data(struct wm_softc *sc, uint32_t index, 14675 uint32_t size, uint32_t *data) 14676 { 14677 uint16_t hsfsts; 14678 uint16_t hsflctl; 14679 uint32_t flash_linear_address; 14680 uint32_t flash_data = 0; 14681 int32_t error = 1; 14682 int32_t count = 0; 14683 14684 if (size < 1 || size > 4 || data == 0x0 || 14685 index > ICH_FLASH_LINEAR_ADDR_MASK) 14686 return error; 14687 14688 flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) + 14689 sc->sc_ich8_flash_base; 14690 14691 do { 14692 delay(1); 14693 /* Steps */ 14694 error = wm_ich8_cycle_init(sc); 14695 if (error) 14696 break; 14697 14698 if (sc->sc_type >= WM_T_PCH_SPT) 14699 hsflctl = ICH8_FLASH_READ32(sc, ICH_FLASH_HSFSTS) 14700 >> 16; 14701 else 14702 hsflctl = ICH8_FLASH_READ16(sc, ICH_FLASH_HSFCTL); 14703 /* 0b/1b corresponds to 1 or 2 byte size, respectively. */ 14704 hsflctl |= ((size - 1) << HSFCTL_BCOUNT_SHIFT) 14705 & HSFCTL_BCOUNT_MASK; 14706 hsflctl |= ICH_CYCLE_READ << HSFCTL_CYCLE_SHIFT; 14707 if (sc->sc_type >= WM_T_PCH_SPT) { 14708 /* 14709 * In SPT, This register is in Lan memory space, not 14710 * flash. Therefore, only 32 bit access is supported. 14711 */ 14712 ICH8_FLASH_WRITE32(sc, ICH_FLASH_HSFSTS, 14713 (uint32_t)hsflctl << 16); 14714 } else 14715 ICH8_FLASH_WRITE16(sc, ICH_FLASH_HSFCTL, hsflctl); 14716 14717 /* 14718 * Write the last 24 bits of index into Flash Linear address 14719 * field in Flash Address 14720 */ 14721 /* TODO: TBD maybe check the index against the size of flash */ 14722 14723 ICH8_FLASH_WRITE32(sc, ICH_FLASH_FADDR, flash_linear_address); 14724 14725 error = wm_ich8_flash_cycle(sc, ICH_FLASH_COMMAND_TIMEOUT); 14726 14727 /* 14728 * Check if FCERR is set to 1, if set to 1, clear it and try 14729 * the whole sequence a few more times, else read in (shift in) 14730 * the Flash Data0, the order is least significant byte first 14731 * msb to lsb 14732 */ 14733 if (error == 0) { 14734 flash_data = ICH8_FLASH_READ32(sc, ICH_FLASH_FDATA0); 14735 if (size == 1) 14736 *data = (uint8_t)(flash_data & 0x000000FF); 14737 else if (size == 2) 14738 *data = (uint16_t)(flash_data & 0x0000FFFF); 14739 else if (size == 4) 14740 *data = (uint32_t)flash_data; 14741 break; 14742 } else { 14743 /* 14744 * If we've gotten here, then things are probably 14745 * completely hosed, but if the error condition is 14746 * detected, it won't hurt to give it another try... 14747 * ICH_FLASH_CYCLE_REPEAT_COUNT times. 14748 */ 14749 if (sc->sc_type >= WM_T_PCH_SPT) 14750 hsfsts = ICH8_FLASH_READ32(sc, 14751 ICH_FLASH_HSFSTS) & 0xffffUL; 14752 else 14753 hsfsts = ICH8_FLASH_READ16(sc, 14754 ICH_FLASH_HSFSTS); 14755 14756 if (hsfsts & HSFSTS_ERR) { 14757 /* Repeat for some time before giving up. */ 14758 continue; 14759 } else if ((hsfsts & HSFSTS_DONE) == 0) 14760 break; 14761 } 14762 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT); 14763 14764 return error; 14765 } 14766 14767 /****************************************************************************** 14768 * Reads a single byte from the NVM using the ICH8 flash access registers. 14769 * 14770 * sc - pointer to wm_hw structure 14771 * index - The index of the byte to read. 14772 * data - Pointer to a byte to store the value read. 14773 *****************************************************************************/ 14774 static int32_t 14775 wm_read_ich8_byte(struct wm_softc *sc, uint32_t index, uint8_t* data) 14776 { 14777 int32_t status; 14778 uint32_t word = 0; 14779 14780 status = wm_read_ich8_data(sc, index, 1, &word); 14781 if (status == 0) 14782 *data = (uint8_t)word; 14783 else 14784 *data = 0; 14785 14786 return status; 14787 } 14788 14789 /****************************************************************************** 14790 * Reads a word from the NVM using the ICH8 flash access registers. 14791 * 14792 * sc - pointer to wm_hw structure 14793 * index - The starting byte index of the word to read. 14794 * data - Pointer to a word to store the value read. 14795 *****************************************************************************/ 14796 static int32_t 14797 wm_read_ich8_word(struct wm_softc *sc, uint32_t index, uint16_t *data) 14798 { 14799 int32_t status; 14800 uint32_t word = 0; 14801 14802 status = wm_read_ich8_data(sc, index, 2, &word); 14803 if (status == 0) 14804 *data = (uint16_t)word; 14805 else 14806 *data = 0; 14807 14808 return status; 14809 } 14810 14811 /****************************************************************************** 14812 * Reads a dword from the NVM using the ICH8 flash access registers. 14813 * 14814 * sc - pointer to wm_hw structure 14815 * index - The starting byte index of the word to read. 14816 * data - Pointer to a word to store the value read. 14817 *****************************************************************************/ 14818 static int32_t 14819 wm_read_ich8_dword(struct wm_softc *sc, uint32_t index, uint32_t *data) 14820 { 14821 int32_t status; 14822 14823 status = wm_read_ich8_data(sc, index, 4, data); 14824 return status; 14825 } 14826 14827 /****************************************************************************** 14828 * Reads a 16 bit word or words from the EEPROM using the ICH8's flash access 14829 * register. 14830 * 14831 * sc - Struct containing variables accessed by shared code 14832 * offset - offset of word in the EEPROM to read 14833 * data - word read from the EEPROM 14834 * words - number of words to read 14835 *****************************************************************************/ 14836 static int 14837 wm_nvm_read_ich8(struct wm_softc *sc, int offset, int words, uint16_t *data) 14838 { 14839 int rv; 14840 uint32_t flash_bank = 0; 14841 uint32_t act_offset = 0; 14842 uint32_t bank_offset = 0; 14843 uint16_t word = 0; 14844 uint16_t i = 0; 14845 14846 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14847 device_xname(sc->sc_dev), __func__)); 14848 14849 rv = sc->nvm.acquire(sc); 14850 if (rv != 0) 14851 return rv; 14852 14853 /* 14854 * We need to know which is the valid flash bank. In the event 14855 * that we didn't allocate eeprom_shadow_ram, we may not be 14856 * managing flash_bank. So it cannot be trusted and needs 14857 * to be updated with each read. 14858 */ 14859 rv = wm_nvm_valid_bank_detect_ich8lan(sc, &flash_bank); 14860 if (rv) { 14861 DPRINTF(sc, WM_DEBUG_NVM, ("%s: failed to detect NVM bank\n", 14862 device_xname(sc->sc_dev))); 14863 flash_bank = 0; 14864 } 14865 14866 /* 14867 * Adjust offset appropriately if we're on bank 1 - adjust for word 14868 * size 14869 */ 14870 bank_offset = flash_bank * (sc->sc_ich8_flash_bank_size * 2); 14871 14872 for (i = 0; i < words; i++) { 14873 /* The NVM part needs a byte offset, hence * 2 */ 14874 act_offset = bank_offset + ((offset + i) * 2); 14875 rv = wm_read_ich8_word(sc, act_offset, &word); 14876 if (rv) { 14877 aprint_error_dev(sc->sc_dev, 14878 "%s: failed to read NVM\n", __func__); 14879 break; 14880 } 14881 data[i] = word; 14882 } 14883 14884 sc->nvm.release(sc); 14885 return rv; 14886 } 14887 14888 /****************************************************************************** 14889 * Reads a 16 bit word or words from the EEPROM using the SPT's flash access 14890 * register. 14891 * 14892 * sc - Struct containing variables accessed by shared code 14893 * offset - offset of word in the EEPROM to read 14894 * data - word read from the EEPROM 14895 * words - number of words to read 14896 *****************************************************************************/ 14897 static int 14898 wm_nvm_read_spt(struct wm_softc *sc, int offset, int words, uint16_t *data) 14899 { 14900 int rv; 14901 uint32_t flash_bank = 0; 14902 uint32_t act_offset = 0; 14903 uint32_t bank_offset = 0; 14904 uint32_t dword = 0; 14905 uint16_t i = 0; 14906 14907 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14908 device_xname(sc->sc_dev), __func__)); 14909 14910 rv = sc->nvm.acquire(sc); 14911 if (rv != 0) 14912 return rv; 14913 14914 /* 14915 * We need to know which is the valid flash bank. In the event 14916 * that we didn't allocate eeprom_shadow_ram, we may not be 14917 * managing flash_bank. So it cannot be trusted and needs 14918 * to be updated with each read. 14919 */ 14920 rv = wm_nvm_valid_bank_detect_ich8lan(sc, &flash_bank); 14921 if (rv) { 14922 DPRINTF(sc, WM_DEBUG_NVM, ("%s: failed to detect NVM bank\n", 14923 device_xname(sc->sc_dev))); 14924 flash_bank = 0; 14925 } 14926 14927 /* 14928 * Adjust offset appropriately if we're on bank 1 - adjust for word 14929 * size 14930 */ 14931 bank_offset = flash_bank * (sc->sc_ich8_flash_bank_size * 2); 14932 14933 for (i = 0; i < words; i++) { 14934 /* The NVM part needs a byte offset, hence * 2 */ 14935 act_offset = bank_offset + ((offset + i) * 2); 14936 /* but we must read dword aligned, so mask ... */ 14937 rv = wm_read_ich8_dword(sc, act_offset & ~0x3, &dword); 14938 if (rv) { 14939 aprint_error_dev(sc->sc_dev, 14940 "%s: failed to read NVM\n", __func__); 14941 break; 14942 } 14943 /* ... and pick out low or high word */ 14944 if ((act_offset & 0x2) == 0) 14945 data[i] = (uint16_t)(dword & 0xFFFF); 14946 else 14947 data[i] = (uint16_t)((dword >> 16) & 0xFFFF); 14948 } 14949 14950 sc->nvm.release(sc); 14951 return rv; 14952 } 14953 14954 /* iNVM */ 14955 14956 static int 14957 wm_nvm_read_word_invm(struct wm_softc *sc, uint16_t address, uint16_t *data) 14958 { 14959 int32_t rv = 0; 14960 uint32_t invm_dword; 14961 uint16_t i; 14962 uint8_t record_type, word_address; 14963 14964 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14965 device_xname(sc->sc_dev), __func__)); 14966 14967 for (i = 0; i < INVM_SIZE; i++) { 14968 invm_dword = CSR_READ(sc, WM_INVM_DATA_REG(i)); 14969 /* Get record type */ 14970 record_type = INVM_DWORD_TO_RECORD_TYPE(invm_dword); 14971 if (record_type == INVM_UNINITIALIZED_STRUCTURE) 14972 break; 14973 if (record_type == INVM_CSR_AUTOLOAD_STRUCTURE) 14974 i += INVM_CSR_AUTOLOAD_DATA_SIZE_IN_DWORDS; 14975 if (record_type == INVM_RSA_KEY_SHA256_STRUCTURE) 14976 i += INVM_RSA_KEY_SHA256_DATA_SIZE_IN_DWORDS; 14977 if (record_type == INVM_WORD_AUTOLOAD_STRUCTURE) { 14978 word_address = INVM_DWORD_TO_WORD_ADDRESS(invm_dword); 14979 if (word_address == address) { 14980 *data = INVM_DWORD_TO_WORD_DATA(invm_dword); 14981 rv = 0; 14982 break; 14983 } 14984 } 14985 } 14986 14987 return rv; 14988 } 14989 14990 static int 14991 wm_nvm_read_invm(struct wm_softc *sc, int offset, int words, uint16_t *data) 14992 { 14993 int i, rv; 14994 14995 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 14996 device_xname(sc->sc_dev), __func__)); 14997 14998 rv = sc->nvm.acquire(sc); 14999 if (rv != 0) 15000 return rv; 15001 15002 for (i = 0; i < words; i++) { 15003 switch (offset + i) { 15004 case NVM_OFF_MACADDR: 15005 case NVM_OFF_MACADDR1: 15006 case NVM_OFF_MACADDR2: 15007 rv = wm_nvm_read_word_invm(sc, offset + i, &data[i]); 15008 if (rv != 0) { 15009 data[i] = 0xffff; 15010 rv = -1; 15011 } 15012 break; 15013 case NVM_OFF_CFG1: /* == INVM_AUTOLOAD */ 15014 rv = wm_nvm_read_word_invm(sc, offset, data); 15015 if (rv != 0) { 15016 *data = INVM_DEFAULT_AL; 15017 rv = 0; 15018 } 15019 break; 15020 case NVM_OFF_CFG2: 15021 rv = wm_nvm_read_word_invm(sc, offset, data); 15022 if (rv != 0) { 15023 *data = NVM_INIT_CTRL_2_DEFAULT_I211; 15024 rv = 0; 15025 } 15026 break; 15027 case NVM_OFF_CFG4: 15028 rv = wm_nvm_read_word_invm(sc, offset, data); 15029 if (rv != 0) { 15030 *data = NVM_INIT_CTRL_4_DEFAULT_I211; 15031 rv = 0; 15032 } 15033 break; 15034 case NVM_OFF_LED_1_CFG: 15035 rv = wm_nvm_read_word_invm(sc, offset, data); 15036 if (rv != 0) { 15037 *data = NVM_LED_1_CFG_DEFAULT_I211; 15038 rv = 0; 15039 } 15040 break; 15041 case NVM_OFF_LED_0_2_CFG: 15042 rv = wm_nvm_read_word_invm(sc, offset, data); 15043 if (rv != 0) { 15044 *data = NVM_LED_0_2_CFG_DEFAULT_I211; 15045 rv = 0; 15046 } 15047 break; 15048 case NVM_OFF_ID_LED_SETTINGS: 15049 rv = wm_nvm_read_word_invm(sc, offset, data); 15050 if (rv != 0) { 15051 *data = ID_LED_RESERVED_FFFF; 15052 rv = 0; 15053 } 15054 break; 15055 default: 15056 DPRINTF(sc, WM_DEBUG_NVM, 15057 ("NVM word 0x%02x is not mapped.\n", offset)); 15058 *data = NVM_RESERVED_WORD; 15059 break; 15060 } 15061 } 15062 15063 sc->nvm.release(sc); 15064 return rv; 15065 } 15066 15067 /* Lock, detecting NVM type, validate checksum, version and read */ 15068 15069 static int 15070 wm_nvm_is_onboard_eeprom(struct wm_softc *sc) 15071 { 15072 uint32_t eecd = 0; 15073 15074 if (sc->sc_type == WM_T_82573 || sc->sc_type == WM_T_82574 15075 || sc->sc_type == WM_T_82583) { 15076 eecd = CSR_READ(sc, WMREG_EECD); 15077 15078 /* Isolate bits 15 & 16 */ 15079 eecd = ((eecd >> 15) & 0x03); 15080 15081 /* If both bits are set, device is Flash type */ 15082 if (eecd == 0x03) 15083 return 0; 15084 } 15085 return 1; 15086 } 15087 15088 static int 15089 wm_nvm_flash_presence_i210(struct wm_softc *sc) 15090 { 15091 uint32_t eec; 15092 15093 eec = CSR_READ(sc, WMREG_EEC); 15094 if ((eec & EEC_FLASH_DETECTED) != 0) 15095 return 1; 15096 15097 return 0; 15098 } 15099 15100 /* 15101 * wm_nvm_validate_checksum 15102 * 15103 * The checksum is defined as the sum of the first 64 (16 bit) words. 15104 */ 15105 static int 15106 wm_nvm_validate_checksum(struct wm_softc *sc) 15107 { 15108 uint16_t checksum; 15109 uint16_t eeprom_data; 15110 #ifdef WM_DEBUG 15111 uint16_t csum_wordaddr, valid_checksum; 15112 #endif 15113 int i; 15114 15115 checksum = 0; 15116 15117 /* Don't check for I211 */ 15118 if (sc->sc_type == WM_T_I211) 15119 return 0; 15120 15121 #ifdef WM_DEBUG 15122 if ((sc->sc_type == WM_T_PCH_LPT) || (sc->sc_type == WM_T_PCH_SPT) || 15123 (sc->sc_type == WM_T_PCH_CNP) || (sc->sc_type == WM_T_PCH_TGP)) { 15124 csum_wordaddr = NVM_OFF_COMPAT; 15125 valid_checksum = NVM_COMPAT_VALID_CHECKSUM; 15126 } else { 15127 csum_wordaddr = NVM_OFF_FUTURE_INIT_WORD1; 15128 valid_checksum = NVM_FUTURE_INIT_WORD1_VALID_CHECKSUM; 15129 } 15130 15131 /* Dump EEPROM image for debug */ 15132 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 15133 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 15134 || (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT)) { 15135 /* XXX PCH_SPT? */ 15136 wm_nvm_read(sc, csum_wordaddr, 1, &eeprom_data); 15137 if ((eeprom_data & valid_checksum) == 0) 15138 DPRINTF(sc, WM_DEBUG_NVM, 15139 ("%s: NVM need to be updated (%04x != %04x)\n", 15140 device_xname(sc->sc_dev), eeprom_data, 15141 valid_checksum)); 15142 } 15143 15144 if ((sc->sc_debug & WM_DEBUG_NVM) != 0) { 15145 printf("%s: NVM dump:\n", device_xname(sc->sc_dev)); 15146 for (i = 0; i < NVM_SIZE; i++) { 15147 if (wm_nvm_read(sc, i, 1, &eeprom_data)) 15148 printf("XXXX "); 15149 else 15150 printf("%04hx ", eeprom_data); 15151 if (i % 8 == 7) 15152 printf("\n"); 15153 } 15154 } 15155 15156 #endif /* WM_DEBUG */ 15157 15158 for (i = 0; i < NVM_SIZE; i++) { 15159 if (wm_nvm_read(sc, i, 1, &eeprom_data)) 15160 return -1; 15161 checksum += eeprom_data; 15162 } 15163 15164 if (checksum != (uint16_t) NVM_CHECKSUM) { 15165 #ifdef WM_DEBUG 15166 printf("%s: NVM checksum mismatch (%04x != %04x)\n", 15167 device_xname(sc->sc_dev), checksum, NVM_CHECKSUM); 15168 #endif 15169 } 15170 15171 return 0; 15172 } 15173 15174 static void 15175 wm_nvm_version_invm(struct wm_softc *sc) 15176 { 15177 uint32_t dword; 15178 15179 /* 15180 * Linux's code to decode version is very strange, so we don't 15181 * obey that algorithm and just use word 61 as the document. 15182 * Perhaps it's not perfect though... 15183 * 15184 * Example: 15185 * 15186 * Word61: 00800030 -> Version 0.6 (I211 spec update notes about 0.6) 15187 */ 15188 dword = CSR_READ(sc, WM_INVM_DATA_REG(61)); 15189 dword = __SHIFTOUT(dword, INVM_VER_1); 15190 sc->sc_nvm_ver_major = __SHIFTOUT(dword, INVM_MAJOR); 15191 sc->sc_nvm_ver_minor = __SHIFTOUT(dword, INVM_MINOR); 15192 } 15193 15194 static void 15195 wm_nvm_version(struct wm_softc *sc) 15196 { 15197 uint16_t major, minor, build, patch; 15198 uint16_t uid0, uid1; 15199 uint16_t nvm_data; 15200 uint16_t off; 15201 bool check_version = false; 15202 bool check_optionrom = false; 15203 bool have_build = false; 15204 bool have_uid = true; 15205 15206 /* 15207 * Version format: 15208 * 15209 * XYYZ 15210 * X0YZ 15211 * X0YY 15212 * 15213 * Example: 15214 * 15215 * 82571 0x50a2 5.10.2? (the spec update notes about 5.6-5.10) 15216 * 82571 0x50a6 5.10.6? 15217 * 82572 0x506a 5.6.10? 15218 * 82572EI 0x5069 5.6.9? 15219 * 82574L 0x1080 1.8.0? (the spec update notes about 2.1.4) 15220 * 0x2013 2.1.3? 15221 * 82583 0x10a0 1.10.0? (document says it's default value) 15222 * ICH8+82567 0x0040 0.4.0? 15223 * ICH9+82566 0x1040 1.4.0? 15224 *ICH10+82567 0x0043 0.4.3? 15225 * PCH+82577 0x00c1 0.12.1? 15226 * PCH2+82579 0x00d3 0.13.3? 15227 * 0x00d4 0.13.4? 15228 * LPT+I218 0x0023 0.2.3? 15229 * SPT+I219 0x0084 0.8.4? 15230 * CNP+I219 0x0054 0.5.4? 15231 */ 15232 15233 /* 15234 * XXX 15235 * Qemu's e1000e emulation (82574L)'s SPI has only 64 words. 15236 * I've never seen real 82574 hardware with such small SPI ROM. 15237 */ 15238 if ((sc->sc_nvm_wordsize < NVM_OFF_IMAGE_UID1) 15239 || (wm_nvm_read(sc, NVM_OFF_IMAGE_UID1, 1, &uid1) != 0)) 15240 have_uid = false; 15241 15242 switch (sc->sc_type) { 15243 case WM_T_82571: 15244 case WM_T_82572: 15245 case WM_T_82574: 15246 case WM_T_82583: 15247 check_version = true; 15248 check_optionrom = true; 15249 have_build = true; 15250 break; 15251 case WM_T_ICH8: 15252 case WM_T_ICH9: 15253 case WM_T_ICH10: 15254 case WM_T_PCH: 15255 case WM_T_PCH2: 15256 case WM_T_PCH_LPT: 15257 case WM_T_PCH_SPT: 15258 case WM_T_PCH_CNP: 15259 case WM_T_PCH_TGP: 15260 check_version = true; 15261 have_build = true; 15262 have_uid = false; 15263 break; 15264 case WM_T_82575: 15265 case WM_T_82576: 15266 case WM_T_82580: 15267 if (have_uid && (uid1 & NVM_MAJOR_MASK) != NVM_UID_VALID) 15268 check_version = true; 15269 break; 15270 case WM_T_I211: 15271 wm_nvm_version_invm(sc); 15272 have_uid = false; 15273 goto printver; 15274 case WM_T_I210: 15275 if (!wm_nvm_flash_presence_i210(sc)) { 15276 wm_nvm_version_invm(sc); 15277 have_uid = false; 15278 goto printver; 15279 } 15280 /* FALLTHROUGH */ 15281 case WM_T_I350: 15282 case WM_T_I354: 15283 check_version = true; 15284 check_optionrom = true; 15285 break; 15286 default: 15287 return; 15288 } 15289 if (check_version 15290 && (wm_nvm_read(sc, NVM_OFF_VERSION, 1, &nvm_data) == 0)) { 15291 major = (nvm_data & NVM_MAJOR_MASK) >> NVM_MAJOR_SHIFT; 15292 if (have_build || ((nvm_data & 0x0f00) != 0x0000)) { 15293 minor = (nvm_data & NVM_MINOR_MASK) >> NVM_MINOR_SHIFT; 15294 build = nvm_data & NVM_BUILD_MASK; 15295 have_build = true; 15296 } else 15297 minor = nvm_data & 0x00ff; 15298 15299 /* Decimal */ 15300 minor = (minor / 16) * 10 + (minor % 16); 15301 sc->sc_nvm_ver_major = major; 15302 sc->sc_nvm_ver_minor = minor; 15303 15304 printver: 15305 aprint_verbose(", version %d.%d", sc->sc_nvm_ver_major, 15306 sc->sc_nvm_ver_minor); 15307 if (have_build) { 15308 sc->sc_nvm_ver_build = build; 15309 aprint_verbose(".%d", build); 15310 } 15311 } 15312 15313 /* Assume the Option ROM area is at avove NVM_SIZE */ 15314 if ((sc->sc_nvm_wordsize > NVM_SIZE) && check_optionrom 15315 && (wm_nvm_read(sc, NVM_OFF_COMB_VER_PTR, 1, &off) == 0)) { 15316 /* Option ROM Version */ 15317 if ((off != 0x0000) && (off != 0xffff)) { 15318 int rv; 15319 15320 off += NVM_COMBO_VER_OFF; 15321 rv = wm_nvm_read(sc, off + 1, 1, &uid1); 15322 rv |= wm_nvm_read(sc, off, 1, &uid0); 15323 if ((rv == 0) && (uid0 != 0) && (uid0 != 0xffff) 15324 && (uid1 != 0) && (uid1 != 0xffff)) { 15325 /* 16bits */ 15326 major = uid0 >> 8; 15327 build = (uid0 << 8) | (uid1 >> 8); 15328 patch = uid1 & 0x00ff; 15329 aprint_verbose(", option ROM Version %d.%d.%d", 15330 major, build, patch); 15331 } 15332 } 15333 } 15334 15335 if (have_uid && (wm_nvm_read(sc, NVM_OFF_IMAGE_UID0, 1, &uid0) == 0)) 15336 aprint_verbose(", Image Unique ID %08x", 15337 ((uint32_t)uid1 << 16) | uid0); 15338 } 15339 15340 /* 15341 * wm_nvm_read: 15342 * 15343 * Read data from the serial EEPROM. 15344 */ 15345 static int 15346 wm_nvm_read(struct wm_softc *sc, int word, int wordcnt, uint16_t *data) 15347 { 15348 int rv; 15349 15350 DPRINTF(sc, WM_DEBUG_NVM, ("%s: %s called\n", 15351 device_xname(sc->sc_dev), __func__)); 15352 15353 if (sc->sc_flags & WM_F_EEPROM_INVALID) 15354 return -1; 15355 15356 rv = sc->nvm.read(sc, word, wordcnt, data); 15357 15358 return rv; 15359 } 15360 15361 /* 15362 * Hardware semaphores. 15363 * Very complexed... 15364 */ 15365 15366 static int 15367 wm_get_null(struct wm_softc *sc) 15368 { 15369 15370 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15371 device_xname(sc->sc_dev), __func__)); 15372 return 0; 15373 } 15374 15375 static void 15376 wm_put_null(struct wm_softc *sc) 15377 { 15378 15379 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15380 device_xname(sc->sc_dev), __func__)); 15381 return; 15382 } 15383 15384 static int 15385 wm_get_eecd(struct wm_softc *sc) 15386 { 15387 uint32_t reg; 15388 int x; 15389 15390 DPRINTF(sc, WM_DEBUG_LOCK | WM_DEBUG_NVM, ("%s: %s called\n", 15391 device_xname(sc->sc_dev), __func__)); 15392 15393 reg = CSR_READ(sc, WMREG_EECD); 15394 15395 /* Request EEPROM access. */ 15396 reg |= EECD_EE_REQ; 15397 CSR_WRITE(sc, WMREG_EECD, reg); 15398 15399 /* ..and wait for it to be granted. */ 15400 for (x = 0; x < 1000; x++) { 15401 reg = CSR_READ(sc, WMREG_EECD); 15402 if (reg & EECD_EE_GNT) 15403 break; 15404 delay(5); 15405 } 15406 if ((reg & EECD_EE_GNT) == 0) { 15407 aprint_error_dev(sc->sc_dev, 15408 "could not acquire EEPROM GNT\n"); 15409 reg &= ~EECD_EE_REQ; 15410 CSR_WRITE(sc, WMREG_EECD, reg); 15411 return -1; 15412 } 15413 15414 return 0; 15415 } 15416 15417 static void 15418 wm_nvm_eec_clock_raise(struct wm_softc *sc, uint32_t *eecd) 15419 { 15420 15421 *eecd |= EECD_SK; 15422 CSR_WRITE(sc, WMREG_EECD, *eecd); 15423 CSR_WRITE_FLUSH(sc); 15424 if ((sc->sc_flags & WM_F_EEPROM_SPI) != 0) 15425 delay(1); 15426 else 15427 delay(50); 15428 } 15429 15430 static void 15431 wm_nvm_eec_clock_lower(struct wm_softc *sc, uint32_t *eecd) 15432 { 15433 15434 *eecd &= ~EECD_SK; 15435 CSR_WRITE(sc, WMREG_EECD, *eecd); 15436 CSR_WRITE_FLUSH(sc); 15437 if ((sc->sc_flags & WM_F_EEPROM_SPI) != 0) 15438 delay(1); 15439 else 15440 delay(50); 15441 } 15442 15443 static void 15444 wm_put_eecd(struct wm_softc *sc) 15445 { 15446 uint32_t reg; 15447 15448 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15449 device_xname(sc->sc_dev), __func__)); 15450 15451 /* Stop nvm */ 15452 reg = CSR_READ(sc, WMREG_EECD); 15453 if ((sc->sc_flags & WM_F_EEPROM_SPI) != 0) { 15454 /* Pull CS high */ 15455 reg |= EECD_CS; 15456 wm_nvm_eec_clock_lower(sc, ®); 15457 } else { 15458 /* CS on Microwire is active-high */ 15459 reg &= ~(EECD_CS | EECD_DI); 15460 CSR_WRITE(sc, WMREG_EECD, reg); 15461 wm_nvm_eec_clock_raise(sc, ®); 15462 wm_nvm_eec_clock_lower(sc, ®); 15463 } 15464 15465 reg = CSR_READ(sc, WMREG_EECD); 15466 reg &= ~EECD_EE_REQ; 15467 CSR_WRITE(sc, WMREG_EECD, reg); 15468 15469 return; 15470 } 15471 15472 /* 15473 * Get hardware semaphore. 15474 * Same as e1000_get_hw_semaphore_generic() 15475 */ 15476 static int 15477 wm_get_swsm_semaphore(struct wm_softc *sc) 15478 { 15479 int32_t timeout; 15480 uint32_t swsm; 15481 15482 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15483 device_xname(sc->sc_dev), __func__)); 15484 KASSERT(sc->sc_nvm_wordsize > 0); 15485 15486 retry: 15487 /* Get the SW semaphore. */ 15488 timeout = sc->sc_nvm_wordsize + 1; 15489 while (timeout) { 15490 swsm = CSR_READ(sc, WMREG_SWSM); 15491 15492 if ((swsm & SWSM_SMBI) == 0) 15493 break; 15494 15495 delay(50); 15496 timeout--; 15497 } 15498 15499 if (timeout == 0) { 15500 if ((sc->sc_flags & WM_F_WA_I210_CLSEM) != 0) { 15501 /* 15502 * In rare circumstances, the SW semaphore may already 15503 * be held unintentionally. Clear the semaphore once 15504 * before giving up. 15505 */ 15506 sc->sc_flags &= ~WM_F_WA_I210_CLSEM; 15507 wm_put_swsm_semaphore(sc); 15508 goto retry; 15509 } 15510 aprint_error_dev(sc->sc_dev, "could not acquire SWSM SMBI\n"); 15511 return -1; 15512 } 15513 15514 /* Get the FW semaphore. */ 15515 timeout = sc->sc_nvm_wordsize + 1; 15516 while (timeout) { 15517 swsm = CSR_READ(sc, WMREG_SWSM); 15518 swsm |= SWSM_SWESMBI; 15519 CSR_WRITE(sc, WMREG_SWSM, swsm); 15520 /* If we managed to set the bit we got the semaphore. */ 15521 swsm = CSR_READ(sc, WMREG_SWSM); 15522 if (swsm & SWSM_SWESMBI) 15523 break; 15524 15525 delay(50); 15526 timeout--; 15527 } 15528 15529 if (timeout == 0) { 15530 aprint_error_dev(sc->sc_dev, 15531 "could not acquire SWSM SWESMBI\n"); 15532 /* Release semaphores */ 15533 wm_put_swsm_semaphore(sc); 15534 return -1; 15535 } 15536 return 0; 15537 } 15538 15539 /* 15540 * Put hardware semaphore. 15541 * Same as e1000_put_hw_semaphore_generic() 15542 */ 15543 static void 15544 wm_put_swsm_semaphore(struct wm_softc *sc) 15545 { 15546 uint32_t swsm; 15547 15548 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15549 device_xname(sc->sc_dev), __func__)); 15550 15551 swsm = CSR_READ(sc, WMREG_SWSM); 15552 swsm &= ~(SWSM_SMBI | SWSM_SWESMBI); 15553 CSR_WRITE(sc, WMREG_SWSM, swsm); 15554 } 15555 15556 /* 15557 * Get SW/FW semaphore. 15558 * Same as e1000_acquire_swfw_sync_{80003es2lan,82575}(). 15559 */ 15560 static int 15561 wm_get_swfw_semaphore(struct wm_softc *sc, uint16_t mask) 15562 { 15563 uint32_t swfw_sync; 15564 uint32_t swmask = mask << SWFW_SOFT_SHIFT; 15565 uint32_t fwmask = mask << SWFW_FIRM_SHIFT; 15566 int timeout; 15567 15568 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15569 device_xname(sc->sc_dev), __func__)); 15570 15571 if (sc->sc_type == WM_T_80003) 15572 timeout = 50; 15573 else 15574 timeout = 200; 15575 15576 while (timeout) { 15577 if (wm_get_swsm_semaphore(sc)) { 15578 aprint_error_dev(sc->sc_dev, 15579 "%s: failed to get semaphore\n", 15580 __func__); 15581 return -1; 15582 } 15583 swfw_sync = CSR_READ(sc, WMREG_SW_FW_SYNC); 15584 if ((swfw_sync & (swmask | fwmask)) == 0) { 15585 swfw_sync |= swmask; 15586 CSR_WRITE(sc, WMREG_SW_FW_SYNC, swfw_sync); 15587 wm_put_swsm_semaphore(sc); 15588 return 0; 15589 } 15590 wm_put_swsm_semaphore(sc); 15591 delay(5000); 15592 timeout--; 15593 } 15594 device_printf(sc->sc_dev, 15595 "failed to get swfw semaphore mask 0x%x swfw 0x%x\n", 15596 mask, swfw_sync); 15597 return -1; 15598 } 15599 15600 static void 15601 wm_put_swfw_semaphore(struct wm_softc *sc, uint16_t mask) 15602 { 15603 uint32_t swfw_sync; 15604 15605 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15606 device_xname(sc->sc_dev), __func__)); 15607 15608 while (wm_get_swsm_semaphore(sc) != 0) 15609 continue; 15610 15611 swfw_sync = CSR_READ(sc, WMREG_SW_FW_SYNC); 15612 swfw_sync &= ~(mask << SWFW_SOFT_SHIFT); 15613 CSR_WRITE(sc, WMREG_SW_FW_SYNC, swfw_sync); 15614 15615 wm_put_swsm_semaphore(sc); 15616 } 15617 15618 static int 15619 wm_get_nvm_80003(struct wm_softc *sc) 15620 { 15621 int rv; 15622 15623 DPRINTF(sc, WM_DEBUG_LOCK | WM_DEBUG_NVM, ("%s: %s called\n", 15624 device_xname(sc->sc_dev), __func__)); 15625 15626 if ((rv = wm_get_swfw_semaphore(sc, SWFW_EEP_SM)) != 0) { 15627 aprint_error_dev(sc->sc_dev, 15628 "%s: failed to get semaphore(SWFW)\n", __func__); 15629 return rv; 15630 } 15631 15632 if (((sc->sc_flags & WM_F_LOCK_EECD) != 0) 15633 && (rv = wm_get_eecd(sc)) != 0) { 15634 aprint_error_dev(sc->sc_dev, 15635 "%s: failed to get semaphore(EECD)\n", __func__); 15636 wm_put_swfw_semaphore(sc, SWFW_EEP_SM); 15637 return rv; 15638 } 15639 15640 return 0; 15641 } 15642 15643 static void 15644 wm_put_nvm_80003(struct wm_softc *sc) 15645 { 15646 15647 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15648 device_xname(sc->sc_dev), __func__)); 15649 15650 if ((sc->sc_flags & WM_F_LOCK_EECD) != 0) 15651 wm_put_eecd(sc); 15652 wm_put_swfw_semaphore(sc, SWFW_EEP_SM); 15653 } 15654 15655 static int 15656 wm_get_nvm_82571(struct wm_softc *sc) 15657 { 15658 int rv; 15659 15660 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15661 device_xname(sc->sc_dev), __func__)); 15662 15663 if ((rv = wm_get_swsm_semaphore(sc)) != 0) 15664 return rv; 15665 15666 switch (sc->sc_type) { 15667 case WM_T_82573: 15668 break; 15669 default: 15670 if ((sc->sc_flags & WM_F_LOCK_EECD) != 0) 15671 rv = wm_get_eecd(sc); 15672 break; 15673 } 15674 15675 if (rv != 0) { 15676 aprint_error_dev(sc->sc_dev, 15677 "%s: failed to get semaphore\n", 15678 __func__); 15679 wm_put_swsm_semaphore(sc); 15680 } 15681 15682 return rv; 15683 } 15684 15685 static void 15686 wm_put_nvm_82571(struct wm_softc *sc) 15687 { 15688 15689 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15690 device_xname(sc->sc_dev), __func__)); 15691 15692 switch (sc->sc_type) { 15693 case WM_T_82573: 15694 break; 15695 default: 15696 if ((sc->sc_flags & WM_F_LOCK_EECD) != 0) 15697 wm_put_eecd(sc); 15698 break; 15699 } 15700 15701 wm_put_swsm_semaphore(sc); 15702 } 15703 15704 static int 15705 wm_get_phy_82575(struct wm_softc *sc) 15706 { 15707 15708 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15709 device_xname(sc->sc_dev), __func__)); 15710 return wm_get_swfw_semaphore(sc, swfwphysem[sc->sc_funcid]); 15711 } 15712 15713 static void 15714 wm_put_phy_82575(struct wm_softc *sc) 15715 { 15716 15717 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15718 device_xname(sc->sc_dev), __func__)); 15719 wm_put_swfw_semaphore(sc, swfwphysem[sc->sc_funcid]); 15720 } 15721 15722 static int 15723 wm_get_swfwhw_semaphore(struct wm_softc *sc) 15724 { 15725 uint32_t ext_ctrl; 15726 int timeout = 200; 15727 15728 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15729 device_xname(sc->sc_dev), __func__)); 15730 15731 mutex_enter(sc->sc_ich_phymtx); /* Use PHY mtx for both PHY and NVM */ 15732 for (timeout = 0; timeout < 200; timeout++) { 15733 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15734 ext_ctrl |= EXTCNFCTR_MDIO_SW_OWNERSHIP; 15735 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl); 15736 15737 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15738 if (ext_ctrl & EXTCNFCTR_MDIO_SW_OWNERSHIP) 15739 return 0; 15740 delay(5000); 15741 } 15742 device_printf(sc->sc_dev, 15743 "failed to get swfwhw semaphore ext_ctrl 0x%x\n", ext_ctrl); 15744 mutex_exit(sc->sc_ich_phymtx); /* Use PHY mtx for both PHY and NVM */ 15745 return -1; 15746 } 15747 15748 static void 15749 wm_put_swfwhw_semaphore(struct wm_softc *sc) 15750 { 15751 uint32_t ext_ctrl; 15752 15753 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15754 device_xname(sc->sc_dev), __func__)); 15755 15756 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15757 ext_ctrl &= ~EXTCNFCTR_MDIO_SW_OWNERSHIP; 15758 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl); 15759 15760 mutex_exit(sc->sc_ich_phymtx); /* Use PHY mtx for both PHY and NVM */ 15761 } 15762 15763 static int 15764 wm_get_swflag_ich8lan(struct wm_softc *sc) 15765 { 15766 uint32_t ext_ctrl; 15767 int timeout; 15768 15769 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15770 device_xname(sc->sc_dev), __func__)); 15771 mutex_enter(sc->sc_ich_phymtx); 15772 for (timeout = 0; timeout < WM_PHY_CFG_TIMEOUT; timeout++) { 15773 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15774 if ((ext_ctrl & EXTCNFCTR_MDIO_SW_OWNERSHIP) == 0) 15775 break; 15776 delay(1000); 15777 } 15778 if (timeout >= WM_PHY_CFG_TIMEOUT) { 15779 device_printf(sc->sc_dev, 15780 "SW has already locked the resource\n"); 15781 goto out; 15782 } 15783 15784 ext_ctrl |= EXTCNFCTR_MDIO_SW_OWNERSHIP; 15785 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl); 15786 for (timeout = 0; timeout < 1000; timeout++) { 15787 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15788 if (ext_ctrl & EXTCNFCTR_MDIO_SW_OWNERSHIP) 15789 break; 15790 delay(1000); 15791 } 15792 if (timeout >= 1000) { 15793 device_printf(sc->sc_dev, "failed to acquire semaphore\n"); 15794 ext_ctrl &= ~EXTCNFCTR_MDIO_SW_OWNERSHIP; 15795 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl); 15796 goto out; 15797 } 15798 return 0; 15799 15800 out: 15801 mutex_exit(sc->sc_ich_phymtx); 15802 return -1; 15803 } 15804 15805 static void 15806 wm_put_swflag_ich8lan(struct wm_softc *sc) 15807 { 15808 uint32_t ext_ctrl; 15809 15810 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15811 device_xname(sc->sc_dev), __func__)); 15812 ext_ctrl = CSR_READ(sc, WMREG_EXTCNFCTR); 15813 if (ext_ctrl & EXTCNFCTR_MDIO_SW_OWNERSHIP) { 15814 ext_ctrl &= ~EXTCNFCTR_MDIO_SW_OWNERSHIP; 15815 CSR_WRITE(sc, WMREG_EXTCNFCTR, ext_ctrl); 15816 } else 15817 device_printf(sc->sc_dev, "Semaphore unexpectedly released\n"); 15818 15819 mutex_exit(sc->sc_ich_phymtx); 15820 } 15821 15822 static int 15823 wm_get_nvm_ich8lan(struct wm_softc *sc) 15824 { 15825 15826 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15827 device_xname(sc->sc_dev), __func__)); 15828 mutex_enter(sc->sc_ich_nvmmtx); 15829 15830 return 0; 15831 } 15832 15833 static void 15834 wm_put_nvm_ich8lan(struct wm_softc *sc) 15835 { 15836 15837 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15838 device_xname(sc->sc_dev), __func__)); 15839 mutex_exit(sc->sc_ich_nvmmtx); 15840 } 15841 15842 static int 15843 wm_get_hw_semaphore_82573(struct wm_softc *sc) 15844 { 15845 int i = 0; 15846 uint32_t reg; 15847 15848 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15849 device_xname(sc->sc_dev), __func__)); 15850 15851 reg = CSR_READ(sc, WMREG_EXTCNFCTR); 15852 do { 15853 CSR_WRITE(sc, WMREG_EXTCNFCTR, 15854 reg | EXTCNFCTR_MDIO_SW_OWNERSHIP); 15855 reg = CSR_READ(sc, WMREG_EXTCNFCTR); 15856 if ((reg & EXTCNFCTR_MDIO_SW_OWNERSHIP) != 0) 15857 break; 15858 delay(2*1000); 15859 i++; 15860 } while (i < WM_MDIO_OWNERSHIP_TIMEOUT); 15861 15862 if (i == WM_MDIO_OWNERSHIP_TIMEOUT) { 15863 wm_put_hw_semaphore_82573(sc); 15864 log(LOG_ERR, "%s: Driver can't access the PHY\n", 15865 device_xname(sc->sc_dev)); 15866 return -1; 15867 } 15868 15869 return 0; 15870 } 15871 15872 static void 15873 wm_put_hw_semaphore_82573(struct wm_softc *sc) 15874 { 15875 uint32_t reg; 15876 15877 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 15878 device_xname(sc->sc_dev), __func__)); 15879 15880 reg = CSR_READ(sc, WMREG_EXTCNFCTR); 15881 reg &= ~EXTCNFCTR_MDIO_SW_OWNERSHIP; 15882 CSR_WRITE(sc, WMREG_EXTCNFCTR, reg); 15883 } 15884 15885 /* 15886 * Management mode and power management related subroutines. 15887 * BMC, AMT, suspend/resume and EEE. 15888 */ 15889 15890 #ifdef WM_WOL 15891 static int 15892 wm_check_mng_mode(struct wm_softc *sc) 15893 { 15894 int rv; 15895 15896 switch (sc->sc_type) { 15897 case WM_T_ICH8: 15898 case WM_T_ICH9: 15899 case WM_T_ICH10: 15900 case WM_T_PCH: 15901 case WM_T_PCH2: 15902 case WM_T_PCH_LPT: 15903 case WM_T_PCH_SPT: 15904 case WM_T_PCH_CNP: 15905 case WM_T_PCH_TGP: 15906 rv = wm_check_mng_mode_ich8lan(sc); 15907 break; 15908 case WM_T_82574: 15909 case WM_T_82583: 15910 rv = wm_check_mng_mode_82574(sc); 15911 break; 15912 case WM_T_82571: 15913 case WM_T_82572: 15914 case WM_T_82573: 15915 case WM_T_80003: 15916 rv = wm_check_mng_mode_generic(sc); 15917 break; 15918 default: 15919 /* Noting to do */ 15920 rv = 0; 15921 break; 15922 } 15923 15924 return rv; 15925 } 15926 15927 static int 15928 wm_check_mng_mode_ich8lan(struct wm_softc *sc) 15929 { 15930 uint32_t fwsm; 15931 15932 fwsm = CSR_READ(sc, WMREG_FWSM); 15933 15934 if (((fwsm & FWSM_FW_VALID) != 0) 15935 && (__SHIFTOUT(fwsm, FWSM_MODE) == MNG_ICH_IAMT_MODE)) 15936 return 1; 15937 15938 return 0; 15939 } 15940 15941 static int 15942 wm_check_mng_mode_82574(struct wm_softc *sc) 15943 { 15944 uint16_t data; 15945 15946 wm_nvm_read(sc, NVM_OFF_CFG2, 1, &data); 15947 15948 if ((data & NVM_CFG2_MNGM_MASK) != 0) 15949 return 1; 15950 15951 return 0; 15952 } 15953 15954 static int 15955 wm_check_mng_mode_generic(struct wm_softc *sc) 15956 { 15957 uint32_t fwsm; 15958 15959 fwsm = CSR_READ(sc, WMREG_FWSM); 15960 15961 if (__SHIFTOUT(fwsm, FWSM_MODE) == MNG_IAMT_MODE) 15962 return 1; 15963 15964 return 0; 15965 } 15966 #endif /* WM_WOL */ 15967 15968 static int 15969 wm_enable_mng_pass_thru(struct wm_softc *sc) 15970 { 15971 uint32_t manc, fwsm, factps; 15972 15973 if ((sc->sc_flags & WM_F_ASF_FIRMWARE_PRES) == 0) 15974 return 0; 15975 15976 manc = CSR_READ(sc, WMREG_MANC); 15977 15978 DPRINTF(sc, WM_DEBUG_MANAGE, ("%s: MANC (%08x)\n", 15979 device_xname(sc->sc_dev), manc)); 15980 if ((manc & MANC_RECV_TCO_EN) == 0) 15981 return 0; 15982 15983 if ((sc->sc_flags & WM_F_ARC_SUBSYS_VALID) != 0) { 15984 fwsm = CSR_READ(sc, WMREG_FWSM); 15985 factps = CSR_READ(sc, WMREG_FACTPS); 15986 if (((factps & FACTPS_MNGCG) == 0) 15987 && (__SHIFTOUT(fwsm, FWSM_MODE) == MNG_ICH_IAMT_MODE)) 15988 return 1; 15989 } else if ((sc->sc_type == WM_T_82574) || (sc->sc_type == WM_T_82583)){ 15990 uint16_t data; 15991 15992 factps = CSR_READ(sc, WMREG_FACTPS); 15993 wm_nvm_read(sc, NVM_OFF_CFG2, 1, &data); 15994 DPRINTF(sc, WM_DEBUG_MANAGE, ("%s: FACTPS = %08x, CFG2=%04x\n", 15995 device_xname(sc->sc_dev), factps, data)); 15996 if (((factps & FACTPS_MNGCG) == 0) 15997 && ((data & NVM_CFG2_MNGM_MASK) 15998 == (NVM_CFG2_MNGM_PT << NVM_CFG2_MNGM_SHIFT))) 15999 return 1; 16000 } else if (((manc & MANC_SMBUS_EN) != 0) 16001 && ((manc & MANC_ASF_EN) == 0)) 16002 return 1; 16003 16004 return 0; 16005 } 16006 16007 static bool 16008 wm_phy_resetisblocked(struct wm_softc *sc) 16009 { 16010 bool blocked = false; 16011 uint32_t reg; 16012 int i = 0; 16013 16014 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16015 device_xname(sc->sc_dev), __func__)); 16016 16017 switch (sc->sc_type) { 16018 case WM_T_ICH8: 16019 case WM_T_ICH9: 16020 case WM_T_ICH10: 16021 case WM_T_PCH: 16022 case WM_T_PCH2: 16023 case WM_T_PCH_LPT: 16024 case WM_T_PCH_SPT: 16025 case WM_T_PCH_CNP: 16026 case WM_T_PCH_TGP: 16027 do { 16028 reg = CSR_READ(sc, WMREG_FWSM); 16029 if ((reg & FWSM_RSPCIPHY) == 0) { 16030 blocked = true; 16031 delay(10*1000); 16032 continue; 16033 } 16034 blocked = false; 16035 } while (blocked && (i++ < 30)); 16036 return blocked; 16037 break; 16038 case WM_T_82571: 16039 case WM_T_82572: 16040 case WM_T_82573: 16041 case WM_T_82574: 16042 case WM_T_82583: 16043 case WM_T_80003: 16044 reg = CSR_READ(sc, WMREG_MANC); 16045 if ((reg & MANC_BLK_PHY_RST_ON_IDE) != 0) 16046 return true; 16047 else 16048 return false; 16049 break; 16050 default: 16051 /* No problem */ 16052 break; 16053 } 16054 16055 return false; 16056 } 16057 16058 static void 16059 wm_get_hw_control(struct wm_softc *sc) 16060 { 16061 uint32_t reg; 16062 16063 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 16064 device_xname(sc->sc_dev), __func__)); 16065 16066 if (sc->sc_type == WM_T_82573) { 16067 reg = CSR_READ(sc, WMREG_SWSM); 16068 CSR_WRITE(sc, WMREG_SWSM, reg | SWSM_DRV_LOAD); 16069 } else if (sc->sc_type >= WM_T_82571) { 16070 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16071 CSR_WRITE(sc, WMREG_CTRL_EXT, reg | CTRL_EXT_DRV_LOAD); 16072 } 16073 } 16074 16075 static void 16076 wm_release_hw_control(struct wm_softc *sc) 16077 { 16078 uint32_t reg; 16079 16080 DPRINTF(sc, WM_DEBUG_LOCK, ("%s: %s called\n", 16081 device_xname(sc->sc_dev), __func__)); 16082 16083 if (sc->sc_type == WM_T_82573) { 16084 reg = CSR_READ(sc, WMREG_SWSM); 16085 CSR_WRITE(sc, WMREG_SWSM, reg & ~SWSM_DRV_LOAD); 16086 } else if (sc->sc_type >= WM_T_82571) { 16087 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16088 CSR_WRITE(sc, WMREG_CTRL_EXT, reg & ~CTRL_EXT_DRV_LOAD); 16089 } 16090 } 16091 16092 static void 16093 wm_gate_hw_phy_config_ich8lan(struct wm_softc *sc, bool gate) 16094 { 16095 uint32_t reg; 16096 16097 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16098 device_xname(sc->sc_dev), __func__)); 16099 16100 if (sc->sc_type < WM_T_PCH2) 16101 return; 16102 16103 reg = CSR_READ(sc, WMREG_EXTCNFCTR); 16104 16105 if (gate) 16106 reg |= EXTCNFCTR_GATE_PHY_CFG; 16107 else 16108 reg &= ~EXTCNFCTR_GATE_PHY_CFG; 16109 16110 CSR_WRITE(sc, WMREG_EXTCNFCTR, reg); 16111 } 16112 16113 static int 16114 wm_init_phy_workarounds_pchlan(struct wm_softc *sc) 16115 { 16116 uint32_t fwsm, reg; 16117 int rv; 16118 16119 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16120 device_xname(sc->sc_dev), __func__)); 16121 16122 /* Gate automatic PHY configuration by hardware on non-managed 82579 */ 16123 wm_gate_hw_phy_config_ich8lan(sc, true); 16124 16125 /* Disable ULP */ 16126 wm_ulp_disable(sc); 16127 16128 /* Acquire PHY semaphore */ 16129 rv = sc->phy.acquire(sc); 16130 if (rv != 0) { 16131 DPRINTF(sc, WM_DEBUG_INIT, 16132 ("%s: %s: failed\n", device_xname(sc->sc_dev), __func__)); 16133 return rv; 16134 } 16135 16136 /* The MAC-PHY interconnect may be in SMBus mode. If the PHY is 16137 * inaccessible and resetting the PHY is not blocked, toggle the 16138 * LANPHYPC Value bit to force the interconnect to PCIe mode. 16139 */ 16140 fwsm = CSR_READ(sc, WMREG_FWSM); 16141 switch (sc->sc_type) { 16142 case WM_T_PCH_LPT: 16143 case WM_T_PCH_SPT: 16144 case WM_T_PCH_CNP: 16145 case WM_T_PCH_TGP: 16146 if (wm_phy_is_accessible_pchlan(sc)) 16147 break; 16148 16149 /* Before toggling LANPHYPC, see if PHY is accessible by 16150 * forcing MAC to SMBus mode first. 16151 */ 16152 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16153 reg |= CTRL_EXT_FORCE_SMBUS; 16154 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 16155 #if 0 16156 /* XXX Isn't this required??? */ 16157 CSR_WRITE_FLUSH(sc); 16158 #endif 16159 /* Wait 50 milliseconds for MAC to finish any retries 16160 * that it might be trying to perform from previous 16161 * attempts to acknowledge any phy read requests. 16162 */ 16163 delay(50 * 1000); 16164 /* FALLTHROUGH */ 16165 case WM_T_PCH2: 16166 if (wm_phy_is_accessible_pchlan(sc) == true) 16167 break; 16168 /* FALLTHROUGH */ 16169 case WM_T_PCH: 16170 if (sc->sc_type == WM_T_PCH) 16171 if ((fwsm & FWSM_FW_VALID) != 0) 16172 break; 16173 16174 if (wm_phy_resetisblocked(sc) == true) { 16175 device_printf(sc->sc_dev, "XXX reset is blocked(2)\n"); 16176 break; 16177 } 16178 16179 /* Toggle LANPHYPC Value bit */ 16180 wm_toggle_lanphypc_pch_lpt(sc); 16181 16182 if (sc->sc_type >= WM_T_PCH_LPT) { 16183 if (wm_phy_is_accessible_pchlan(sc) == true) 16184 break; 16185 16186 /* Toggling LANPHYPC brings the PHY out of SMBus mode 16187 * so ensure that the MAC is also out of SMBus mode 16188 */ 16189 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16190 reg &= ~CTRL_EXT_FORCE_SMBUS; 16191 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 16192 16193 if (wm_phy_is_accessible_pchlan(sc) == true) 16194 break; 16195 rv = -1; 16196 } 16197 break; 16198 default: 16199 break; 16200 } 16201 16202 /* Release semaphore */ 16203 sc->phy.release(sc); 16204 16205 if (rv == 0) { 16206 /* Check to see if able to reset PHY. Print error if not */ 16207 if (wm_phy_resetisblocked(sc)) { 16208 device_printf(sc->sc_dev, "XXX reset is blocked(3)\n"); 16209 goto out; 16210 } 16211 16212 /* Reset the PHY before any access to it. Doing so, ensures 16213 * that the PHY is in a known good state before we read/write 16214 * PHY registers. The generic reset is sufficient here, 16215 * because we haven't determined the PHY type yet. 16216 */ 16217 if (wm_reset_phy(sc) != 0) 16218 goto out; 16219 16220 /* On a successful reset, possibly need to wait for the PHY 16221 * to quiesce to an accessible state before returning control 16222 * to the calling function. If the PHY does not quiesce, then 16223 * return E1000E_BLK_PHY_RESET, as this is the condition that 16224 * the PHY is in. 16225 */ 16226 if (wm_phy_resetisblocked(sc)) 16227 device_printf(sc->sc_dev, "XXX reset is blocked(4)\n"); 16228 } 16229 16230 out: 16231 /* Ungate automatic PHY configuration on non-managed 82579 */ 16232 if ((sc->sc_type == WM_T_PCH2) && ((fwsm & FWSM_FW_VALID) == 0)) { 16233 delay(10*1000); 16234 wm_gate_hw_phy_config_ich8lan(sc, false); 16235 } 16236 16237 return 0; 16238 } 16239 16240 static void 16241 wm_init_manageability(struct wm_softc *sc) 16242 { 16243 16244 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16245 device_xname(sc->sc_dev), __func__)); 16246 KASSERT(IFNET_LOCKED(&sc->sc_ethercom.ec_if)); 16247 16248 if (sc->sc_flags & WM_F_HAS_MANAGE) { 16249 uint32_t manc2h = CSR_READ(sc, WMREG_MANC2H); 16250 uint32_t manc = CSR_READ(sc, WMREG_MANC); 16251 16252 /* Disable hardware interception of ARP */ 16253 manc &= ~MANC_ARP_EN; 16254 16255 /* Enable receiving management packets to the host */ 16256 if (sc->sc_type >= WM_T_82571) { 16257 manc |= MANC_EN_MNG2HOST; 16258 manc2h |= MANC2H_PORT_623 | MANC2H_PORT_624; 16259 CSR_WRITE(sc, WMREG_MANC2H, manc2h); 16260 } 16261 16262 CSR_WRITE(sc, WMREG_MANC, manc); 16263 } 16264 } 16265 16266 static void 16267 wm_release_manageability(struct wm_softc *sc) 16268 { 16269 16270 if (sc->sc_flags & WM_F_HAS_MANAGE) { 16271 uint32_t manc = CSR_READ(sc, WMREG_MANC); 16272 16273 manc |= MANC_ARP_EN; 16274 if (sc->sc_type >= WM_T_82571) 16275 manc &= ~MANC_EN_MNG2HOST; 16276 16277 CSR_WRITE(sc, WMREG_MANC, manc); 16278 } 16279 } 16280 16281 static void 16282 wm_get_wakeup(struct wm_softc *sc) 16283 { 16284 16285 /* 0: HAS_AMT, ARC_SUBSYS_VALID, ASF_FIRMWARE_PRES */ 16286 switch (sc->sc_type) { 16287 case WM_T_82573: 16288 case WM_T_82583: 16289 sc->sc_flags |= WM_F_HAS_AMT; 16290 /* FALLTHROUGH */ 16291 case WM_T_80003: 16292 case WM_T_82575: 16293 case WM_T_82576: 16294 case WM_T_82580: 16295 case WM_T_I350: 16296 case WM_T_I354: 16297 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_MODE) != 0) 16298 sc->sc_flags |= WM_F_ARC_SUBSYS_VALID; 16299 /* FALLTHROUGH */ 16300 case WM_T_82541: 16301 case WM_T_82541_2: 16302 case WM_T_82547: 16303 case WM_T_82547_2: 16304 case WM_T_82571: 16305 case WM_T_82572: 16306 case WM_T_82574: 16307 sc->sc_flags |= WM_F_ASF_FIRMWARE_PRES; 16308 break; 16309 case WM_T_ICH8: 16310 case WM_T_ICH9: 16311 case WM_T_ICH10: 16312 case WM_T_PCH: 16313 case WM_T_PCH2: 16314 case WM_T_PCH_LPT: 16315 case WM_T_PCH_SPT: 16316 case WM_T_PCH_CNP: 16317 case WM_T_PCH_TGP: 16318 sc->sc_flags |= WM_F_HAS_AMT; 16319 sc->sc_flags |= WM_F_ASF_FIRMWARE_PRES; 16320 break; 16321 default: 16322 break; 16323 } 16324 16325 /* 1: HAS_MANAGE */ 16326 if (wm_enable_mng_pass_thru(sc) != 0) 16327 sc->sc_flags |= WM_F_HAS_MANAGE; 16328 16329 /* 16330 * Note that the WOL flags is set after the resetting of the eeprom 16331 * stuff 16332 */ 16333 } 16334 16335 /* 16336 * Unconfigure Ultra Low Power mode. 16337 * Only for I217 and newer (see below). 16338 */ 16339 static int 16340 wm_ulp_disable(struct wm_softc *sc) 16341 { 16342 uint32_t reg; 16343 uint16_t phyreg; 16344 int i = 0, rv; 16345 16346 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16347 device_xname(sc->sc_dev), __func__)); 16348 /* Exclude old devices */ 16349 if ((sc->sc_type < WM_T_PCH_LPT) 16350 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I217_LM) 16351 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I217_V) 16352 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_LM2) 16353 || (sc->sc_pcidevid == PCI_PRODUCT_INTEL_I218_V2)) 16354 return 0; 16355 16356 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID) != 0) { 16357 /* Request ME un-configure ULP mode in the PHY */ 16358 reg = CSR_READ(sc, WMREG_H2ME); 16359 reg &= ~H2ME_ULP; 16360 reg |= H2ME_ENFORCE_SETTINGS; 16361 CSR_WRITE(sc, WMREG_H2ME, reg); 16362 16363 /* Poll up to 300msec for ME to clear ULP_CFG_DONE. */ 16364 while ((CSR_READ(sc, WMREG_FWSM) & FWSM_ULP_CFG_DONE) != 0) { 16365 if (i++ == 30) { 16366 device_printf(sc->sc_dev, "%s timed out\n", 16367 __func__); 16368 return -1; 16369 } 16370 delay(10 * 1000); 16371 } 16372 reg = CSR_READ(sc, WMREG_H2ME); 16373 reg &= ~H2ME_ENFORCE_SETTINGS; 16374 CSR_WRITE(sc, WMREG_H2ME, reg); 16375 16376 return 0; 16377 } 16378 16379 /* Acquire semaphore */ 16380 rv = sc->phy.acquire(sc); 16381 if (rv != 0) { 16382 DPRINTF(sc, WM_DEBUG_INIT, 16383 ("%s: %s: failed\n", device_xname(sc->sc_dev), __func__)); 16384 return rv; 16385 } 16386 16387 /* Toggle LANPHYPC */ 16388 wm_toggle_lanphypc_pch_lpt(sc); 16389 16390 /* Unforce SMBus mode in PHY */ 16391 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, CV_SMB_CTRL, &phyreg); 16392 if (rv != 0) { 16393 uint32_t reg2; 16394 16395 aprint_debug_dev(sc->sc_dev, "%s: Force SMBus first.\n", 16396 __func__); 16397 reg2 = CSR_READ(sc, WMREG_CTRL_EXT); 16398 reg2 |= CTRL_EXT_FORCE_SMBUS; 16399 CSR_WRITE(sc, WMREG_CTRL_EXT, reg2); 16400 delay(50 * 1000); 16401 16402 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, CV_SMB_CTRL, 16403 &phyreg); 16404 if (rv != 0) 16405 goto release; 16406 } 16407 phyreg &= ~CV_SMB_CTRL_FORCE_SMBUS; 16408 wm_gmii_hv_writereg_locked(sc->sc_dev, 2, CV_SMB_CTRL, phyreg); 16409 16410 /* Unforce SMBus mode in MAC */ 16411 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16412 reg &= ~CTRL_EXT_FORCE_SMBUS; 16413 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 16414 16415 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, HV_PM_CTRL, &phyreg); 16416 if (rv != 0) 16417 goto release; 16418 phyreg |= HV_PM_CTRL_K1_ENA; 16419 wm_gmii_hv_writereg_locked(sc->sc_dev, 2, HV_PM_CTRL, phyreg); 16420 16421 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, I218_ULP_CONFIG1, 16422 &phyreg); 16423 if (rv != 0) 16424 goto release; 16425 phyreg &= ~(I218_ULP_CONFIG1_IND 16426 | I218_ULP_CONFIG1_STICKY_ULP 16427 | I218_ULP_CONFIG1_RESET_TO_SMBUS 16428 | I218_ULP_CONFIG1_WOL_HOST 16429 | I218_ULP_CONFIG1_INBAND_EXIT 16430 | I218_ULP_CONFIG1_EN_ULP_LANPHYPC 16431 | I218_ULP_CONFIG1_DIS_CLR_STICKY_ON_PERST 16432 | I218_ULP_CONFIG1_DIS_SMB_PERST); 16433 wm_gmii_hv_writereg_locked(sc->sc_dev, 2, I218_ULP_CONFIG1, phyreg); 16434 phyreg |= I218_ULP_CONFIG1_START; 16435 wm_gmii_hv_writereg_locked(sc->sc_dev, 2, I218_ULP_CONFIG1, phyreg); 16436 16437 reg = CSR_READ(sc, WMREG_FEXTNVM7); 16438 reg &= ~FEXTNVM7_DIS_SMB_PERST; 16439 CSR_WRITE(sc, WMREG_FEXTNVM7, reg); 16440 16441 release: 16442 /* Release semaphore */ 16443 sc->phy.release(sc); 16444 wm_gmii_reset(sc); 16445 delay(50 * 1000); 16446 16447 return rv; 16448 } 16449 16450 /* WOL in the newer chipset interfaces (pchlan) */ 16451 static int 16452 wm_enable_phy_wakeup(struct wm_softc *sc) 16453 { 16454 device_t dev = sc->sc_dev; 16455 uint32_t mreg, moff; 16456 uint16_t wuce, wuc, wufc, preg; 16457 int i, rv; 16458 16459 KASSERT(sc->sc_type >= WM_T_PCH); 16460 16461 /* Copy MAC RARs to PHY RARs */ 16462 wm_copy_rx_addrs_to_phy_ich8lan(sc); 16463 16464 /* Activate PHY wakeup */ 16465 rv = sc->phy.acquire(sc); 16466 if (rv != 0) { 16467 device_printf(dev, "%s: failed to acquire semaphore\n", 16468 __func__); 16469 return rv; 16470 } 16471 16472 /* 16473 * Enable access to PHY wakeup registers. 16474 * BM_MTA, BM_RCTL, BM_WUFC and BM_WUC are in BM_WUC_PAGE. 16475 */ 16476 rv = wm_enable_phy_wakeup_reg_access_bm(dev, &wuce); 16477 if (rv != 0) { 16478 device_printf(dev, 16479 "%s: Could not enable PHY wakeup reg access\n", __func__); 16480 goto release; 16481 } 16482 16483 /* Copy MAC MTA to PHY MTA */ 16484 for (i = 0; i < WM_ICH8_MC_TABSIZE; i++) { 16485 uint16_t lo, hi; 16486 16487 mreg = CSR_READ(sc, WMREG_CORDOVA_MTA + (i * 4)); 16488 lo = (uint16_t)(mreg & 0xffff); 16489 hi = (uint16_t)((mreg >> 16) & 0xffff); 16490 wm_access_phy_wakeup_reg_bm(dev, BM_MTA(i), &lo, 0, true); 16491 wm_access_phy_wakeup_reg_bm(dev, BM_MTA(i) + 1, &hi, 0, true); 16492 } 16493 16494 /* Configure PHY Rx Control register */ 16495 wm_access_phy_wakeup_reg_bm(dev, BM_RCTL, &preg, 1, true); 16496 mreg = CSR_READ(sc, WMREG_RCTL); 16497 if (mreg & RCTL_UPE) 16498 preg |= BM_RCTL_UPE; 16499 if (mreg & RCTL_MPE) 16500 preg |= BM_RCTL_MPE; 16501 preg &= ~(BM_RCTL_MO_MASK); 16502 moff = __SHIFTOUT(mreg, RCTL_MO); 16503 if (moff != 0) 16504 preg |= moff << BM_RCTL_MO_SHIFT; 16505 if (mreg & RCTL_BAM) 16506 preg |= BM_RCTL_BAM; 16507 if (mreg & RCTL_PMCF) 16508 preg |= BM_RCTL_PMCF; 16509 mreg = CSR_READ(sc, WMREG_CTRL); 16510 if (mreg & CTRL_RFCE) 16511 preg |= BM_RCTL_RFCE; 16512 wm_access_phy_wakeup_reg_bm(dev, BM_RCTL, &preg, 0, true); 16513 16514 wuc = WUC_APME | WUC_PME_EN; 16515 wufc = WUFC_MAG; 16516 /* Enable PHY wakeup in MAC register */ 16517 CSR_WRITE(sc, WMREG_WUC, 16518 WUC_PHY_WAKE | WUC_PME_STATUS | WUC_APMPME | wuc); 16519 CSR_WRITE(sc, WMREG_WUFC, wufc); 16520 16521 /* Configure and enable PHY wakeup in PHY registers */ 16522 wm_access_phy_wakeup_reg_bm(dev, BM_WUC, &wuc, 0, true); 16523 wm_access_phy_wakeup_reg_bm(dev, BM_WUFC, &wufc, 0, true); 16524 16525 wuce |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT; 16526 wm_disable_phy_wakeup_reg_access_bm(dev, &wuce); 16527 16528 release: 16529 sc->phy.release(sc); 16530 16531 return 0; 16532 } 16533 16534 /* Power down workaround on D3 */ 16535 static void 16536 wm_igp3_phy_powerdown_workaround_ich8lan(struct wm_softc *sc) 16537 { 16538 uint32_t reg; 16539 uint16_t phyreg; 16540 int i; 16541 16542 for (i = 0; i < 2; i++) { 16543 /* Disable link */ 16544 reg = CSR_READ(sc, WMREG_PHY_CTRL); 16545 reg |= PHY_CTRL_GBE_DIS | PHY_CTRL_NOND0A_GBE_DIS; 16546 CSR_WRITE(sc, WMREG_PHY_CTRL, reg); 16547 16548 /* 16549 * Call gig speed drop workaround on Gig disable before 16550 * accessing any PHY registers 16551 */ 16552 if (sc->sc_type == WM_T_ICH8) 16553 wm_gig_downshift_workaround_ich8lan(sc); 16554 16555 /* Write VR power-down enable */ 16556 sc->sc_mii.mii_readreg(sc->sc_dev, 1, IGP3_VR_CTRL, &phyreg); 16557 phyreg &= ~IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK; 16558 phyreg |= IGP3_VR_CTRL_MODE_SHUTDOWN; 16559 sc->sc_mii.mii_writereg(sc->sc_dev, 1, IGP3_VR_CTRL, phyreg); 16560 16561 /* Read it back and test */ 16562 sc->sc_mii.mii_readreg(sc->sc_dev, 1, IGP3_VR_CTRL, &phyreg); 16563 phyreg &= IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK; 16564 if ((phyreg == IGP3_VR_CTRL_MODE_SHUTDOWN) || (i != 0)) 16565 break; 16566 16567 /* Issue PHY reset and repeat at most one more time */ 16568 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_PHY_RESET); 16569 } 16570 } 16571 16572 /* 16573 * wm_suspend_workarounds_ich8lan - workarounds needed during S0->Sx 16574 * @sc: pointer to the HW structure 16575 * 16576 * During S0 to Sx transition, it is possible the link remains at gig 16577 * instead of negotiating to a lower speed. Before going to Sx, set 16578 * 'Gig Disable' to force link speed negotiation to a lower speed based on 16579 * the LPLU setting in the NVM or custom setting. For PCH and newer parts, 16580 * the OEM bits PHY register (LED, GbE disable and LPLU configurations) also 16581 * needs to be written. 16582 * Parts that support (and are linked to a partner which support) EEE in 16583 * 100Mbps should disable LPLU since 100Mbps w/ EEE requires less power 16584 * than 10Mbps w/o EEE. 16585 */ 16586 static void 16587 wm_suspend_workarounds_ich8lan(struct wm_softc *sc) 16588 { 16589 device_t dev = sc->sc_dev; 16590 struct ethercom *ec = &sc->sc_ethercom; 16591 uint32_t phy_ctrl; 16592 int rv; 16593 16594 phy_ctrl = CSR_READ(sc, WMREG_PHY_CTRL); 16595 phy_ctrl |= PHY_CTRL_GBE_DIS; 16596 16597 KASSERT((sc->sc_type >= WM_T_ICH8) && (sc->sc_type <= WM_T_PCH_TGP)); 16598 16599 if (sc->sc_phytype == WMPHY_I217) { 16600 uint16_t devid = sc->sc_pcidevid; 16601 16602 if ((devid == PCI_PRODUCT_INTEL_I218_LM) || 16603 (devid == PCI_PRODUCT_INTEL_I218_V) || 16604 (devid == PCI_PRODUCT_INTEL_I218_LM3) || 16605 (devid == PCI_PRODUCT_INTEL_I218_V3) || 16606 (sc->sc_type >= WM_T_PCH_SPT)) 16607 CSR_WRITE(sc, WMREG_FEXTNVM6, 16608 CSR_READ(sc, WMREG_FEXTNVM6) 16609 & ~FEXTNVM6_REQ_PLL_CLK); 16610 16611 if (sc->phy.acquire(sc) != 0) 16612 goto out; 16613 16614 if ((ec->ec_capenable & ETHERCAP_EEE) != 0) { 16615 uint16_t eee_advert; 16616 16617 rv = wm_read_emi_reg_locked(dev, 16618 I217_EEE_ADVERTISEMENT, &eee_advert); 16619 if (rv) 16620 goto release; 16621 16622 /* 16623 * Disable LPLU if both link partners support 100BaseT 16624 * EEE and 100Full is advertised on both ends of the 16625 * link, and enable Auto Enable LPI since there will 16626 * be no driver to enable LPI while in Sx. 16627 */ 16628 if ((eee_advert & AN_EEEADVERT_100_TX) && 16629 (sc->eee_lp_ability & AN_EEEADVERT_100_TX)) { 16630 uint16_t anar, phy_reg; 16631 16632 sc->phy.readreg_locked(dev, 2, MII_ANAR, 16633 &anar); 16634 if (anar & ANAR_TX_FD) { 16635 phy_ctrl &= ~(PHY_CTRL_D0A_LPLU | 16636 PHY_CTRL_NOND0A_LPLU); 16637 16638 /* Set Auto Enable LPI after link up */ 16639 sc->phy.readreg_locked(dev, 2, 16640 I217_LPI_GPIO_CTRL, &phy_reg); 16641 phy_reg |= I217_LPI_GPIO_CTRL_AUTO_EN_LPI; 16642 sc->phy.writereg_locked(dev, 2, 16643 I217_LPI_GPIO_CTRL, phy_reg); 16644 } 16645 } 16646 } 16647 16648 /* 16649 * For i217 Intel Rapid Start Technology support, 16650 * when the system is going into Sx and no manageability engine 16651 * is present, the driver must configure proxy to reset only on 16652 * power good. LPI (Low Power Idle) state must also reset only 16653 * on power good, as well as the MTA (Multicast table array). 16654 * The SMBus release must also be disabled on LCD reset. 16655 */ 16656 16657 /* 16658 * Enable MTA to reset for Intel Rapid Start Technology 16659 * Support 16660 */ 16661 16662 release: 16663 sc->phy.release(sc); 16664 } 16665 out: 16666 CSR_WRITE(sc, WMREG_PHY_CTRL, phy_ctrl); 16667 16668 if (sc->sc_type == WM_T_ICH8) 16669 wm_gig_downshift_workaround_ich8lan(sc); 16670 16671 if (sc->sc_type >= WM_T_PCH) { 16672 wm_oem_bits_config_ich8lan(sc, false); 16673 16674 /* Reset PHY to activate OEM bits on 82577/8 */ 16675 if (sc->sc_type == WM_T_PCH) 16676 wm_reset_phy(sc); 16677 16678 if (sc->phy.acquire(sc) != 0) 16679 return; 16680 wm_write_smbus_addr(sc); 16681 sc->phy.release(sc); 16682 } 16683 } 16684 16685 /* 16686 * wm_resume_workarounds_pchlan - workarounds needed during Sx->S0 16687 * @sc: pointer to the HW structure 16688 * 16689 * During Sx to S0 transitions on non-managed devices or managed devices 16690 * on which PHY resets are not blocked, if the PHY registers cannot be 16691 * accessed properly by the s/w toggle the LANPHYPC value to power cycle 16692 * the PHY. 16693 * On i217, setup Intel Rapid Start Technology. 16694 */ 16695 static int 16696 wm_resume_workarounds_pchlan(struct wm_softc *sc) 16697 { 16698 device_t dev = sc->sc_dev; 16699 int rv; 16700 16701 if (sc->sc_type < WM_T_PCH2) 16702 return 0; 16703 16704 rv = wm_init_phy_workarounds_pchlan(sc); 16705 if (rv != 0) 16706 return rv; 16707 16708 /* For i217 Intel Rapid Start Technology support when the system 16709 * is transitioning from Sx and no manageability engine is present 16710 * configure SMBus to restore on reset, disable proxy, and enable 16711 * the reset on MTA (Multicast table array). 16712 */ 16713 if (sc->sc_phytype == WMPHY_I217) { 16714 uint16_t phy_reg; 16715 16716 rv = sc->phy.acquire(sc); 16717 if (rv != 0) 16718 return rv; 16719 16720 /* Clear Auto Enable LPI after link up */ 16721 sc->phy.readreg_locked(dev, 1, I217_LPI_GPIO_CTRL, &phy_reg); 16722 phy_reg &= ~I217_LPI_GPIO_CTRL_AUTO_EN_LPI; 16723 sc->phy.writereg_locked(dev, 1, I217_LPI_GPIO_CTRL, phy_reg); 16724 16725 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID) == 0) { 16726 /* Restore clear on SMB if no manageability engine 16727 * is present 16728 */ 16729 rv = sc->phy.readreg_locked(dev, 1, I217_MEMPWR, 16730 &phy_reg); 16731 if (rv != 0) 16732 goto release; 16733 phy_reg |= I217_MEMPWR_DISABLE_SMB_RELEASE; 16734 sc->phy.writereg_locked(dev, 1, I217_MEMPWR, phy_reg); 16735 16736 /* Disable Proxy */ 16737 sc->phy.writereg_locked(dev, 1, I217_PROXY_CTRL, 0); 16738 } 16739 /* Enable reset on MTA */ 16740 sc->phy.readreg_locked(dev, 1, I217_CFGREG, &phy_reg); 16741 if (rv != 0) 16742 goto release; 16743 phy_reg &= ~I217_CGFREG_ENABLE_MTA_RESET; 16744 sc->phy.writereg_locked(dev, 1, I217_CFGREG, phy_reg); 16745 16746 release: 16747 sc->phy.release(sc); 16748 return rv; 16749 } 16750 16751 return 0; 16752 } 16753 16754 static void 16755 wm_enable_wakeup(struct wm_softc *sc) 16756 { 16757 uint32_t reg, pmreg; 16758 pcireg_t pmode; 16759 int rv = 0; 16760 16761 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16762 device_xname(sc->sc_dev), __func__)); 16763 16764 if (pci_get_capability(sc->sc_pc, sc->sc_pcitag, PCI_CAP_PWRMGMT, 16765 &pmreg, NULL) == 0) 16766 return; 16767 16768 if ((sc->sc_flags & WM_F_WOL) == 0) 16769 goto pme; 16770 16771 /* Advertise the wakeup capability */ 16772 CSR_WRITE(sc, WMREG_CTRL, sc->sc_ctrl | CTRL_SWDPIN(2) 16773 | CTRL_SWDPIN(3)); 16774 16775 /* Keep the laser running on fiber adapters */ 16776 if ((sc->sc_mediatype == WM_MEDIATYPE_FIBER) 16777 || (sc->sc_mediatype == WM_MEDIATYPE_SERDES)) { 16778 reg = CSR_READ(sc, WMREG_CTRL_EXT); 16779 reg |= CTRL_EXT_SWDPIN(3); 16780 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 16781 } 16782 16783 if ((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) || 16784 (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) || 16785 (sc->sc_type == WM_T_PCH2) || (sc->sc_type == WM_T_PCH_LPT) || 16786 (sc->sc_type == WM_T_PCH_SPT) || (sc->sc_type == WM_T_PCH_CNP) || 16787 (sc->sc_type == WM_T_PCH_TGP)) 16788 wm_suspend_workarounds_ich8lan(sc); 16789 16790 #if 0 /* For the multicast packet */ 16791 reg = CSR_READ(sc, WMREG_WUFC) | WUFC_MAG; 16792 reg |= WUFC_MC; 16793 CSR_WRITE(sc, WMREG_RCTL, CSR_READ(sc, WMREG_RCTL) | RCTL_MPE); 16794 #endif 16795 16796 if (sc->sc_type >= WM_T_PCH) { 16797 rv = wm_enable_phy_wakeup(sc); 16798 if (rv != 0) 16799 goto pme; 16800 } else { 16801 /* Enable wakeup by the MAC */ 16802 CSR_WRITE(sc, WMREG_WUC, WUC_APME | WUC_PME_EN); 16803 CSR_WRITE(sc, WMREG_WUFC, WUFC_MAG); 16804 } 16805 16806 if (((sc->sc_type == WM_T_ICH8) || (sc->sc_type == WM_T_ICH9) 16807 || (sc->sc_type == WM_T_ICH10) || (sc->sc_type == WM_T_PCH) 16808 || (sc->sc_type == WM_T_PCH2)) 16809 && (sc->sc_phytype == WMPHY_IGP_3)) 16810 wm_igp3_phy_powerdown_workaround_ich8lan(sc); 16811 16812 pme: 16813 /* Request PME */ 16814 pmode = pci_conf_read(sc->sc_pc, sc->sc_pcitag, pmreg + PCI_PMCSR); 16815 pmode |= PCI_PMCSR_PME_STS; /* in case it's already set (W1C) */ 16816 if ((rv == 0) && (sc->sc_flags & WM_F_WOL) != 0) { 16817 /* For WOL */ 16818 pmode |= PCI_PMCSR_PME_EN; 16819 } else { 16820 /* Disable WOL */ 16821 pmode &= ~PCI_PMCSR_PME_EN; 16822 } 16823 pci_conf_write(sc->sc_pc, sc->sc_pcitag, pmreg + PCI_PMCSR, pmode); 16824 } 16825 16826 /* Disable ASPM L0s and/or L1 for workaround */ 16827 static void 16828 wm_disable_aspm(struct wm_softc *sc) 16829 { 16830 pcireg_t reg, mask = 0; 16831 unsigned const char *str = ""; 16832 16833 /* 16834 * Only for PCIe device which has PCIe capability in the PCI config 16835 * space. 16836 */ 16837 if (((sc->sc_flags & WM_F_PCIE) == 0) || (sc->sc_pcixe_capoff == 0)) 16838 return; 16839 16840 switch (sc->sc_type) { 16841 case WM_T_82571: 16842 case WM_T_82572: 16843 /* 16844 * 8257[12] Errata 13: Device Does Not Support PCIe Active 16845 * State Power management L1 State (ASPM L1). 16846 */ 16847 mask = PCIE_LCSR_ASPM_L1; 16848 str = "L1 is"; 16849 break; 16850 case WM_T_82573: 16851 case WM_T_82574: 16852 case WM_T_82583: 16853 /* 16854 * The 82573 disappears when PCIe ASPM L0s is enabled. 16855 * 16856 * The 82574 and 82583 does not support PCIe ASPM L0s with 16857 * some chipset. The document of 82574 and 82583 says that 16858 * disabling L0s with some specific chipset is sufficient, 16859 * but we follow as of the Intel em driver does. 16860 * 16861 * References: 16862 * Errata 8 of the Specification Update of i82573. 16863 * Errata 20 of the Specification Update of i82574. 16864 * Errata 9 of the Specification Update of i82583. 16865 */ 16866 mask = PCIE_LCSR_ASPM_L1 | PCIE_LCSR_ASPM_L0S; 16867 str = "L0s and L1 are"; 16868 break; 16869 default: 16870 return; 16871 } 16872 16873 reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, 16874 sc->sc_pcixe_capoff + PCIE_LCSR); 16875 reg &= ~mask; 16876 pci_conf_write(sc->sc_pc, sc->sc_pcitag, 16877 sc->sc_pcixe_capoff + PCIE_LCSR, reg); 16878 16879 /* Print only in wm_attach() */ 16880 if ((sc->sc_flags & WM_F_ATTACHED) == 0) 16881 aprint_verbose_dev(sc->sc_dev, 16882 "ASPM %s disabled to workaround the errata.\n", str); 16883 } 16884 16885 /* LPLU */ 16886 16887 static void 16888 wm_lplu_d0_disable(struct wm_softc *sc) 16889 { 16890 struct mii_data *mii = &sc->sc_mii; 16891 uint32_t reg; 16892 uint16_t phyval; 16893 16894 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 16895 device_xname(sc->sc_dev), __func__)); 16896 16897 if (sc->sc_phytype == WMPHY_IFE) 16898 return; 16899 16900 switch (sc->sc_type) { 16901 case WM_T_82571: 16902 case WM_T_82572: 16903 case WM_T_82573: 16904 case WM_T_82575: 16905 case WM_T_82576: 16906 mii->mii_readreg(sc->sc_dev, 1, IGPHY_POWER_MGMT, &phyval); 16907 phyval &= ~PMR_D0_LPLU; 16908 mii->mii_writereg(sc->sc_dev, 1, IGPHY_POWER_MGMT, phyval); 16909 break; 16910 case WM_T_82580: 16911 case WM_T_I350: 16912 case WM_T_I210: 16913 case WM_T_I211: 16914 reg = CSR_READ(sc, WMREG_PHPM); 16915 reg &= ~PHPM_D0A_LPLU; 16916 CSR_WRITE(sc, WMREG_PHPM, reg); 16917 break; 16918 case WM_T_82574: 16919 case WM_T_82583: 16920 case WM_T_ICH8: 16921 case WM_T_ICH9: 16922 case WM_T_ICH10: 16923 reg = CSR_READ(sc, WMREG_PHY_CTRL); 16924 reg &= ~(PHY_CTRL_GBE_DIS | PHY_CTRL_D0A_LPLU); 16925 CSR_WRITE(sc, WMREG_PHY_CTRL, reg); 16926 CSR_WRITE_FLUSH(sc); 16927 break; 16928 case WM_T_PCH: 16929 case WM_T_PCH2: 16930 case WM_T_PCH_LPT: 16931 case WM_T_PCH_SPT: 16932 case WM_T_PCH_CNP: 16933 case WM_T_PCH_TGP: 16934 wm_gmii_hv_readreg(sc->sc_dev, 1, HV_OEM_BITS, &phyval); 16935 phyval &= ~(HV_OEM_BITS_A1KDIS | HV_OEM_BITS_LPLU); 16936 if (wm_phy_resetisblocked(sc) == false) 16937 phyval |= HV_OEM_BITS_ANEGNOW; 16938 wm_gmii_hv_writereg(sc->sc_dev, 1, HV_OEM_BITS, phyval); 16939 break; 16940 default: 16941 break; 16942 } 16943 } 16944 16945 /* EEE */ 16946 16947 static int 16948 wm_set_eee_i350(struct wm_softc *sc) 16949 { 16950 struct ethercom *ec = &sc->sc_ethercom; 16951 uint32_t ipcnfg, eeer; 16952 uint32_t ipcnfg_mask 16953 = IPCNFG_EEE_1G_AN | IPCNFG_EEE_100M_AN | IPCNFG_10BASE_TE; 16954 uint32_t eeer_mask = EEER_TX_LPI_EN | EEER_RX_LPI_EN | EEER_LPI_FC; 16955 16956 KASSERT(sc->sc_mediatype == WM_MEDIATYPE_COPPER); 16957 16958 ipcnfg = CSR_READ(sc, WMREG_IPCNFG); 16959 eeer = CSR_READ(sc, WMREG_EEER); 16960 16961 /* Enable or disable per user setting */ 16962 if ((ec->ec_capenable & ETHERCAP_EEE) != 0) { 16963 ipcnfg |= ipcnfg_mask; 16964 eeer |= eeer_mask; 16965 } else { 16966 ipcnfg &= ~ipcnfg_mask; 16967 eeer &= ~eeer_mask; 16968 } 16969 16970 CSR_WRITE(sc, WMREG_IPCNFG, ipcnfg); 16971 CSR_WRITE(sc, WMREG_EEER, eeer); 16972 CSR_READ(sc, WMREG_IPCNFG); /* XXX flush? */ 16973 CSR_READ(sc, WMREG_EEER); /* XXX flush? */ 16974 16975 return 0; 16976 } 16977 16978 static int 16979 wm_set_eee_pchlan(struct wm_softc *sc) 16980 { 16981 device_t dev = sc->sc_dev; 16982 struct ethercom *ec = &sc->sc_ethercom; 16983 uint16_t lpa, pcs_status, adv_addr, adv, lpi_ctrl, data; 16984 int rv; 16985 16986 switch (sc->sc_phytype) { 16987 case WMPHY_82579: 16988 lpa = I82579_EEE_LP_ABILITY; 16989 pcs_status = I82579_EEE_PCS_STATUS; 16990 adv_addr = I82579_EEE_ADVERTISEMENT; 16991 break; 16992 case WMPHY_I217: 16993 lpa = I217_EEE_LP_ABILITY; 16994 pcs_status = I217_EEE_PCS_STATUS; 16995 adv_addr = I217_EEE_ADVERTISEMENT; 16996 break; 16997 default: 16998 return 0; 16999 } 17000 17001 rv = sc->phy.acquire(sc); 17002 if (rv != 0) { 17003 device_printf(dev, "%s: failed to get semaphore\n", __func__); 17004 return rv; 17005 } 17006 17007 rv = sc->phy.readreg_locked(dev, 1, I82579_LPI_CTRL, &lpi_ctrl); 17008 if (rv != 0) 17009 goto release; 17010 17011 /* Clear bits that enable EEE in various speeds */ 17012 lpi_ctrl &= ~I82579_LPI_CTRL_ENABLE; 17013 17014 if ((ec->ec_capenable & ETHERCAP_EEE) != 0) { 17015 /* Save off link partner's EEE ability */ 17016 rv = wm_read_emi_reg_locked(dev, lpa, &sc->eee_lp_ability); 17017 if (rv != 0) 17018 goto release; 17019 17020 /* Read EEE advertisement */ 17021 if ((rv = wm_read_emi_reg_locked(dev, adv_addr, &adv)) != 0) 17022 goto release; 17023 17024 /* 17025 * Enable EEE only for speeds in which the link partner is 17026 * EEE capable and for which we advertise EEE. 17027 */ 17028 if (adv & sc->eee_lp_ability & AN_EEEADVERT_1000_T) 17029 lpi_ctrl |= I82579_LPI_CTRL_EN_1000; 17030 if (adv & sc->eee_lp_ability & AN_EEEADVERT_100_TX) { 17031 sc->phy.readreg_locked(dev, 2, MII_ANLPAR, &data); 17032 if ((data & ANLPAR_TX_FD) != 0) 17033 lpi_ctrl |= I82579_LPI_CTRL_EN_100; 17034 else { 17035 /* 17036 * EEE is not supported in 100Half, so ignore 17037 * partner's EEE in 100 ability if full-duplex 17038 * is not advertised. 17039 */ 17040 sc->eee_lp_ability 17041 &= ~AN_EEEADVERT_100_TX; 17042 } 17043 } 17044 } 17045 17046 if (sc->sc_phytype == WMPHY_82579) { 17047 rv = wm_read_emi_reg_locked(dev, I82579_LPI_PLL_SHUT, &data); 17048 if (rv != 0) 17049 goto release; 17050 17051 data &= ~I82579_LPI_PLL_SHUT_100; 17052 rv = wm_write_emi_reg_locked(dev, I82579_LPI_PLL_SHUT, data); 17053 } 17054 17055 /* R/Clr IEEE MMD 3.1 bits 11:10 - Tx/Rx LPI Received */ 17056 if ((rv = wm_read_emi_reg_locked(dev, pcs_status, &data)) != 0) 17057 goto release; 17058 17059 rv = sc->phy.writereg_locked(dev, 1, I82579_LPI_CTRL, lpi_ctrl); 17060 release: 17061 sc->phy.release(sc); 17062 17063 return rv; 17064 } 17065 17066 static int 17067 wm_set_eee(struct wm_softc *sc) 17068 { 17069 struct ethercom *ec = &sc->sc_ethercom; 17070 17071 if ((ec->ec_capabilities & ETHERCAP_EEE) == 0) 17072 return 0; 17073 17074 if (sc->sc_type == WM_T_I354) { 17075 /* I354 uses an external PHY */ 17076 return 0; /* not yet */ 17077 } else if ((sc->sc_type >= WM_T_I350) && (sc->sc_type <= WM_T_I211)) 17078 return wm_set_eee_i350(sc); 17079 else if (sc->sc_type >= WM_T_PCH2) 17080 return wm_set_eee_pchlan(sc); 17081 17082 return 0; 17083 } 17084 17085 /* 17086 * Workarounds (mainly PHY related). 17087 * Basically, PHY's workarounds are in the PHY drivers. 17088 */ 17089 17090 /* Workaround for 82566 Kumeran PCS lock loss */ 17091 static int 17092 wm_kmrn_lock_loss_workaround_ich8lan(struct wm_softc *sc) 17093 { 17094 struct mii_data *mii = &sc->sc_mii; 17095 uint32_t status = CSR_READ(sc, WMREG_STATUS); 17096 int i, reg, rv; 17097 uint16_t phyreg; 17098 17099 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17100 device_xname(sc->sc_dev), __func__)); 17101 17102 /* If the link is not up, do nothing */ 17103 if ((status & STATUS_LU) == 0) 17104 return 0; 17105 17106 /* Nothing to do if the link is other than 1Gbps */ 17107 if (__SHIFTOUT(status, STATUS_SPEED) != STATUS_SPEED_1000) 17108 return 0; 17109 17110 for (i = 0; i < 10; i++) { 17111 /* read twice */ 17112 rv = mii->mii_readreg(sc->sc_dev, 1, IGP3_KMRN_DIAG, &phyreg); 17113 if (rv != 0) 17114 return rv; 17115 rv = mii->mii_readreg(sc->sc_dev, 1, IGP3_KMRN_DIAG, &phyreg); 17116 if (rv != 0) 17117 return rv; 17118 17119 if ((phyreg & IGP3_KMRN_DIAG_PCS_LOCK_LOSS) == 0) 17120 goto out; /* GOOD! */ 17121 17122 /* Reset the PHY */ 17123 wm_reset_phy(sc); 17124 delay(5*1000); 17125 } 17126 17127 /* Disable GigE link negotiation */ 17128 reg = CSR_READ(sc, WMREG_PHY_CTRL); 17129 reg |= PHY_CTRL_GBE_DIS | PHY_CTRL_NOND0A_GBE_DIS; 17130 CSR_WRITE(sc, WMREG_PHY_CTRL, reg); 17131 17132 /* 17133 * Call gig speed drop workaround on Gig disable before accessing 17134 * any PHY registers. 17135 */ 17136 wm_gig_downshift_workaround_ich8lan(sc); 17137 17138 out: 17139 return 0; 17140 } 17141 17142 /* 17143 * wm_gig_downshift_workaround_ich8lan - WoL from S5 stops working 17144 * @sc: pointer to the HW structure 17145 * 17146 * Steps to take when dropping from 1Gb/s (eg. link cable removal (LSC), 17147 * LPLU, Gig disable, MDIC PHY reset): 17148 * 1) Set Kumeran Near-end loopback 17149 * 2) Clear Kumeran Near-end loopback 17150 * Should only be called for ICH8[m] devices with any 1G Phy. 17151 */ 17152 static void 17153 wm_gig_downshift_workaround_ich8lan(struct wm_softc *sc) 17154 { 17155 uint16_t kmreg; 17156 17157 /* Only for igp3 */ 17158 if (sc->sc_phytype == WMPHY_IGP_3) { 17159 if (wm_kmrn_readreg(sc, KUMCTRLSTA_OFFSET_DIAG, &kmreg) != 0) 17160 return; 17161 kmreg |= KUMCTRLSTA_DIAG_NELPBK; 17162 if (wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_DIAG, kmreg) != 0) 17163 return; 17164 kmreg &= ~KUMCTRLSTA_DIAG_NELPBK; 17165 wm_kmrn_writereg(sc, KUMCTRLSTA_OFFSET_DIAG, kmreg); 17166 } 17167 } 17168 17169 /* 17170 * Workaround for pch's PHYs 17171 * XXX should be moved to new PHY driver? 17172 */ 17173 static int 17174 wm_hv_phy_workarounds_ich8lan(struct wm_softc *sc) 17175 { 17176 device_t dev = sc->sc_dev; 17177 struct mii_data *mii = &sc->sc_mii; 17178 struct mii_softc *child; 17179 uint16_t phy_data, phyrev = 0; 17180 int phytype = sc->sc_phytype; 17181 int rv; 17182 17183 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17184 device_xname(dev), __func__)); 17185 KASSERT(sc->sc_type == WM_T_PCH); 17186 17187 /* Set MDIO slow mode before any other MDIO access */ 17188 if (phytype == WMPHY_82577) 17189 if ((rv = wm_set_mdio_slow_mode_hv(sc)) != 0) 17190 return rv; 17191 17192 child = LIST_FIRST(&mii->mii_phys); 17193 if (child != NULL) 17194 phyrev = child->mii_mpd_rev; 17195 17196 /* (82577 && (phy rev 1 or 2)) || (82578 & phy rev 1)*/ 17197 if ((child != NULL) && 17198 (((phytype == WMPHY_82577) && ((phyrev == 1) || (phyrev == 2))) || 17199 ((phytype == WMPHY_82578) && (phyrev == 1)))) { 17200 /* Disable generation of early preamble (0x4431) */ 17201 rv = mii->mii_readreg(dev, 2, BM_RATE_ADAPTATION_CTRL, 17202 &phy_data); 17203 if (rv != 0) 17204 return rv; 17205 phy_data &= ~(BM_RATE_ADAPTATION_CTRL_RX_RXDV_PRE | 17206 BM_RATE_ADAPTATION_CTRL_RX_CRS_PRE); 17207 rv = mii->mii_writereg(dev, 2, BM_RATE_ADAPTATION_CTRL, 17208 phy_data); 17209 if (rv != 0) 17210 return rv; 17211 17212 /* Preamble tuning for SSC */ 17213 rv = mii->mii_writereg(dev, 2, HV_KMRN_FIFO_CTRLSTA, 0xa204); 17214 if (rv != 0) 17215 return rv; 17216 } 17217 17218 /* 82578 */ 17219 if (phytype == WMPHY_82578) { 17220 /* 17221 * Return registers to default by doing a soft reset then 17222 * writing 0x3140 to the control register 17223 * 0x3140 == BMCR_SPEED0 | BMCR_AUTOEN | BMCR_FDX | BMCR_SPEED1 17224 */ 17225 if ((child != NULL) && (phyrev < 2)) { 17226 PHY_RESET(child); 17227 rv = mii->mii_writereg(dev, 2, MII_BMCR, 0x3140); 17228 if (rv != 0) 17229 return rv; 17230 } 17231 } 17232 17233 /* Select page 0 */ 17234 if ((rv = sc->phy.acquire(sc)) != 0) 17235 return rv; 17236 rv = wm_gmii_mdic_writereg(dev, 1, IGPHY_PAGE_SELECT, 0); 17237 sc->phy.release(sc); 17238 if (rv != 0) 17239 return rv; 17240 17241 /* 17242 * Configure the K1 Si workaround during phy reset assuming there is 17243 * link so that it disables K1 if link is in 1Gbps. 17244 */ 17245 if ((rv = wm_k1_gig_workaround_hv(sc, 1)) != 0) 17246 return rv; 17247 17248 /* Workaround for link disconnects on a busy hub in half duplex */ 17249 rv = sc->phy.acquire(sc); 17250 if (rv) 17251 return rv; 17252 rv = sc->phy.readreg_locked(dev, 2, BM_PORT_GEN_CFG, &phy_data); 17253 if (rv) 17254 goto release; 17255 rv = sc->phy.writereg_locked(dev, 2, BM_PORT_GEN_CFG, 17256 phy_data & 0x00ff); 17257 if (rv) 17258 goto release; 17259 17260 /* Set MSE higher to enable link to stay up when noise is high */ 17261 rv = wm_write_emi_reg_locked(dev, I82577_MSE_THRESHOLD, 0x0034); 17262 release: 17263 sc->phy.release(sc); 17264 17265 return rv; 17266 } 17267 17268 /* 17269 * wm_copy_rx_addrs_to_phy_ich8lan - Copy Rx addresses from MAC to PHY 17270 * @sc: pointer to the HW structure 17271 */ 17272 static void 17273 wm_copy_rx_addrs_to_phy_ich8lan(struct wm_softc *sc) 17274 { 17275 17276 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17277 device_xname(sc->sc_dev), __func__)); 17278 17279 if (sc->phy.acquire(sc) != 0) 17280 return; 17281 17282 wm_copy_rx_addrs_to_phy_ich8lan_locked(sc); 17283 17284 sc->phy.release(sc); 17285 } 17286 17287 static void 17288 wm_copy_rx_addrs_to_phy_ich8lan_locked(struct wm_softc *sc) 17289 { 17290 device_t dev = sc->sc_dev; 17291 uint32_t mac_reg; 17292 uint16_t i, wuce; 17293 int count; 17294 17295 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17296 device_xname(dev), __func__)); 17297 17298 if (wm_enable_phy_wakeup_reg_access_bm(dev, &wuce) != 0) 17299 return; 17300 17301 /* Copy both RAL/H (rar_entry_count) and SHRAL/H to PHY */ 17302 count = wm_rar_count(sc); 17303 for (i = 0; i < count; i++) { 17304 uint16_t lo, hi; 17305 mac_reg = CSR_READ(sc, WMREG_CORDOVA_RAL(i)); 17306 lo = (uint16_t)(mac_reg & 0xffff); 17307 hi = (uint16_t)((mac_reg >> 16) & 0xffff); 17308 wm_access_phy_wakeup_reg_bm(dev, BM_RAR_L(i), &lo, 0, true); 17309 wm_access_phy_wakeup_reg_bm(dev, BM_RAR_M(i), &hi, 0, true); 17310 17311 mac_reg = CSR_READ(sc, WMREG_CORDOVA_RAH(i)); 17312 lo = (uint16_t)(mac_reg & 0xffff); 17313 hi = (uint16_t)((mac_reg & RAL_AV) >> 16); 17314 wm_access_phy_wakeup_reg_bm(dev, BM_RAR_H(i), &lo, 0, true); 17315 wm_access_phy_wakeup_reg_bm(dev, BM_RAR_CTRL(i), &hi, 0, true); 17316 } 17317 17318 wm_disable_phy_wakeup_reg_access_bm(dev, &wuce); 17319 } 17320 17321 /* 17322 * wm_lv_jumbo_workaround_ich8lan - required for jumbo frame operation 17323 * with 82579 PHY 17324 * @enable: flag to enable/disable workaround when enabling/disabling jumbos 17325 */ 17326 static int 17327 wm_lv_jumbo_workaround_ich8lan(struct wm_softc *sc, bool enable) 17328 { 17329 device_t dev = sc->sc_dev; 17330 int rar_count; 17331 int rv; 17332 uint32_t mac_reg; 17333 uint16_t dft_ctrl, data; 17334 uint16_t i; 17335 17336 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17337 device_xname(dev), __func__)); 17338 17339 if (sc->sc_type < WM_T_PCH2) 17340 return 0; 17341 17342 /* Acquire PHY semaphore */ 17343 rv = sc->phy.acquire(sc); 17344 if (rv != 0) 17345 return rv; 17346 17347 /* Disable Rx path while enabling/disabling workaround */ 17348 rv = sc->phy.readreg_locked(dev, 2, I82579_DFT_CTRL, &dft_ctrl); 17349 if (rv != 0) 17350 goto out; 17351 rv = sc->phy.writereg_locked(dev, 2, I82579_DFT_CTRL, 17352 dft_ctrl | (1 << 14)); 17353 if (rv != 0) 17354 goto out; 17355 17356 if (enable) { 17357 /* Write Rx addresses (rar_entry_count for RAL/H, and 17358 * SHRAL/H) and initial CRC values to the MAC 17359 */ 17360 rar_count = wm_rar_count(sc); 17361 for (i = 0; i < rar_count; i++) { 17362 uint8_t mac_addr[ETHER_ADDR_LEN] = {0}; 17363 uint32_t addr_high, addr_low; 17364 17365 addr_high = CSR_READ(sc, WMREG_CORDOVA_RAH(i)); 17366 if (!(addr_high & RAL_AV)) 17367 continue; 17368 addr_low = CSR_READ(sc, WMREG_CORDOVA_RAL(i)); 17369 mac_addr[0] = (addr_low & 0xFF); 17370 mac_addr[1] = ((addr_low >> 8) & 0xFF); 17371 mac_addr[2] = ((addr_low >> 16) & 0xFF); 17372 mac_addr[3] = ((addr_low >> 24) & 0xFF); 17373 mac_addr[4] = (addr_high & 0xFF); 17374 mac_addr[5] = ((addr_high >> 8) & 0xFF); 17375 17376 CSR_WRITE(sc, WMREG_PCH_RAICC(i), 17377 ~ether_crc32_le(mac_addr, ETHER_ADDR_LEN)); 17378 } 17379 17380 /* Write Rx addresses to the PHY */ 17381 wm_copy_rx_addrs_to_phy_ich8lan_locked(sc); 17382 } 17383 17384 /* 17385 * If enable == 17386 * true: Enable jumbo frame workaround in the MAC. 17387 * false: Write MAC register values back to h/w defaults. 17388 */ 17389 mac_reg = CSR_READ(sc, WMREG_FFLT_DBG); 17390 if (enable) { 17391 mac_reg &= ~(1 << 14); 17392 mac_reg |= (7 << 15); 17393 } else 17394 mac_reg &= ~(0xf << 14); 17395 CSR_WRITE(sc, WMREG_FFLT_DBG, mac_reg); 17396 17397 mac_reg = CSR_READ(sc, WMREG_RCTL); 17398 if (enable) { 17399 mac_reg |= RCTL_SECRC; 17400 sc->sc_rctl |= RCTL_SECRC; 17401 sc->sc_flags |= WM_F_CRC_STRIP; 17402 } else { 17403 mac_reg &= ~RCTL_SECRC; 17404 sc->sc_rctl &= ~RCTL_SECRC; 17405 sc->sc_flags &= ~WM_F_CRC_STRIP; 17406 } 17407 CSR_WRITE(sc, WMREG_RCTL, mac_reg); 17408 17409 rv = wm_kmrn_readreg_locked(sc, KUMCTRLSTA_OFFSET_CTRL, &data); 17410 if (rv != 0) 17411 goto out; 17412 if (enable) 17413 data |= 1 << 0; 17414 else 17415 data &= ~(1 << 0); 17416 rv = wm_kmrn_writereg_locked(sc, KUMCTRLSTA_OFFSET_CTRL, data); 17417 if (rv != 0) 17418 goto out; 17419 17420 rv = wm_kmrn_readreg_locked(sc, KUMCTRLSTA_OFFSET_HD_CTRL, &data); 17421 if (rv != 0) 17422 goto out; 17423 /* 17424 * XXX FreeBSD and Linux do the same thing that they set the same value 17425 * on both the enable case and the disable case. Is it correct? 17426 */ 17427 data &= ~(0xf << 8); 17428 data |= (0xb << 8); 17429 rv = wm_kmrn_writereg_locked(sc, KUMCTRLSTA_OFFSET_HD_CTRL, data); 17430 if (rv != 0) 17431 goto out; 17432 17433 /* 17434 * If enable == 17435 * true: Enable jumbo frame workaround in the PHY. 17436 * false: Write PHY register values back to h/w defaults. 17437 */ 17438 rv = sc->phy.readreg_locked(dev, 2, BME1000_REG(769, 23), &data); 17439 if (rv != 0) 17440 goto out; 17441 data &= ~(0x7F << 5); 17442 if (enable) 17443 data |= (0x37 << 5); 17444 rv = sc->phy.writereg_locked(dev, 2, BME1000_REG(769, 23), data); 17445 if (rv != 0) 17446 goto out; 17447 17448 rv = sc->phy.readreg_locked(dev, 2, BME1000_REG(769, 16), &data); 17449 if (rv != 0) 17450 goto out; 17451 if (enable) 17452 data &= ~(1 << 13); 17453 else 17454 data |= (1 << 13); 17455 rv = sc->phy.writereg_locked(dev, 2, BME1000_REG(769, 16), data); 17456 if (rv != 0) 17457 goto out; 17458 17459 rv = sc->phy.readreg_locked(dev, 2, I82579_UNKNOWN1, &data); 17460 if (rv != 0) 17461 goto out; 17462 data &= ~(0x3FF << 2); 17463 if (enable) 17464 data |= (I82579_TX_PTR_GAP << 2); 17465 else 17466 data |= (0x8 << 2); 17467 rv = sc->phy.writereg_locked(dev, 2, I82579_UNKNOWN1, data); 17468 if (rv != 0) 17469 goto out; 17470 17471 rv = sc->phy.writereg_locked(dev, 2, BME1000_REG(776, 23), 17472 enable ? 0xf100 : 0x7e00); 17473 if (rv != 0) 17474 goto out; 17475 17476 rv = sc->phy.readreg_locked(dev, 2, HV_PM_CTRL, &data); 17477 if (rv != 0) 17478 goto out; 17479 if (enable) 17480 data |= 1 << 10; 17481 else 17482 data &= ~(1 << 10); 17483 rv = sc->phy.writereg_locked(dev, 2, HV_PM_CTRL, data); 17484 if (rv != 0) 17485 goto out; 17486 17487 /* Re-enable Rx path after enabling/disabling workaround */ 17488 rv = sc->phy.writereg_locked(dev, 2, I82579_DFT_CTRL, 17489 dft_ctrl & ~(1 << 14)); 17490 17491 out: 17492 sc->phy.release(sc); 17493 17494 return rv; 17495 } 17496 17497 /* 17498 * wm_lv_phy_workarounds_ich8lan - A series of Phy workarounds to be 17499 * done after every PHY reset. 17500 */ 17501 static int 17502 wm_lv_phy_workarounds_ich8lan(struct wm_softc *sc) 17503 { 17504 device_t dev = sc->sc_dev; 17505 int rv; 17506 17507 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17508 device_xname(dev), __func__)); 17509 KASSERT(sc->sc_type == WM_T_PCH2); 17510 17511 /* Set MDIO slow mode before any other MDIO access */ 17512 rv = wm_set_mdio_slow_mode_hv(sc); 17513 if (rv != 0) 17514 return rv; 17515 17516 rv = sc->phy.acquire(sc); 17517 if (rv != 0) 17518 return rv; 17519 /* Set MSE higher to enable link to stay up when noise is high */ 17520 rv = wm_write_emi_reg_locked(dev, I82579_MSE_THRESHOLD, 0x0034); 17521 if (rv != 0) 17522 goto release; 17523 /* Drop link after 5 times MSE threshold was reached */ 17524 rv = wm_write_emi_reg_locked(dev, I82579_MSE_LINK_DOWN, 0x0005); 17525 release: 17526 sc->phy.release(sc); 17527 17528 return rv; 17529 } 17530 17531 /** 17532 * wm_k1_workaround_lpt_lp - K1 workaround on Lynxpoint-LP 17533 * @link: link up bool flag 17534 * 17535 * When K1 is enabled for 1Gbps, the MAC can miss 2 DMA completion indications 17536 * preventing further DMA write requests. Workaround the issue by disabling 17537 * the de-assertion of the clock request when in 1Gpbs mode. 17538 * Also, set appropriate Tx re-transmission timeouts for 10 and 100Half link 17539 * speeds in order to avoid Tx hangs. 17540 **/ 17541 static int 17542 wm_k1_workaround_lpt_lp(struct wm_softc *sc, bool link) 17543 { 17544 uint32_t fextnvm6 = CSR_READ(sc, WMREG_FEXTNVM6); 17545 uint32_t status = CSR_READ(sc, WMREG_STATUS); 17546 uint32_t speed = __SHIFTOUT(status, STATUS_SPEED); 17547 uint16_t phyreg; 17548 17549 if (link && (speed == STATUS_SPEED_1000)) { 17550 int rv; 17551 17552 rv = sc->phy.acquire(sc); 17553 if (rv != 0) 17554 return rv; 17555 rv = wm_kmrn_readreg_locked(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, 17556 &phyreg); 17557 if (rv != 0) 17558 goto release; 17559 rv = wm_kmrn_writereg_locked(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, 17560 phyreg & ~KUMCTRLSTA_K1_ENABLE); 17561 if (rv != 0) 17562 goto release; 17563 delay(20); 17564 CSR_WRITE(sc, WMREG_FEXTNVM6, fextnvm6 | FEXTNVM6_REQ_PLL_CLK); 17565 17566 rv = wm_kmrn_readreg_locked(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, 17567 &phyreg); 17568 release: 17569 sc->phy.release(sc); 17570 return rv; 17571 } 17572 17573 fextnvm6 &= ~FEXTNVM6_REQ_PLL_CLK; 17574 17575 struct mii_softc *child = LIST_FIRST(&sc->sc_mii.mii_phys); 17576 if (((child != NULL) && (child->mii_mpd_rev > 5)) 17577 || !link 17578 || ((speed == STATUS_SPEED_100) && (status & STATUS_FD))) 17579 goto update_fextnvm6; 17580 17581 wm_gmii_hv_readreg(sc->sc_dev, 2, I217_INBAND_CTRL, &phyreg); 17582 17583 /* Clear link status transmit timeout */ 17584 phyreg &= ~I217_INBAND_CTRL_LINK_STAT_TX_TIMEOUT_MASK; 17585 if (speed == STATUS_SPEED_100) { 17586 /* Set inband Tx timeout to 5x10us for 100Half */ 17587 phyreg |= 5 << I217_INBAND_CTRL_LINK_STAT_TX_TIMEOUT_SHIFT; 17588 17589 /* Do not extend the K1 entry latency for 100Half */ 17590 fextnvm6 &= ~FEXTNVM6_ENABLE_K1_ENTRY_CONDITION; 17591 } else { 17592 /* Set inband Tx timeout to 50x10us for 10Full/Half */ 17593 phyreg |= 50 << I217_INBAND_CTRL_LINK_STAT_TX_TIMEOUT_SHIFT; 17594 17595 /* Extend the K1 entry latency for 10 Mbps */ 17596 fextnvm6 |= FEXTNVM6_ENABLE_K1_ENTRY_CONDITION; 17597 } 17598 17599 wm_gmii_hv_writereg(sc->sc_dev, 2, I217_INBAND_CTRL, phyreg); 17600 17601 update_fextnvm6: 17602 CSR_WRITE(sc, WMREG_FEXTNVM6, fextnvm6); 17603 return 0; 17604 } 17605 17606 /* 17607 * wm_k1_gig_workaround_hv - K1 Si workaround 17608 * @sc: pointer to the HW structure 17609 * @link: link up bool flag 17610 * 17611 * If K1 is enabled for 1Gbps, the MAC might stall when transitioning 17612 * from a lower speed. This workaround disables K1 whenever link is at 1Gig 17613 * If link is down, the function will restore the default K1 setting located 17614 * in the NVM. 17615 */ 17616 static int 17617 wm_k1_gig_workaround_hv(struct wm_softc *sc, int link) 17618 { 17619 int k1_enable = sc->sc_nvm_k1_enabled; 17620 int rv; 17621 17622 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17623 device_xname(sc->sc_dev), __func__)); 17624 17625 rv = sc->phy.acquire(sc); 17626 if (rv != 0) 17627 return rv; 17628 17629 if (link) { 17630 k1_enable = 0; 17631 17632 /* Link stall fix for link up */ 17633 wm_gmii_hv_writereg_locked(sc->sc_dev, 1, IGP3_KMRN_DIAG, 17634 0x0100); 17635 } else { 17636 /* Link stall fix for link down */ 17637 wm_gmii_hv_writereg_locked(sc->sc_dev, 1, IGP3_KMRN_DIAG, 17638 0x4100); 17639 } 17640 17641 wm_configure_k1_ich8lan(sc, k1_enable); 17642 sc->phy.release(sc); 17643 17644 return 0; 17645 } 17646 17647 /* 17648 * wm_k1_workaround_lv - K1 Si workaround 17649 * @sc: pointer to the HW structure 17650 * 17651 * Workaround to set the K1 beacon duration for 82579 parts in 10Mbps 17652 * Disable K1 for 1000 and 100 speeds 17653 */ 17654 static int 17655 wm_k1_workaround_lv(struct wm_softc *sc) 17656 { 17657 uint32_t reg; 17658 uint16_t phyreg; 17659 int rv; 17660 17661 if (sc->sc_type != WM_T_PCH2) 17662 return 0; 17663 17664 /* Set K1 beacon duration based on 10Mbps speed */ 17665 rv = wm_gmii_hv_readreg(sc->sc_dev, 2, HV_M_STATUS, &phyreg); 17666 if (rv != 0) 17667 return rv; 17668 17669 if ((phyreg & (HV_M_STATUS_LINK_UP | HV_M_STATUS_AUTONEG_COMPLETE)) 17670 == (HV_M_STATUS_LINK_UP | HV_M_STATUS_AUTONEG_COMPLETE)) { 17671 if (phyreg & 17672 (HV_M_STATUS_SPEED_1000 | HV_M_STATUS_SPEED_100)) { 17673 /* LV 1G/100 Packet drop issue wa */ 17674 rv = wm_gmii_hv_readreg(sc->sc_dev, 1, HV_PM_CTRL, 17675 &phyreg); 17676 if (rv != 0) 17677 return rv; 17678 phyreg &= ~HV_PM_CTRL_K1_ENA; 17679 rv = wm_gmii_hv_writereg(sc->sc_dev, 1, HV_PM_CTRL, 17680 phyreg); 17681 if (rv != 0) 17682 return rv; 17683 } else { 17684 /* For 10Mbps */ 17685 reg = CSR_READ(sc, WMREG_FEXTNVM4); 17686 reg &= ~FEXTNVM4_BEACON_DURATION; 17687 reg |= FEXTNVM4_BEACON_DURATION_16US; 17688 CSR_WRITE(sc, WMREG_FEXTNVM4, reg); 17689 } 17690 } 17691 17692 return 0; 17693 } 17694 17695 /* 17696 * wm_link_stall_workaround_hv - Si workaround 17697 * @sc: pointer to the HW structure 17698 * 17699 * This function works around a Si bug where the link partner can get 17700 * a link up indication before the PHY does. If small packets are sent 17701 * by the link partner they can be placed in the packet buffer without 17702 * being properly accounted for by the PHY and will stall preventing 17703 * further packets from being received. The workaround is to clear the 17704 * packet buffer after the PHY detects link up. 17705 */ 17706 static int 17707 wm_link_stall_workaround_hv(struct wm_softc *sc) 17708 { 17709 uint16_t phyreg; 17710 17711 if (sc->sc_phytype != WMPHY_82578) 17712 return 0; 17713 17714 /* Do not apply workaround if in PHY loopback bit 14 set */ 17715 wm_gmii_hv_readreg(sc->sc_dev, 2, MII_BMCR, &phyreg); 17716 if ((phyreg & BMCR_LOOP) != 0) 17717 return 0; 17718 17719 /* Check if link is up and at 1Gbps */ 17720 wm_gmii_hv_readreg(sc->sc_dev, 2, BM_CS_STATUS, &phyreg); 17721 phyreg &= BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED 17722 | BM_CS_STATUS_SPEED_MASK; 17723 if (phyreg != (BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED 17724 | BM_CS_STATUS_SPEED_1000)) 17725 return 0; 17726 17727 delay(200 * 1000); /* XXX too big */ 17728 17729 /* Flush the packets in the fifo buffer */ 17730 wm_gmii_hv_writereg(sc->sc_dev, 1, HV_MUX_DATA_CTRL, 17731 HV_MUX_DATA_CTRL_GEN_TO_MAC | HV_MUX_DATA_CTRL_FORCE_SPEED); 17732 wm_gmii_hv_writereg(sc->sc_dev, 1, HV_MUX_DATA_CTRL, 17733 HV_MUX_DATA_CTRL_GEN_TO_MAC); 17734 17735 return 0; 17736 } 17737 17738 static int 17739 wm_set_mdio_slow_mode_hv(struct wm_softc *sc) 17740 { 17741 int rv; 17742 17743 rv = sc->phy.acquire(sc); 17744 if (rv != 0) { 17745 device_printf(sc->sc_dev, "%s: failed to get semaphore\n", 17746 __func__); 17747 return rv; 17748 } 17749 17750 rv = wm_set_mdio_slow_mode_hv_locked(sc); 17751 17752 sc->phy.release(sc); 17753 17754 return rv; 17755 } 17756 17757 static int 17758 wm_set_mdio_slow_mode_hv_locked(struct wm_softc *sc) 17759 { 17760 int rv; 17761 uint16_t reg; 17762 17763 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 1, HV_KMRN_MODE_CTRL, ®); 17764 if (rv != 0) 17765 return rv; 17766 17767 return wm_gmii_hv_writereg_locked(sc->sc_dev, 1, HV_KMRN_MODE_CTRL, 17768 reg | HV_KMRN_MDIO_SLOW); 17769 } 17770 17771 /* 17772 * wm_configure_k1_ich8lan - Configure K1 power state 17773 * @sc: pointer to the HW structure 17774 * @enable: K1 state to configure 17775 * 17776 * Configure the K1 power state based on the provided parameter. 17777 * Assumes semaphore already acquired. 17778 */ 17779 static void 17780 wm_configure_k1_ich8lan(struct wm_softc *sc, int k1_enable) 17781 { 17782 uint32_t ctrl, ctrl_ext, tmp; 17783 uint16_t kmreg; 17784 int rv; 17785 17786 KASSERT(CSR_READ(sc, WMREG_EXTCNFCTR) & EXTCNFCTR_MDIO_SW_OWNERSHIP); 17787 17788 rv = wm_kmrn_readreg_locked(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, &kmreg); 17789 if (rv != 0) 17790 return; 17791 17792 if (k1_enable) 17793 kmreg |= KUMCTRLSTA_K1_ENABLE; 17794 else 17795 kmreg &= ~KUMCTRLSTA_K1_ENABLE; 17796 17797 rv = wm_kmrn_writereg_locked(sc, KUMCTRLSTA_OFFSET_K1_CONFIG, kmreg); 17798 if (rv != 0) 17799 return; 17800 17801 delay(20); 17802 17803 ctrl = CSR_READ(sc, WMREG_CTRL); 17804 ctrl_ext = CSR_READ(sc, WMREG_CTRL_EXT); 17805 17806 tmp = ctrl & ~(CTRL_SPEED_1000 | CTRL_SPEED_100); 17807 tmp |= CTRL_FRCSPD; 17808 17809 CSR_WRITE(sc, WMREG_CTRL, tmp); 17810 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext | CTRL_EXT_SPD_BYPS); 17811 CSR_WRITE_FLUSH(sc); 17812 delay(20); 17813 17814 CSR_WRITE(sc, WMREG_CTRL, ctrl); 17815 CSR_WRITE(sc, WMREG_CTRL_EXT, ctrl_ext); 17816 CSR_WRITE_FLUSH(sc); 17817 delay(20); 17818 17819 return; 17820 } 17821 17822 /* special case - for 82575 - need to do manual init ... */ 17823 static void 17824 wm_reset_init_script_82575(struct wm_softc *sc) 17825 { 17826 /* 17827 * Remark: this is untested code - we have no board without EEPROM 17828 * same setup as mentioned int the FreeBSD driver for the i82575 17829 */ 17830 17831 /* SerDes configuration via SERDESCTRL */ 17832 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x00, 0x0c); 17833 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x01, 0x78); 17834 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x1b, 0x23); 17835 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCTL, 0x23, 0x15); 17836 17837 /* CCM configuration via CCMCTL register */ 17838 wm_82575_write_8bit_ctlr_reg(sc, WMREG_CCMCTL, 0x14, 0x00); 17839 wm_82575_write_8bit_ctlr_reg(sc, WMREG_CCMCTL, 0x10, 0x00); 17840 17841 /* PCIe lanes configuration */ 17842 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x00, 0xec); 17843 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x61, 0xdf); 17844 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x34, 0x05); 17845 wm_82575_write_8bit_ctlr_reg(sc, WMREG_GIOCTL, 0x2f, 0x81); 17846 17847 /* PCIe PLL Configuration */ 17848 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x02, 0x47); 17849 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x14, 0x00); 17850 wm_82575_write_8bit_ctlr_reg(sc, WMREG_SCCTL, 0x10, 0x00); 17851 } 17852 17853 static void 17854 wm_reset_mdicnfg_82580(struct wm_softc *sc) 17855 { 17856 uint32_t reg; 17857 uint16_t nvmword; 17858 int rv; 17859 17860 if (sc->sc_type != WM_T_82580) 17861 return; 17862 if ((sc->sc_flags & WM_F_SGMII) == 0) 17863 return; 17864 17865 rv = wm_nvm_read(sc, NVM_OFF_LAN_FUNC_82580(sc->sc_funcid) 17866 + NVM_OFF_CFG3_PORTA, 1, &nvmword); 17867 if (rv != 0) { 17868 aprint_error_dev(sc->sc_dev, "%s: failed to read NVM\n", 17869 __func__); 17870 return; 17871 } 17872 17873 reg = CSR_READ(sc, WMREG_MDICNFG); 17874 if (nvmword & NVM_CFG3_PORTA_EXT_MDIO) 17875 reg |= MDICNFG_DEST; 17876 if (nvmword & NVM_CFG3_PORTA_COM_MDIO) 17877 reg |= MDICNFG_COM_MDIO; 17878 CSR_WRITE(sc, WMREG_MDICNFG, reg); 17879 } 17880 17881 #define MII_INVALIDID(x) (((x) == 0x0000) || ((x) == 0xffff)) 17882 17883 static bool 17884 wm_phy_is_accessible_pchlan(struct wm_softc *sc) 17885 { 17886 uint32_t reg; 17887 uint16_t id1, id2; 17888 int i, rv; 17889 17890 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17891 device_xname(sc->sc_dev), __func__)); 17892 KASSERT(CSR_READ(sc, WMREG_EXTCNFCTR) & EXTCNFCTR_MDIO_SW_OWNERSHIP); 17893 17894 id1 = id2 = 0xffff; 17895 for (i = 0; i < 2; i++) { 17896 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, MII_PHYIDR1, 17897 &id1); 17898 if ((rv != 0) || MII_INVALIDID(id1)) 17899 continue; 17900 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, MII_PHYIDR2, 17901 &id2); 17902 if ((rv != 0) || MII_INVALIDID(id2)) 17903 continue; 17904 break; 17905 } 17906 if ((rv == 0) && !MII_INVALIDID(id1) && !MII_INVALIDID(id2)) 17907 goto out; 17908 17909 /* 17910 * In case the PHY needs to be in mdio slow mode, 17911 * set slow mode and try to get the PHY id again. 17912 */ 17913 rv = 0; 17914 if (sc->sc_type < WM_T_PCH_LPT) { 17915 wm_set_mdio_slow_mode_hv_locked(sc); 17916 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, MII_PHYIDR1, 17917 &id1); 17918 rv |= wm_gmii_hv_readreg_locked(sc->sc_dev, 2, MII_PHYIDR2, 17919 &id2); 17920 } 17921 if ((rv != 0) || MII_INVALIDID(id1) || MII_INVALIDID(id2)) { 17922 device_printf(sc->sc_dev, "XXX return with false\n"); 17923 return false; 17924 } 17925 out: 17926 if (sc->sc_type >= WM_T_PCH_LPT) { 17927 /* Only unforce SMBus if ME is not active */ 17928 if ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID) == 0) { 17929 uint16_t phyreg; 17930 17931 /* Unforce SMBus mode in PHY */ 17932 rv = wm_gmii_hv_readreg_locked(sc->sc_dev, 2, 17933 CV_SMB_CTRL, &phyreg); 17934 phyreg &= ~CV_SMB_CTRL_FORCE_SMBUS; 17935 wm_gmii_hv_writereg_locked(sc->sc_dev, 2, 17936 CV_SMB_CTRL, phyreg); 17937 17938 /* Unforce SMBus mode in MAC */ 17939 reg = CSR_READ(sc, WMREG_CTRL_EXT); 17940 reg &= ~CTRL_EXT_FORCE_SMBUS; 17941 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 17942 } 17943 } 17944 return true; 17945 } 17946 17947 static void 17948 wm_toggle_lanphypc_pch_lpt(struct wm_softc *sc) 17949 { 17950 uint32_t reg; 17951 int i; 17952 17953 /* Set PHY Config Counter to 50msec */ 17954 reg = CSR_READ(sc, WMREG_FEXTNVM3); 17955 reg &= ~FEXTNVM3_PHY_CFG_COUNTER_MASK; 17956 reg |= FEXTNVM3_PHY_CFG_COUNTER_50MS; 17957 CSR_WRITE(sc, WMREG_FEXTNVM3, reg); 17958 17959 /* Toggle LANPHYPC */ 17960 reg = CSR_READ(sc, WMREG_CTRL); 17961 reg |= CTRL_LANPHYPC_OVERRIDE; 17962 reg &= ~CTRL_LANPHYPC_VALUE; 17963 CSR_WRITE(sc, WMREG_CTRL, reg); 17964 CSR_WRITE_FLUSH(sc); 17965 delay(1000); 17966 reg &= ~CTRL_LANPHYPC_OVERRIDE; 17967 CSR_WRITE(sc, WMREG_CTRL, reg); 17968 CSR_WRITE_FLUSH(sc); 17969 17970 if (sc->sc_type < WM_T_PCH_LPT) 17971 delay(50 * 1000); 17972 else { 17973 i = 20; 17974 17975 do { 17976 delay(5 * 1000); 17977 } while (((CSR_READ(sc, WMREG_CTRL_EXT) & CTRL_EXT_LPCD) == 0) 17978 && i--); 17979 17980 delay(30 * 1000); 17981 } 17982 } 17983 17984 static int 17985 wm_platform_pm_pch_lpt(struct wm_softc *sc, bool link) 17986 { 17987 uint32_t reg = __SHIFTIN(link, LTRV_NONSNOOP_REQ) 17988 | __SHIFTIN(link, LTRV_SNOOP_REQ) | LTRV_SEND; 17989 uint32_t rxa; 17990 uint16_t scale = 0, lat_enc = 0; 17991 int32_t obff_hwm = 0; 17992 int64_t lat_ns, value; 17993 17994 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 17995 device_xname(sc->sc_dev), __func__)); 17996 17997 if (link) { 17998 uint16_t max_snoop, max_nosnoop, max_ltr_enc; 17999 uint32_t status; 18000 uint16_t speed; 18001 pcireg_t preg; 18002 18003 status = CSR_READ(sc, WMREG_STATUS); 18004 switch (__SHIFTOUT(status, STATUS_SPEED)) { 18005 case STATUS_SPEED_10: 18006 speed = 10; 18007 break; 18008 case STATUS_SPEED_100: 18009 speed = 100; 18010 break; 18011 case STATUS_SPEED_1000: 18012 speed = 1000; 18013 break; 18014 default: 18015 device_printf(sc->sc_dev, "Unknown speed " 18016 "(status = %08x)\n", status); 18017 return -1; 18018 } 18019 18020 /* Rx Packet Buffer Allocation size (KB) */ 18021 rxa = CSR_READ(sc, WMREG_PBA) & PBA_RXA_MASK; 18022 18023 /* 18024 * Determine the maximum latency tolerated by the device. 18025 * 18026 * Per the PCIe spec, the tolerated latencies are encoded as 18027 * a 3-bit encoded scale (only 0-5 are valid) multiplied by 18028 * a 10-bit value (0-1023) to provide a range from 1 ns to 18029 * 2^25*(2^10-1) ns. The scale is encoded as 0=2^0ns, 18030 * 1=2^5ns, 2=2^10ns,...5=2^25ns. 18031 */ 18032 lat_ns = ((int64_t)rxa * 1024 - 18033 (2 * ((int64_t)sc->sc_ethercom.ec_if.if_mtu 18034 + ETHER_HDR_LEN))) * 8 * 1000; 18035 if (lat_ns < 0) 18036 lat_ns = 0; 18037 else 18038 lat_ns /= speed; 18039 value = lat_ns; 18040 18041 while (value > LTRV_VALUE) { 18042 scale ++; 18043 value = howmany(value, __BIT(5)); 18044 } 18045 if (scale > LTRV_SCALE_MAX) { 18046 device_printf(sc->sc_dev, 18047 "Invalid LTR latency scale %d\n", scale); 18048 return -1; 18049 } 18050 lat_enc = (uint16_t)(__SHIFTIN(scale, LTRV_SCALE) | value); 18051 18052 /* Determine the maximum latency tolerated by the platform */ 18053 preg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, 18054 WM_PCI_LTR_CAP_LPT); 18055 max_snoop = preg & 0xffff; 18056 max_nosnoop = preg >> 16; 18057 18058 max_ltr_enc = MAX(max_snoop, max_nosnoop); 18059 18060 if (lat_enc > max_ltr_enc) { 18061 lat_enc = max_ltr_enc; 18062 lat_ns = __SHIFTOUT(lat_enc, PCI_LTR_MAXSNOOPLAT_VAL) 18063 * PCI_LTR_SCALETONS( 18064 __SHIFTOUT(lat_enc, 18065 PCI_LTR_MAXSNOOPLAT_SCALE)); 18066 } 18067 18068 if (lat_ns) { 18069 lat_ns *= speed * 1000; 18070 lat_ns /= 8; 18071 lat_ns /= 1000000000; 18072 obff_hwm = (int32_t)(rxa - lat_ns); 18073 } 18074 if ((obff_hwm < 0) || (obff_hwm > SVT_OFF_HWM)) { 18075 device_printf(sc->sc_dev, "Invalid high water mark %d" 18076 "(rxa = %d, lat_ns = %d)\n", 18077 obff_hwm, (int32_t)rxa, (int32_t)lat_ns); 18078 return -1; 18079 } 18080 } 18081 /* Snoop and No-Snoop latencies the same */ 18082 reg |= lat_enc | __SHIFTIN(lat_enc, LTRV_NONSNOOP); 18083 CSR_WRITE(sc, WMREG_LTRV, reg); 18084 18085 /* Set OBFF high water mark */ 18086 reg = CSR_READ(sc, WMREG_SVT) & ~SVT_OFF_HWM; 18087 reg |= obff_hwm; 18088 CSR_WRITE(sc, WMREG_SVT, reg); 18089 18090 /* Enable OBFF */ 18091 reg = CSR_READ(sc, WMREG_SVCR); 18092 reg |= SVCR_OFF_EN | SVCR_OFF_MASKINT; 18093 CSR_WRITE(sc, WMREG_SVCR, reg); 18094 18095 return 0; 18096 } 18097 18098 /* 18099 * I210 Errata 25 and I211 Errata 10 18100 * Slow System Clock. 18101 * 18102 * Note that this function is called on both FLASH and iNVM case on NetBSD. 18103 */ 18104 static int 18105 wm_pll_workaround_i210(struct wm_softc *sc) 18106 { 18107 uint32_t mdicnfg, wuc; 18108 uint32_t reg; 18109 pcireg_t pcireg; 18110 uint32_t pmreg; 18111 uint16_t nvmword, tmp_nvmword; 18112 uint16_t phyval; 18113 bool wa_done = false; 18114 int i, rv = 0; 18115 18116 /* Get Power Management cap offset */ 18117 if (pci_get_capability(sc->sc_pc, sc->sc_pcitag, PCI_CAP_PWRMGMT, 18118 &pmreg, NULL) == 0) 18119 return -1; 18120 18121 /* Save WUC and MDICNFG registers */ 18122 wuc = CSR_READ(sc, WMREG_WUC); 18123 mdicnfg = CSR_READ(sc, WMREG_MDICNFG); 18124 18125 reg = mdicnfg & ~MDICNFG_DEST; 18126 CSR_WRITE(sc, WMREG_MDICNFG, reg); 18127 18128 if (wm_nvm_read(sc, INVM_AUTOLOAD, 1, &nvmword) != 0) { 18129 /* 18130 * The default value of the Initialization Control Word 1 18131 * is the same on both I210's FLASH_HW and I21[01]'s iNVM. 18132 */ 18133 nvmword = INVM_DEFAULT_AL; 18134 } 18135 tmp_nvmword = nvmword | INVM_PLL_WO_VAL; 18136 18137 for (i = 0; i < WM_MAX_PLL_TRIES; i++) { 18138 wm_gmii_gs40g_readreg(sc->sc_dev, 1, 18139 GS40G_PHY_PLL_FREQ_PAGE | GS40G_PHY_PLL_FREQ_REG, &phyval); 18140 18141 if ((phyval & GS40G_PHY_PLL_UNCONF) != GS40G_PHY_PLL_UNCONF) { 18142 rv = 0; 18143 break; /* OK */ 18144 } else 18145 rv = -1; 18146 18147 wa_done = true; 18148 /* Directly reset the internal PHY */ 18149 reg = CSR_READ(sc, WMREG_CTRL); 18150 CSR_WRITE(sc, WMREG_CTRL, reg | CTRL_PHY_RESET); 18151 18152 reg = CSR_READ(sc, WMREG_CTRL_EXT); 18153 reg |= CTRL_EXT_PHYPDEN | CTRL_EXT_SDLPE; 18154 CSR_WRITE(sc, WMREG_CTRL_EXT, reg); 18155 18156 CSR_WRITE(sc, WMREG_WUC, 0); 18157 reg = (INVM_AUTOLOAD << 4) | (tmp_nvmword << 16); 18158 CSR_WRITE(sc, WMREG_EEARBC_I210, reg); 18159 18160 pcireg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, 18161 pmreg + PCI_PMCSR); 18162 pcireg |= PCI_PMCSR_STATE_D3; 18163 pci_conf_write(sc->sc_pc, sc->sc_pcitag, 18164 pmreg + PCI_PMCSR, pcireg); 18165 delay(1000); 18166 pcireg &= ~PCI_PMCSR_STATE_D3; 18167 pci_conf_write(sc->sc_pc, sc->sc_pcitag, 18168 pmreg + PCI_PMCSR, pcireg); 18169 18170 reg = (INVM_AUTOLOAD << 4) | (nvmword << 16); 18171 CSR_WRITE(sc, WMREG_EEARBC_I210, reg); 18172 18173 /* Restore WUC register */ 18174 CSR_WRITE(sc, WMREG_WUC, wuc); 18175 } 18176 18177 /* Restore MDICNFG setting */ 18178 CSR_WRITE(sc, WMREG_MDICNFG, mdicnfg); 18179 if (wa_done) 18180 aprint_verbose_dev(sc->sc_dev, "I210 workaround done\n"); 18181 return rv; 18182 } 18183 18184 static void 18185 wm_legacy_irq_quirk_spt(struct wm_softc *sc) 18186 { 18187 uint32_t reg; 18188 18189 DPRINTF(sc, WM_DEBUG_INIT, ("%s: %s called\n", 18190 device_xname(sc->sc_dev), __func__)); 18191 KASSERT((sc->sc_type == WM_T_PCH_SPT) 18192 || (sc->sc_type == WM_T_PCH_CNP) || (sc->sc_type == WM_T_PCH_TGP)); 18193 18194 reg = CSR_READ(sc, WMREG_FEXTNVM7); 18195 reg |= FEXTNVM7_SIDE_CLK_UNGATE; 18196 CSR_WRITE(sc, WMREG_FEXTNVM7, reg); 18197 18198 reg = CSR_READ(sc, WMREG_FEXTNVM9); 18199 reg |= FEXTNVM9_IOSFSB_CLKGATE_DIS | FEXTNVM9_IOSFSB_CLKREQ_DIS; 18200 CSR_WRITE(sc, WMREG_FEXTNVM9, reg); 18201 } 18202 18203 /* Sysctl functions */ 18204 static int 18205 wm_sysctl_tdh_handler(SYSCTLFN_ARGS) 18206 { 18207 struct sysctlnode node = *rnode; 18208 struct wm_txqueue *txq = (struct wm_txqueue *)node.sysctl_data; 18209 struct wm_queue *wmq = container_of(txq, struct wm_queue, wmq_txq); 18210 struct wm_softc *sc = txq->txq_sc; 18211 uint32_t reg; 18212 18213 reg = CSR_READ(sc, WMREG_TDH(wmq->wmq_id)); 18214 node.sysctl_data = ® 18215 return sysctl_lookup(SYSCTLFN_CALL(&node)); 18216 } 18217 18218 static int 18219 wm_sysctl_tdt_handler(SYSCTLFN_ARGS) 18220 { 18221 struct sysctlnode node = *rnode; 18222 struct wm_txqueue *txq = (struct wm_txqueue *)node.sysctl_data; 18223 struct wm_queue *wmq = container_of(txq, struct wm_queue, wmq_txq); 18224 struct wm_softc *sc = txq->txq_sc; 18225 uint32_t reg; 18226 18227 reg = CSR_READ(sc, WMREG_TDT(wmq->wmq_id)); 18228 node.sysctl_data = ® 18229 return sysctl_lookup(SYSCTLFN_CALL(&node)); 18230 } 18231 18232 #ifdef WM_DEBUG 18233 static int 18234 wm_sysctl_debug(SYSCTLFN_ARGS) 18235 { 18236 struct sysctlnode node = *rnode; 18237 struct wm_softc *sc = (struct wm_softc *)node.sysctl_data; 18238 uint32_t dflags; 18239 int error; 18240 18241 dflags = sc->sc_debug; 18242 node.sysctl_data = &dflags; 18243 error = sysctl_lookup(SYSCTLFN_CALL(&node)); 18244 18245 if (error || newp == NULL) 18246 return error; 18247 18248 sc->sc_debug = dflags; 18249 device_printf(sc->sc_dev, "TARC0: %08x\n", CSR_READ(sc, WMREG_TARC0)); 18250 device_printf(sc->sc_dev, "TDT0: %08x\n", CSR_READ(sc, WMREG_TDT(0))); 18251 18252 return 0; 18253 } 18254 #endif 18255