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