xref: /dflybsd-src/sys/dev/netif/em/if_em.c (revision 6ea70f7669242fe9fd042834f455f06a4adfaadf)
1 /*
2  *
3  * Copyright (c) 2004 Joerg Sonnenberger <joerg@bec.de>.  All rights reserved.
4  *
5  * Copyright (c) 2001-2006, Intel Corporation
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  *  1. Redistributions of source code must retain the above copyright notice,
12  *     this list of conditions and the following disclaimer.
13  *
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  *
18  *  3. Neither the name of the Intel Corporation nor the names of its
19  *     contributors may be used to endorse or promote products derived from
20  *     this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  *
35  * Copyright (c) 2005 The DragonFly Project.  All rights reserved.
36  *
37  * This code is derived from software contributed to The DragonFly Project
38  * by Matthew Dillon <dillon@backplane.com>
39  *
40  * Redistribution and use in source and binary forms, with or without
41  * modification, are permitted provided that the following conditions
42  * are met:
43  *
44  * 1. Redistributions of source code must retain the above copyright
45  *    notice, this list of conditions and the following disclaimer.
46  * 2. Redistributions in binary form must reproduce the above copyright
47  *    notice, this list of conditions and the following disclaimer in
48  *    the documentation and/or other materials provided with the
49  *    distribution.
50  * 3. Neither the name of The DragonFly Project nor the names of its
51  *    contributors may be used to endorse or promote products derived
52  *    from this software without specific, prior written permission.
53  *
54  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
55  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
56  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
57  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
58  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
59  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
60  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
61  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
62  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
63  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
64  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
65  * SUCH DAMAGE.
66  *
67  * $DragonFly: src/sys/dev/netif/em/if_em.c,v 1.52 2006/12/20 18:14:39 dillon Exp $
68  * $FreeBSD$
69  */
70 /*
71  * SERIALIZATION API RULES:
72  *
73  * - If the driver uses the same serializer for the interrupt as for the
74  *   ifnet, most of the serialization will be done automatically for the
75  *   driver.
76  *
77  * - ifmedia entry points will be serialized by the ifmedia code using the
78  *   ifnet serializer.
79  *
80  * - if_* entry points except for if_input will be serialized by the IF
81  *   and protocol layers.
82  *
83  * - The device driver must be sure to serialize access from timeout code
84  *   installed by the device driver.
85  *
86  * - The device driver typically holds the serializer at the time it wishes
87  *   to call if_input.  If so, it should pass the serializer to if_input and
88  *   note that the serializer might be dropped temporarily by if_input
89  *   (e.g. in case it has to bridge the packet to another interface).
90  *
91  *   NOTE!  Since callers into the device driver hold the ifnet serializer,
92  *   the device driver may be holding a serializer at the time it calls
93  *   if_input even if it is not serializer-aware.
94  */
95 
96 #include "opt_polling.h"
97 
98 #include <dev/netif/em/if_em.h>
99 #include <net/ifq_var.h>
100 
101 /*********************************************************************
102  *  Set this to one to display debug statistics
103  *********************************************************************/
104 int             em_display_debug_stats = 0;
105 
106 /*********************************************************************
107  *  Driver version
108  *********************************************************************/
109 
110 char em_driver_version[] = "6.1.4";
111 
112 
113 /*********************************************************************
114  *  PCI Device ID Table
115  *
116  *  Used by probe to select devices to load on
117  *  Last field stores an index into em_strings
118  *  Last entry must be all 0s
119  *
120  *  { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
121  *********************************************************************/
122 
123 static em_vendor_info_t em_vendor_info_array[] =
124 {
125 	/* Intel(R) PRO/1000 Network Connection */
126 	{ 0x8086, E1000_DEV_ID_82540EM,		PCI_ANY_ID, PCI_ANY_ID, 0},
127 	{ 0x8086, E1000_DEV_ID_82540EM_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
128 	{ 0x8086, E1000_DEV_ID_82540EP,		PCI_ANY_ID, PCI_ANY_ID, 0},
129 	{ 0x8086, E1000_DEV_ID_82540EP_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
130 	{ 0x8086, E1000_DEV_ID_82540EP_LP,	PCI_ANY_ID, PCI_ANY_ID, 0},
131 
132 	{ 0x8086, E1000_DEV_ID_82541EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
133 	{ 0x8086, E1000_DEV_ID_82541ER,		PCI_ANY_ID, PCI_ANY_ID, 0},
134 	{ 0x8086, E1000_DEV_ID_82541EI_MOBILE,	PCI_ANY_ID, PCI_ANY_ID, 0},
135 	{ 0x8086, E1000_DEV_ID_82541GI,		PCI_ANY_ID, PCI_ANY_ID, 0},
136 	{ 0x8086, E1000_DEV_ID_82541GI_LF,	PCI_ANY_ID, PCI_ANY_ID, 0},
137 	{ 0x8086, E1000_DEV_ID_82541GI_MOBILE,	PCI_ANY_ID, PCI_ANY_ID, 0},
138 
139 	{ 0x8086, E1000_DEV_ID_82542,		PCI_ANY_ID, PCI_ANY_ID, 0},
140 
141 	{ 0x8086, E1000_DEV_ID_82543GC_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
142 	{ 0x8086, E1000_DEV_ID_82543GC_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
143 
144 	{ 0x8086, E1000_DEV_ID_82544EI_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
145 	{ 0x8086, E1000_DEV_ID_82544EI_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
146 	{ 0x8086, E1000_DEV_ID_82544GC_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
147 	{ 0x8086, E1000_DEV_ID_82544GC_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
148 
149 	{ 0x8086, E1000_DEV_ID_82545EM_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
150 	{ 0x8086, E1000_DEV_ID_82545EM_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
151 	{ 0x8086, E1000_DEV_ID_82545GM_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
152 	{ 0x8086, E1000_DEV_ID_82545GM_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
153 	{ 0x8086, E1000_DEV_ID_82545GM_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
154 
155 	{ 0x8086, E1000_DEV_ID_82546EB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
156 	{ 0x8086, E1000_DEV_ID_82546EB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
157 	{ 0x8086, E1000_DEV_ID_82546EB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
158 	{ 0x8086, E1000_DEV_ID_82546GB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
159 	{ 0x8086, E1000_DEV_ID_82546GB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
160 	{ 0x8086, E1000_DEV_ID_82546GB_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
161 	{ 0x8086, E1000_DEV_ID_82546GB_PCIE,	PCI_ANY_ID, PCI_ANY_ID, 0},
162 	{ 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3,
163 						PCI_ANY_ID, PCI_ANY_ID, 0},
164 
165 	{ 0x8086, E1000_DEV_ID_82547EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
166 	{ 0x8086, E1000_DEV_ID_82547GI,		PCI_ANY_ID, PCI_ANY_ID, 0},
167 
168 	{ 0x8086, E1000_DEV_ID_82571EB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
169 	{ 0x8086, E1000_DEV_ID_82571EB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
170 	{ 0x8086, E1000_DEV_ID_82571EB_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
171 	{ 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER,
172 						PCI_ANY_ID, PCI_ANY_ID, 0},
173 
174 	{ 0x8086, E1000_DEV_ID_82572EI_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
175 	{ 0x8086, E1000_DEV_ID_82572EI_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
176 	{ 0x8086, E1000_DEV_ID_82572EI_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
177 	{ 0x8086, E1000_DEV_ID_82572EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
178 
179 	{ 0x8086, E1000_DEV_ID_82573E,		PCI_ANY_ID, PCI_ANY_ID, 0},
180 	{ 0x8086, E1000_DEV_ID_82573E_IAMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
181 	{ 0x8086, E1000_DEV_ID_82573L,		PCI_ANY_ID, PCI_ANY_ID, 0},
182 
183 	{ 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT,
184 						PCI_ANY_ID, PCI_ANY_ID, 0},
185 	{ 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT,
186 						PCI_ANY_ID, PCI_ANY_ID, 0},
187 	{ 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT,
188 						PCI_ANY_ID, PCI_ANY_ID, 0},
189 	{ 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT,
190 						PCI_ANY_ID, PCI_ANY_ID, 0},
191 
192 	{ 0x8086, E1000_DEV_ID_ICH8_IGP_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
193 	{ 0x8086, E1000_DEV_ID_ICH8_IGP_C,	PCI_ANY_ID, PCI_ANY_ID, 0},
194 	{ 0x8086, E1000_DEV_ID_ICH8_IFE,	PCI_ANY_ID, PCI_ANY_ID, 0},
195 
196 	{ 0x8086, 0x101A, PCI_ANY_ID, PCI_ANY_ID, 0},
197 	{ 0x8086, 0x1014, PCI_ANY_ID, PCI_ANY_ID, 0},
198 	/* required last entry */
199 	{ 0, 0, 0, 0, 0}
200 };
201 
202 /*********************************************************************
203  *  Table of branding strings for all supported NICs.
204  *********************************************************************/
205 
206 static const char *em_strings[] = {
207 	"Intel(R) PRO/1000 Network Connection"
208 };
209 
210 /*********************************************************************
211  *  Function prototypes
212  *********************************************************************/
213 static int	em_probe(device_t);
214 static int	em_attach(device_t);
215 static int	em_detach(device_t);
216 static int	em_shutdown(device_t);
217 static void	em_intr(void *);
218 static void	em_start(struct ifnet *);
219 static int	em_ioctl(struct ifnet *, u_long, caddr_t, struct ucred *);
220 static void	em_watchdog(struct ifnet *);
221 static void	em_init(void *);
222 static void	em_stop(void *);
223 static void	em_media_status(struct ifnet *, struct ifmediareq *);
224 static int	em_media_change(struct ifnet *);
225 static void	em_identify_hardware(struct adapter *);
226 static int	em_allocate_pci_resource(device_t);
227 static void	em_free_pci_resource(device_t);
228 static void	em_local_timer(void *);
229 static int	em_hardware_init(struct adapter *);
230 static void	em_setup_interface(device_t, struct adapter *);
231 static int	em_setup_transmit_structures(struct adapter *);
232 static void	em_initialize_transmit_unit(struct adapter *);
233 static int	em_setup_receive_structures(struct adapter *);
234 static void	em_initialize_receive_unit(struct adapter *);
235 static void	em_enable_intr(struct adapter *);
236 static void	em_disable_intr(struct adapter *);
237 static void	em_free_transmit_structures(struct adapter *);
238 static void	em_free_receive_structures(struct adapter *);
239 static void	em_update_stats_counters(struct adapter *);
240 static void	em_clean_transmit_interrupts(struct adapter *);
241 static int	em_allocate_receive_structures(struct adapter *);
242 static int	em_allocate_transmit_structures(struct adapter *);
243 static void	em_process_receive_interrupts(struct adapter *, int);
244 static void	em_receive_checksum(struct adapter *, struct em_rx_desc *,
245 				    struct mbuf *);
246 static void	em_transmit_checksum_setup(struct adapter *, struct mbuf *,
247 					   uint32_t *, uint32_t *);
248 static void	em_set_promisc(struct adapter *);
249 static void	em_disable_promisc(struct adapter *);
250 static void	em_set_multi(struct adapter *);
251 static void	em_print_hw_stats(struct adapter *);
252 static void	em_print_link_status(struct adapter *);
253 static int	em_get_buf(int i, struct adapter *, struct mbuf *, int how);
254 static void	em_enable_vlans(struct adapter *);
255 static void	em_disable_vlans(struct adapter *);
256 static int	em_encap(struct adapter *, struct mbuf *);
257 static void	em_smartspeed(struct adapter *);
258 static int	em_82547_fifo_workaround(struct adapter *, int);
259 static void	em_82547_update_fifo_head(struct adapter *, int);
260 static int	em_82547_tx_fifo_reset(struct adapter *);
261 static void	em_82547_move_tail(void *);
262 static void	em_82547_move_tail_serialized(struct adapter *);
263 static int	em_dma_malloc(struct adapter *, bus_size_t,
264 			      struct em_dma_alloc *, int);
265 static void	em_dma_free(struct adapter *, struct em_dma_alloc *);
266 static void	em_print_debug_info(struct adapter *);
267 static int	em_is_valid_ether_addr(uint8_t *);
268 static int	em_sysctl_stats(SYSCTL_HANDLER_ARGS);
269 static int	em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
270 static uint32_t	em_fill_descriptors(uint64_t address, uint32_t length,
271 				   PDESC_ARRAY desc_array);
272 static int	em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
273 static int	em_sysctl_int_throttle(SYSCTL_HANDLER_ARGS);
274 static void	em_add_int_delay_sysctl(struct adapter *, const char *,
275 					const char *,
276 					struct em_int_delay_info *, int, int);
277 
278 /*********************************************************************
279  *  FreeBSD Device Interface Entry Points
280  *********************************************************************/
281 
282 static device_method_t em_methods[] = {
283 	/* Device interface */
284 	DEVMETHOD(device_probe, em_probe),
285 	DEVMETHOD(device_attach, em_attach),
286 	DEVMETHOD(device_detach, em_detach),
287 	DEVMETHOD(device_shutdown, em_shutdown),
288 	{0, 0}
289 };
290 
291 static driver_t em_driver = {
292 	"em", em_methods, sizeof(struct adapter),
293 };
294 
295 static devclass_t em_devclass;
296 
297 DECLARE_DUMMY_MODULE(if_em);
298 DRIVER_MODULE(if_em, pci, em_driver, em_devclass, 0, 0);
299 
300 /*********************************************************************
301  *  Tunable default values.
302  *********************************************************************/
303 
304 #define E1000_TICKS_TO_USECS(ticks)	((1024 * (ticks) + 500) / 1000)
305 #define E1000_USECS_TO_TICKS(usecs)	((1000 * (usecs) + 512) / 1024)
306 
307 static int em_tx_int_delay_dflt = E1000_TICKS_TO_USECS(EM_TIDV);
308 static int em_rx_int_delay_dflt = E1000_TICKS_TO_USECS(EM_RDTR);
309 static int em_tx_abs_int_delay_dflt = E1000_TICKS_TO_USECS(EM_TADV);
310 static int em_rx_abs_int_delay_dflt = E1000_TICKS_TO_USECS(EM_RADV);
311 static int em_int_throttle_ceil = 10000;
312 static int em_rxd = EM_DEFAULT_RXD;
313 static int em_txd = EM_DEFAULT_TXD;
314 static int em_smart_pwr_down = FALSE;
315 
316 TUNABLE_INT("hw.em.tx_int_delay", &em_tx_int_delay_dflt);
317 TUNABLE_INT("hw.em.rx_int_delay", &em_rx_int_delay_dflt);
318 TUNABLE_INT("hw.em.tx_abs_int_delay", &em_tx_abs_int_delay_dflt);
319 TUNABLE_INT("hw.em.rx_abs_int_delay", &em_rx_abs_int_delay_dflt);
320 TUNABLE_INT("hw.em.int_throttle_ceil", &em_int_throttle_ceil);
321 TUNABLE_INT("hw.em.rxd", &em_rxd);
322 TUNABLE_INT("hw.em.txd", &em_txd);
323 TUNABLE_INT("hw.em.smart_pwr_down", &em_smart_pwr_down);
324 
325 /*
326  * Kernel trace for characterization of operations
327  */
328 #if !defined(KTR_IF_EM)
329 #define KTR_IF_EM	KTR_ALL
330 #endif
331 KTR_INFO_MASTER(if_em);
332 KTR_INFO(KTR_IF_EM, if_em, intr_beg, 0, "intr begin", 0);
333 KTR_INFO(KTR_IF_EM, if_em, intr_end, 1, "intr end", 0);
334 #ifdef DEVICE_POLLING
335 KTR_INFO(KTR_IF_EM, if_em, poll_beg, 2, "poll begin", 0);
336 KTR_INFO(KTR_IF_EM, if_em, poll_end, 3, "poll end", 0);
337 #endif
338 KTR_INFO(KTR_IF_EM, if_em, pkt_receive, 4, "rx packet", 0);
339 KTR_INFO(KTR_IF_EM, if_em, pkt_txqueue, 5, "tx packet", 0);
340 KTR_INFO(KTR_IF_EM, if_em, pkt_txclean, 6, "tx clean", 0);
341 #define logif(name)	KTR_LOG(if_em_ ## name)
342 
343 /*********************************************************************
344  *  Device identification routine
345  *
346  *  em_probe determines if the driver should be loaded on
347  *  adapter based on PCI vendor/device id of the adapter.
348  *
349  *  return 0 on success, positive on failure
350  *********************************************************************/
351 
352 static int
353 em_probe(device_t dev)
354 {
355 	em_vendor_info_t *ent;
356 
357 	uint16_t pci_vendor_id = 0;
358 	uint16_t pci_device_id = 0;
359 	uint16_t pci_subvendor_id = 0;
360 	uint16_t pci_subdevice_id = 0;
361 	char adapter_name[60];
362 
363 	INIT_DEBUGOUT("em_probe: begin");
364 
365 	pci_vendor_id = pci_get_vendor(dev);
366 	if (pci_vendor_id != EM_VENDOR_ID)
367 		return(ENXIO);
368 
369 	pci_device_id = pci_get_device(dev);
370 	pci_subvendor_id = pci_get_subvendor(dev);
371 	pci_subdevice_id = pci_get_subdevice(dev);
372 
373 	ent = em_vendor_info_array;
374 	while (ent->vendor_id != 0) {
375 		if ((pci_vendor_id == ent->vendor_id) &&
376 		    (pci_device_id == ent->device_id) &&
377 
378 		    ((pci_subvendor_id == ent->subvendor_id) ||
379 		     (ent->subvendor_id == PCI_ANY_ID)) &&
380 
381 		    ((pci_subdevice_id == ent->subdevice_id) ||
382 		     (ent->subdevice_id == PCI_ANY_ID))) {
383 			ksnprintf(adapter_name, sizeof(adapter_name),
384 				 "%s, Version - %s",  em_strings[ent->index],
385 				 em_driver_version);
386 			device_set_desc_copy(dev, adapter_name);
387 			return(0);
388 		}
389 		ent++;
390 	}
391 
392 	return(ENXIO);
393 }
394 
395 /*********************************************************************
396  *  Device initialization routine
397  *
398  *  The attach entry point is called when the driver is being loaded.
399  *  This routine identifies the type of hardware, allocates all resources
400  *  and initializes the hardware.
401  *
402  *  return 0 on success, positive on failure
403  *********************************************************************/
404 
405 static int
406 em_attach(device_t dev)
407 {
408 	struct adapter *adapter;
409 	int tsize, rsize;
410 	int error = 0;
411 
412 	INIT_DEBUGOUT("em_attach: begin");
413 
414 	adapter = device_get_softc(dev);
415 
416 	callout_init(&adapter->timer);
417 	callout_init(&adapter->tx_fifo_timer);
418 
419 	adapter->dev = dev;
420 	adapter->osdep.dev = dev;
421 
422 	/* SYSCTL stuff */
423 	sysctl_ctx_init(&adapter->sysctl_ctx);
424 	adapter->sysctl_tree = SYSCTL_ADD_NODE(&adapter->sysctl_ctx,
425 					       SYSCTL_STATIC_CHILDREN(_hw),
426 					       OID_AUTO,
427 					       device_get_nameunit(dev),
428 					       CTLFLAG_RD,
429 					       0, "");
430 
431 	if (adapter->sysctl_tree == NULL) {
432 		device_printf(dev, "Unable to create sysctl tree\n");
433 		return EIO;
434 	}
435 
436 	SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
437 			SYSCTL_CHILDREN(adapter->sysctl_tree),
438 			OID_AUTO, "debug_info", CTLTYPE_INT|CTLFLAG_RW,
439 			(void *)adapter, 0,
440 			em_sysctl_debug_info, "I", "Debug Information");
441 
442 	SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
443 			SYSCTL_CHILDREN(adapter->sysctl_tree),
444 			OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW,
445 			(void *)adapter, 0,
446 			em_sysctl_stats, "I", "Statistics");
447 
448 	/* Determine hardware revision */
449 	em_identify_hardware(adapter);
450 
451 	/* Set up some sysctls for the tunable interrupt delays */
452 	em_add_int_delay_sysctl(adapter, "rx_int_delay",
453 				"receive interrupt delay in usecs",
454 				&adapter->rx_int_delay,
455 				E1000_REG_OFFSET(&adapter->hw, RDTR),
456 				em_rx_int_delay_dflt);
457         em_add_int_delay_sysctl(adapter, "tx_int_delay",
458 				"transmit interrupt delay in usecs",
459 				&adapter->tx_int_delay,
460 				E1000_REG_OFFSET(&adapter->hw, TIDV),
461 				em_tx_int_delay_dflt);
462 	if (adapter->hw.mac_type >= em_82540) {
463 		em_add_int_delay_sysctl(adapter, "rx_abs_int_delay",
464 					"receive interrupt delay limit in usecs",
465 					&adapter->rx_abs_int_delay,
466 					E1000_REG_OFFSET(&adapter->hw, RADV),
467 					em_rx_abs_int_delay_dflt);
468 		em_add_int_delay_sysctl(adapter, "tx_abs_int_delay",
469 					"transmit interrupt delay limit in usecs",
470 					&adapter->tx_abs_int_delay,
471 					E1000_REG_OFFSET(&adapter->hw, TADV),
472 					em_tx_abs_int_delay_dflt);
473 		SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
474 			SYSCTL_CHILDREN(adapter->sysctl_tree),
475 			OID_AUTO, "int_throttle_ceil", CTLTYPE_INT|CTLFLAG_RW,
476 			adapter, 0, em_sysctl_int_throttle, "I", NULL);
477 	}
478 
479 	/*
480 	 * Validate number of transmit and receive descriptors. It
481 	 * must not exceed hardware maximum, and must be multiple
482 	 * of EM_DBA_ALIGN (128)
483 	 */
484 	if (((em_txd * sizeof(struct em_tx_desc)) % EM_DBA_ALIGN) != 0 ||
485 	    (adapter->hw.mac_type >= em_82544 && em_txd > EM_MAX_TXD) ||
486 	    (adapter->hw.mac_type < em_82544 && em_txd > EM_MAX_TXD_82543) ||
487 	    (em_txd < EM_MIN_TXD)) {
488 		device_printf(dev, "Using %d TX descriptors instead of %d!\n",
489 			      EM_DEFAULT_TXD, em_txd);
490 		adapter->num_tx_desc = EM_DEFAULT_TXD;
491 	} else {
492 		adapter->num_tx_desc = em_txd;
493 	}
494 
495 	if (((em_rxd * sizeof(struct em_rx_desc)) % EM_DBA_ALIGN) != 0 ||
496 	    (adapter->hw.mac_type >= em_82544 && em_rxd > EM_MAX_RXD) ||
497 	    (adapter->hw.mac_type < em_82544 && em_rxd > EM_MAX_RXD_82543) ||
498 	    (em_rxd < EM_MIN_RXD)) {
499 		device_printf(dev, "Using %d RX descriptors instead of %d!\n",
500 			      EM_DEFAULT_RXD, em_rxd);
501 		adapter->num_rx_desc = EM_DEFAULT_RXD;
502 	} else {
503 		adapter->num_rx_desc = em_rxd;
504 	}
505 
506 	adapter->hw.autoneg = DO_AUTO_NEG;
507 	adapter->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT;
508 	adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
509 	adapter->hw.tbi_compatibility_en = TRUE;
510 	adapter->rx_buffer_len = EM_RXBUFFER_2048;
511 
512 	adapter->hw.phy_init_script = 1;
513 	adapter->hw.phy_reset_disable = FALSE;
514 
515 #ifndef EM_MASTER_SLAVE
516 	adapter->hw.master_slave = em_ms_hw_default;
517 #else
518 	adapter->hw.master_slave = EM_MASTER_SLAVE;
519 #endif
520 
521 	/*
522 	 * Set the max frame size assuming standard ethernet
523 	 * sized frames
524 	 */
525 	adapter->hw.max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN;
526 
527 	adapter->hw.min_frame_size =
528 	    MINIMUM_ETHERNET_PACKET_SIZE + ETHER_CRC_LEN;
529 
530 	/*
531 	 * This controls when hardware reports transmit completion
532 	 * status.
533 	 */
534 	adapter->hw.report_tx_early = 1;
535 
536 	error = em_allocate_pci_resource(dev);
537 	if (error)
538 		goto fail;
539 
540 	/* Initialize eeprom parameters */
541 	em_init_eeprom_params(&adapter->hw);
542 
543 	tsize = roundup2(adapter->num_tx_desc * sizeof(struct em_tx_desc),
544 			 EM_DBA_ALIGN);
545 
546 	/* Allocate Transmit Descriptor ring */
547 	if (em_dma_malloc(adapter, tsize, &adapter->txdma, BUS_DMA_WAITOK)) {
548 		device_printf(dev, "Unable to allocate TxDescriptor memory\n");
549 		error = ENOMEM;
550 		goto fail;
551 	}
552 	adapter->tx_desc_base = (struct em_tx_desc *) adapter->txdma.dma_vaddr;
553 
554 	rsize = roundup2(adapter->num_rx_desc * sizeof(struct em_rx_desc),
555 			 EM_DBA_ALIGN);
556 
557 	/* Allocate Receive Descriptor ring */
558 	if (em_dma_malloc(adapter, rsize, &adapter->rxdma, BUS_DMA_WAITOK)) {
559 		device_printf(dev, "Unable to allocate rx_desc memory\n");
560 		error = ENOMEM;
561 		goto fail;
562 	}
563 	adapter->rx_desc_base = (struct em_rx_desc *) adapter->rxdma.dma_vaddr;
564 
565 	/* Initialize the hardware */
566 	if (em_hardware_init(adapter)) {
567 		device_printf(dev, "Unable to initialize the hardware\n");
568 		error = EIO;
569 		goto fail;
570 	}
571 
572 	/* Copy the permanent MAC address out of the EEPROM */
573 	if (em_read_mac_addr(&adapter->hw) < 0) {
574 		device_printf(dev,
575 			      "EEPROM read error while reading mac address\n");
576 		error = EIO;
577 		goto fail;
578 	}
579 
580 	if (!em_is_valid_ether_addr(adapter->hw.mac_addr)) {
581 		device_printf(dev, "Invalid mac address\n");
582 		error = EIO;
583 		goto fail;
584 	}
585 
586 	/* Setup OS specific network interface */
587 	em_setup_interface(dev, adapter);
588 
589 	/* Initialize statistics */
590 	em_clear_hw_cntrs(&adapter->hw);
591 	em_update_stats_counters(adapter);
592 	adapter->hw.get_link_status = 1;
593 	em_check_for_link(&adapter->hw);
594 
595 	/* Print the link status */
596 	if (adapter->link_active == 1) {
597 		em_get_speed_and_duplex(&adapter->hw, &adapter->link_speed,
598 					&adapter->link_duplex);
599 		device_printf(dev, "Speed: %d Mbps, Duplex: %s\n",
600 		    adapter->link_speed,
601 		    adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
602 	} else {
603 		device_printf(dev, "Speed: N/A, Duplex:N/A\n");
604 	}
605 
606 	/* Indicate SOL/IDER usage */
607 	if (em_check_phy_reset_block(&adapter->hw)) {
608 		device_printf(dev, "PHY reset is blocked due to "
609 			      "SOL/IDER session.\n");
610 	}
611 
612 	/* Identify 82544 on PCIX */
613 	em_get_bus_info(&adapter->hw);
614 	if (adapter->hw.bus_type == em_bus_type_pcix &&
615 	    adapter->hw.mac_type == em_82544)
616 		adapter->pcix_82544 = TRUE;
617         else
618 		adapter->pcix_82544 = FALSE;
619 
620 	error = bus_setup_intr(dev, adapter->res_interrupt, INTR_NETSAFE,
621 			   em_intr, adapter,
622 			   &adapter->int_handler_tag,
623 			   adapter->interface_data.ac_if.if_serializer);
624 	if (error) {
625 		device_printf(dev, "Error registering interrupt handler!\n");
626 		ether_ifdetach(&adapter->interface_data.ac_if);
627 		goto fail;
628 	}
629 
630 	INIT_DEBUGOUT("em_attach: end");
631 	return(0);
632 
633 fail:
634 	em_detach(dev);
635 	return(error);
636 }
637 
638 /*********************************************************************
639  *  Device removal routine
640  *
641  *  The detach entry point is called when the driver is being removed.
642  *  This routine stops the adapter and deallocates all the resources
643  *  that were allocated for driver operation.
644  *
645  *  return 0 on success, positive on failure
646  *********************************************************************/
647 
648 static int
649 em_detach(device_t dev)
650 {
651 	struct adapter *adapter = device_get_softc(dev);
652 
653 	INIT_DEBUGOUT("em_detach: begin");
654 
655 	if (device_is_attached(dev)) {
656 		struct ifnet *ifp = &adapter->interface_data.ac_if;
657 
658 		lwkt_serialize_enter(ifp->if_serializer);
659 		adapter->in_detach = 1;
660 		em_stop(adapter);
661 		em_phy_hw_reset(&adapter->hw);
662 		bus_teardown_intr(dev, adapter->res_interrupt,
663 				  adapter->int_handler_tag);
664 		lwkt_serialize_exit(ifp->if_serializer);
665 
666 		ether_ifdetach(ifp);
667 	}
668 	bus_generic_detach(dev);
669 
670 	em_free_pci_resource(dev);
671 
672 	/* Free Transmit Descriptor ring */
673 	if (adapter->tx_desc_base != NULL) {
674 		em_dma_free(adapter, &adapter->txdma);
675 		adapter->tx_desc_base = NULL;
676 	}
677 
678 	/* Free Receive Descriptor ring */
679 	if (adapter->rx_desc_base != NULL) {
680 		em_dma_free(adapter, &adapter->rxdma);
681 		adapter->rx_desc_base = NULL;
682 	}
683 
684 	/* Free sysctl tree */
685 	if (adapter->sysctl_tree != NULL) {
686 		adapter->sysctl_tree = NULL;
687 		sysctl_ctx_free(&adapter->sysctl_ctx);
688 	}
689 
690 	return(0);
691 }
692 
693 /*********************************************************************
694  *
695  *  Shutdown entry point
696  *
697  **********************************************************************/
698 
699 static int
700 em_shutdown(device_t dev)
701 {
702 	struct adapter *adapter = device_get_softc(dev);
703 	struct ifnet *ifp = &adapter->interface_data.ac_if;
704 
705 	lwkt_serialize_enter(ifp->if_serializer);
706 	em_stop(adapter);
707 	lwkt_serialize_exit(ifp->if_serializer);
708 
709 	return(0);
710 }
711 
712 /*********************************************************************
713  *  Transmit entry point
714  *
715  *  em_start is called by the stack to initiate a transmit.
716  *  The driver will remain in this routine as long as there are
717  *  packets to transmit and transmit resources are available.
718  *  In case resources are not available stack is notified and
719  *  the packet is requeued.
720  **********************************************************************/
721 
722 static void
723 em_start(struct ifnet *ifp)
724 {
725 	struct mbuf *m_head;
726 	struct adapter *adapter = ifp->if_softc;
727 
728 	ASSERT_SERIALIZED(ifp->if_serializer);
729 
730 	if (!adapter->link_active)
731 		return;
732 	while (!ifq_is_empty(&ifp->if_snd)) {
733 		m_head = ifq_poll(&ifp->if_snd);
734 
735 		if (m_head == NULL)
736 			break;
737 
738 		logif(pkt_txqueue);
739 		if (em_encap(adapter, m_head)) {
740 			ifp->if_flags |= IFF_OACTIVE;
741 			break;
742 		}
743 		ifq_dequeue(&ifp->if_snd, m_head);
744 
745 		/* Send a copy of the frame to the BPF listener */
746 		BPF_MTAP(ifp, m_head);
747 
748 		/* Set timeout in case hardware has problems transmitting */
749 		ifp->if_timer = EM_TX_TIMEOUT;
750 	}
751 }
752 
753 /*********************************************************************
754  *  Ioctl entry point
755  *
756  *  em_ioctl is called when the user wants to configure the
757  *  interface.
758  *
759  *  return 0 on success, positive on failure
760  **********************************************************************/
761 
762 static int
763 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data, struct ucred *cr)
764 {
765 	int max_frame_size, mask, error = 0, reinit = 0;
766 	struct ifreq *ifr = (struct ifreq *) data;
767 	struct adapter *adapter = ifp->if_softc;
768 	uint16_t eeprom_data = 0;
769 
770 	ASSERT_SERIALIZED(ifp->if_serializer);
771 
772 	if (adapter->in_detach)
773 		return 0;
774 
775 	switch (command) {
776 	case SIOCSIFMTU:
777 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
778 		switch (adapter->hw.mac_type) {
779 		case em_82573:
780 			/*
781 			 * 82573 only supports jumbo frames
782 			 * if ASPM is disabled.
783 			 */
784 			em_read_eeprom(&adapter->hw, EEPROM_INIT_3GIO_3,
785 			    1, &eeprom_data);
786 			if (eeprom_data & EEPROM_WORD1A_ASPM_MASK) {
787 				max_frame_size = ETHER_MAX_LEN;
788 				break;
789 			}
790 			/* Allow Jumbo frames */
791 			/* FALLTHROUGH */
792 		case em_82571:
793 		case em_82572:
794 		case em_80003es2lan:	/* Limit Jumbo Frame size */
795 			max_frame_size = 9234;
796 			break;
797 		case em_ich8lan:
798 			/* ICH8 does not support jumbo frames */
799 			max_frame_size = ETHER_MAX_LEN;
800 			break;
801 		default:
802 			max_frame_size = MAX_JUMBO_FRAME_SIZE;
803 			break;
804 		}
805 		if (ifr->ifr_mtu >
806 			max_frame_size - ETHER_HDR_LEN - ETHER_CRC_LEN) {
807 			error = EINVAL;
808 		} else {
809 			ifp->if_mtu = ifr->ifr_mtu;
810 			adapter->hw.max_frame_size =
811 			ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
812 			em_init(adapter);
813 		}
814 		break;
815 	case SIOCSIFFLAGS:
816 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS "
817 			       "(Set Interface Flags)");
818 		if (ifp->if_flags & IFF_UP) {
819 			if (!(ifp->if_flags & IFF_RUNNING))
820 				em_init(adapter);
821 			em_disable_promisc(adapter);
822 			em_set_promisc(adapter);
823 		} else {
824 			if (ifp->if_flags & IFF_RUNNING)
825 				em_stop(adapter);
826 		}
827 		break;
828 	case SIOCADDMULTI:
829 	case SIOCDELMULTI:
830 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
831 		if (ifp->if_flags & IFF_RUNNING) {
832 			em_disable_intr(adapter);
833 			em_set_multi(adapter);
834 			if (adapter->hw.mac_type == em_82542_rev2_0)
835 				em_initialize_receive_unit(adapter);
836 #ifdef DEVICE_POLLING
837 			/* Do not enable interrupt if polling(4) is enabled */
838 			if ((ifp->if_flags & IFF_POLLING) == 0)
839 #endif
840 			em_enable_intr(adapter);
841 		}
842 		break;
843 	case SIOCSIFMEDIA:
844 	case SIOCGIFMEDIA:
845 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFMEDIA "
846 			       "(Get/Set Interface Media)");
847 		error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
848 		break;
849 	case SIOCSIFCAP:
850 		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
851 		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
852 		if (mask & IFCAP_HWCSUM) {
853 			ifp->if_capenable ^= IFCAP_HWCSUM;
854 			reinit = 1;
855 		}
856 		if (mask & IFCAP_VLAN_HWTAGGING) {
857 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
858 			reinit = 1;
859 		}
860 		if (reinit && (ifp->if_flags & IFF_RUNNING))
861 			em_init(adapter);
862 		break;
863 	default:
864 		error = ether_ioctl(ifp, command, data);
865 		break;
866 	}
867 
868 	return(error);
869 }
870 
871 /*********************************************************************
872  *  Watchdog entry point
873  *
874  *  This routine is called whenever hardware quits transmitting.
875  *
876  **********************************************************************/
877 
878 static void
879 em_watchdog(struct ifnet *ifp)
880 {
881 	struct adapter *adapter = ifp->if_softc;
882 
883 	/*
884 	 * If we are in this routine because of pause frames, then
885 	 * don't reset the hardware.
886 	 */
887 	if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) {
888 		ifp->if_timer = EM_TX_TIMEOUT;
889 		return;
890 	}
891 
892 #ifdef foo
893 	if (em_check_for_link(&adapter->hw))
894 #endif
895 		if_printf(ifp, "watchdog timeout -- resetting\n");
896 
897 	ifp->if_flags &= ~IFF_RUNNING;
898 
899 	em_init(adapter);
900 
901 	adapter->watchdog_timeouts++;
902 }
903 
904 /*********************************************************************
905  *  Init entry point
906  *
907  *  This routine is used in two ways. It is used by the stack as
908  *  init entry point in network interface structure. It is also used
909  *  by the driver as a hw/sw initialization routine to get to a
910  *  consistent state.
911  *
912  *  return 0 on success, positive on failure
913  **********************************************************************/
914 
915 static void
916 em_init(void *arg)
917 {
918 	struct adapter *adapter = arg;
919 	uint32_t pba;
920 	struct ifnet *ifp = &adapter->interface_data.ac_if;
921 
922 	INIT_DEBUGOUT("em_init: begin");
923 
924 	em_stop(adapter);
925 
926 	/*
927 	 * Packet Buffer Allocation (PBA)
928 	 * Writing PBA sets the receive portion of the buffer
929 	 * the remainder is used for the transmit buffer.
930 	 *
931 	 * Devices before the 82547 had a Packet Buffer of 64K.
932 	 *   Default allocation: PBA=48K for Rx, leaving 16K for Tx.
933 	 * After the 82547 the buffer was reduced to 40K.
934 	 *   Default allocation: PBA=30K for Rx, leaving 10K for Tx.
935 	 *   Note: default does not leave enough room for Jumbo Frame >10k.
936 	 */
937 	switch (adapter->hw.mac_type) {
938 	case em_82547:
939 	case em_82547_rev_2: /* 82547: Total Packet Buffer is 40K */
940 		if (adapter->hw.max_frame_size > EM_RXBUFFER_8192)
941 			pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */
942 		else
943 			pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */
944 
945 		adapter->tx_fifo_head = 0;
946 		adapter->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT;
947 		adapter->tx_fifo_size =
948 			(E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT;
949 		break;
950 	case em_80003es2lan: /* 80003es2lan: Total Packet Buffer is 48K */
951 	case em_82571: /* 82571: Total Packet Buffer is 48K */
952 	case em_82572: /* 82572: Total Packet Buffer is 48K */
953 		pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
954 		break;
955 	case em_82573: /* 82573: Total Packet Buffer is 32K */
956 		/* Jumbo frames not supported */
957 		pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
958 		break;
959 	case em_ich8lan:
960 		pba = E1000_PBA_8K;
961 		break;
962 	default:
963 		/* Devices before 82547 had a Packet Buffer of 64K.   */
964 		if(adapter->hw.max_frame_size > EM_RXBUFFER_8192)
965 			pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
966 		else
967 			pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
968 	}
969 
970 	INIT_DEBUGOUT1("em_init: pba=%dK",pba);
971 	E1000_WRITE_REG(&adapter->hw, PBA, pba);
972 
973 	/* Get the latest mac address, User can use a LAA */
974 	bcopy(adapter->interface_data.ac_enaddr, adapter->hw.mac_addr,
975 	      ETHER_ADDR_LEN);
976 
977 	/* Initialize the hardware */
978 	if (em_hardware_init(adapter)) {
979 		if_printf(ifp, "Unable to initialize the hardware\n");
980 		return;
981 	}
982 
983 	if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING)
984 		em_enable_vlans(adapter);
985 
986 	/* Prepare transmit descriptors and buffers */
987 	if (em_setup_transmit_structures(adapter)) {
988 		if_printf(ifp, "Could not setup transmit structures\n");
989 		em_stop(adapter);
990 		return;
991 	}
992 	em_initialize_transmit_unit(adapter);
993 
994 	/* Setup Multicast table */
995 	em_set_multi(adapter);
996 
997 	/* Prepare receive descriptors and buffers */
998 	if (em_setup_receive_structures(adapter)) {
999 		if_printf(ifp, "Could not setup receive structures\n");
1000 		em_stop(adapter);
1001 		return;
1002 	}
1003 	em_initialize_receive_unit(adapter);
1004 
1005 	/* Don't loose promiscuous settings */
1006 	em_set_promisc(adapter);
1007 
1008 	ifp->if_flags |= IFF_RUNNING;
1009 	ifp->if_flags &= ~IFF_OACTIVE;
1010 
1011 	if (adapter->hw.mac_type >= em_82543) {
1012 		if (ifp->if_capenable & IFCAP_TXCSUM)
1013 			ifp->if_hwassist = EM_CHECKSUM_FEATURES;
1014 		else
1015 			ifp->if_hwassist = 0;
1016 	}
1017 
1018 	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1019 	em_clear_hw_cntrs(&adapter->hw);
1020 
1021 #ifdef DEVICE_POLLING
1022 	/* Do not enable interrupt if polling(4) is enabled */
1023 	if (ifp->if_flags & IFF_POLLING)
1024 		em_disable_intr(adapter);
1025 	else
1026 #endif
1027 	em_enable_intr(adapter);
1028 
1029 	/* Don't reset the phy next time init gets called */
1030 	adapter->hw.phy_reset_disable = TRUE;
1031 }
1032 
1033 #ifdef DEVICE_POLLING
1034 
1035 static void
1036 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
1037 {
1038 	struct adapter *adapter = ifp->if_softc;
1039 	uint32_t reg_icr;
1040 
1041 	logif(poll_beg);
1042 
1043 	ASSERT_SERIALIZED(ifp->if_serializer);
1044 
1045 	switch(cmd) {
1046 	case POLL_REGISTER:
1047 		em_disable_intr(adapter);
1048 		break;
1049 	case POLL_DEREGISTER:
1050 		em_enable_intr(adapter);
1051 		break;
1052 	case POLL_AND_CHECK_STATUS:
1053 		reg_icr = E1000_READ_REG(&adapter->hw, ICR);
1054 		if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1055 			callout_stop(&adapter->timer);
1056 			adapter->hw.get_link_status = 1;
1057 			em_check_for_link(&adapter->hw);
1058 			em_print_link_status(adapter);
1059 			callout_reset(&adapter->timer, hz, em_local_timer,
1060 				      adapter);
1061 		}
1062 		/* fall through */
1063 	case POLL_ONLY:
1064 		if (ifp->if_flags & IFF_RUNNING) {
1065 			em_process_receive_interrupts(adapter, count);
1066 			em_clean_transmit_interrupts(adapter);
1067 
1068 			if (!ifq_is_empty(&ifp->if_snd))
1069 				em_start(ifp);
1070 		}
1071 		break;
1072 	}
1073 	logif(poll_end);
1074 }
1075 
1076 #endif /* DEVICE_POLLING */
1077 
1078 /*********************************************************************
1079  *
1080  *  Interrupt Service routine
1081  *
1082  **********************************************************************/
1083 static void
1084 em_intr(void *arg)
1085 {
1086 	uint32_t reg_icr;
1087 	struct ifnet *ifp;
1088 	struct adapter *adapter = arg;
1089 
1090 	ifp = &adapter->interface_data.ac_if;
1091 
1092 	logif(intr_beg);
1093 	ASSERT_SERIALIZED(ifp->if_serializer);
1094 
1095 	reg_icr = E1000_READ_REG(&adapter->hw, ICR);
1096 	if ((adapter->hw.mac_type >= em_82571 &&
1097 	     (reg_icr & E1000_ICR_INT_ASSERTED) == 0) ||
1098 	    reg_icr == 0) {
1099 		logif(intr_end);
1100 		return;
1101 	}
1102 
1103 	if (reg_icr & E1000_ICR_RXO)
1104 		adapter->rx_overruns++;
1105 
1106 	/* Link status change */
1107 	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1108 		callout_stop(&adapter->timer);
1109 		adapter->hw.get_link_status = 1;
1110 		em_check_for_link(&adapter->hw);
1111 		em_print_link_status(adapter);
1112 		callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1113 	}
1114 
1115 	/*
1116 	 * note: do not attempt to improve efficiency by looping.  This
1117 	 * only results in unnecessary piecemeal collection of received
1118 	 * packets and unnecessary piecemeal cleanups of the transmit ring.
1119 	 */
1120 	if (ifp->if_flags & IFF_RUNNING) {
1121 		em_process_receive_interrupts(adapter, -1);
1122 		em_clean_transmit_interrupts(adapter);
1123 	}
1124 
1125 	if ((ifp->if_flags & IFF_RUNNING) && !ifq_is_empty(&ifp->if_snd))
1126 		em_start(ifp);
1127 	logif(intr_end);
1128 }
1129 
1130 /*********************************************************************
1131  *
1132  *  Media Ioctl callback
1133  *
1134  *  This routine is called whenever the user queries the status of
1135  *  the interface using ifconfig.
1136  *
1137  **********************************************************************/
1138 static void
1139 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
1140 {
1141 	struct adapter * adapter = ifp->if_softc;
1142 	u_char fiber_type = IFM_1000_SX;
1143 
1144 	INIT_DEBUGOUT("em_media_status: begin");
1145 
1146 	ASSERT_SERIALIZED(ifp->if_serializer);
1147 
1148 	em_check_for_link(&adapter->hw);
1149 	if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1150 		if (adapter->link_active == 0) {
1151 			em_get_speed_and_duplex(&adapter->hw,
1152 						&adapter->link_speed,
1153 						&adapter->link_duplex);
1154 			adapter->link_active = 1;
1155 		}
1156 	} else {
1157 		if (adapter->link_active == 1) {
1158 			adapter->link_speed = 0;
1159 			adapter->link_duplex = 0;
1160 			adapter->link_active = 0;
1161 		}
1162 	}
1163 
1164 	ifmr->ifm_status = IFM_AVALID;
1165 	ifmr->ifm_active = IFM_ETHER;
1166 
1167 	if (!adapter->link_active)
1168 		return;
1169 
1170 	ifmr->ifm_status |= IFM_ACTIVE;
1171 
1172 	if (adapter->hw.media_type == em_media_type_fiber ||
1173 	    adapter->hw.media_type == em_media_type_internal_serdes) {
1174 		if (adapter->hw.mac_type == em_82545)
1175 			fiber_type = IFM_1000_LX;
1176 		ifmr->ifm_active |= fiber_type | IFM_FDX;
1177 		ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
1178 	} else {
1179 		switch (adapter->link_speed) {
1180 		case 10:
1181 			ifmr->ifm_active |= IFM_10_T;
1182 			break;
1183 		case 100:
1184 			ifmr->ifm_active |= IFM_100_TX;
1185 			break;
1186 		case 1000:
1187 			ifmr->ifm_active |= IFM_1000_T;
1188 			break;
1189 		}
1190 		if (adapter->link_duplex == FULL_DUPLEX)
1191 			ifmr->ifm_active |= IFM_FDX;
1192 		else
1193 			ifmr->ifm_active |= IFM_HDX;
1194 	}
1195 }
1196 
1197 /*********************************************************************
1198  *
1199  *  Media Ioctl callback
1200  *
1201  *  This routine is called when the user changes speed/duplex using
1202  *  media/mediopt option with ifconfig.
1203  *
1204  **********************************************************************/
1205 static int
1206 em_media_change(struct ifnet *ifp)
1207 {
1208 	struct adapter * adapter = ifp->if_softc;
1209 	struct ifmedia  *ifm = &adapter->media;
1210 
1211 	INIT_DEBUGOUT("em_media_change: begin");
1212 
1213 	if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1214 		return(EINVAL);
1215 
1216 	ASSERT_SERIALIZED(ifp->if_serializer);
1217 
1218 	switch (IFM_SUBTYPE(ifm->ifm_media)) {
1219 	case IFM_AUTO:
1220 		adapter->hw.autoneg = DO_AUTO_NEG;
1221 		adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
1222 		break;
1223 	case IFM_1000_LX:
1224 	case IFM_1000_SX:
1225 	case IFM_1000_T:
1226 		adapter->hw.autoneg = DO_AUTO_NEG;
1227 		adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
1228 		break;
1229 	case IFM_100_TX:
1230 		adapter->hw.autoneg = FALSE;
1231 		adapter->hw.autoneg_advertised = 0;
1232 		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1233 			adapter->hw.forced_speed_duplex = em_100_full;
1234 		else
1235 			adapter->hw.forced_speed_duplex	= em_100_half;
1236 		break;
1237 	case IFM_10_T:
1238 		adapter->hw.autoneg = FALSE;
1239 		adapter->hw.autoneg_advertised = 0;
1240 		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1241 			adapter->hw.forced_speed_duplex = em_10_full;
1242 		else
1243 			adapter->hw.forced_speed_duplex	= em_10_half;
1244 		break;
1245 	default:
1246 		if_printf(ifp, "Unsupported media type\n");
1247 	}
1248 	/*
1249 	 * As the speed/duplex settings may have changed we need to
1250 	 * reset the PHY.
1251 	 */
1252 	adapter->hw.phy_reset_disable = FALSE;
1253 
1254 	em_init(adapter);
1255 
1256 	return(0);
1257 }
1258 
1259 static void
1260 em_tx_cb(void *arg, bus_dma_segment_t *seg, int nsegs, bus_size_t mapsize,
1261 	 int error)
1262 {
1263 	struct em_q *q = arg;
1264 
1265 	if (error)
1266 		return;
1267 	KASSERT(nsegs <= EM_MAX_SCATTER,
1268 		("Too many DMA segments returned when mapping tx packet"));
1269 	q->nsegs = nsegs;
1270 	bcopy(seg, q->segs, nsegs * sizeof(seg[0]));
1271 }
1272 
1273 /*********************************************************************
1274  *
1275  *  This routine maps the mbufs to tx descriptors.
1276  *
1277  *  return 0 on success, positive on failure
1278  **********************************************************************/
1279 static int
1280 em_encap(struct adapter *adapter, struct mbuf *m_head)
1281 {
1282 	uint32_t txd_upper;
1283 	uint32_t txd_lower, txd_used = 0, txd_saved = 0;
1284 	int i, j, error;
1285 	uint64_t address;
1286 
1287 	/* For 82544 Workaround */
1288 	DESC_ARRAY desc_array;
1289 	uint32_t array_elements;
1290 	uint32_t counter;
1291 
1292 	struct ifvlan *ifv = NULL;
1293 	struct em_q q;
1294 	struct em_buffer *tx_buffer = NULL, *tx_buffer_map;
1295 	bus_dmamap_t map;
1296 	struct em_tx_desc *current_tx_desc = NULL;
1297 	struct ifnet *ifp = &adapter->interface_data.ac_if;
1298 
1299 	/*
1300 	 * Force a cleanup if number of TX descriptors
1301 	 * available hits the threshold
1302 	 */
1303 	if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
1304 		em_clean_transmit_interrupts(adapter);
1305 		if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
1306 			adapter->no_tx_desc_avail1++;
1307 			return(ENOBUFS);
1308 		}
1309 	}
1310 	/*
1311 	 * Map the packet for DMA.
1312 	 */
1313 	tx_buffer_map = &adapter->tx_buffer_area[adapter->next_avail_tx_desc];
1314 	map = tx_buffer_map->map;
1315 	error = bus_dmamap_load_mbuf(adapter->txtag, map, m_head, em_tx_cb,
1316 				     &q, BUS_DMA_NOWAIT);
1317 	if (error != 0) {
1318 		adapter->no_tx_dma_setup++;
1319 		return(error);
1320 	}
1321 	KASSERT(q.nsegs != 0, ("em_encap: empty packet"));
1322 
1323 	if (q.nsegs > adapter->num_tx_desc_avail) {
1324 		adapter->no_tx_desc_avail2++;
1325 		error = ENOBUFS;
1326 		goto fail;
1327 	}
1328 
1329 	if (ifp->if_hwassist > 0) {
1330 		em_transmit_checksum_setup(adapter,  m_head,
1331 					   &txd_upper, &txd_lower);
1332 	} else {
1333 		txd_upper = txd_lower = 0;
1334 	}
1335 
1336 	/* Find out if we are in vlan mode */
1337 	if ((m_head->m_flags & (M_PROTO1|M_PKTHDR)) == (M_PROTO1|M_PKTHDR) &&
1338 	    m_head->m_pkthdr.rcvif != NULL &&
1339 	    m_head->m_pkthdr.rcvif->if_type == IFT_L2VLAN)
1340 		ifv = m_head->m_pkthdr.rcvif->if_softc;
1341 
1342 	i = adapter->next_avail_tx_desc;
1343 	if (adapter->pcix_82544) {
1344 		txd_saved = i;
1345 		txd_used = 0;
1346 	}
1347 	for (j = 0; j < q.nsegs; j++) {
1348 		/* If adapter is 82544 and on PCIX bus */
1349 		if(adapter->pcix_82544) {
1350 			array_elements = 0;
1351 			address = htole64(q.segs[j].ds_addr);
1352 			/*
1353 			 * Check the Address and Length combination and
1354 			 * split the data accordingly
1355 			 */
1356 			array_elements = em_fill_descriptors(address,
1357 						htole32(q.segs[j].ds_len),
1358 						&desc_array);
1359 			for (counter = 0; counter < array_elements; counter++) {
1360 				if (txd_used == adapter->num_tx_desc_avail) {
1361 					adapter->next_avail_tx_desc = txd_saved;
1362 					adapter->no_tx_desc_avail2++;
1363 					error = ENOBUFS;
1364 					goto fail;
1365 				}
1366 				tx_buffer = &adapter->tx_buffer_area[i];
1367 				current_tx_desc = &adapter->tx_desc_base[i];
1368 				current_tx_desc->buffer_addr = htole64(
1369 				desc_array.descriptor[counter].address);
1370 				current_tx_desc->lower.data = htole32(
1371 				(adapter->txd_cmd | txd_lower |
1372 				(uint16_t)desc_array.descriptor[counter].length));
1373 				current_tx_desc->upper.data = htole32((txd_upper));
1374 				if (++i == adapter->num_tx_desc)
1375 					i = 0;
1376 
1377 				tx_buffer->m_head = NULL;
1378 				txd_used++;
1379 			}
1380 		} else {
1381 			tx_buffer = &adapter->tx_buffer_area[i];
1382 			current_tx_desc = &adapter->tx_desc_base[i];
1383 
1384 			current_tx_desc->buffer_addr = htole64(q.segs[j].ds_addr);
1385 			current_tx_desc->lower.data = htole32(
1386 				adapter->txd_cmd | txd_lower | q.segs[j].ds_len);
1387 			current_tx_desc->upper.data = htole32(txd_upper);
1388 
1389 			if (++i == adapter->num_tx_desc)
1390 				i = 0;
1391 
1392 			tx_buffer->m_head = NULL;
1393 		}
1394 	}
1395 
1396 	adapter->next_avail_tx_desc = i;
1397 	if (adapter->pcix_82544)
1398 		adapter->num_tx_desc_avail -= txd_used;
1399 	else
1400 		adapter->num_tx_desc_avail -= q.nsegs;
1401 
1402 	if (ifv != NULL) {
1403 		/* Set the vlan id */
1404 		current_tx_desc->upper.fields.special = htole16(ifv->ifv_tag);
1405 
1406 		/* Tell hardware to add tag */
1407 		current_tx_desc->lower.data |= htole32(E1000_TXD_CMD_VLE);
1408 	}
1409 
1410 	tx_buffer->m_head = m_head;
1411 	tx_buffer_map->map = tx_buffer->map;
1412 	tx_buffer->map = map;
1413 	bus_dmamap_sync(adapter->txtag, map, BUS_DMASYNC_PREWRITE);
1414 
1415 	/*
1416 	 * Last Descriptor of Packet needs End Of Packet (EOP)
1417 	 */
1418 	current_tx_desc->lower.data |= htole32(E1000_TXD_CMD_EOP);
1419 
1420 	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
1421 			BUS_DMASYNC_PREWRITE);
1422 
1423 	/*
1424 	 * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000
1425 	 * that this frame is available to transmit.
1426 	 */
1427 	if (adapter->hw.mac_type == em_82547 &&
1428 	    adapter->link_duplex == HALF_DUPLEX) {
1429 		em_82547_move_tail_serialized(adapter);
1430 	} else {
1431 		E1000_WRITE_REG(&adapter->hw, TDT, i);
1432 		if (adapter->hw.mac_type == em_82547) {
1433 			em_82547_update_fifo_head(adapter,
1434 						  m_head->m_pkthdr.len);
1435 		}
1436 	}
1437 
1438 	return(0);
1439 fail:
1440 	bus_dmamap_unload(adapter->txtag, map);
1441 	return error;
1442 }
1443 
1444 /*********************************************************************
1445  *
1446  * 82547 workaround to avoid controller hang in half-duplex environment.
1447  * The workaround is to avoid queuing a large packet that would span
1448  * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
1449  * in this case. We do that only when FIFO is quiescent.
1450  *
1451  **********************************************************************/
1452 static void
1453 em_82547_move_tail(void *arg)
1454 {
1455 	struct adapter *adapter = arg;
1456 	struct ifnet *ifp = &adapter->interface_data.ac_if;
1457 
1458 	lwkt_serialize_enter(ifp->if_serializer);
1459 	em_82547_move_tail_serialized(adapter);
1460 	lwkt_serialize_exit(ifp->if_serializer);
1461 }
1462 
1463 static void
1464 em_82547_move_tail_serialized(struct adapter *adapter)
1465 {
1466 	uint16_t hw_tdt;
1467 	uint16_t sw_tdt;
1468 	struct em_tx_desc *tx_desc;
1469 	uint16_t length = 0;
1470 	boolean_t eop = 0;
1471 
1472 	hw_tdt = E1000_READ_REG(&adapter->hw, TDT);
1473 	sw_tdt = adapter->next_avail_tx_desc;
1474 
1475 	while (hw_tdt != sw_tdt) {
1476 		tx_desc = &adapter->tx_desc_base[hw_tdt];
1477 		length += tx_desc->lower.flags.length;
1478 		eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
1479 		if(++hw_tdt == adapter->num_tx_desc)
1480 			hw_tdt = 0;
1481 
1482 		if(eop) {
1483 			if (em_82547_fifo_workaround(adapter, length)) {
1484 				adapter->tx_fifo_wrk_cnt++;
1485 				callout_reset(&adapter->tx_fifo_timer, 1,
1486 					em_82547_move_tail, adapter);
1487 				break;
1488 			}
1489 			E1000_WRITE_REG(&adapter->hw, TDT, hw_tdt);
1490 			em_82547_update_fifo_head(adapter, length);
1491 			length = 0;
1492 		}
1493 	}
1494 }
1495 
1496 static int
1497 em_82547_fifo_workaround(struct adapter *adapter, int len)
1498 {
1499 	int fifo_space, fifo_pkt_len;
1500 
1501 	fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
1502 
1503 	if (adapter->link_duplex == HALF_DUPLEX) {
1504 		fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;
1505 
1506 		if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
1507 			if (em_82547_tx_fifo_reset(adapter))
1508 				return(0);
1509 			else
1510 				return(1);
1511 		}
1512 	}
1513 
1514 	return(0);
1515 }
1516 
1517 static void
1518 em_82547_update_fifo_head(struct adapter *adapter, int len)
1519 {
1520 	int fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
1521 
1522 	/* tx_fifo_head is always 16 byte aligned */
1523 	adapter->tx_fifo_head += fifo_pkt_len;
1524 	if (adapter->tx_fifo_head >= adapter->tx_fifo_size)
1525 		adapter->tx_fifo_head -= adapter->tx_fifo_size;
1526 }
1527 
1528 static int
1529 em_82547_tx_fifo_reset(struct adapter *adapter)
1530 {
1531 	uint32_t tctl;
1532 
1533 	if ( (E1000_READ_REG(&adapter->hw, TDT) ==
1534 	      E1000_READ_REG(&adapter->hw, TDH)) &&
1535 	     (E1000_READ_REG(&adapter->hw, TDFT) ==
1536 	      E1000_READ_REG(&adapter->hw, TDFH)) &&
1537 	     (E1000_READ_REG(&adapter->hw, TDFTS) ==
1538 	      E1000_READ_REG(&adapter->hw, TDFHS)) &&
1539 	     (E1000_READ_REG(&adapter->hw, TDFPC) == 0)) {
1540 
1541 		/* Disable TX unit */
1542 		tctl = E1000_READ_REG(&adapter->hw, TCTL);
1543 		E1000_WRITE_REG(&adapter->hw, TCTL, tctl & ~E1000_TCTL_EN);
1544 
1545 		/* Reset FIFO pointers */
1546 		E1000_WRITE_REG(&adapter->hw, TDFT,  adapter->tx_head_addr);
1547 		E1000_WRITE_REG(&adapter->hw, TDFH,  adapter->tx_head_addr);
1548 		E1000_WRITE_REG(&adapter->hw, TDFTS, adapter->tx_head_addr);
1549 		E1000_WRITE_REG(&adapter->hw, TDFHS, adapter->tx_head_addr);
1550 
1551 		/* Re-enable TX unit */
1552 		E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1553 		E1000_WRITE_FLUSH(&adapter->hw);
1554 
1555 		adapter->tx_fifo_head = 0;
1556 		adapter->tx_fifo_reset_cnt++;
1557 
1558 		return(TRUE);
1559 	} else {
1560 		return(FALSE);
1561 	}
1562 }
1563 
1564 static void
1565 em_set_promisc(struct adapter *adapter)
1566 {
1567 	uint32_t reg_rctl;
1568 	struct ifnet *ifp = &adapter->interface_data.ac_if;
1569 
1570 	reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1571 
1572 	adapter->em_insert_vlan_header = 0;
1573 	if (ifp->if_flags & IFF_PROMISC) {
1574 		reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1575 		E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1576 
1577 		/*
1578 		 * Disable VLAN stripping in promiscous mode.
1579 		 * This enables bridging of vlan tagged frames to occur
1580 		 * and also allows vlan tags to be seen in tcpdump.
1581 		 */
1582 		if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING)
1583 			em_disable_vlans(adapter);
1584 		adapter->em_insert_vlan_header = 1;
1585 	} else if (ifp->if_flags & IFF_ALLMULTI) {
1586 		reg_rctl |= E1000_RCTL_MPE;
1587 		reg_rctl &= ~E1000_RCTL_UPE;
1588 		E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1589 	}
1590 }
1591 
1592 static void
1593 em_disable_promisc(struct adapter *adapter)
1594 {
1595 	struct ifnet *ifp = &adapter->interface_data.ac_if;
1596 
1597 	uint32_t reg_rctl;
1598 
1599 	reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1600 
1601 	reg_rctl &= (~E1000_RCTL_UPE);
1602 	reg_rctl &= (~E1000_RCTL_MPE);
1603 	E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1604 
1605 	if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING)
1606 		em_enable_vlans(adapter);
1607 	adapter->em_insert_vlan_header = 0;
1608 }
1609 
1610 /*********************************************************************
1611  *  Multicast Update
1612  *
1613  *  This routine is called whenever multicast address list is updated.
1614  *
1615  **********************************************************************/
1616 
1617 static void
1618 em_set_multi(struct adapter *adapter)
1619 {
1620 	uint32_t reg_rctl = 0;
1621 	uint8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
1622 	struct ifmultiaddr *ifma;
1623 	int mcnt = 0;
1624 	struct ifnet *ifp = &adapter->interface_data.ac_if;
1625 
1626 	IOCTL_DEBUGOUT("em_set_multi: begin");
1627 
1628 	if (adapter->hw.mac_type == em_82542_rev2_0) {
1629 		reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1630 		if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
1631 			em_pci_clear_mwi(&adapter->hw);
1632 		reg_rctl |= E1000_RCTL_RST;
1633 		E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1634 		msec_delay(5);
1635 	}
1636 
1637 	LIST_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1638 		if (ifma->ifma_addr->sa_family != AF_LINK)
1639 			continue;
1640 
1641 		if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
1642 			break;
1643 
1644 		bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
1645 		      &mta[mcnt*ETH_LENGTH_OF_ADDRESS], ETH_LENGTH_OF_ADDRESS);
1646 		mcnt++;
1647 	}
1648 
1649 	if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
1650 		reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1651 		reg_rctl |= E1000_RCTL_MPE;
1652 		E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1653 	} else {
1654 		em_mc_addr_list_update(&adapter->hw, mta, mcnt, 0, 1);
1655 	}
1656 
1657 	if (adapter->hw.mac_type == em_82542_rev2_0) {
1658 		reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1659 		reg_rctl &= ~E1000_RCTL_RST;
1660 		E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1661 		msec_delay(5);
1662 		if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
1663                         em_pci_set_mwi(&adapter->hw);
1664 	}
1665 }
1666 
1667 /*********************************************************************
1668  *  Timer routine
1669  *
1670  *  This routine checks for link status and updates statistics.
1671  *
1672  **********************************************************************/
1673 
1674 static void
1675 em_local_timer(void *arg)
1676 {
1677 	struct ifnet *ifp;
1678 	struct adapter *adapter = arg;
1679 	ifp = &adapter->interface_data.ac_if;
1680 
1681 	lwkt_serialize_enter(ifp->if_serializer);
1682 
1683 	em_check_for_link(&adapter->hw);
1684 	em_print_link_status(adapter);
1685 	em_update_stats_counters(adapter);
1686 	if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING)
1687 		em_print_hw_stats(adapter);
1688 	em_smartspeed(adapter);
1689 
1690 	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1691 
1692 	lwkt_serialize_exit(ifp->if_serializer);
1693 }
1694 
1695 static void
1696 em_print_link_status(struct adapter *adapter)
1697 {
1698 	if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1699 		if (adapter->link_active == 0) {
1700 			em_get_speed_and_duplex(&adapter->hw,
1701 						&adapter->link_speed,
1702 						&adapter->link_duplex);
1703 			/* Check if we may set SPEED_MODE bit on PCI-E */
1704 			if ((adapter->link_speed == SPEED_1000) &&
1705 			    ((adapter->hw.mac_type == em_82571) ||
1706 			     (adapter->hw.mac_type == em_82572))) {
1707 				int tarc0;
1708 
1709 #define SPEED_MODE_BIT	(1 << 21)	/* On PCI-E MACs only */
1710 
1711 				tarc0 = E1000_READ_REG(&adapter->hw, TARC0);
1712 				tarc0 |= SPEED_MODE_BIT;
1713 				E1000_WRITE_REG(&adapter->hw, TARC0, tarc0);
1714 
1715 #undef SPEED_MODE_BIT
1716 			}
1717 			if (bootverbose) {
1718 				if_printf(&adapter->interface_data.ac_if,
1719 					  "Link is up %d Mbps %s\n",
1720 					  adapter->link_speed,
1721 					  adapter->link_duplex == FULL_DUPLEX ?
1722 						"Full Duplex" : "Half Duplex");
1723 			}
1724 			adapter->link_active = 1;
1725 			adapter->smartspeed = 0;
1726 		}
1727 	} else {
1728 		if (adapter->link_active == 1) {
1729 			adapter->link_speed = 0;
1730 			adapter->link_duplex = 0;
1731 			if (bootverbose) {
1732 				if_printf(&adapter->interface_data.ac_if,
1733 					  "Link is Down\n");
1734 			}
1735 			adapter->link_active = 0;
1736 		}
1737 	}
1738 }
1739 
1740 /*********************************************************************
1741  *
1742  *  This routine disables all traffic on the adapter by issuing a
1743  *  global reset on the MAC and deallocates TX/RX buffers.
1744  *
1745  **********************************************************************/
1746 
1747 static void
1748 em_stop(void *arg)
1749 {
1750 	struct ifnet   *ifp;
1751 	struct adapter * adapter = arg;
1752 	ifp = &adapter->interface_data.ac_if;
1753 
1754 	ASSERT_SERIALIZED(ifp->if_serializer);
1755 
1756 	INIT_DEBUGOUT("em_stop: begin");
1757 	em_disable_intr(adapter);
1758 	em_reset_hw(&adapter->hw);
1759 	callout_stop(&adapter->timer);
1760 	callout_stop(&adapter->tx_fifo_timer);
1761 	em_free_transmit_structures(adapter);
1762 	em_free_receive_structures(adapter);
1763 
1764 	/* Tell the stack that the interface is no longer active */
1765 	ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
1766 	ifp->if_timer = 0;
1767 }
1768 
1769 /*********************************************************************
1770  *
1771  *  Determine hardware revision.
1772  *
1773  **********************************************************************/
1774 static void
1775 em_identify_hardware(struct adapter * adapter)
1776 {
1777 	device_t dev = adapter->dev;
1778 
1779 	/* Make sure our PCI config space has the necessary stuff set */
1780 	adapter->hw.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
1781 	if (!((adapter->hw.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
1782 	      (adapter->hw.pci_cmd_word & PCIM_CMD_MEMEN))) {
1783 		device_printf(dev, "Memory Access and/or Bus Master bits "
1784 			      "were not set!\n");
1785 		adapter->hw.pci_cmd_word |= (PCIM_CMD_BUSMASTEREN |
1786 					     PCIM_CMD_MEMEN);
1787 		pci_write_config(dev, PCIR_COMMAND,
1788 				 adapter->hw.pci_cmd_word, 2);
1789 	}
1790 
1791 	/* Save off the information about this board */
1792 	adapter->hw.vendor_id = pci_get_vendor(dev);
1793 	adapter->hw.device_id = pci_get_device(dev);
1794 	adapter->hw.revision_id = pci_get_revid(dev);
1795 	adapter->hw.subsystem_vendor_id = pci_get_subvendor(dev);
1796 	adapter->hw.subsystem_id = pci_get_subdevice(dev);
1797 
1798 	/* Identify the MAC */
1799 	if (em_set_mac_type(&adapter->hw))
1800 		device_printf(dev, "Unknown MAC Type\n");
1801 
1802 	if (adapter->hw.mac_type == em_82541 ||
1803 	    adapter->hw.mac_type == em_82541_rev_2 ||
1804 	    adapter->hw.mac_type == em_82547 ||
1805 	    adapter->hw.mac_type == em_82547_rev_2)
1806 		adapter->hw.phy_init_script = TRUE;
1807 }
1808 
1809 static int
1810 em_allocate_pci_resource(device_t dev)
1811 {
1812 	struct adapter *adapter = device_get_softc(dev);
1813 	int rid;
1814 
1815 	rid = EM_MMBA;
1816 	adapter->res_memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
1817 						     &rid, RF_ACTIVE);
1818 	if (!(adapter->res_memory)) {
1819 		device_printf(dev, "Unable to allocate bus resource: memory\n");
1820 		return ENXIO;
1821 	}
1822 	adapter->osdep.mem_bus_space_tag =
1823 		rman_get_bustag(adapter->res_memory);
1824 	adapter->osdep.mem_bus_space_handle =
1825 	    rman_get_bushandle(adapter->res_memory);
1826 	adapter->hw.hw_addr = (uint8_t *)&adapter->osdep.mem_bus_space_handle;
1827 
1828 	if (adapter->hw.mac_type > em_82543) {
1829 		int i, val;
1830 
1831 		/* Figure our where our IO BAR is ? */
1832 		rid = EM_MMBA;
1833 		for (i = 0; i < 5; i++) {
1834 			val = pci_read_config(dev, rid, 4);
1835 			if (val & 0x00000001) {
1836 				adapter->io_rid = rid;
1837 				break;
1838 			}
1839 			rid += 4;
1840 		}
1841 
1842 		adapter->res_ioport = bus_alloc_resource_any(dev,
1843 		    SYS_RES_IOPORT, &adapter->io_rid, RF_ACTIVE);
1844 		if (!(adapter->res_ioport)) {
1845 			device_printf(dev, "Unable to allocate bus resource: "
1846 				      "ioport\n");
1847 			return ENXIO;
1848 		}
1849 
1850 		adapter->hw.reg_io_tag = rman_get_bustag(adapter->res_ioport);
1851 		adapter->hw.reg_io_handle =
1852 			rman_get_bushandle(adapter->res_ioport);
1853 	}
1854 
1855 	/* For ICH8 we need to find the flash memory */
1856 	if (adapter->hw.mac_type == em_ich8lan) {
1857 		rid = EM_FLASH;
1858 
1859 		adapter->flash_mem = bus_alloc_resource_any(dev,
1860 		    SYS_RES_MEMORY, &rid, RF_ACTIVE);
1861 		if (adapter->flash_mem == NULL) {
1862 			device_printf(dev, "Unable to allocate bus resource: "
1863 				      "flash memory\n");
1864 			return ENXIO;
1865 		}
1866 		adapter->osdep.flash_bus_space_tag =
1867 		    rman_get_bustag(adapter->flash_mem);
1868 		adapter->osdep.flash_bus_space_handle =
1869 		    rman_get_bushandle(adapter->flash_mem);
1870 	}
1871 
1872 	rid = 0x0;
1873 	adapter->res_interrupt = bus_alloc_resource_any(dev, SYS_RES_IRQ,
1874 	    &rid, RF_SHAREABLE | RF_ACTIVE);
1875 	if (!(adapter->res_interrupt)) {
1876 		device_printf(dev, "Unable to allocate bus resource: "
1877 			      "interrupt\n");
1878 		return ENXIO;
1879 	}
1880 
1881 	adapter->hw.back = &adapter->osdep;
1882 
1883 	return 0;
1884 }
1885 
1886 static void
1887 em_free_pci_resource(device_t dev)
1888 {
1889 	struct adapter *adapter = device_get_softc(dev);
1890 
1891 	if (adapter->res_interrupt != NULL) {
1892 		bus_release_resource(dev, SYS_RES_IRQ, 0,
1893 				     adapter->res_interrupt);
1894 	}
1895 	if (adapter->res_memory != NULL) {
1896 		bus_release_resource(dev, SYS_RES_MEMORY, EM_MMBA,
1897 				     adapter->res_memory);
1898 	}
1899 
1900 	if (adapter->res_ioport != NULL) {
1901 		bus_release_resource(dev, SYS_RES_IOPORT, adapter->io_rid,
1902 				     adapter->res_ioport);
1903 	}
1904 
1905 	if (adapter->flash_mem != NULL) {
1906 		bus_release_resource(dev, SYS_RES_MEMORY, EM_FLASH,
1907 				     adapter->flash_mem);
1908 	}
1909 }
1910 
1911 /*********************************************************************
1912  *
1913  *  Initialize the hardware to a configuration as specified by the
1914  *  adapter structure. The controller is reset, the EEPROM is
1915  *  verified, the MAC address is set, then the shared initialization
1916  *  routines are called.
1917  *
1918  **********************************************************************/
1919 static int
1920 em_hardware_init(struct adapter *adapter)
1921 {
1922 	uint16_t	rx_buffer_size;
1923 
1924 	INIT_DEBUGOUT("em_hardware_init: begin");
1925 	/* Issue a global reset */
1926 	em_reset_hw(&adapter->hw);
1927 
1928 	/* When hardware is reset, fifo_head is also reset */
1929 	adapter->tx_fifo_head = 0;
1930 
1931 	/* Make sure we have a good EEPROM before we read from it */
1932 	if (em_validate_eeprom_checksum(&adapter->hw) < 0) {
1933 		device_printf(adapter->dev,
1934 			      "The EEPROM Checksum Is Not Valid\n");
1935 		return(EIO);
1936 	}
1937 
1938 	if (em_read_part_num(&adapter->hw, &(adapter->part_num)) < 0) {
1939 		device_printf(adapter->dev,
1940 			      "EEPROM read error while reading part number\n");
1941 		return(EIO);
1942 	}
1943 
1944 	/* Set up smart power down as default off on newer adapters */
1945 	if (!em_smart_pwr_down &&
1946 	    (adapter->hw.mac_type == em_82571 ||
1947 	     adapter->hw.mac_type == em_82572)) {
1948 		uint16_t phy_tmp = 0;
1949 
1950 		/* Speed up time to link by disabling smart power down */
1951 		em_read_phy_reg(&adapter->hw, IGP02E1000_PHY_POWER_MGMT,
1952 				&phy_tmp);
1953 		phy_tmp &= ~IGP02E1000_PM_SPD;
1954 		em_write_phy_reg(&adapter->hw, IGP02E1000_PHY_POWER_MGMT,
1955 				 phy_tmp);
1956 	}
1957 
1958 	/*
1959 	 * These parameters control the automatic generation (Tx) and
1960 	 * response(Rx) to Ethernet PAUSE frames.
1961 	 * - High water mark should allow for at least two frames to be
1962 	 *   received after sending an XOFF.
1963 	 * - Low water mark works best when it is very near the high water mark.
1964 	 *   This allows the receiver to restart by sending XON when it has
1965 	 *   drained a bit.  Here we use an arbitary value of 1500 which will
1966 	 *   restart after one full frame is pulled from the buffer.  There
1967 	 *   could be several smaller frames in the buffer and if so they will
1968 	 *   not trigger the XON until their total number reduces the buffer
1969 	 *   by 1500.
1970 	 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
1971 	 */
1972 	rx_buffer_size = ((E1000_READ_REG(&adapter->hw, PBA) & 0xffff) << 10);
1973 
1974 	adapter->hw.fc_high_water =
1975 	    rx_buffer_size - roundup2(1 * adapter->hw.max_frame_size, 1024);
1976 	adapter->hw.fc_low_water = adapter->hw.fc_high_water - 1500;
1977 	if (adapter->hw.mac_type == em_80003es2lan)
1978 		adapter->hw.fc_pause_time = 0xFFFF;
1979 	else
1980 		adapter->hw.fc_pause_time = 0x1000;
1981 	adapter->hw.fc_send_xon = TRUE;
1982 	adapter->hw.fc = em_fc_full;
1983 
1984 	if (em_init_hw(&adapter->hw) < 0) {
1985 		device_printf(adapter->dev, "Hardware Initialization Failed");
1986 		return(EIO);
1987 	}
1988 
1989 	em_check_for_link(&adapter->hw);
1990 	/*
1991 	 * At the time this code runs copper NICS fail, but fiber
1992 	 * succeed, however, this causes a problem downstream,
1993 	 * so for now have fiber NICs just not do this, then
1994 	 * everything seems to work correctly.
1995 	 */
1996 	if ((adapter->hw.media_type != em_media_type_fiber &&
1997 	     adapter->hw.media_type != em_media_type_internal_serdes) &&
1998 	    (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU))
1999 		adapter->link_active = 1;
2000 	else
2001 		adapter->link_active = 0;
2002 
2003 	if (adapter->link_active) {
2004 		em_get_speed_and_duplex(&adapter->hw,
2005 					&adapter->link_speed,
2006 					&adapter->link_duplex);
2007 	} else {
2008 		adapter->link_speed = 0;
2009 		adapter->link_duplex = 0;
2010 	}
2011 
2012 	return(0);
2013 }
2014 
2015 /*********************************************************************
2016  *
2017  *  Setup networking device structure and register an interface.
2018  *
2019  **********************************************************************/
2020 static void
2021 em_setup_interface(device_t dev, struct adapter *adapter)
2022 {
2023 	struct ifnet   *ifp;
2024 	u_char fiber_type = IFM_1000_SX;	/* default type */
2025 	INIT_DEBUGOUT("em_setup_interface: begin");
2026 
2027 	ifp = &adapter->interface_data.ac_if;
2028 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
2029 	ifp->if_mtu = ETHERMTU;
2030 	ifp->if_baudrate = 1000000000;
2031 	ifp->if_init =  em_init;
2032 	ifp->if_softc = adapter;
2033 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
2034 	ifp->if_ioctl = em_ioctl;
2035 	ifp->if_start = em_start;
2036 #ifdef DEVICE_POLLING
2037 	ifp->if_poll = em_poll;
2038 #endif
2039 	ifp->if_watchdog = em_watchdog;
2040 	ifq_set_maxlen(&ifp->if_snd, adapter->num_tx_desc - 1);
2041 	ifq_set_ready(&ifp->if_snd);
2042 
2043 	if (adapter->hw.mac_type >= em_82543)
2044 		ifp->if_capabilities |= IFCAP_HWCSUM;
2045 
2046 	ifp->if_capenable = ifp->if_capabilities;
2047 
2048 	ether_ifattach(ifp, adapter->hw.mac_addr, NULL);
2049 
2050 	/*
2051 	 * Tell the upper layer(s) we support long frames.
2052 	 */
2053 	ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
2054         ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
2055 
2056 	/*
2057 	 * Specify the media types supported by this adapter and register
2058 	 * callbacks to update media and link information
2059 	 */
2060 	ifmedia_init(&adapter->media, IFM_IMASK, em_media_change,
2061 		     em_media_status);
2062 	if (adapter->hw.media_type == em_media_type_fiber ||
2063 	    adapter->hw.media_type == em_media_type_internal_serdes) {
2064 		if (adapter->hw.mac_type == em_82545)
2065 			fiber_type = IFM_1000_LX;
2066 		ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX,
2067 			    0, NULL);
2068 		ifmedia_add(&adapter->media, IFM_ETHER | fiber_type,
2069 			    0, NULL);
2070 	} else {
2071 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
2072 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
2073 			    0, NULL);
2074 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
2075 			    0, NULL);
2076 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
2077 			    0, NULL);
2078 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T | IFM_FDX,
2079 			    0, NULL);
2080 		ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T, 0, NULL);
2081 	}
2082 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
2083 	ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
2084 }
2085 
2086 /*********************************************************************
2087  *
2088  *  Workaround for SmartSpeed on 82541 and 82547 controllers
2089  *
2090  **********************************************************************/
2091 static void
2092 em_smartspeed(struct adapter *adapter)
2093 {
2094 	uint16_t phy_tmp;
2095 
2096 	if (adapter->link_active || (adapter->hw.phy_type != em_phy_igp) ||
2097 	    !adapter->hw.autoneg ||
2098 	    !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
2099 		return;
2100 
2101 	if (adapter->smartspeed == 0) {
2102 		/*
2103 		 * If Master/Slave config fault is asserted twice,
2104 		 * we assume back-to-back.
2105 		 */
2106 		em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
2107 		if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT))
2108 			return;
2109 		em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
2110 		if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
2111 			em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL,
2112 					&phy_tmp);
2113 			if (phy_tmp & CR_1000T_MS_ENABLE) {
2114 				phy_tmp &= ~CR_1000T_MS_ENABLE;
2115 				em_write_phy_reg(&adapter->hw,
2116 						 PHY_1000T_CTRL, phy_tmp);
2117 				adapter->smartspeed++;
2118 				if (adapter->hw.autoneg &&
2119 				    !em_phy_setup_autoneg(&adapter->hw) &&
2120 				    !em_read_phy_reg(&adapter->hw, PHY_CTRL,
2121 						     &phy_tmp)) {
2122 					phy_tmp |= (MII_CR_AUTO_NEG_EN |
2123 						    MII_CR_RESTART_AUTO_NEG);
2124 					em_write_phy_reg(&adapter->hw,
2125 							 PHY_CTRL, phy_tmp);
2126 				}
2127 			}
2128 		}
2129                 return;
2130 	} else if (adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
2131 		/* If still no link, perhaps using 2/3 pair cable */
2132 		em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
2133 		phy_tmp |= CR_1000T_MS_ENABLE;
2134 		em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
2135 		if (adapter->hw.autoneg &&
2136 		    !em_phy_setup_autoneg(&adapter->hw) &&
2137 		    !em_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_tmp)) {
2138 			phy_tmp |= (MII_CR_AUTO_NEG_EN |
2139 				    MII_CR_RESTART_AUTO_NEG);
2140 			em_write_phy_reg(&adapter->hw, PHY_CTRL, phy_tmp);
2141 		}
2142 	}
2143 	/* Restart process after EM_SMARTSPEED_MAX iterations */
2144 	if (adapter->smartspeed++ == EM_SMARTSPEED_MAX)
2145 		adapter->smartspeed = 0;
2146 }
2147 
2148 /*
2149  * Manage DMA'able memory.
2150  */
2151 static void
2152 em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
2153 {
2154 	if (error)
2155 		return;
2156 	*(bus_addr_t*) arg = segs->ds_addr;
2157 }
2158 
2159 static int
2160 em_dma_malloc(struct adapter *adapter, bus_size_t size,
2161 	      struct em_dma_alloc *dma, int mapflags)
2162 {
2163 	int r;
2164 	device_t dev = adapter->dev;
2165 
2166 	r = bus_dma_tag_create(NULL,                    /* parent */
2167 			       PAGE_SIZE, 0,            /* alignment, bounds */
2168 			       BUS_SPACE_MAXADDR,       /* lowaddr */
2169 			       BUS_SPACE_MAXADDR,       /* highaddr */
2170 			       NULL, NULL,              /* filter, filterarg */
2171 			       size,                    /* maxsize */
2172 			       1,                       /* nsegments */
2173 			       size,                    /* maxsegsize */
2174 			       BUS_DMA_ALLOCNOW,        /* flags */
2175 			       &dma->dma_tag);
2176 	if (r != 0) {
2177 		device_printf(dev, "em_dma_malloc: bus_dma_tag_create failed; "
2178 			      "error %u\n", r);
2179 		goto fail_0;
2180 	}
2181 
2182 	r = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
2183 			     BUS_DMA_NOWAIT, &dma->dma_map);
2184 	if (r != 0) {
2185 		device_printf(dev, "em_dma_malloc: bus_dmammem_alloc failed; "
2186 			      "size %llu, error %d\n", (uintmax_t)size, r);
2187 		goto fail_2;
2188 	}
2189 
2190 	r = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
2191 			    size,
2192 			    em_dmamap_cb,
2193 			    &dma->dma_paddr,
2194 			    mapflags | BUS_DMA_NOWAIT);
2195 	if (r != 0) {
2196 		device_printf(dev, "em_dma_malloc: bus_dmamap_load failed; "
2197 			      "error %u\n", r);
2198 		goto fail_3;
2199 	}
2200 
2201 	dma->dma_size = size;
2202 	return(0);
2203 
2204 fail_3:
2205 	bus_dmamap_unload(dma->dma_tag, dma->dma_map);
2206 fail_2:
2207 	bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
2208 	bus_dma_tag_destroy(dma->dma_tag);
2209 fail_0:
2210 	dma->dma_map = NULL;
2211 	dma->dma_tag = NULL;
2212 	return(r);
2213 }
2214 
2215 static void
2216 em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
2217 {
2218 	bus_dmamap_unload(dma->dma_tag, dma->dma_map);
2219 	bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
2220 	bus_dma_tag_destroy(dma->dma_tag);
2221 }
2222 
2223 /*********************************************************************
2224  *
2225  *  Allocate memory for tx_buffer structures. The tx_buffer stores all
2226  *  the information needed to transmit a packet on the wire.
2227  *
2228  **********************************************************************/
2229 static int
2230 em_allocate_transmit_structures(struct adapter * adapter)
2231 {
2232 	adapter->tx_buffer_area = kmalloc(sizeof(struct em_buffer) *
2233 	    adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
2234 	if (adapter->tx_buffer_area == NULL) {
2235 		device_printf(adapter->dev, "Unable to allocate tx_buffer memory\n");
2236 		return(ENOMEM);
2237 	}
2238 
2239 	return(0);
2240 }
2241 
2242 /*********************************************************************
2243  *
2244  *  Allocate and initialize transmit structures.
2245  *
2246  **********************************************************************/
2247 static int
2248 em_setup_transmit_structures(struct adapter *adapter)
2249 {
2250 	struct em_buffer *tx_buffer;
2251 	bus_size_t size;
2252 	int error, i;
2253 
2254 	/*
2255 	 * Setup DMA descriptor areas.
2256 	 */
2257 	size = roundup2(adapter->hw.max_frame_size, MCLBYTES);
2258 	if (bus_dma_tag_create(NULL,                    /* parent */
2259 			       1, 0,			/* alignment, bounds */
2260 			       BUS_SPACE_MAXADDR,       /* lowaddr */
2261 			       BUS_SPACE_MAXADDR,       /* highaddr */
2262 			       NULL, NULL,              /* filter, filterarg */
2263 			       size,                    /* maxsize */
2264 			       EM_MAX_SCATTER,          /* nsegments */
2265 			       size,                    /* maxsegsize */
2266 			       BUS_DMA_ALLOCNOW,        /* flags */
2267 			       &adapter->txtag)) {
2268 		device_printf(adapter->dev, "Unable to allocate TX DMA tag\n");
2269 		return(ENOMEM);
2270 	}
2271 
2272 	if (em_allocate_transmit_structures(adapter))
2273 		return(ENOMEM);
2274 
2275         bzero((void *) adapter->tx_desc_base,
2276               (sizeof(struct em_tx_desc)) * adapter->num_tx_desc);
2277 	tx_buffer = adapter->tx_buffer_area;
2278 	for (i = 0; i < adapter->num_tx_desc; i++) {
2279 		error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map);
2280 		if (error) {
2281 			device_printf(adapter->dev,
2282 				      "Unable to create TX DMA map\n");
2283 			goto fail;
2284 		}
2285 		tx_buffer++;
2286 	}
2287 
2288         adapter->next_avail_tx_desc = 0;
2289 	adapter->oldest_used_tx_desc = 0;
2290 
2291 	/* Set number of descriptors available */
2292 	adapter->num_tx_desc_avail = adapter->num_tx_desc;
2293 
2294 	/* Set checksum context */
2295 	adapter->active_checksum_context = OFFLOAD_NONE;
2296 
2297 	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
2298 			BUS_DMASYNC_PREWRITE);
2299 
2300 	return(0);
2301 fail:
2302 	em_free_transmit_structures(adapter);
2303 	return (error);
2304 }
2305 
2306 /*********************************************************************
2307  *
2308  *  Enable transmit unit.
2309  *
2310  **********************************************************************/
2311 static void
2312 em_initialize_transmit_unit(struct adapter * adapter)
2313 {
2314 	uint32_t reg_tctl, reg_tarc;
2315 	uint32_t reg_tipg = 0;
2316 	uint64_t bus_addr;
2317 
2318 	INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
2319 
2320 	/* Setup the Base and Length of the Tx Descriptor Ring */
2321 	bus_addr = adapter->txdma.dma_paddr;
2322 	E1000_WRITE_REG(&adapter->hw, TDLEN,
2323 			adapter->num_tx_desc * sizeof(struct em_tx_desc));
2324 	E1000_WRITE_REG(&adapter->hw, TDBAH, (uint32_t)(bus_addr >> 32));
2325 	E1000_WRITE_REG(&adapter->hw, TDBAL, (uint32_t)bus_addr);
2326 
2327 	/* Setup the HW Tx Head and Tail descriptor pointers */
2328 	E1000_WRITE_REG(&adapter->hw, TDT, 0);
2329 	E1000_WRITE_REG(&adapter->hw, TDH, 0);
2330 
2331 	HW_DEBUGOUT2("Base = %x, Length = %x\n",
2332 		     E1000_READ_REG(&adapter->hw, TDBAL),
2333 		     E1000_READ_REG(&adapter->hw, TDLEN));
2334 
2335 	/* Set the default values for the Tx Inter Packet Gap timer */
2336 	switch (adapter->hw.mac_type) {
2337 	case em_82542_rev2_0:
2338 	case em_82542_rev2_1:
2339 		reg_tipg = DEFAULT_82542_TIPG_IPGT;
2340 		reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
2341 		reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
2342 		break;
2343 	case em_80003es2lan:
2344 		reg_tipg = DEFAULT_82543_TIPG_IPGR1;
2345 		reg_tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
2346 		break;
2347 	default:
2348 		if (adapter->hw.media_type == em_media_type_fiber ||
2349 		    adapter->hw.media_type == em_media_type_internal_serdes)
2350 			reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
2351 		else
2352 			reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
2353 		reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
2354 		reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
2355 	}
2356 
2357 	E1000_WRITE_REG(&adapter->hw, TIPG, reg_tipg);
2358 	E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay.value);
2359 	if (adapter->hw.mac_type >= em_82540)
2360 		E1000_WRITE_REG(&adapter->hw, TADV,
2361 				adapter->tx_abs_int_delay.value);
2362 
2363 	/* Do adapter specific tweaks before we enable the transmitter */
2364 	if (adapter->hw.mac_type == em_82571 || adapter->hw.mac_type == em_82572) {
2365 		reg_tarc = E1000_READ_REG(&adapter->hw, TARC0);
2366 		reg_tarc |= (1 << 25);
2367 		E1000_WRITE_REG(&adapter->hw, TARC0, reg_tarc);
2368 		reg_tarc = E1000_READ_REG(&adapter->hw, TARC1);
2369 		reg_tarc |= (1 << 25);
2370 		reg_tarc &= ~(1 << 28);
2371 		E1000_WRITE_REG(&adapter->hw, TARC1, reg_tarc);
2372 	} else if (adapter->hw.mac_type == em_80003es2lan) {
2373 		reg_tarc = E1000_READ_REG(&adapter->hw, TARC0);
2374 		reg_tarc |= 1;
2375 		E1000_WRITE_REG(&adapter->hw, TARC0, reg_tarc);
2376 		reg_tarc = E1000_READ_REG(&adapter->hw, TARC1);
2377 		reg_tarc |= 1;
2378 		E1000_WRITE_REG(&adapter->hw, TARC1, reg_tarc);
2379 	}
2380 
2381 	/* Program the Transmit Control Register */
2382 	reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
2383 		   (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
2384 	if (adapter->hw.mac_type >= em_82571)
2385 		reg_tctl |= E1000_TCTL_MULR;
2386 	if (adapter->link_duplex == 1)
2387 		reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
2388 	else
2389 		reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
2390 
2391 	/* This write will effectively turn on the transmit unit */
2392 	E1000_WRITE_REG(&adapter->hw, TCTL, reg_tctl);
2393 
2394 	/* Setup Transmit Descriptor Settings for this adapter */
2395 	adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_RS;
2396 
2397 	if (adapter->tx_int_delay.value > 0)
2398 		adapter->txd_cmd |= E1000_TXD_CMD_IDE;
2399 }
2400 
2401 /*********************************************************************
2402  *
2403  *  Free all transmit related data structures.
2404  *
2405  **********************************************************************/
2406 static void
2407 em_free_transmit_structures(struct adapter * adapter)
2408 {
2409 	struct em_buffer *tx_buffer;
2410 	int i;
2411 
2412 	INIT_DEBUGOUT("free_transmit_structures: begin");
2413 
2414 	if (adapter->tx_buffer_area != NULL) {
2415 		tx_buffer = adapter->tx_buffer_area;
2416 		for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
2417 			if (tx_buffer->m_head != NULL) {
2418 				bus_dmamap_unload(adapter->txtag,
2419 						  tx_buffer->map);
2420 				m_freem(tx_buffer->m_head);
2421 			}
2422 
2423 			if (tx_buffer->map != NULL) {
2424 				bus_dmamap_destroy(adapter->txtag, tx_buffer->map);
2425 				tx_buffer->map = NULL;
2426  			}
2427 			tx_buffer->m_head = NULL;
2428 		}
2429 	}
2430 	if (adapter->tx_buffer_area != NULL) {
2431 		kfree(adapter->tx_buffer_area, M_DEVBUF);
2432 		adapter->tx_buffer_area = NULL;
2433 	}
2434 	if (adapter->txtag != NULL) {
2435 		bus_dma_tag_destroy(adapter->txtag);
2436 		adapter->txtag = NULL;
2437 	}
2438 }
2439 
2440 /*********************************************************************
2441  *
2442  *  The offload context needs to be set when we transfer the first
2443  *  packet of a particular protocol (TCP/UDP). We change the
2444  *  context only if the protocol type changes.
2445  *
2446  **********************************************************************/
2447 static void
2448 em_transmit_checksum_setup(struct adapter * adapter,
2449 			   struct mbuf *mp,
2450 			   uint32_t *txd_upper,
2451 			   uint32_t *txd_lower)
2452 {
2453 	struct em_context_desc *TXD;
2454 	struct em_buffer *tx_buffer;
2455 	int curr_txd;
2456 
2457 	if (mp->m_pkthdr.csum_flags) {
2458 		if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
2459 			*txd_upper = E1000_TXD_POPTS_TXSM << 8;
2460 			*txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
2461 			if (adapter->active_checksum_context == OFFLOAD_TCP_IP)
2462 				return;
2463 			else
2464 				adapter->active_checksum_context = OFFLOAD_TCP_IP;
2465 		} else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
2466 			*txd_upper = E1000_TXD_POPTS_TXSM << 8;
2467 			*txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
2468 			if (adapter->active_checksum_context == OFFLOAD_UDP_IP)
2469 				return;
2470 			else
2471 				adapter->active_checksum_context = OFFLOAD_UDP_IP;
2472 		} else {
2473 			*txd_upper = 0;
2474 			*txd_lower = 0;
2475 			return;
2476 		}
2477 	} else {
2478 		*txd_upper = 0;
2479 		*txd_lower = 0;
2480 		return;
2481 	}
2482 
2483 	/*
2484 	 * If we reach this point, the checksum offload context
2485 	 * needs to be reset.
2486 	 */
2487 	curr_txd = adapter->next_avail_tx_desc;
2488 	tx_buffer = &adapter->tx_buffer_area[curr_txd];
2489 	TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd];
2490 
2491 	TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN;
2492 	TXD->lower_setup.ip_fields.ipcso =
2493 	    ETHER_HDR_LEN + offsetof(struct ip, ip_sum);
2494 	TXD->lower_setup.ip_fields.ipcse =
2495 	    htole16(ETHER_HDR_LEN + sizeof(struct ip) - 1);
2496 
2497 	TXD->upper_setup.tcp_fields.tucss =
2498 	    ETHER_HDR_LEN + sizeof(struct ip);
2499 	TXD->upper_setup.tcp_fields.tucse = htole16(0);
2500 
2501 	if (adapter->active_checksum_context == OFFLOAD_TCP_IP) {
2502 		TXD->upper_setup.tcp_fields.tucso =
2503 		    ETHER_HDR_LEN + sizeof(struct ip) +
2504 		    offsetof(struct tcphdr, th_sum);
2505 	} else if (adapter->active_checksum_context == OFFLOAD_UDP_IP) {
2506 		TXD->upper_setup.tcp_fields.tucso =
2507 			ETHER_HDR_LEN + sizeof(struct ip) +
2508 			offsetof(struct udphdr, uh_sum);
2509 	}
2510 
2511 	TXD->tcp_seg_setup.data = htole32(0);
2512 	TXD->cmd_and_length = htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT);
2513 
2514 	tx_buffer->m_head = NULL;
2515 
2516 	if (++curr_txd == adapter->num_tx_desc)
2517 		curr_txd = 0;
2518 
2519 	adapter->num_tx_desc_avail--;
2520 	adapter->next_avail_tx_desc = curr_txd;
2521 }
2522 
2523 /**********************************************************************
2524  *
2525  *  Examine each tx_buffer in the used queue. If the hardware is done
2526  *  processing the packet then free associated resources. The
2527  *  tx_buffer is put back on the free queue.
2528  *
2529  **********************************************************************/
2530 
2531 static void
2532 em_clean_transmit_interrupts(struct adapter *adapter)
2533 {
2534 	int i, num_avail;
2535 	struct em_buffer *tx_buffer;
2536 	struct em_tx_desc *tx_desc;
2537 	struct ifnet *ifp = &adapter->interface_data.ac_if;
2538 
2539 	if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
2540 		return;
2541 
2542 	num_avail = adapter->num_tx_desc_avail;
2543 	i = adapter->oldest_used_tx_desc;
2544 
2545 	tx_buffer = &adapter->tx_buffer_area[i];
2546 	tx_desc = &adapter->tx_desc_base[i];
2547 
2548 	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
2549 			BUS_DMASYNC_POSTREAD);
2550 
2551 	while(tx_desc->upper.fields.status & E1000_TXD_STAT_DD) {
2552 		tx_desc->upper.data = 0;
2553 		num_avail++;
2554 
2555 		logif(pkt_txclean);
2556 
2557 		if (tx_buffer->m_head) {
2558 			ifp->if_opackets++;
2559 			bus_dmamap_sync(adapter->txtag, tx_buffer->map,
2560 					BUS_DMASYNC_POSTWRITE);
2561 			bus_dmamap_unload(adapter->txtag, tx_buffer->map);
2562 
2563 			m_freem(tx_buffer->m_head);
2564 			tx_buffer->m_head = NULL;
2565 		}
2566 
2567 		if (++i == adapter->num_tx_desc)
2568 			i = 0;
2569 
2570 		tx_buffer = &adapter->tx_buffer_area[i];
2571 		tx_desc = &adapter->tx_desc_base[i];
2572 	}
2573 
2574 	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
2575 			BUS_DMASYNC_PREWRITE);
2576 
2577 	adapter->oldest_used_tx_desc = i;
2578 
2579 	/*
2580 	 * If we have enough room, clear IFF_OACTIVE to tell the stack
2581 	 * that it is OK to send packets.
2582 	 * If there are no pending descriptors, clear the timeout. Otherwise,
2583 	 * if some descriptors have been freed, restart the timeout.
2584 	 */
2585 	if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
2586 		ifp->if_flags &= ~IFF_OACTIVE;
2587 		if (num_avail == adapter->num_tx_desc)
2588 			ifp->if_timer = 0;
2589 		else if (num_avail == adapter->num_tx_desc_avail)
2590 			ifp->if_timer = EM_TX_TIMEOUT;
2591 	}
2592 	adapter->num_tx_desc_avail = num_avail;
2593 }
2594 
2595 /*********************************************************************
2596  *
2597  *  Get a buffer from system mbuf buffer pool.
2598  *
2599  **********************************************************************/
2600 static int
2601 em_get_buf(int i, struct adapter *adapter, struct mbuf *nmp, int how)
2602 {
2603 	struct mbuf *mp = nmp;
2604 	struct em_buffer *rx_buffer;
2605 	struct ifnet *ifp;
2606 	bus_addr_t paddr;
2607 	int error;
2608 
2609 	ifp = &adapter->interface_data.ac_if;
2610 
2611 	if (mp == NULL) {
2612 		mp = m_getcl(how, MT_DATA, M_PKTHDR);
2613 		if (mp == NULL) {
2614 			adapter->mbuf_cluster_failed++;
2615 			return(ENOBUFS);
2616 		}
2617 		mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2618 	} else {
2619 		mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2620 		mp->m_data = mp->m_ext.ext_buf;
2621 		mp->m_next = NULL;
2622 	}
2623 	if (ifp->if_mtu <= ETHERMTU)
2624 		m_adj(mp, ETHER_ALIGN);
2625 
2626 	rx_buffer = &adapter->rx_buffer_area[i];
2627 
2628 	/*
2629 	 * Using memory from the mbuf cluster pool, invoke the
2630 	 * bus_dma machinery to arrange the memory mapping.
2631 	 */
2632 	error = bus_dmamap_load(adapter->rxtag, rx_buffer->map,
2633 				mtod(mp, void *), mp->m_len,
2634 				em_dmamap_cb, &paddr, 0);
2635 	if (error) {
2636 		m_free(mp);
2637 		return(error);
2638 	}
2639 	rx_buffer->m_head = mp;
2640 	adapter->rx_desc_base[i].buffer_addr = htole64(paddr);
2641 	bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD);
2642 
2643 	return(0);
2644 }
2645 
2646 /*********************************************************************
2647  *
2648  *  Allocate memory for rx_buffer structures. Since we use one
2649  *  rx_buffer per received packet, the maximum number of rx_buffer's
2650  *  that we'll need is equal to the number of receive descriptors
2651  *  that we've allocated.
2652  *
2653  **********************************************************************/
2654 static int
2655 em_allocate_receive_structures(struct adapter *adapter)
2656 {
2657 	int i, error, size;
2658 	struct em_buffer *rx_buffer;
2659 
2660 	size = adapter->num_rx_desc * sizeof(struct em_buffer);
2661 	adapter->rx_buffer_area = kmalloc(size, M_DEVBUF, M_WAITOK | M_ZERO);
2662 
2663 	error = bus_dma_tag_create(NULL,		/* parent */
2664 				   1, 0,		/* alignment, bounds */
2665 				   BUS_SPACE_MAXADDR,	/* lowaddr */
2666 				   BUS_SPACE_MAXADDR,	/* highaddr */
2667 				   NULL, NULL,		/* filter, filterarg */
2668 				   MCLBYTES,		/* maxsize */
2669 				   1,			/* nsegments */
2670 				   MCLBYTES,		/* maxsegsize */
2671 				   BUS_DMA_ALLOCNOW,	/* flags */
2672 				   &adapter->rxtag);
2673 	if (error != 0) {
2674 		device_printf(adapter->dev, "em_allocate_receive_structures: "
2675 			      "bus_dma_tag_create failed; error %u\n", error);
2676 		goto fail_0;
2677 	}
2678 
2679 	rx_buffer = adapter->rx_buffer_area;
2680 	for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2681 		error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
2682 					  &rx_buffer->map);
2683 		if (error != 0) {
2684 			device_printf(adapter->dev,
2685 				      "em_allocate_receive_structures: "
2686 				      "bus_dmamap_create failed; error %u\n",
2687 				      error);
2688 			goto fail_1;
2689 		}
2690 	}
2691 
2692 	for (i = 0; i < adapter->num_rx_desc; i++) {
2693 		error = em_get_buf(i, adapter, NULL, MB_WAIT);
2694 		if (error != 0) {
2695 			adapter->rx_buffer_area[i].m_head = NULL;
2696 			adapter->rx_desc_base[i].buffer_addr = 0;
2697 			return(error);
2698 		}
2699 	}
2700 
2701 	bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
2702 			BUS_DMASYNC_PREWRITE);
2703 
2704 	return(0);
2705 
2706 fail_1:
2707 	bus_dma_tag_destroy(adapter->rxtag);
2708 fail_0:
2709 	adapter->rxtag = NULL;
2710 	kfree(adapter->rx_buffer_area, M_DEVBUF);
2711 	adapter->rx_buffer_area = NULL;
2712 	return(error);
2713 }
2714 
2715 /*********************************************************************
2716  *
2717  *  Allocate and initialize receive structures.
2718  *
2719  **********************************************************************/
2720 static int
2721 em_setup_receive_structures(struct adapter *adapter)
2722 {
2723 	bzero((void *) adapter->rx_desc_base,
2724 	      (sizeof(struct em_rx_desc)) * adapter->num_rx_desc);
2725 
2726 	if (em_allocate_receive_structures(adapter))
2727 		return(ENOMEM);
2728 
2729 	/* Setup our descriptor pointers */
2730 	adapter->next_rx_desc_to_check = 0;
2731 	return(0);
2732 }
2733 
2734 /*********************************************************************
2735  *
2736  *  Enable receive unit.
2737  *
2738  **********************************************************************/
2739 static void
2740 em_initialize_receive_unit(struct adapter *adapter)
2741 {
2742 	uint32_t reg_rctl;
2743 	uint32_t reg_rxcsum;
2744 	struct ifnet *ifp;
2745 	uint64_t bus_addr;
2746 
2747 	INIT_DEBUGOUT("em_initialize_receive_unit: begin");
2748 
2749 	ifp = &adapter->interface_data.ac_if;
2750 
2751 	/* Make sure receives are disabled while setting up the descriptor ring */
2752 	E1000_WRITE_REG(&adapter->hw, RCTL, 0);
2753 
2754 	/* Set the Receive Delay Timer Register */
2755 	E1000_WRITE_REG(&adapter->hw, RDTR,
2756 			adapter->rx_int_delay.value | E1000_RDT_FPDB);
2757 
2758 	if(adapter->hw.mac_type >= em_82540) {
2759 		E1000_WRITE_REG(&adapter->hw, RADV,
2760 				adapter->rx_abs_int_delay.value);
2761 
2762 		/* Set the interrupt throttling rate in 256ns increments */
2763 		if (em_int_throttle_ceil) {
2764 			E1000_WRITE_REG(&adapter->hw, ITR,
2765 				1000000000 / 256 / em_int_throttle_ceil);
2766 		} else {
2767 			E1000_WRITE_REG(&adapter->hw, ITR, 0);
2768 		}
2769 	}
2770 
2771 	/* Setup the Base and Length of the Rx Descriptor Ring */
2772 	bus_addr = adapter->rxdma.dma_paddr;
2773 	E1000_WRITE_REG(&adapter->hw, RDLEN, adapter->num_rx_desc *
2774 			sizeof(struct em_rx_desc));
2775 	E1000_WRITE_REG(&adapter->hw, RDBAH, (uint32_t)(bus_addr >> 32));
2776 	E1000_WRITE_REG(&adapter->hw, RDBAL, (uint32_t)bus_addr);
2777 
2778 	/* Setup the HW Rx Head and Tail Descriptor Pointers */
2779 	E1000_WRITE_REG(&adapter->hw, RDT, adapter->num_rx_desc - 1);
2780 	E1000_WRITE_REG(&adapter->hw, RDH, 0);
2781 
2782 	/* Setup the Receive Control Register */
2783 	reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
2784 		   E1000_RCTL_RDMTS_HALF |
2785 		   (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
2786 
2787 	if (adapter->hw.tbi_compatibility_on == TRUE)
2788 		reg_rctl |= E1000_RCTL_SBP;
2789 
2790 	switch (adapter->rx_buffer_len) {
2791 	default:
2792 	case EM_RXBUFFER_2048:
2793 		reg_rctl |= E1000_RCTL_SZ_2048;
2794 		break;
2795 	case EM_RXBUFFER_4096:
2796 		reg_rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2797 		break;
2798 	case EM_RXBUFFER_8192:
2799 		reg_rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2800 		break;
2801 	case EM_RXBUFFER_16384:
2802 		reg_rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2803 		break;
2804 	}
2805 
2806 	if (ifp->if_mtu > ETHERMTU)
2807 		reg_rctl |= E1000_RCTL_LPE;
2808 
2809 	/* Enable 82543 Receive Checksum Offload for TCP and UDP */
2810 	if ((adapter->hw.mac_type >= em_82543) &&
2811 	    (ifp->if_capenable & IFCAP_RXCSUM)) {
2812 		reg_rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
2813 		reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
2814 		E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum);
2815 	}
2816 
2817 	/* Enable Receives */
2818 	E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
2819 }
2820 
2821 /*********************************************************************
2822  *
2823  *  Free receive related data structures.
2824  *
2825  **********************************************************************/
2826 static void
2827 em_free_receive_structures(struct adapter *adapter)
2828 {
2829 	struct em_buffer *rx_buffer;
2830 	int i;
2831 
2832 	INIT_DEBUGOUT("free_receive_structures: begin");
2833 
2834 	if (adapter->rx_buffer_area != NULL) {
2835 		rx_buffer = adapter->rx_buffer_area;
2836 		for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2837 			if (rx_buffer->map != NULL) {
2838 				bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
2839 				bus_dmamap_destroy(adapter->rxtag, rx_buffer->map);
2840 			}
2841 			if (rx_buffer->m_head != NULL)
2842 				m_freem(rx_buffer->m_head);
2843 			rx_buffer->m_head = NULL;
2844 		}
2845 	}
2846 	if (adapter->rx_buffer_area != NULL) {
2847 		kfree(adapter->rx_buffer_area, M_DEVBUF);
2848 		adapter->rx_buffer_area = NULL;
2849 	}
2850 	if (adapter->rxtag != NULL) {
2851 		bus_dma_tag_destroy(adapter->rxtag);
2852 		adapter->rxtag = NULL;
2853 	}
2854 }
2855 
2856 /*********************************************************************
2857  *
2858  *  This routine executes in interrupt context. It replenishes
2859  *  the mbufs in the descriptor and sends data which has been
2860  *  dma'ed into host memory to upper layer.
2861  *
2862  *  We loop at most count times if count is > 0, or until done if
2863  *  count < 0.
2864  *
2865  *********************************************************************/
2866 static void
2867 em_process_receive_interrupts(struct adapter *adapter, int count)
2868 {
2869 	struct ifnet *ifp;
2870 	struct mbuf *mp;
2871 	uint8_t accept_frame = 0;
2872 	uint8_t eop = 0;
2873 	uint16_t len, desc_len, prev_len_adj;
2874 	int i;
2875 
2876 	/* Pointer to the receive descriptor being examined. */
2877 	struct em_rx_desc *current_desc;
2878 
2879 	ifp = &adapter->interface_data.ac_if;
2880 	i = adapter->next_rx_desc_to_check;
2881 	current_desc = &adapter->rx_desc_base[i];
2882 
2883 	bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
2884 			BUS_DMASYNC_POSTREAD);
2885 
2886 	if (!((current_desc->status) & E1000_RXD_STAT_DD))
2887 		return;
2888 
2889 	while ((current_desc->status & E1000_RXD_STAT_DD) && (count != 0)) {
2890 		logif(pkt_receive);
2891 		mp = adapter->rx_buffer_area[i].m_head;
2892 		bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map,
2893 				BUS_DMASYNC_POSTREAD);
2894 		bus_dmamap_unload(adapter->rxtag,
2895 				  adapter->rx_buffer_area[i].map);
2896 
2897 		accept_frame = 1;
2898 		prev_len_adj = 0;
2899 		desc_len = le16toh(current_desc->length);
2900 		if (current_desc->status & E1000_RXD_STAT_EOP) {
2901 			count--;
2902 			eop = 1;
2903 			if (desc_len < ETHER_CRC_LEN) {
2904 				len = 0;
2905 				prev_len_adj = ETHER_CRC_LEN - desc_len;
2906 			} else {
2907 				len = desc_len - ETHER_CRC_LEN;
2908 			}
2909 		} else {
2910 			eop = 0;
2911 			len = desc_len;
2912 		}
2913 
2914 		if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2915 			uint8_t last_byte;
2916 			uint32_t pkt_len = desc_len;
2917 
2918 			if (adapter->fmp != NULL)
2919 				pkt_len += adapter->fmp->m_pkthdr.len;
2920 
2921 			last_byte = *(mtod(mp, caddr_t) + desc_len - 1);
2922 
2923 			if (TBI_ACCEPT(&adapter->hw, current_desc->status,
2924 				       current_desc->errors,
2925 				       pkt_len, last_byte)) {
2926 				em_tbi_adjust_stats(&adapter->hw,
2927 						    &adapter->stats,
2928 						    pkt_len,
2929 						    adapter->hw.mac_addr);
2930 				if (len > 0)
2931 					len--;
2932 			} else {
2933 				accept_frame = 0;
2934 			}
2935 		}
2936 
2937 		if (accept_frame) {
2938 			if (em_get_buf(i, adapter, NULL, MB_DONTWAIT) == ENOBUFS) {
2939 				adapter->dropped_pkts++;
2940 				em_get_buf(i, adapter, mp, MB_DONTWAIT);
2941 				if (adapter->fmp != NULL)
2942 					m_freem(adapter->fmp);
2943 				adapter->fmp = NULL;
2944 				adapter->lmp = NULL;
2945 				goto skip;
2946 			}
2947 
2948 			/* Assign correct length to the current fragment */
2949 			mp->m_len = len;
2950 
2951 			if (adapter->fmp == NULL) {
2952 				mp->m_pkthdr.len = len;
2953 				adapter->fmp = mp;	 /* Store the first mbuf */
2954 				adapter->lmp = mp;
2955 			} else {
2956 				/* Chain mbuf's together */
2957 				/*
2958 				 * Adjust length of previous mbuf in chain if we
2959 				 * received less than 4 bytes in the last descriptor.
2960 				 */
2961 				if (prev_len_adj > 0) {
2962 					adapter->lmp->m_len -= prev_len_adj;
2963 					adapter->fmp->m_pkthdr.len -= prev_len_adj;
2964 				}
2965 				adapter->lmp->m_next = mp;
2966 				adapter->lmp = adapter->lmp->m_next;
2967 				adapter->fmp->m_pkthdr.len += len;
2968 			}
2969 
2970 			if (eop) {
2971 				adapter->fmp->m_pkthdr.rcvif = ifp;
2972 				ifp->if_ipackets++;
2973 
2974 				em_receive_checksum(adapter, current_desc,
2975 						    adapter->fmp);
2976 				if (current_desc->status & E1000_RXD_STAT_VP) {
2977 					VLAN_INPUT_TAG(adapter->fmp,
2978 						       (current_desc->special &
2979 							E1000_RXD_SPC_VLAN_MASK));
2980 				} else {
2981 					ifp->if_input(ifp, adapter->fmp);
2982 				}
2983 				adapter->fmp = NULL;
2984 				adapter->lmp = NULL;
2985 			}
2986 		} else {
2987 			adapter->dropped_pkts++;
2988 			em_get_buf(i, adapter, mp, MB_DONTWAIT);
2989 			if (adapter->fmp != NULL)
2990 				m_freem(adapter->fmp);
2991 			adapter->fmp = NULL;
2992 			adapter->lmp = NULL;
2993 		}
2994 
2995 skip:
2996 		/* Zero out the receive descriptors status  */
2997 		current_desc->status = 0;
2998 
2999 		/* Advance our pointers to the next descriptor */
3000 		if (++i == adapter->num_rx_desc) {
3001 			i = 0;
3002 			current_desc = adapter->rx_desc_base;
3003 		} else {
3004 			current_desc++;
3005 		}
3006 	}
3007 
3008 	bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
3009 			BUS_DMASYNC_PREWRITE);
3010 
3011 	adapter->next_rx_desc_to_check = i;
3012 
3013 	/* Advance the E1000's Receive Queue #0  "Tail Pointer". */
3014 	if (--i < 0)
3015 		i = adapter->num_rx_desc - 1;
3016 
3017 	E1000_WRITE_REG(&adapter->hw, RDT, i);
3018 }
3019 
3020 /*********************************************************************
3021  *
3022  *  Verify that the hardware indicated that the checksum is valid.
3023  *  Inform the stack about the status of checksum so that stack
3024  *  doesn't spend time verifying the checksum.
3025  *
3026  *********************************************************************/
3027 static void
3028 em_receive_checksum(struct adapter *adapter,
3029 		    struct em_rx_desc *rx_desc,
3030 		    struct mbuf *mp)
3031 {
3032 	/* 82543 or newer only */
3033 	if ((adapter->hw.mac_type < em_82543) ||
3034 	    /* Ignore Checksum bit is set */
3035 	    (rx_desc->status & E1000_RXD_STAT_IXSM)) {
3036 		mp->m_pkthdr.csum_flags = 0;
3037 		return;
3038 	}
3039 
3040 	if (rx_desc->status & E1000_RXD_STAT_IPCS) {
3041 		/* Did it pass? */
3042 		if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
3043 			/* IP Checksum Good */
3044 			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
3045 			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
3046 		} else {
3047 			mp->m_pkthdr.csum_flags = 0;
3048 		}
3049 	}
3050 
3051 	if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
3052 		/* Did it pass? */
3053 		if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
3054 			mp->m_pkthdr.csum_flags |=
3055 			(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
3056 			mp->m_pkthdr.csum_data = htons(0xffff);
3057 		}
3058 	}
3059 }
3060 
3061 
3062 static void
3063 em_enable_vlans(struct adapter *adapter)
3064 {
3065 	uint32_t ctrl;
3066 
3067 	E1000_WRITE_REG(&adapter->hw, VET, ETHERTYPE_VLAN);
3068 
3069 	ctrl = E1000_READ_REG(&adapter->hw, CTRL);
3070 	ctrl |= E1000_CTRL_VME;
3071 	E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
3072 }
3073 
3074 static void
3075 em_disable_vlans(struct adapter *adapter)
3076 {
3077         uint32_t ctrl;
3078 
3079 	ctrl = E1000_READ_REG(&adapter->hw, CTRL);
3080 	ctrl &= ~E1000_CTRL_VME;
3081 	E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
3082 }
3083 
3084 /*
3085  * note: we must call bus_enable_intr() prior to enabling the hardware
3086  * interrupt and bus_disable_intr() after disabling the hardware interrupt
3087  * in order to avoid handler execution races from scheduled interrupt
3088  * threads.
3089  */
3090 static void
3091 em_enable_intr(struct adapter *adapter)
3092 {
3093 	struct ifnet *ifp = &adapter->interface_data.ac_if;
3094 
3095 	if ((ifp->if_flags & IFF_POLLING) == 0) {
3096 		lwkt_serialize_handler_enable(ifp->if_serializer);
3097 		E1000_WRITE_REG(&adapter->hw, IMS, (IMS_ENABLE_MASK));
3098 	}
3099 }
3100 
3101 static void
3102 em_disable_intr(struct adapter *adapter)
3103 {
3104 	/*
3105 	 * The first version of 82542 had an errata where when link was
3106 	 * forced it would stay up even up even if the cable was disconnected.
3107 	 * Sequence errors were used to detect the disconnect and then the
3108 	 * driver would unforce the link.  This code in the in the ISR.  For
3109 	 * this to work correctly the Sequence error interrupt had to be
3110 	 * enabled all the time.
3111 	 */
3112 	if (adapter->hw.mac_type == em_82542_rev2_0) {
3113 		E1000_WRITE_REG(&adapter->hw, IMC,
3114 				(0xffffffff & ~E1000_IMC_RXSEQ));
3115 	} else {
3116 		E1000_WRITE_REG(&adapter->hw, IMC, 0xffffffff);
3117 	}
3118 
3119 	lwkt_serialize_handler_disable(adapter->interface_data.ac_if.if_serializer);
3120 }
3121 
3122 static int
3123 em_is_valid_ether_addr(uint8_t *addr)
3124 {
3125 	char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
3126 
3127 	if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN)))
3128 		return(FALSE);
3129 	else
3130 		return(TRUE);
3131 }
3132 
3133 void
3134 em_write_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value)
3135 {
3136 	pci_write_config(((struct em_osdep *)hw->back)->dev, reg, *value, 2);
3137 }
3138 
3139 void
3140 em_read_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value)
3141 {
3142 	*value = pci_read_config(((struct em_osdep *)hw->back)->dev, reg, 2);
3143 }
3144 
3145 void
3146 em_pci_set_mwi(struct em_hw *hw)
3147 {
3148 	pci_write_config(((struct em_osdep *)hw->back)->dev, PCIR_COMMAND,
3149 			 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE), 2);
3150 }
3151 
3152 void
3153 em_pci_clear_mwi(struct em_hw *hw)
3154 {
3155 	pci_write_config(((struct em_osdep *)hw->back)->dev, PCIR_COMMAND,
3156 			 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE), 2);
3157 }
3158 
3159 uint32_t
3160 em_read_reg_io(struct em_hw *hw, uint32_t offset)
3161 {
3162 	bus_space_write_4(hw->reg_io_tag, hw->reg_io_handle, 0, offset);
3163 	return(bus_space_read_4(hw->reg_io_tag, hw->reg_io_handle, 4));
3164 }
3165 
3166 void
3167 em_write_reg_io(struct em_hw *hw, uint32_t offset, uint32_t value)
3168 {
3169 	bus_space_write_4(hw->reg_io_tag, hw->reg_io_handle, 0, offset);
3170 	bus_space_write_4(hw->reg_io_tag, hw->reg_io_handle, 4, value);
3171 }
3172 
3173 /*********************************************************************
3174  * 82544 Coexistence issue workaround.
3175  *    There are 2 issues.
3176  *	1. Transmit Hang issue.
3177  *    To detect this issue, following equation can be used...
3178  *          SIZE[3:0] + ADDR[2:0] = SUM[3:0].
3179  *          If SUM[3:0] is in between 1 to 4, we will have this issue.
3180  *
3181  *	2. DAC issue.
3182  *    To detect this issue, following equation can be used...
3183  *          SIZE[3:0] + ADDR[2:0] = SUM[3:0].
3184  *          If SUM[3:0] is in between 9 to c, we will have this issue.
3185  *
3186  *
3187  *    WORKAROUND:
3188  *          Make sure we do not have ending address as 1,2,3,4(Hang) or
3189  *          9,a,b,c (DAC)
3190  *
3191 *************************************************************************/
3192 static uint32_t
3193 em_fill_descriptors(uint64_t address, uint32_t length, PDESC_ARRAY desc_array)
3194 {
3195 	/* Since issue is sensitive to length and address.*/
3196 	/* Let us first check the address...*/
3197 	uint32_t safe_terminator;
3198 	if (length <= 4) {
3199 		desc_array->descriptor[0].address = address;
3200 		desc_array->descriptor[0].length = length;
3201 		desc_array->elements = 1;
3202 		return(desc_array->elements);
3203 	}
3204 	safe_terminator = (uint32_t)((((uint32_t)address & 0x7) + (length & 0xF)) & 0xF);
3205 	/* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */
3206 	if (safe_terminator == 0 ||
3207 	    (safe_terminator > 4 && safe_terminator < 9) ||
3208 	    (safe_terminator > 0xC && safe_terminator <= 0xF)) {
3209 		desc_array->descriptor[0].address = address;
3210 		desc_array->descriptor[0].length = length;
3211 		desc_array->elements = 1;
3212 		return(desc_array->elements);
3213 	}
3214 
3215 	desc_array->descriptor[0].address = address;
3216 	desc_array->descriptor[0].length = length - 4;
3217 	desc_array->descriptor[1].address = address + (length - 4);
3218 	desc_array->descriptor[1].length = 4;
3219 	desc_array->elements = 2;
3220 	return(desc_array->elements);
3221 }
3222 
3223 /**********************************************************************
3224  *
3225  *  Update the board statistics counters.
3226  *
3227  **********************************************************************/
3228 static void
3229 em_update_stats_counters(struct adapter *adapter)
3230 {
3231 	struct ifnet   *ifp;
3232 
3233 	if (adapter->hw.media_type == em_media_type_copper ||
3234 	    (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)) {
3235 		adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, SYMERRS);
3236 		adapter->stats.sec += E1000_READ_REG(&adapter->hw, SEC);
3237 	}
3238 	adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, CRCERRS);
3239 	adapter->stats.mpc += E1000_READ_REG(&adapter->hw, MPC);
3240 	adapter->stats.scc += E1000_READ_REG(&adapter->hw, SCC);
3241 	adapter->stats.ecol += E1000_READ_REG(&adapter->hw, ECOL);
3242 
3243 	adapter->stats.mcc += E1000_READ_REG(&adapter->hw, MCC);
3244 	adapter->stats.latecol += E1000_READ_REG(&adapter->hw, LATECOL);
3245 	adapter->stats.colc += E1000_READ_REG(&adapter->hw, COLC);
3246 	adapter->stats.dc += E1000_READ_REG(&adapter->hw, DC);
3247 	adapter->stats.rlec += E1000_READ_REG(&adapter->hw, RLEC);
3248 	adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, XONRXC);
3249 	adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, XONTXC);
3250 	adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, XOFFRXC);
3251 	adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, XOFFTXC);
3252 	adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, FCRUC);
3253 	adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, PRC64);
3254 	adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, PRC127);
3255 	adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, PRC255);
3256 	adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, PRC511);
3257 	adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, PRC1023);
3258 	adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, PRC1522);
3259 	adapter->stats.gprc += E1000_READ_REG(&adapter->hw, GPRC);
3260 	adapter->stats.bprc += E1000_READ_REG(&adapter->hw, BPRC);
3261 	adapter->stats.mprc += E1000_READ_REG(&adapter->hw, MPRC);
3262 	adapter->stats.gptc += E1000_READ_REG(&adapter->hw, GPTC);
3263 
3264 	/* For the 64-bit byte counters the low dword must be read first. */
3265 	/* Both registers clear on the read of the high dword */
3266 
3267 	adapter->stats.gorcl += E1000_READ_REG(&adapter->hw, GORCL);
3268 	adapter->stats.gorch += E1000_READ_REG(&adapter->hw, GORCH);
3269 	adapter->stats.gotcl += E1000_READ_REG(&adapter->hw, GOTCL);
3270 	adapter->stats.gotch += E1000_READ_REG(&adapter->hw, GOTCH);
3271 
3272 	adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, RNBC);
3273 	adapter->stats.ruc += E1000_READ_REG(&adapter->hw, RUC);
3274 	adapter->stats.rfc += E1000_READ_REG(&adapter->hw, RFC);
3275 	adapter->stats.roc += E1000_READ_REG(&adapter->hw, ROC);
3276 	adapter->stats.rjc += E1000_READ_REG(&adapter->hw, RJC);
3277 
3278 	adapter->stats.torl += E1000_READ_REG(&adapter->hw, TORL);
3279 	adapter->stats.torh += E1000_READ_REG(&adapter->hw, TORH);
3280 	adapter->stats.totl += E1000_READ_REG(&adapter->hw, TOTL);
3281 	adapter->stats.toth += E1000_READ_REG(&adapter->hw, TOTH);
3282 
3283 	adapter->stats.tpr += E1000_READ_REG(&adapter->hw, TPR);
3284 	adapter->stats.tpt += E1000_READ_REG(&adapter->hw, TPT);
3285 	adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, PTC64);
3286 	adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, PTC127);
3287 	adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, PTC255);
3288 	adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, PTC511);
3289 	adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, PTC1023);
3290 	adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, PTC1522);
3291 	adapter->stats.mptc += E1000_READ_REG(&adapter->hw, MPTC);
3292 	adapter->stats.bptc += E1000_READ_REG(&adapter->hw, BPTC);
3293 
3294 	if (adapter->hw.mac_type >= em_82543) {
3295 		adapter->stats.algnerrc +=
3296 		    E1000_READ_REG(&adapter->hw, ALGNERRC);
3297 		adapter->stats.rxerrc +=
3298 		    E1000_READ_REG(&adapter->hw, RXERRC);
3299 		adapter->stats.tncrs +=
3300 		    E1000_READ_REG(&adapter->hw, TNCRS);
3301 		adapter->stats.cexterr +=
3302 		    E1000_READ_REG(&adapter->hw, CEXTERR);
3303 		adapter->stats.tsctc +=
3304 		    E1000_READ_REG(&adapter->hw, TSCTC);
3305 		adapter->stats.tsctfc +=
3306 		    E1000_READ_REG(&adapter->hw, TSCTFC);
3307 	}
3308 	ifp = &adapter->interface_data.ac_if;
3309 
3310 	/* Fill out the OS statistics structure */
3311 	ifp->if_collisions = adapter->stats.colc;
3312 
3313 	/* Rx Errors */
3314 	ifp->if_ierrors =
3315 		adapter->dropped_pkts +
3316 		adapter->stats.rxerrc +
3317 		adapter->stats.crcerrs +
3318 		adapter->stats.algnerrc +
3319 		adapter->stats.ruc + adapter->stats.roc +
3320 		adapter->stats.mpc + adapter->stats.cexterr +
3321 		adapter->rx_overruns;
3322 
3323 	/* Tx Errors */
3324 	ifp->if_oerrors = adapter->stats.ecol + adapter->stats.latecol +
3325 			  adapter->watchdog_timeouts;
3326 }
3327 
3328 
3329 /**********************************************************************
3330  *
3331  *  This routine is called only when em_display_debug_stats is enabled.
3332  *  This routine provides a way to take a look at important statistics
3333  *  maintained by the driver and hardware.
3334  *
3335  **********************************************************************/
3336 static void
3337 em_print_debug_info(struct adapter *adapter)
3338 {
3339 	device_t dev= adapter->dev;
3340 	uint8_t *hw_addr = adapter->hw.hw_addr;
3341 
3342 	device_printf(dev, "Adapter hardware address = %p \n", hw_addr);
3343 	device_printf(dev, "CTRL  = 0x%x\n",
3344 		      E1000_READ_REG(&adapter->hw, CTRL));
3345 	device_printf(dev, "RCTL  = 0x%x PS=(0x8402)\n",
3346 		      E1000_READ_REG(&adapter->hw, RCTL));
3347 	device_printf(dev, "Packet buffer = Tx=%dk Rx=%dk\n",
3348 		      ((E1000_READ_REG(&adapter->hw, PBA) & 0xffff0000) >> 16),
3349 		      (E1000_READ_REG(&adapter->hw, PBA) & 0xffff));
3350 	device_printf(dev, "Flow control watermarks high = %d low = %d\n",
3351 		      adapter->hw.fc_high_water, adapter->hw.fc_low_water);
3352 	device_printf(dev, "tx_int_delay = %d, tx_abs_int_delay = %d\n",
3353 		      E1000_READ_REG(&adapter->hw, TIDV),
3354 		      E1000_READ_REG(&adapter->hw, TADV));
3355 	device_printf(dev, "rx_int_delay = %d, rx_abs_int_delay = %d\n",
3356 		      E1000_READ_REG(&adapter->hw, RDTR),
3357 		      E1000_READ_REG(&adapter->hw, RADV));
3358 	device_printf(dev, "fifo workaround = %lld, fifo_reset = %lld\n",
3359 		      (long long)adapter->tx_fifo_wrk_cnt,
3360 		      (long long)adapter->tx_fifo_reset_cnt);
3361 	device_printf(dev, "hw tdh = %d, hw tdt = %d\n",
3362 		      E1000_READ_REG(&adapter->hw, TDH),
3363 		      E1000_READ_REG(&adapter->hw, TDT));
3364 	device_printf(dev, "Num Tx descriptors avail = %d\n",
3365 		      adapter->num_tx_desc_avail);
3366 	device_printf(dev, "Tx Descriptors not avail1 = %ld\n",
3367 		      adapter->no_tx_desc_avail1);
3368 	device_printf(dev, "Tx Descriptors not avail2 = %ld\n",
3369 		      adapter->no_tx_desc_avail2);
3370 	device_printf(dev, "Std mbuf failed = %ld\n",
3371 		      adapter->mbuf_alloc_failed);
3372 	device_printf(dev, "Std mbuf cluster failed = %ld\n",
3373 		      adapter->mbuf_cluster_failed);
3374 	device_printf(dev, "Driver dropped packets = %ld\n",
3375 		      adapter->dropped_pkts);
3376 }
3377 
3378 static void
3379 em_print_hw_stats(struct adapter *adapter)
3380 {
3381 	device_t dev= adapter->dev;
3382 
3383 	device_printf(dev, "Adapter: %p\n", adapter);
3384 
3385 	device_printf(dev, "Excessive collisions = %lld\n",
3386 		      (long long)adapter->stats.ecol);
3387 	device_printf(dev, "Symbol errors = %lld\n",
3388 		      (long long)adapter->stats.symerrs);
3389 	device_printf(dev, "Sequence errors = %lld\n",
3390 		      (long long)adapter->stats.sec);
3391 	device_printf(dev, "Defer count = %lld\n",
3392 		      (long long)adapter->stats.dc);
3393 
3394 	device_printf(dev, "Missed Packets = %lld\n",
3395 		      (long long)adapter->stats.mpc);
3396 	device_printf(dev, "Receive No Buffers = %lld\n",
3397 		      (long long)adapter->stats.rnbc);
3398 	device_printf(dev, "Receive length errors = %lld\n",
3399 		      (long long)adapter->stats.rlec);
3400 	device_printf(dev, "Receive errors = %lld\n",
3401 		      (long long)adapter->stats.rxerrc);
3402 	device_printf(dev, "Crc errors = %lld\n",
3403 		      (long long)adapter->stats.crcerrs);
3404 	device_printf(dev, "Alignment errors = %lld\n",
3405 		      (long long)adapter->stats.algnerrc);
3406 	device_printf(dev, "Carrier extension errors = %lld\n",
3407 		      (long long)adapter->stats.cexterr);
3408 	device_printf(dev, "RX overruns = %lu\n", adapter->rx_overruns);
3409 	device_printf(dev, "Watchdog timeouts = %lu\n",
3410 		      adapter->watchdog_timeouts);
3411 
3412 	device_printf(dev, "XON Rcvd = %lld\n",
3413 		      (long long)adapter->stats.xonrxc);
3414 	device_printf(dev, "XON Xmtd = %lld\n",
3415 		      (long long)adapter->stats.xontxc);
3416 	device_printf(dev, "XOFF Rcvd = %lld\n",
3417 		      (long long)adapter->stats.xoffrxc);
3418 	device_printf(dev, "XOFF Xmtd = %lld\n",
3419 		      (long long)adapter->stats.xofftxc);
3420 
3421 	device_printf(dev, "Good Packets Rcvd = %lld\n",
3422 		      (long long)adapter->stats.gprc);
3423 	device_printf(dev, "Good Packets Xmtd = %lld\n",
3424 		      (long long)adapter->stats.gptc);
3425 }
3426 
3427 static int
3428 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
3429 {
3430 	int error;
3431 	int result;
3432 	struct adapter *adapter;
3433 
3434 	result = -1;
3435 	error = sysctl_handle_int(oidp, &result, 0, req);
3436 
3437 	if (error || !req->newptr)
3438 		return(error);
3439 
3440 	if (result == 1) {
3441 		adapter = (struct adapter *)arg1;
3442 		em_print_debug_info(adapter);
3443 	}
3444 
3445 	return(error);
3446 }
3447 
3448 static int
3449 em_sysctl_stats(SYSCTL_HANDLER_ARGS)
3450 {
3451 	int error;
3452 	int result;
3453 	struct adapter *adapter;
3454 
3455 	result = -1;
3456 	error = sysctl_handle_int(oidp, &result, 0, req);
3457 
3458 	if (error || !req->newptr)
3459 		return(error);
3460 
3461 	if (result == 1) {
3462 		adapter = (struct adapter *)arg1;
3463 		em_print_hw_stats(adapter);
3464 	}
3465 
3466 	return(error);
3467 }
3468 
3469 static int
3470 em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
3471 {
3472 	struct em_int_delay_info *info;
3473 	struct adapter *adapter;
3474 	uint32_t regval;
3475 	int error;
3476 	int usecs;
3477 	int ticks;
3478 
3479 	info = (struct em_int_delay_info *)arg1;
3480 	adapter = info->adapter;
3481 	usecs = info->value;
3482 	error = sysctl_handle_int(oidp, &usecs, 0, req);
3483 	if (error != 0 || req->newptr == NULL)
3484 		return(error);
3485 	if (usecs < 0 || usecs > E1000_TICKS_TO_USECS(65535))
3486 		return(EINVAL);
3487 	info->value = usecs;
3488 	ticks = E1000_USECS_TO_TICKS(usecs);
3489 
3490 	lwkt_serialize_enter(adapter->interface_data.ac_if.if_serializer);
3491 	regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
3492 	regval = (regval & ~0xffff) | (ticks & 0xffff);
3493 	/* Handle a few special cases. */
3494 	switch (info->offset) {
3495 	case E1000_RDTR:
3496 	case E1000_82542_RDTR:
3497 		regval |= E1000_RDT_FPDB;
3498 		break;
3499 	case E1000_TIDV:
3500 	case E1000_82542_TIDV:
3501 		if (ticks == 0) {
3502 			adapter->txd_cmd &= ~E1000_TXD_CMD_IDE;
3503 			/* Don't write 0 into the TIDV register. */
3504 			regval++;
3505 		} else
3506 			adapter->txd_cmd |= E1000_TXD_CMD_IDE;
3507 		break;
3508 	}
3509 	E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
3510 	lwkt_serialize_exit(adapter->interface_data.ac_if.if_serializer);
3511 	return(0);
3512 }
3513 
3514 static void
3515 em_add_int_delay_sysctl(struct adapter *adapter, const char *name,
3516 			const char *description, struct em_int_delay_info *info,
3517 			int offset, int value)
3518 {
3519 	info->adapter = adapter;
3520 	info->offset = offset;
3521 	info->value = value;
3522 	SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
3523 			SYSCTL_CHILDREN(adapter->sysctl_tree),
3524 			OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
3525 			info, 0, em_sysctl_int_delay, "I", description);
3526 }
3527 
3528 static int
3529 em_sysctl_int_throttle(SYSCTL_HANDLER_ARGS)
3530 {
3531 	struct adapter *adapter = (void *)arg1;
3532 	int error;
3533 	int throttle;
3534 
3535 	throttle = em_int_throttle_ceil;
3536 	error = sysctl_handle_int(oidp, &throttle, 0, req);
3537 	if (error || req->newptr == NULL)
3538 		return error;
3539 	if (throttle < 0 || throttle > 1000000000 / 256)
3540 		return EINVAL;
3541 	if (throttle) {
3542 		/*
3543 		 * Set the interrupt throttling rate in 256ns increments,
3544 		 * recalculate sysctl value assignment to get exact frequency.
3545 		 */
3546 		throttle = 1000000000 / 256 / throttle;
3547 		lwkt_serialize_enter(adapter->interface_data.ac_if.if_serializer);
3548 		em_int_throttle_ceil = 1000000000 / 256 / throttle;
3549 		E1000_WRITE_REG(&adapter->hw, ITR, throttle);
3550 		lwkt_serialize_exit(adapter->interface_data.ac_if.if_serializer);
3551 	} else {
3552 		lwkt_serialize_enter(adapter->interface_data.ac_if.if_serializer);
3553 		em_int_throttle_ceil = 0;
3554 		E1000_WRITE_REG(&adapter->hw, ITR, 0);
3555 		lwkt_serialize_exit(adapter->interface_data.ac_if.if_serializer);
3556 	}
3557 	device_printf(adapter->dev, "Interrupt moderation set to %d/sec\n",
3558 			em_int_throttle_ceil);
3559 	return 0;
3560 }
3561 
3562