if_em.c revision 195168
1/******************************************************************************
2
3  Copyright (c) 2001-2009, Intel Corporation
4  All rights reserved.
5
6  Redistribution and use in source and binary forms, with or without
7  modification, are permitted provided that the following conditions are met:
8
9   1. Redistributions of source code must retain the above copyright notice,
10      this list of conditions and the following disclaimer.
11
12   2. Redistributions in binary form must reproduce the above copyright
13      notice, this list of conditions and the following disclaimer in the
14      documentation and/or other materials provided with the distribution.
15
16   3. Neither the name of the Intel Corporation nor the names of its
17      contributors may be used to endorse or promote products derived from
18      this software without specific prior written permission.
19
20  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: head/sys/dev/e1000/if_em.c 195168 2009-06-29 18:17:10Z jfv $*/
34
35#ifdef HAVE_KERNEL_OPTION_HEADERS
36#include "opt_device_polling.h"
37#include "opt_inet.h"
38#endif
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#if __FreeBSD_version >= 800000
43#include <sys/buf_ring.h>
44#endif
45#include <sys/bus.h>
46#include <sys/endian.h>
47#include <sys/kernel.h>
48#include <sys/kthread.h>
49#include <sys/malloc.h>
50#include <sys/mbuf.h>
51#include <sys/module.h>
52#include <sys/rman.h>
53#include <sys/socket.h>
54#include <sys/sockio.h>
55#include <sys/sysctl.h>
56#include <sys/taskqueue.h>
57#if __FreeBSD_version >= 700029
58#include <sys/eventhandler.h>
59#endif
60#include <machine/bus.h>
61#include <machine/resource.h>
62
63#include <net/bpf.h>
64#include <net/ethernet.h>
65#include <net/if.h>
66#include <net/if_arp.h>
67#include <net/if_dl.h>
68#include <net/if_media.h>
69
70#include <net/if_types.h>
71#include <net/if_vlan_var.h>
72
73#include <netinet/in_systm.h>
74#include <netinet/in.h>
75#include <netinet/if_ether.h>
76#include <netinet/ip.h>
77#include <netinet/ip6.h>
78#include <netinet/tcp.h>
79#include <netinet/udp.h>
80
81#include <machine/in_cksum.h>
82#include <dev/pci/pcivar.h>
83#include <dev/pci/pcireg.h>
84
85#include "e1000_api.h"
86#include "e1000_82571.h"
87#include "if_em.h"
88
89/*********************************************************************
90 *  Set this to one to display debug statistics
91 *********************************************************************/
92int	em_display_debug_stats = 0;
93
94/*********************************************************************
95 *  Driver version:
96 *********************************************************************/
97char em_driver_version[] = "6.9.14";
98
99
100/*********************************************************************
101 *  PCI Device ID Table
102 *
103 *  Used by probe to select devices to load on
104 *  Last field stores an index into e1000_strings
105 *  Last entry must be all 0s
106 *
107 *  { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
108 *********************************************************************/
109
110static em_vendor_info_t em_vendor_info_array[] =
111{
112	/* Intel(R) PRO/1000 Network Connection */
113	{ 0x8086, E1000_DEV_ID_82540EM,		PCI_ANY_ID, PCI_ANY_ID, 0},
114	{ 0x8086, E1000_DEV_ID_82540EM_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
115	{ 0x8086, E1000_DEV_ID_82540EP,		PCI_ANY_ID, PCI_ANY_ID, 0},
116	{ 0x8086, E1000_DEV_ID_82540EP_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
117	{ 0x8086, E1000_DEV_ID_82540EP_LP,	PCI_ANY_ID, PCI_ANY_ID, 0},
118
119	{ 0x8086, E1000_DEV_ID_82541EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
120	{ 0x8086, E1000_DEV_ID_82541ER,		PCI_ANY_ID, PCI_ANY_ID, 0},
121	{ 0x8086, E1000_DEV_ID_82541ER_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
122	{ 0x8086, E1000_DEV_ID_82541EI_MOBILE,	PCI_ANY_ID, PCI_ANY_ID, 0},
123	{ 0x8086, E1000_DEV_ID_82541GI,		PCI_ANY_ID, PCI_ANY_ID, 0},
124	{ 0x8086, E1000_DEV_ID_82541GI_LF,	PCI_ANY_ID, PCI_ANY_ID, 0},
125	{ 0x8086, E1000_DEV_ID_82541GI_MOBILE,	PCI_ANY_ID, PCI_ANY_ID, 0},
126
127	{ 0x8086, E1000_DEV_ID_82542,		PCI_ANY_ID, PCI_ANY_ID, 0},
128
129	{ 0x8086, E1000_DEV_ID_82543GC_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
130	{ 0x8086, E1000_DEV_ID_82543GC_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
131
132	{ 0x8086, E1000_DEV_ID_82544EI_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
133	{ 0x8086, E1000_DEV_ID_82544EI_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
134	{ 0x8086, E1000_DEV_ID_82544GC_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
135	{ 0x8086, E1000_DEV_ID_82544GC_LOM,	PCI_ANY_ID, PCI_ANY_ID, 0},
136
137	{ 0x8086, E1000_DEV_ID_82545EM_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
138	{ 0x8086, E1000_DEV_ID_82545EM_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
139	{ 0x8086, E1000_DEV_ID_82545GM_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
140	{ 0x8086, E1000_DEV_ID_82545GM_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
141	{ 0x8086, E1000_DEV_ID_82545GM_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
142
143	{ 0x8086, E1000_DEV_ID_82546EB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
144	{ 0x8086, E1000_DEV_ID_82546EB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
145	{ 0x8086, E1000_DEV_ID_82546EB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
146	{ 0x8086, E1000_DEV_ID_82546GB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
147	{ 0x8086, E1000_DEV_ID_82546GB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
148	{ 0x8086, E1000_DEV_ID_82546GB_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
149	{ 0x8086, E1000_DEV_ID_82546GB_PCIE,	PCI_ANY_ID, PCI_ANY_ID, 0},
150	{ 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
151	{ 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3,
152						PCI_ANY_ID, PCI_ANY_ID, 0},
153
154	{ 0x8086, E1000_DEV_ID_82547EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
155	{ 0x8086, E1000_DEV_ID_82547EI_MOBILE,	PCI_ANY_ID, PCI_ANY_ID, 0},
156	{ 0x8086, E1000_DEV_ID_82547GI,		PCI_ANY_ID, PCI_ANY_ID, 0},
157
158	{ 0x8086, E1000_DEV_ID_82571EB_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
159	{ 0x8086, E1000_DEV_ID_82571EB_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
160	{ 0x8086, E1000_DEV_ID_82571EB_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
161	{ 0x8086, E1000_DEV_ID_82571EB_SERDES_DUAL,
162						PCI_ANY_ID, PCI_ANY_ID, 0},
163	{ 0x8086, E1000_DEV_ID_82571EB_SERDES_QUAD,
164						PCI_ANY_ID, PCI_ANY_ID, 0},
165	{ 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER,
166						PCI_ANY_ID, PCI_ANY_ID, 0},
167	{ 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LP,
168						PCI_ANY_ID, PCI_ANY_ID, 0},
169	{ 0x8086, E1000_DEV_ID_82571EB_QUAD_FIBER,
170						PCI_ANY_ID, PCI_ANY_ID, 0},
171	{ 0x8086, E1000_DEV_ID_82571PT_QUAD_COPPER,
172						PCI_ANY_ID, PCI_ANY_ID, 0},
173	{ 0x8086, E1000_DEV_ID_82572EI_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
174	{ 0x8086, E1000_DEV_ID_82572EI_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
175	{ 0x8086, E1000_DEV_ID_82572EI_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
176	{ 0x8086, E1000_DEV_ID_82572EI,		PCI_ANY_ID, PCI_ANY_ID, 0},
177
178	{ 0x8086, E1000_DEV_ID_82573E,		PCI_ANY_ID, PCI_ANY_ID, 0},
179	{ 0x8086, E1000_DEV_ID_82573E_IAMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
180	{ 0x8086, E1000_DEV_ID_82573L,		PCI_ANY_ID, PCI_ANY_ID, 0},
181	{ 0x8086, E1000_DEV_ID_82583V,		PCI_ANY_ID, PCI_ANY_ID, 0},
182	{ 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT,
183						PCI_ANY_ID, PCI_ANY_ID, 0},
184	{ 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT,
185						PCI_ANY_ID, PCI_ANY_ID, 0},
186	{ 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT,
187						PCI_ANY_ID, PCI_ANY_ID, 0},
188	{ 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT,
189						PCI_ANY_ID, PCI_ANY_ID, 0},
190	{ 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
191	{ 0x8086, E1000_DEV_ID_ICH8_IGP_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
192	{ 0x8086, E1000_DEV_ID_ICH8_IGP_C,	PCI_ANY_ID, PCI_ANY_ID, 0},
193	{ 0x8086, E1000_DEV_ID_ICH8_IFE,	PCI_ANY_ID, PCI_ANY_ID, 0},
194	{ 0x8086, E1000_DEV_ID_ICH8_IFE_GT,	PCI_ANY_ID, PCI_ANY_ID, 0},
195	{ 0x8086, E1000_DEV_ID_ICH8_IFE_G,	PCI_ANY_ID, PCI_ANY_ID, 0},
196	{ 0x8086, E1000_DEV_ID_ICH8_IGP_M,	PCI_ANY_ID, PCI_ANY_ID, 0},
197
198	{ 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
199	{ 0x8086, E1000_DEV_ID_ICH9_IGP_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
200	{ 0x8086, E1000_DEV_ID_ICH9_IGP_C,	PCI_ANY_ID, PCI_ANY_ID, 0},
201	{ 0x8086, E1000_DEV_ID_ICH9_IGP_M,	PCI_ANY_ID, PCI_ANY_ID, 0},
202	{ 0x8086, E1000_DEV_ID_ICH9_IGP_M_V,	PCI_ANY_ID, PCI_ANY_ID, 0},
203	{ 0x8086, E1000_DEV_ID_ICH9_IFE,	PCI_ANY_ID, PCI_ANY_ID, 0},
204	{ 0x8086, E1000_DEV_ID_ICH9_IFE_GT,	PCI_ANY_ID, PCI_ANY_ID, 0},
205	{ 0x8086, E1000_DEV_ID_ICH9_IFE_G,	PCI_ANY_ID, PCI_ANY_ID, 0},
206	{ 0x8086, E1000_DEV_ID_ICH9_BM,		PCI_ANY_ID, PCI_ANY_ID, 0},
207	{ 0x8086, E1000_DEV_ID_82574L,		PCI_ANY_ID, PCI_ANY_ID, 0},
208	{ 0x8086, E1000_DEV_ID_82574LA,		PCI_ANY_ID, PCI_ANY_ID, 0},
209	{ 0x8086, E1000_DEV_ID_ICH10_R_BM_LM,	PCI_ANY_ID, PCI_ANY_ID, 0},
210	{ 0x8086, E1000_DEV_ID_ICH10_R_BM_LF,	PCI_ANY_ID, PCI_ANY_ID, 0},
211	{ 0x8086, E1000_DEV_ID_ICH10_R_BM_V,	PCI_ANY_ID, PCI_ANY_ID, 0},
212	{ 0x8086, E1000_DEV_ID_ICH10_D_BM_LM,	PCI_ANY_ID, PCI_ANY_ID, 0},
213	{ 0x8086, E1000_DEV_ID_ICH10_D_BM_LF,	PCI_ANY_ID, PCI_ANY_ID, 0},
214	/* required last entry */
215	{ 0, 0, 0, 0, 0}
216};
217
218/*********************************************************************
219 *  Table of branding strings for all supported NICs.
220 *********************************************************************/
221
222static char *em_strings[] = {
223	"Intel(R) PRO/1000 Network Connection"
224};
225
226/*********************************************************************
227 *  Function prototypes
228 *********************************************************************/
229static int	em_probe(device_t);
230static int	em_attach(device_t);
231static int	em_detach(device_t);
232static int	em_shutdown(device_t);
233static int	em_suspend(device_t);
234static int	em_resume(device_t);
235static void	em_start(struct ifnet *);
236static void	em_start_locked(struct ifnet *ifp);
237#if __FreeBSD_version >= 800000
238static int	em_mq_start(struct ifnet *, struct mbuf *);
239static int	em_mq_start_locked(struct ifnet *, struct mbuf *);
240static void	em_qflush(struct ifnet *);
241#endif
242static int	em_ioctl(struct ifnet *, u_long, caddr_t);
243static void	em_watchdog(struct adapter *);
244static void	em_init(void *);
245static void	em_init_locked(struct adapter *);
246static void	em_stop(void *);
247static void	em_media_status(struct ifnet *, struct ifmediareq *);
248static int	em_media_change(struct ifnet *);
249static void	em_identify_hardware(struct adapter *);
250static int	em_allocate_pci_resources(struct adapter *);
251static int	em_allocate_legacy(struct adapter *adapter);
252static int	em_allocate_msix(struct adapter *adapter);
253static int	em_setup_msix(struct adapter *);
254static void	em_free_pci_resources(struct adapter *);
255static void	em_local_timer(void *);
256static int	em_hardware_init(struct adapter *);
257static void	em_setup_interface(device_t, struct adapter *);
258static void	em_setup_transmit_structures(struct adapter *);
259static void	em_initialize_transmit_unit(struct adapter *);
260static int	em_setup_receive_structures(struct adapter *);
261static void	em_initialize_receive_unit(struct adapter *);
262static void	em_enable_intr(struct adapter *);
263static void	em_disable_intr(struct adapter *);
264static void	em_free_transmit_structures(struct adapter *);
265static void	em_free_receive_structures(struct adapter *);
266static void	em_update_stats_counters(struct adapter *);
267static void	em_txeof(struct adapter *);
268static void	em_tx_purge(struct adapter *);
269static int	em_allocate_receive_structures(struct adapter *);
270static int	em_allocate_transmit_structures(struct adapter *);
271static int	em_rxeof(struct adapter *, int);
272#ifndef __NO_STRICT_ALIGNMENT
273static int	em_fixup_rx(struct adapter *);
274#endif
275static void	em_receive_checksum(struct adapter *, struct e1000_rx_desc *,
276		    struct mbuf *);
277static void	em_transmit_checksum_setup(struct adapter *, struct mbuf *,
278		    u32 *, u32 *);
279#if __FreeBSD_version >= 700000
280static bool	em_tso_setup(struct adapter *, struct mbuf *,
281		    u32 *, u32 *);
282#endif /* FreeBSD_version >= 700000 */
283static void	em_set_promisc(struct adapter *);
284static void	em_disable_promisc(struct adapter *);
285static void	em_set_multi(struct adapter *);
286static void	em_print_hw_stats(struct adapter *);
287static void	em_update_link_status(struct adapter *);
288static int	em_get_buf(struct adapter *, int);
289#if __FreeBSD_version >= 700029
290static void	em_register_vlan(void *, struct ifnet *, u16);
291static void	em_unregister_vlan(void *, struct ifnet *, u16);
292static void	em_setup_vlan_hw_support(struct adapter *);
293#endif
294static int	em_xmit(struct adapter *, struct mbuf **);
295static void	em_smartspeed(struct adapter *);
296static int	em_82547_fifo_workaround(struct adapter *, int);
297static void	em_82547_update_fifo_head(struct adapter *, int);
298static int	em_82547_tx_fifo_reset(struct adapter *);
299static void	em_82547_move_tail(void *);
300static int	em_dma_malloc(struct adapter *, bus_size_t,
301		    struct em_dma_alloc *, int);
302static void	em_dma_free(struct adapter *, struct em_dma_alloc *);
303static void	em_print_debug_info(struct adapter *);
304static void	em_print_nvm_info(struct adapter *);
305static int 	em_is_valid_ether_addr(u8 *);
306static int	em_sysctl_stats(SYSCTL_HANDLER_ARGS);
307static int	em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
308static u32	em_fill_descriptors (bus_addr_t address, u32 length,
309		    PDESC_ARRAY desc_array);
310static int	em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
311static void	em_add_int_delay_sysctl(struct adapter *, const char *,
312		    const char *, struct em_int_delay_info *, int, int);
313/* Management and WOL Support */
314static void	em_init_manageability(struct adapter *);
315static void	em_release_manageability(struct adapter *);
316static void     em_get_hw_control(struct adapter *);
317static void     em_release_hw_control(struct adapter *);
318static void     em_enable_wakeup(device_t);
319
320#ifdef EM_LEGACY_IRQ
321static void	em_intr(void *);
322#else /* FAST IRQ */
323#if __FreeBSD_version < 700000
324static void	em_irq_fast(void *);
325#else
326static int	em_irq_fast(void *);
327#endif
328
329/* MSIX handlers */
330static void	em_msix_tx(void *);
331static void	em_msix_rx(void *);
332static void	em_msix_link(void *);
333static void	em_handle_rx(void *context, int pending);
334static void	em_handle_tx(void *context, int pending);
335
336static void	em_handle_rxtx(void *context, int pending);
337static void	em_handle_link(void *context, int pending);
338static void	em_add_rx_process_limit(struct adapter *, const char *,
339		    const char *, int *, int);
340#endif /* ~EM_LEGACY_IRQ */
341
342#ifdef DEVICE_POLLING
343static poll_handler_t em_poll;
344#endif /* POLLING */
345
346/*********************************************************************
347 *  FreeBSD Device Interface Entry Points
348 *********************************************************************/
349
350static device_method_t em_methods[] = {
351	/* Device interface */
352	DEVMETHOD(device_probe, em_probe),
353	DEVMETHOD(device_attach, em_attach),
354	DEVMETHOD(device_detach, em_detach),
355	DEVMETHOD(device_shutdown, em_shutdown),
356	DEVMETHOD(device_suspend, em_suspend),
357	DEVMETHOD(device_resume, em_resume),
358	{0, 0}
359};
360
361static driver_t em_driver = {
362	"em", em_methods, sizeof(struct adapter),
363};
364
365static devclass_t em_devclass;
366DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0);
367MODULE_DEPEND(em, pci, 1, 1, 1);
368MODULE_DEPEND(em, ether, 1, 1, 1);
369
370/*********************************************************************
371 *  Tunable default values.
372 *********************************************************************/
373
374#define EM_TICKS_TO_USECS(ticks)	((1024 * (ticks) + 500) / 1000)
375#define EM_USECS_TO_TICKS(usecs)	((1000 * (usecs) + 512) / 1024)
376#define M_TSO_LEN			66
377
378/* Allow common code without TSO */
379#ifndef CSUM_TSO
380#define CSUM_TSO	0
381#endif
382
383static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV);
384static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR);
385static int em_tx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_TADV);
386static int em_rx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_RADV);
387static int em_rxd = EM_DEFAULT_RXD;
388static int em_txd = EM_DEFAULT_TXD;
389static int em_smart_pwr_down = FALSE;
390/* Controls whether promiscuous also shows bad packets */
391static int em_debug_sbp = FALSE;
392/* Local switch for MSI/MSIX */
393static int em_enable_msi = TRUE;
394
395TUNABLE_INT("hw.em.tx_int_delay", &em_tx_int_delay_dflt);
396TUNABLE_INT("hw.em.rx_int_delay", &em_rx_int_delay_dflt);
397TUNABLE_INT("hw.em.tx_abs_int_delay", &em_tx_abs_int_delay_dflt);
398TUNABLE_INT("hw.em.rx_abs_int_delay", &em_rx_abs_int_delay_dflt);
399TUNABLE_INT("hw.em.rxd", &em_rxd);
400TUNABLE_INT("hw.em.txd", &em_txd);
401TUNABLE_INT("hw.em.smart_pwr_down", &em_smart_pwr_down);
402TUNABLE_INT("hw.em.sbp", &em_debug_sbp);
403TUNABLE_INT("hw.em.enable_msi", &em_enable_msi);
404
405#ifndef EM_LEGACY_IRQ
406/* How many packets rxeof tries to clean at a time */
407static int em_rx_process_limit = 100;
408TUNABLE_INT("hw.em.rx_process_limit", &em_rx_process_limit);
409#endif
410
411/* Flow control setting - default to FULL */
412static int em_fc_setting = e1000_fc_full;
413TUNABLE_INT("hw.em.fc_setting", &em_fc_setting);
414
415/*
416** Shadow VFTA table, this is needed because
417** the real vlan filter table gets cleared during
418** a soft reset and the driver needs to be able
419** to repopulate it.
420*/
421static u32 em_shadow_vfta[EM_VFTA_SIZE];
422
423/* Global used in WOL setup with multiport cards */
424static int global_quad_port_a = 0;
425
426/*********************************************************************
427 *  Device identification routine
428 *
429 *  em_probe determines if the driver should be loaded on
430 *  adapter based on PCI vendor/device id of the adapter.
431 *
432 *  return BUS_PROBE_DEFAULT on success, positive on failure
433 *********************************************************************/
434
435static int
436em_probe(device_t dev)
437{
438	char		adapter_name[60];
439	u16		pci_vendor_id = 0;
440	u16		pci_device_id = 0;
441	u16		pci_subvendor_id = 0;
442	u16		pci_subdevice_id = 0;
443	em_vendor_info_t *ent;
444
445	INIT_DEBUGOUT("em_probe: begin");
446
447	pci_vendor_id = pci_get_vendor(dev);
448	if (pci_vendor_id != EM_VENDOR_ID)
449		return (ENXIO);
450
451	pci_device_id = pci_get_device(dev);
452	pci_subvendor_id = pci_get_subvendor(dev);
453	pci_subdevice_id = pci_get_subdevice(dev);
454
455	ent = em_vendor_info_array;
456	while (ent->vendor_id != 0) {
457		if ((pci_vendor_id == ent->vendor_id) &&
458		    (pci_device_id == ent->device_id) &&
459
460		    ((pci_subvendor_id == ent->subvendor_id) ||
461		    (ent->subvendor_id == PCI_ANY_ID)) &&
462
463		    ((pci_subdevice_id == ent->subdevice_id) ||
464		    (ent->subdevice_id == PCI_ANY_ID))) {
465			sprintf(adapter_name, "%s %s",
466				em_strings[ent->index],
467				em_driver_version);
468			device_set_desc_copy(dev, adapter_name);
469			return (BUS_PROBE_DEFAULT);
470		}
471		ent++;
472	}
473
474	return (ENXIO);
475}
476
477/*********************************************************************
478 *  Device initialization routine
479 *
480 *  The attach entry point is called when the driver is being loaded.
481 *  This routine identifies the type of hardware, allocates all resources
482 *  and initializes the hardware.
483 *
484 *  return 0 on success, positive on failure
485 *********************************************************************/
486
487static int
488em_attach(device_t dev)
489{
490	struct adapter	*adapter;
491	int		tsize, rsize;
492	int		error = 0;
493	u16		eeprom_data, device_id;
494
495	INIT_DEBUGOUT("em_attach: begin");
496
497	adapter = device_get_softc(dev);
498	adapter->dev = adapter->osdep.dev = dev;
499	EM_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
500	EM_TX_LOCK_INIT(adapter, device_get_nameunit(dev));
501	EM_RX_LOCK_INIT(adapter, device_get_nameunit(dev));
502
503	/* SYSCTL stuff */
504	SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
505	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
506	    OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
507	    em_sysctl_debug_info, "I", "Debug Information");
508
509	SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
510	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
511	    OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
512	    em_sysctl_stats, "I", "Statistics");
513
514	callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
515	callout_init_mtx(&adapter->tx_fifo_timer, &adapter->tx_mtx, 0);
516
517	/* Determine hardware and mac info */
518	em_identify_hardware(adapter);
519
520	/* Setup PCI resources */
521	if (em_allocate_pci_resources(adapter)) {
522		device_printf(dev, "Allocation of PCI resources failed\n");
523		error = ENXIO;
524		goto err_pci;
525	}
526
527	/*
528	** For ICH8 and family we need to
529	** map the flash memory, and this
530	** must happen after the MAC is
531	** identified
532	*/
533	if ((adapter->hw.mac.type == e1000_ich8lan) ||
534	    (adapter->hw.mac.type == e1000_ich9lan) ||
535	    (adapter->hw.mac.type == e1000_ich10lan)) {
536		int rid = EM_BAR_TYPE_FLASH;
537		adapter->flash = bus_alloc_resource_any(dev,
538		    SYS_RES_MEMORY, &rid, RF_ACTIVE);
539		if (adapter->flash == NULL) {
540			device_printf(dev, "Mapping of Flash failed\n");
541			error = ENXIO;
542			goto err_pci;
543		}
544		/* This is used in the shared code */
545		adapter->hw.flash_address = (u8 *)adapter->flash;
546		adapter->osdep.flash_bus_space_tag =
547		    rman_get_bustag(adapter->flash);
548		adapter->osdep.flash_bus_space_handle =
549		    rman_get_bushandle(adapter->flash);
550	}
551
552	/* Do Shared Code initialization */
553	if (e1000_setup_init_funcs(&adapter->hw, TRUE)) {
554		device_printf(dev, "Setup of Shared code failed\n");
555		error = ENXIO;
556		goto err_pci;
557	}
558
559	e1000_get_bus_info(&adapter->hw);
560
561	/* Set up some sysctls for the tunable interrupt delays */
562	em_add_int_delay_sysctl(adapter, "rx_int_delay",
563	    "receive interrupt delay in usecs", &adapter->rx_int_delay,
564	    E1000_REGISTER(&adapter->hw, E1000_RDTR), em_rx_int_delay_dflt);
565	em_add_int_delay_sysctl(adapter, "tx_int_delay",
566	    "transmit interrupt delay in usecs", &adapter->tx_int_delay,
567	    E1000_REGISTER(&adapter->hw, E1000_TIDV), em_tx_int_delay_dflt);
568	if (adapter->hw.mac.type >= e1000_82540) {
569		em_add_int_delay_sysctl(adapter, "rx_abs_int_delay",
570		    "receive interrupt delay limit in usecs",
571		    &adapter->rx_abs_int_delay,
572		    E1000_REGISTER(&adapter->hw, E1000_RADV),
573		    em_rx_abs_int_delay_dflt);
574		em_add_int_delay_sysctl(adapter, "tx_abs_int_delay",
575		    "transmit interrupt delay limit in usecs",
576		    &adapter->tx_abs_int_delay,
577		    E1000_REGISTER(&adapter->hw, E1000_TADV),
578		    em_tx_abs_int_delay_dflt);
579	}
580
581#ifndef EM_LEGACY_IRQ
582	/* Sysctls for limiting the amount of work done in the taskqueue */
583	em_add_rx_process_limit(adapter, "rx_processing_limit",
584	    "max number of rx packets to process", &adapter->rx_process_limit,
585	    em_rx_process_limit);
586#endif
587
588	/*
589	 * Validate number of transmit and receive descriptors. It
590	 * must not exceed hardware maximum, and must be multiple
591	 * of E1000_DBA_ALIGN.
592	 */
593	if (((em_txd * sizeof(struct e1000_tx_desc)) % EM_DBA_ALIGN) != 0 ||
594	    (adapter->hw.mac.type >= e1000_82544 && em_txd > EM_MAX_TXD) ||
595	    (adapter->hw.mac.type < e1000_82544 && em_txd > EM_MAX_TXD_82543) ||
596	    (em_txd < EM_MIN_TXD)) {
597		device_printf(dev, "Using %d TX descriptors instead of %d!\n",
598		    EM_DEFAULT_TXD, em_txd);
599		adapter->num_tx_desc = EM_DEFAULT_TXD;
600	} else
601		adapter->num_tx_desc = em_txd;
602	if (((em_rxd * sizeof(struct e1000_rx_desc)) % EM_DBA_ALIGN) != 0 ||
603	    (adapter->hw.mac.type >= e1000_82544 && em_rxd > EM_MAX_RXD) ||
604	    (adapter->hw.mac.type < e1000_82544 && em_rxd > EM_MAX_RXD_82543) ||
605	    (em_rxd < EM_MIN_RXD)) {
606		device_printf(dev, "Using %d RX descriptors instead of %d!\n",
607		    EM_DEFAULT_RXD, em_rxd);
608		adapter->num_rx_desc = EM_DEFAULT_RXD;
609	} else
610		adapter->num_rx_desc = em_rxd;
611
612	adapter->hw.mac.autoneg = DO_AUTO_NEG;
613	adapter->hw.phy.autoneg_wait_to_complete = FALSE;
614	adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
615	adapter->rx_buffer_len = 2048;
616
617	e1000_init_script_state_82541(&adapter->hw, TRUE);
618	e1000_set_tbi_compatibility_82543(&adapter->hw, TRUE);
619
620	/* Copper options */
621	if (adapter->hw.phy.media_type == e1000_media_type_copper) {
622		adapter->hw.phy.mdix = AUTO_ALL_MODES;
623		adapter->hw.phy.disable_polarity_correction = FALSE;
624		adapter->hw.phy.ms_type = EM_MASTER_SLAVE;
625	}
626
627	/*
628	 * Set the frame limits assuming
629	 * standard ethernet sized frames.
630	 */
631	adapter->max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE;
632	adapter->min_frame_size = ETH_ZLEN + ETHERNET_FCS_SIZE;
633
634	/*
635	 * This controls when hardware reports transmit completion
636	 * status.
637	 */
638	adapter->hw.mac.report_tx_early = 1;
639
640	tsize = roundup2(adapter->num_tx_desc * sizeof(struct e1000_tx_desc),
641	    EM_DBA_ALIGN);
642
643	/* Allocate Transmit Descriptor ring */
644	if (em_dma_malloc(adapter, tsize, &adapter->txdma, BUS_DMA_NOWAIT)) {
645		device_printf(dev, "Unable to allocate tx_desc memory\n");
646		error = ENOMEM;
647		goto err_tx_desc;
648	}
649	adapter->tx_desc_base =
650	    (struct e1000_tx_desc *)adapter->txdma.dma_vaddr;
651
652	rsize = roundup2(adapter->num_rx_desc * sizeof(struct e1000_rx_desc),
653	    EM_DBA_ALIGN);
654
655	/* Allocate Receive Descriptor ring */
656	if (em_dma_malloc(adapter, rsize, &adapter->rxdma, BUS_DMA_NOWAIT)) {
657		device_printf(dev, "Unable to allocate rx_desc memory\n");
658		error = ENOMEM;
659		goto err_rx_desc;
660	}
661	adapter->rx_desc_base =
662	    (struct e1000_rx_desc *)adapter->rxdma.dma_vaddr;
663
664	/*
665	** Start from a known state, this is
666	** important in reading the nvm and
667	** mac from that.
668	*/
669	e1000_reset_hw(&adapter->hw);
670
671	/* Make sure we have a good EEPROM before we read from it */
672	if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
673		/*
674		** Some PCI-E parts fail the first check due to
675		** the link being in sleep state, call it again,
676		** if it fails a second time its a real issue.
677		*/
678		if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
679			device_printf(dev,
680			    "The EEPROM Checksum Is Not Valid\n");
681			error = EIO;
682			goto err_hw_init;
683		}
684	}
685
686	/* Copy the permanent MAC address out of the EEPROM */
687	if (e1000_read_mac_addr(&adapter->hw) < 0) {
688		device_printf(dev, "EEPROM read error while reading MAC"
689		    " address\n");
690		error = EIO;
691		goto err_hw_init;
692	}
693
694	if (!em_is_valid_ether_addr(adapter->hw.mac.addr)) {
695		device_printf(dev, "Invalid MAC address\n");
696		error = EIO;
697		goto err_hw_init;
698	}
699
700	/* Initialize the hardware */
701	if (em_hardware_init(adapter)) {
702		device_printf(dev, "Unable to initialize the hardware\n");
703		error = EIO;
704		goto err_hw_init;
705	}
706
707	/* Allocate transmit descriptors and buffers */
708	if (em_allocate_transmit_structures(adapter)) {
709		device_printf(dev, "Could not setup transmit structures\n");
710		error = ENOMEM;
711		goto err_tx_struct;
712	}
713
714	/* Allocate receive descriptors and buffers */
715	if (em_allocate_receive_structures(adapter)) {
716		device_printf(dev, "Could not setup receive structures\n");
717		error = ENOMEM;
718		goto err_rx_struct;
719	}
720
721	/*
722	**  Do interrupt configuration
723	*/
724	if (adapter->msi > 1) /* Do MSI/X */
725		error = em_allocate_msix(adapter);
726	else  /* MSI or Legacy */
727		error = em_allocate_legacy(adapter);
728	if (error)
729		goto err_rx_struct;
730
731	/* Setup OS specific network interface */
732	em_setup_interface(dev, adapter);
733
734	/* Initialize statistics */
735	em_update_stats_counters(adapter);
736
737	adapter->hw.mac.get_link_status = 1;
738	em_update_link_status(adapter);
739
740	/* Indicate SOL/IDER usage */
741	if (e1000_check_reset_block(&adapter->hw))
742		device_printf(dev,
743		    "PHY reset is blocked due to SOL/IDER session.\n");
744
745	/* Determine if we have to control management hardware */
746	adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
747
748	/*
749	 * Setup Wake-on-Lan
750	 */
751	switch (adapter->hw.mac.type) {
752
753	case e1000_82542:
754	case e1000_82543:
755		break;
756	case e1000_82546:
757	case e1000_82546_rev_3:
758	case e1000_82571:
759	case e1000_80003es2lan:
760		if (adapter->hw.bus.func == 1)
761			e1000_read_nvm(&adapter->hw,
762			    NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
763		else
764			e1000_read_nvm(&adapter->hw,
765			    NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
766		eeprom_data &= EM_EEPROM_APME;
767		break;
768	default:
769		/* APME bit in EEPROM is mapped to WUC.APME */
770		eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC) &
771		    E1000_WUC_APME;
772		break;
773	}
774	if (eeprom_data)
775		adapter->wol = E1000_WUFC_MAG;
776	/*
777         * We have the eeprom settings, now apply the special cases
778         * where the eeprom may be wrong or the board won't support
779         * wake on lan on a particular port
780	 */
781	device_id = pci_get_device(dev);
782        switch (device_id) {
783	case E1000_DEV_ID_82546GB_PCIE:
784		adapter->wol = 0;
785		break;
786	case E1000_DEV_ID_82546EB_FIBER:
787	case E1000_DEV_ID_82546GB_FIBER:
788	case E1000_DEV_ID_82571EB_FIBER:
789		/* Wake events only supported on port A for dual fiber
790		 * regardless of eeprom setting */
791		if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
792		    E1000_STATUS_FUNC_1)
793			adapter->wol = 0;
794		break;
795	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
796	case E1000_DEV_ID_82571EB_QUAD_COPPER:
797	case E1000_DEV_ID_82571EB_QUAD_FIBER:
798	case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
799                /* if quad port adapter, disable WoL on all but port A */
800		if (global_quad_port_a != 0)
801			adapter->wol = 0;
802		/* Reset for multiple quad port adapters */
803		if (++global_quad_port_a == 4)
804			global_quad_port_a = 0;
805                break;
806	}
807
808	/* Do we need workaround for 82544 PCI-X adapter? */
809	if (adapter->hw.bus.type == e1000_bus_type_pcix &&
810	    adapter->hw.mac.type == e1000_82544)
811		adapter->pcix_82544 = TRUE;
812	else
813		adapter->pcix_82544 = FALSE;
814
815#if __FreeBSD_version >= 700029
816	/* Register for VLAN events */
817	adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
818	    em_register_vlan, 0, EVENTHANDLER_PRI_FIRST);
819	adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
820	    em_unregister_vlan, 0, EVENTHANDLER_PRI_FIRST);
821#endif
822
823	/* Tell the stack that the interface is not active */
824	adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
825
826	INIT_DEBUGOUT("em_attach: end");
827
828	return (0);
829
830err_rx_struct:
831	em_free_transmit_structures(adapter);
832err_tx_struct:
833err_hw_init:
834	em_release_hw_control(adapter);
835	em_dma_free(adapter, &adapter->rxdma);
836err_rx_desc:
837	em_dma_free(adapter, &adapter->txdma);
838err_tx_desc:
839err_pci:
840	em_free_pci_resources(adapter);
841	EM_TX_LOCK_DESTROY(adapter);
842	EM_RX_LOCK_DESTROY(adapter);
843	EM_CORE_LOCK_DESTROY(adapter);
844
845	return (error);
846}
847
848/*********************************************************************
849 *  Device removal routine
850 *
851 *  The detach entry point is called when the driver is being removed.
852 *  This routine stops the adapter and deallocates all the resources
853 *  that were allocated for driver operation.
854 *
855 *  return 0 on success, positive on failure
856 *********************************************************************/
857
858static int
859em_detach(device_t dev)
860{
861	struct adapter	*adapter = device_get_softc(dev);
862	struct ifnet	*ifp = adapter->ifp;
863
864	INIT_DEBUGOUT("em_detach: begin");
865
866	/* Make sure VLANS are not using driver */
867#if __FreeBSD_version >= 700000
868	if (adapter->ifp->if_vlantrunk != NULL) {
869#else
870	if (adapter->ifp->if_nvlans != 0) {
871#endif
872		device_printf(dev,"Vlan in use, detach first\n");
873		return (EBUSY);
874	}
875
876#ifdef DEVICE_POLLING
877	if (ifp->if_capenable & IFCAP_POLLING)
878		ether_poll_deregister(ifp);
879#endif
880
881	EM_CORE_LOCK(adapter);
882	EM_TX_LOCK(adapter);
883	adapter->in_detach = 1;
884	em_stop(adapter);
885	e1000_phy_hw_reset(&adapter->hw);
886
887	em_release_manageability(adapter);
888
889	if (((adapter->hw.mac.type == e1000_82573) ||
890	    (adapter->hw.mac.type == e1000_82583) ||
891	    (adapter->hw.mac.type == e1000_ich8lan) ||
892	    (adapter->hw.mac.type == e1000_ich10lan) ||
893	    (adapter->hw.mac.type == e1000_ich9lan)) &&
894	    e1000_check_mng_mode(&adapter->hw))
895		em_release_hw_control(adapter);
896
897	if (adapter->wol) {
898		E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
899		E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
900		em_enable_wakeup(dev);
901	}
902
903	EM_TX_UNLOCK(adapter);
904	EM_CORE_UNLOCK(adapter);
905
906#if __FreeBSD_version >= 700029
907	/* Unregister VLAN events */
908	if (adapter->vlan_attach != NULL)
909		EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
910	if (adapter->vlan_detach != NULL)
911		EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
912#endif
913
914	ether_ifdetach(adapter->ifp);
915	callout_drain(&adapter->timer);
916	callout_drain(&adapter->tx_fifo_timer);
917
918	em_free_pci_resources(adapter);
919	bus_generic_detach(dev);
920	if_free(ifp);
921
922#if __FreeBSD_version >= 800000
923	drbr_free(adapter->br, M_DEVBUF);
924#endif
925	em_free_transmit_structures(adapter);
926	em_free_receive_structures(adapter);
927
928	/* Free Transmit Descriptor ring */
929	if (adapter->tx_desc_base) {
930		em_dma_free(adapter, &adapter->txdma);
931		adapter->tx_desc_base = NULL;
932	}
933
934	/* Free Receive Descriptor ring */
935	if (adapter->rx_desc_base) {
936		em_dma_free(adapter, &adapter->rxdma);
937		adapter->rx_desc_base = NULL;
938	}
939
940	EM_TX_LOCK_DESTROY(adapter);
941	EM_RX_LOCK_DESTROY(adapter);
942	EM_CORE_LOCK_DESTROY(adapter);
943
944	return (0);
945}
946
947/*********************************************************************
948 *
949 *  Shutdown entry point
950 *
951 **********************************************************************/
952
953static int
954em_shutdown(device_t dev)
955{
956	return em_suspend(dev);
957}
958
959/*
960 * Suspend/resume device methods.
961 */
962static int
963em_suspend(device_t dev)
964{
965	struct adapter *adapter = device_get_softc(dev);
966
967	EM_CORE_LOCK(adapter);
968
969	EM_TX_LOCK(adapter);
970	em_stop(adapter);
971	EM_TX_UNLOCK(adapter);
972
973        em_release_manageability(adapter);
974
975        if (((adapter->hw.mac.type == e1000_82573) ||
976	    (adapter->hw.mac.type == e1000_82583) ||
977            (adapter->hw.mac.type == e1000_ich8lan) ||
978            (adapter->hw.mac.type == e1000_ich10lan) ||
979            (adapter->hw.mac.type == e1000_ich9lan)) &&
980            e1000_check_mng_mode(&adapter->hw))
981                em_release_hw_control(adapter);
982
983        if (adapter->wol) {
984                E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
985                E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
986                em_enable_wakeup(dev);
987        }
988
989	EM_CORE_UNLOCK(adapter);
990
991	return bus_generic_suspend(dev);
992}
993
994static int
995em_resume(device_t dev)
996{
997	struct adapter *adapter = device_get_softc(dev);
998	struct ifnet *ifp = adapter->ifp;
999
1000	EM_CORE_LOCK(adapter);
1001	em_init_locked(adapter);
1002	em_init_manageability(adapter);
1003	EM_CORE_UNLOCK(adapter);
1004	em_start(ifp);
1005
1006	return bus_generic_resume(dev);
1007}
1008
1009
1010/*********************************************************************
1011 *  Transmit entry point
1012 *
1013 *  em_start is called by the stack to initiate a transmit.
1014 *  The driver will remain in this routine as long as there are
1015 *  packets to transmit and transmit resources are available.
1016 *  In case resources are not available stack is notified and
1017 *  the packet is requeued.
1018 **********************************************************************/
1019
1020#if __FreeBSD_version >= 800000
1021static int
1022em_mq_start_locked(struct ifnet *ifp, struct mbuf *m)
1023{
1024	struct adapter	*adapter = ifp->if_softc;
1025	struct mbuf	*next;
1026	int error = E1000_SUCCESS;
1027
1028	EM_TX_LOCK_ASSERT(adapter);
1029	/* To allow being called from a tasklet */
1030	if (m == NULL)
1031		goto process;
1032
1033	if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
1034	    IFF_DRV_RUNNING)
1035	    || (!adapter->link_active)) {
1036		error = drbr_enqueue(ifp, adapter->br, m);
1037		return (error);
1038	} else if (drbr_empty(ifp, adapter->br) &&
1039	    (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) {
1040		if (em_xmit(adapter, &m)) {
1041			if (m && (error = drbr_enqueue(ifp, adapter->br, m)) != 0)
1042				return (error);
1043		} else {
1044			/*
1045			 * We've bypassed the buf ring so we need to update
1046			 * ifp directly
1047			 */
1048			drbr_stats_update(ifp, m->m_pkthdr.len, m->m_flags);
1049			/*
1050			** Send a copy of the frame to the BPF
1051			** listener and set the watchdog on.
1052			*/
1053			ETHER_BPF_MTAP(ifp, m);
1054			adapter->watchdog_timer = EM_TX_TIMEOUT;
1055		}
1056	} else if ((error = drbr_enqueue(ifp, adapter->br, m)) != 0)
1057		return (error);
1058
1059process:
1060	if (drbr_empty(ifp, adapter->br))
1061		return(error);
1062        /* Process the queue */
1063        while (TRUE) {
1064                if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
1065                        break;
1066                next = drbr_dequeue(ifp, adapter->br);
1067                if (next == NULL)
1068                        break;
1069                if (em_xmit(adapter, &next))
1070                        break;
1071                ETHER_BPF_MTAP(ifp, next);
1072                /* Set the watchdog */
1073                adapter->watchdog_timer = EM_TX_TIMEOUT;
1074        }
1075
1076        if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
1077                ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1078
1079	return (0);
1080}
1081
1082/*
1083** Multiqueue capable stack interface, this is not
1084** yet truely multiqueue, but that is coming...
1085*/
1086static int
1087em_mq_start(struct ifnet *ifp, struct mbuf *m)
1088{
1089
1090	struct adapter *adapter = ifp->if_softc;
1091	int error = 0;
1092
1093	if (EM_TX_TRYLOCK(adapter)) {
1094		if (ifp->if_drv_flags & IFF_DRV_RUNNING)
1095			error = em_mq_start_locked(ifp, m);
1096		EM_TX_UNLOCK(adapter);
1097	} else
1098		error = drbr_enqueue(ifp, adapter->br, m);
1099
1100	return (error);
1101}
1102
1103static void
1104em_qflush(struct ifnet *ifp)
1105{
1106	struct mbuf *m;
1107	struct adapter *adapter = (struct adapter *)ifp->if_softc;
1108
1109	EM_TX_LOCK(adapter);
1110	while ((m = buf_ring_dequeue_sc(adapter->br)) != NULL)
1111		m_freem(m);
1112	if_qflush(ifp);
1113	EM_TX_UNLOCK(adapter);
1114}
1115#endif /* FreeBSD_version */
1116
1117static void
1118em_start_locked(struct ifnet *ifp)
1119{
1120	struct adapter	*adapter = ifp->if_softc;
1121	struct mbuf	*m_head;
1122
1123	EM_TX_LOCK_ASSERT(adapter);
1124
1125	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
1126	    IFF_DRV_RUNNING)
1127		return;
1128	if (!adapter->link_active)
1129		return;
1130
1131	while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
1132
1133                IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
1134		if (m_head == NULL)
1135			break;
1136		/*
1137		 *  Encapsulation can modify our pointer, and or make it
1138		 *  NULL on failure.  In that event, we can't requeue.
1139		 */
1140		if (em_xmit(adapter, &m_head)) {
1141			if (m_head == NULL)
1142				break;
1143			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1144			IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
1145			break;
1146		}
1147
1148		/* Send a copy of the frame to the BPF listener */
1149		ETHER_BPF_MTAP(ifp, m_head);
1150
1151		/* Set timeout in case hardware has problems transmitting. */
1152		adapter->watchdog_timer = EM_TX_TIMEOUT;
1153	}
1154	if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
1155		ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1156
1157	return;
1158}
1159
1160static void
1161em_start(struct ifnet *ifp)
1162{
1163	struct adapter *adapter = ifp->if_softc;
1164
1165	EM_TX_LOCK(adapter);
1166	if (ifp->if_drv_flags & IFF_DRV_RUNNING)
1167		em_start_locked(ifp);
1168	EM_TX_UNLOCK(adapter);
1169}
1170
1171/*********************************************************************
1172 *  Ioctl entry point
1173 *
1174 *  em_ioctl is called when the user wants to configure the
1175 *  interface.
1176 *
1177 *  return 0 on success, positive on failure
1178 **********************************************************************/
1179
1180static int
1181em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
1182{
1183	struct adapter	*adapter = ifp->if_softc;
1184	struct ifreq *ifr = (struct ifreq *)data;
1185#ifdef INET
1186	struct ifaddr *ifa = (struct ifaddr *)data;
1187#endif
1188	int error = 0;
1189
1190	if (adapter->in_detach)
1191		return (error);
1192
1193	switch (command) {
1194	case SIOCSIFADDR:
1195#ifdef INET
1196		if (ifa->ifa_addr->sa_family == AF_INET) {
1197			/*
1198			 * XXX
1199			 * Since resetting hardware takes a very long time
1200			 * and results in link renegotiation we only
1201			 * initialize the hardware only when it is absolutely
1202			 * required.
1203			 */
1204			ifp->if_flags |= IFF_UP;
1205			if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
1206				EM_CORE_LOCK(adapter);
1207				em_init_locked(adapter);
1208				EM_CORE_UNLOCK(adapter);
1209			}
1210			arp_ifinit(ifp, ifa);
1211		} else
1212#endif
1213			error = ether_ioctl(ifp, command, data);
1214		break;
1215	case SIOCSIFMTU:
1216	    {
1217		int max_frame_size;
1218		u16 eeprom_data = 0;
1219
1220		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
1221
1222		EM_CORE_LOCK(adapter);
1223		switch (adapter->hw.mac.type) {
1224		case e1000_82573:
1225			/*
1226			 * 82573 only supports jumbo frames
1227			 * if ASPM is disabled.
1228			 */
1229			e1000_read_nvm(&adapter->hw,
1230			    NVM_INIT_3GIO_3, 1, &eeprom_data);
1231			if (eeprom_data & NVM_WORD1A_ASPM_MASK) {
1232				max_frame_size = ETHER_MAX_LEN;
1233				break;
1234			}
1235			/* Allow Jumbo frames - fall thru */
1236		case e1000_82571:
1237		case e1000_82572:
1238		case e1000_ich9lan:
1239		case e1000_ich10lan:
1240		case e1000_82574:
1241		case e1000_80003es2lan:	/* Limit Jumbo Frame size */
1242			max_frame_size = 9234;
1243			break;
1244			/* Adapters that do not support jumbo frames */
1245		case e1000_82542:
1246		case e1000_82583:
1247		case e1000_ich8lan:
1248			max_frame_size = ETHER_MAX_LEN;
1249			break;
1250		default:
1251			max_frame_size = MAX_JUMBO_FRAME_SIZE;
1252		}
1253		if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN -
1254		    ETHER_CRC_LEN) {
1255			EM_CORE_UNLOCK(adapter);
1256			error = EINVAL;
1257			break;
1258		}
1259
1260		ifp->if_mtu = ifr->ifr_mtu;
1261		adapter->max_frame_size =
1262		    ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
1263		em_init_locked(adapter);
1264		EM_CORE_UNLOCK(adapter);
1265		break;
1266	    }
1267	case SIOCSIFFLAGS:
1268		IOCTL_DEBUGOUT("ioctl rcv'd:\
1269		    SIOCSIFFLAGS (Set Interface Flags)");
1270		EM_CORE_LOCK(adapter);
1271		if (ifp->if_flags & IFF_UP) {
1272			if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) {
1273				if ((ifp->if_flags ^ adapter->if_flags) &
1274				    (IFF_PROMISC | IFF_ALLMULTI)) {
1275					em_disable_promisc(adapter);
1276					em_set_promisc(adapter);
1277				}
1278			} else
1279				em_init_locked(adapter);
1280		} else
1281			if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1282				EM_TX_LOCK(adapter);
1283				em_stop(adapter);
1284				EM_TX_UNLOCK(adapter);
1285			}
1286		adapter->if_flags = ifp->if_flags;
1287		EM_CORE_UNLOCK(adapter);
1288		break;
1289	case SIOCADDMULTI:
1290	case SIOCDELMULTI:
1291		IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
1292		if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1293			EM_CORE_LOCK(adapter);
1294			em_disable_intr(adapter);
1295			em_set_multi(adapter);
1296			if (adapter->hw.mac.type == e1000_82542 &&
1297	    		    adapter->hw.revision_id == E1000_REVISION_2) {
1298				em_initialize_receive_unit(adapter);
1299			}
1300#ifdef DEVICE_POLLING
1301			if (!(ifp->if_capenable & IFCAP_POLLING))
1302#endif
1303				em_enable_intr(adapter);
1304			EM_CORE_UNLOCK(adapter);
1305		}
1306		break;
1307	case SIOCSIFMEDIA:
1308		/* Check SOL/IDER usage */
1309		EM_CORE_LOCK(adapter);
1310		if (e1000_check_reset_block(&adapter->hw)) {
1311			EM_CORE_UNLOCK(adapter);
1312			device_printf(adapter->dev, "Media change is"
1313			    " blocked due to SOL/IDER session.\n");
1314			break;
1315		}
1316		EM_CORE_UNLOCK(adapter);
1317	case SIOCGIFMEDIA:
1318		IOCTL_DEBUGOUT("ioctl rcv'd: \
1319		    SIOCxIFMEDIA (Get/Set Interface Media)");
1320		error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
1321		break;
1322	case SIOCSIFCAP:
1323	    {
1324		int mask, reinit;
1325
1326		IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
1327		reinit = 0;
1328		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
1329#ifdef DEVICE_POLLING
1330		if (mask & IFCAP_POLLING) {
1331			if (ifr->ifr_reqcap & IFCAP_POLLING) {
1332				error = ether_poll_register(em_poll, ifp);
1333				if (error)
1334					return (error);
1335				EM_CORE_LOCK(adapter);
1336				em_disable_intr(adapter);
1337				ifp->if_capenable |= IFCAP_POLLING;
1338				EM_CORE_UNLOCK(adapter);
1339			} else {
1340				error = ether_poll_deregister(ifp);
1341				/* Enable interrupt even in error case */
1342				EM_CORE_LOCK(adapter);
1343				em_enable_intr(adapter);
1344				ifp->if_capenable &= ~IFCAP_POLLING;
1345				EM_CORE_UNLOCK(adapter);
1346			}
1347		}
1348#endif
1349		if (mask & IFCAP_HWCSUM) {
1350			ifp->if_capenable ^= IFCAP_HWCSUM;
1351			reinit = 1;
1352		}
1353#if __FreeBSD_version >= 700000
1354		if (mask & IFCAP_TSO4) {
1355			ifp->if_capenable ^= IFCAP_TSO4;
1356			reinit = 1;
1357		}
1358#endif
1359
1360		if (mask & IFCAP_VLAN_HWTAGGING) {
1361			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
1362			reinit = 1;
1363		}
1364		if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING))
1365			em_init(adapter);
1366#if __FreeBSD_version >= 700000
1367		VLAN_CAPABILITIES(ifp);
1368#endif
1369		break;
1370	    }
1371
1372	default:
1373		error = ether_ioctl(ifp, command, data);
1374		break;
1375	}
1376
1377	return (error);
1378}
1379
1380/*********************************************************************
1381 *  Watchdog timer:
1382 *
1383 *  This routine is called from the local timer every second.
1384 *  As long as transmit descriptors are being cleaned the value
1385 *  is non-zero and we do nothing. Reaching 0 indicates a tx hang
1386 *  and we then reset the device.
1387 *
1388 **********************************************************************/
1389
1390static void
1391em_watchdog(struct adapter *adapter)
1392{
1393
1394	EM_CORE_LOCK_ASSERT(adapter);
1395
1396	/*
1397	** The timer is set to 5 every time start queues a packet.
1398	** Then txeof keeps resetting it as long as it cleans at
1399	** least one descriptor.
1400	** Finally, anytime all descriptors are clean the timer is
1401	** set to 0.
1402	*/
1403	EM_TX_LOCK(adapter);
1404	if ((adapter->watchdog_timer == 0) || (--adapter->watchdog_timer)) {
1405		EM_TX_UNLOCK(adapter);
1406		return;
1407	}
1408
1409	/* If we are in this routine because of pause frames, then
1410	 * don't reset the hardware.
1411	 */
1412	if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
1413	    E1000_STATUS_TXOFF) {
1414		adapter->watchdog_timer = EM_TX_TIMEOUT;
1415		EM_TX_UNLOCK(adapter);
1416		return;
1417	}
1418
1419	if (e1000_check_for_link(&adapter->hw) == 0)
1420		device_printf(adapter->dev, "watchdog timeout -- resetting\n");
1421	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
1422	adapter->watchdog_events++;
1423	EM_TX_UNLOCK(adapter);
1424
1425	em_init_locked(adapter);
1426}
1427
1428/*********************************************************************
1429 *  Init entry point
1430 *
1431 *  This routine is used in two ways. It is used by the stack as
1432 *  init entry point in network interface structure. It is also used
1433 *  by the driver as a hw/sw initialization routine to get to a
1434 *  consistent state.
1435 *
1436 *  return 0 on success, positive on failure
1437 **********************************************************************/
1438
1439static void
1440em_init_locked(struct adapter *adapter)
1441{
1442	struct ifnet	*ifp = adapter->ifp;
1443	device_t	dev = adapter->dev;
1444	u32		pba;
1445
1446	INIT_DEBUGOUT("em_init: begin");
1447
1448	EM_CORE_LOCK_ASSERT(adapter);
1449
1450	EM_TX_LOCK(adapter);
1451	em_stop(adapter);
1452	EM_TX_UNLOCK(adapter);
1453
1454	/*
1455	 * Packet Buffer Allocation (PBA)
1456	 * Writing PBA sets the receive portion of the buffer
1457	 * the remainder is used for the transmit buffer.
1458	 *
1459	 * Devices before the 82547 had a Packet Buffer of 64K.
1460	 *   Default allocation: PBA=48K for Rx, leaving 16K for Tx.
1461	 * After the 82547 the buffer was reduced to 40K.
1462	 *   Default allocation: PBA=30K for Rx, leaving 10K for Tx.
1463	 *   Note: default does not leave enough room for Jumbo Frame >10k.
1464	 */
1465	switch (adapter->hw.mac.type) {
1466	case e1000_82547:
1467	case e1000_82547_rev_2: /* 82547: Total Packet Buffer is 40K */
1468		if (adapter->max_frame_size > 8192)
1469			pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */
1470		else
1471			pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */
1472		adapter->tx_fifo_head = 0;
1473		adapter->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT;
1474		adapter->tx_fifo_size =
1475		    (E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT;
1476		break;
1477	/* Total Packet Buffer on these is 48K */
1478	case e1000_82571:
1479	case e1000_82572:
1480	case e1000_80003es2lan:
1481			pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
1482		break;
1483	case e1000_82573: /* 82573: Total Packet Buffer is 32K */
1484			pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
1485		break;
1486	case e1000_82574:
1487	case e1000_82583:
1488			pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */
1489		break;
1490	case e1000_ich9lan:
1491	case e1000_ich10lan:
1492	case e1000_ich8lan:
1493		pba = E1000_PBA_8K;
1494		break;
1495	default:
1496		/* Devices before 82547 had a Packet Buffer of 64K.   */
1497		if (adapter->max_frame_size > 8192)
1498			pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
1499		else
1500			pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
1501	}
1502
1503	INIT_DEBUGOUT1("em_init: pba=%dK",pba);
1504	E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba);
1505
1506	/* Get the latest mac address, User can use a LAA */
1507        bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr,
1508              ETHER_ADDR_LEN);
1509
1510	/* Put the address into the Receive Address Array */
1511	e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
1512
1513	/*
1514	 * With the 82571 adapter, RAR[0] may be overwritten
1515	 * when the other port is reset, we make a duplicate
1516	 * in RAR[14] for that eventuality, this assures
1517	 * the interface continues to function.
1518	 */
1519	if (adapter->hw.mac.type == e1000_82571) {
1520		e1000_set_laa_state_82571(&adapter->hw, TRUE);
1521		e1000_rar_set(&adapter->hw, adapter->hw.mac.addr,
1522		    E1000_RAR_ENTRIES - 1);
1523	}
1524
1525	/* Initialize the hardware */
1526	if (em_hardware_init(adapter)) {
1527		device_printf(dev, "Unable to initialize the hardware\n");
1528		return;
1529	}
1530	em_update_link_status(adapter);
1531
1532	/* Setup VLAN support, basic and offload if available */
1533	E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
1534
1535#if __FreeBSD_version < 700029
1536	if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
1537		u32 ctrl;
1538		ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
1539		ctrl |= E1000_CTRL_VME;
1540		E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
1541	}
1542#else
1543	/* Use real VLAN Filter support */
1544	em_setup_vlan_hw_support(adapter);
1545#endif
1546
1547	/* Set hardware offload abilities */
1548	ifp->if_hwassist = 0;
1549	if (adapter->hw.mac.type >= e1000_82543) {
1550		if (ifp->if_capenable & IFCAP_TXCSUM)
1551			ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
1552#if __FreeBSD_version >= 700000
1553		if (ifp->if_capenable & IFCAP_TSO4)
1554			ifp->if_hwassist |= CSUM_TSO;
1555#endif
1556	}
1557
1558	/* Configure for OS presence */
1559	em_init_manageability(adapter);
1560
1561	/* Prepare transmit descriptors and buffers */
1562	em_setup_transmit_structures(adapter);
1563	em_initialize_transmit_unit(adapter);
1564
1565	/* Setup Multicast table */
1566	em_set_multi(adapter);
1567
1568	/* Prepare receive descriptors and buffers */
1569	if (em_setup_receive_structures(adapter)) {
1570		device_printf(dev, "Could not setup receive structures\n");
1571		EM_TX_LOCK(adapter);
1572		em_stop(adapter);
1573		EM_TX_UNLOCK(adapter);
1574		return;
1575	}
1576	em_initialize_receive_unit(adapter);
1577
1578	/* Don't lose promiscuous settings */
1579	em_set_promisc(adapter);
1580
1581	ifp->if_drv_flags |= IFF_DRV_RUNNING;
1582	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
1583
1584	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1585	e1000_clear_hw_cntrs_base_generic(&adapter->hw);
1586
1587	/* MSI/X configuration for 82574 */
1588	if (adapter->hw.mac.type == e1000_82574) {
1589		int tmp;
1590		tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
1591		tmp |= E1000_CTRL_EXT_PBA_CLR;
1592		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
1593		/*
1594		** Set the IVAR - interrupt vector routing.
1595		** Each nibble represents a vector, high bit
1596		** is enable, other 3 bits are the MSIX table
1597		** entry, we map RXQ0 to 0, TXQ0 to 1, and
1598		** Link (other) to 2, hence the magic number.
1599		*/
1600		E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908);
1601	}
1602
1603#ifdef DEVICE_POLLING
1604	/*
1605	 * Only enable interrupts if we are not polling, make sure
1606	 * they are off otherwise.
1607	 */
1608	if (ifp->if_capenable & IFCAP_POLLING)
1609		em_disable_intr(adapter);
1610	else
1611#endif /* DEVICE_POLLING */
1612		em_enable_intr(adapter);
1613
1614	/* Don't reset the phy next time init gets called */
1615	adapter->hw.phy.reset_disable = TRUE;
1616}
1617
1618static void
1619em_init(void *arg)
1620{
1621	struct adapter *adapter = arg;
1622
1623	EM_CORE_LOCK(adapter);
1624	em_init_locked(adapter);
1625	EM_CORE_UNLOCK(adapter);
1626}
1627
1628
1629#ifdef DEVICE_POLLING
1630/*********************************************************************
1631 *
1632 *  Legacy polling routine
1633 *
1634 *********************************************************************/
1635static int
1636em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
1637{
1638	struct adapter *adapter = ifp->if_softc;
1639	u32		reg_icr, rx_done = 0;
1640
1641	EM_CORE_LOCK(adapter);
1642	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
1643		EM_CORE_UNLOCK(adapter);
1644		return (rx_done);
1645	}
1646
1647	if (cmd == POLL_AND_CHECK_STATUS) {
1648		reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1649		if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1650			callout_stop(&adapter->timer);
1651			adapter->hw.mac.get_link_status = 1;
1652			em_update_link_status(adapter);
1653			callout_reset(&adapter->timer, hz,
1654			    em_local_timer, adapter);
1655		}
1656	}
1657	EM_CORE_UNLOCK(adapter);
1658
1659	rx_done = em_rxeof(adapter, count);
1660
1661	EM_TX_LOCK(adapter);
1662	em_txeof(adapter);
1663#if __FreeBSD_version >= 800000
1664	if (!drbr_empty(ifp, adapter->br))
1665		em_mq_start_locked(ifp, NULL);
1666#else
1667	if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1668		em_start_locked(ifp);
1669#endif
1670	EM_TX_UNLOCK(adapter);
1671	return (rx_done);
1672}
1673#endif /* DEVICE_POLLING */
1674
1675#ifdef EM_LEGACY_IRQ
1676/*********************************************************************
1677 *
1678 *  Legacy Interrupt Service routine
1679 *
1680 *********************************************************************/
1681
1682static void
1683em_intr(void *arg)
1684{
1685	struct adapter	*adapter = arg;
1686	struct ifnet	*ifp = adapter->ifp;
1687	u32		reg_icr;
1688
1689
1690	if (ifp->if_capenable & IFCAP_POLLING)
1691		return;
1692
1693	EM_CORE_LOCK(adapter);
1694	reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1695	if (reg_icr & E1000_ICR_RXO)
1696		adapter->rx_overruns++;
1697	if ((reg_icr == 0xffffffff) || (reg_icr == 0)||
1698	    (adapter->hw.mac.type >= e1000_82571 &&
1699	    (reg_icr & E1000_ICR_INT_ASSERTED) == 0))
1700			goto out;
1701
1702	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
1703			goto out;
1704
1705	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1706		callout_stop(&adapter->timer);
1707		adapter->hw.mac.get_link_status = 1;
1708		em_update_link_status(adapter);
1709		/* Deal with TX cruft when link lost */
1710		em_tx_purge(adapter);
1711		callout_reset(&adapter->timer, hz,
1712		    em_local_timer, adapter);
1713		goto out;
1714	}
1715
1716	EM_TX_LOCK(adapter);
1717	em_txeof(adapter);
1718	em_rxeof(adapter, -1);
1719	em_txeof(adapter);
1720	if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
1721	    !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
1722		em_start_locked(ifp);
1723	EM_TX_UNLOCK(adapter);
1724
1725out:
1726	EM_CORE_UNLOCK(adapter);
1727	return;
1728}
1729
1730#else /* EM_FAST_IRQ, then fast interrupt routines only */
1731
1732static void
1733em_handle_link(void *context, int pending)
1734{
1735	struct adapter	*adapter = context;
1736	struct ifnet *ifp = adapter->ifp;
1737
1738	if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
1739		return;
1740
1741	EM_CORE_LOCK(adapter);
1742	callout_stop(&adapter->timer);
1743	em_update_link_status(adapter);
1744	/* Deal with TX cruft when link lost */
1745	em_tx_purge(adapter);
1746	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1747	EM_CORE_UNLOCK(adapter);
1748}
1749
1750
1751/* Combined RX/TX handler, used by Legacy and MSI */
1752static void
1753em_handle_rxtx(void *context, int pending)
1754{
1755	struct adapter	*adapter = context;
1756	struct ifnet	*ifp = adapter->ifp;
1757
1758
1759	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1760		if (em_rxeof(adapter, adapter->rx_process_limit) != 0)
1761			taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
1762		EM_TX_LOCK(adapter);
1763		em_txeof(adapter);
1764
1765#if __FreeBSD_version >= 800000
1766		if (!drbr_empty(ifp, adapter->br))
1767			em_mq_start_locked(ifp, NULL);
1768#else
1769		if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1770			em_start_locked(ifp);
1771#endif
1772		EM_TX_UNLOCK(adapter);
1773	}
1774
1775	em_enable_intr(adapter);
1776}
1777
1778/*********************************************************************
1779 *
1780 *  Fast Legacy/MSI Combined Interrupt Service routine
1781 *
1782 *********************************************************************/
1783#if __FreeBSD_version < 700000
1784#define FILTER_STRAY
1785#define FILTER_HANDLED
1786static void
1787#else
1788static int
1789#endif
1790em_irq_fast(void *arg)
1791{
1792	struct adapter	*adapter = arg;
1793	struct ifnet	*ifp;
1794	u32		reg_icr;
1795
1796	ifp = adapter->ifp;
1797
1798	reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1799
1800	/* Hot eject?  */
1801	if (reg_icr == 0xffffffff)
1802		return FILTER_STRAY;
1803
1804	/* Definitely not our interrupt.  */
1805	if (reg_icr == 0x0)
1806		return FILTER_STRAY;
1807
1808	/*
1809	 * Starting with the 82571 chip, bit 31 should be used to
1810	 * determine whether the interrupt belongs to us.
1811	 */
1812	if (adapter->hw.mac.type >= e1000_82571 &&
1813	    (reg_icr & E1000_ICR_INT_ASSERTED) == 0)
1814		return FILTER_STRAY;
1815
1816	/*
1817	 * Mask interrupts until the taskqueue is finished running.  This is
1818	 * cheap, just assume that it is needed.  This also works around the
1819	 * MSI message reordering errata on certain systems.
1820	 */
1821	em_disable_intr(adapter);
1822	taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
1823
1824	/* Link status change */
1825	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1826		adapter->hw.mac.get_link_status = 1;
1827		taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1828	}
1829
1830	if (reg_icr & E1000_ICR_RXO)
1831		adapter->rx_overruns++;
1832	return FILTER_HANDLED;
1833}
1834
1835/*********************************************************************
1836 *
1837 *  MSIX Interrupt Service Routines
1838 *
1839 **********************************************************************/
1840#define EM_MSIX_TX	0x00040000
1841#define EM_MSIX_RX	0x00010000
1842#define EM_MSIX_LINK	0x00100000
1843
1844static void
1845em_msix_tx(void *arg)
1846{
1847	struct adapter *adapter = arg;
1848	struct ifnet	*ifp = adapter->ifp;
1849
1850	++adapter->tx_irq;
1851	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1852		EM_TX_LOCK(adapter);
1853		em_txeof(adapter);
1854		EM_TX_UNLOCK(adapter);
1855		taskqueue_enqueue(adapter->tq, &adapter->tx_task);
1856	}
1857	/* Reenable this interrupt */
1858	E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_TX);
1859	return;
1860}
1861
1862/*********************************************************************
1863 *
1864 *  MSIX RX Interrupt Service routine
1865 *
1866 **********************************************************************/
1867
1868static void
1869em_msix_rx(void *arg)
1870{
1871	struct adapter *adapter = arg;
1872	struct ifnet	*ifp = adapter->ifp;
1873
1874	++adapter->rx_irq;
1875	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) &&
1876	    (em_rxeof(adapter, adapter->rx_process_limit) != 0))
1877		taskqueue_enqueue(adapter->tq, &adapter->rx_task);
1878	/* Reenable this interrupt */
1879	E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_RX);
1880	return;
1881}
1882
1883/*********************************************************************
1884 *
1885 *  MSIX Link Fast Interrupt Service routine
1886 *
1887 **********************************************************************/
1888
1889static void
1890em_msix_link(void *arg)
1891{
1892	struct adapter	*adapter = arg;
1893	u32		reg_icr;
1894
1895	++adapter->link_irq;
1896	reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1897
1898	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1899		adapter->hw.mac.get_link_status = 1;
1900		taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1901	}
1902	E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1903	    EM_MSIX_LINK | E1000_IMS_LSC);
1904	return;
1905}
1906
1907static void
1908em_handle_rx(void *context, int pending)
1909{
1910	struct adapter	*adapter = context;
1911	struct ifnet	*ifp = adapter->ifp;
1912
1913	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) &&
1914	    (em_rxeof(adapter, adapter->rx_process_limit) != 0))
1915		taskqueue_enqueue(adapter->tq, &adapter->rx_task);
1916
1917}
1918
1919static void
1920em_handle_tx(void *context, int pending)
1921{
1922	struct adapter	*adapter = context;
1923	struct ifnet	*ifp = adapter->ifp;
1924
1925	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1926		if (!EM_TX_TRYLOCK(adapter))
1927			return;
1928		em_txeof(adapter);
1929#if __FreeBSD_version >= 800000
1930		if (!drbr_empty(ifp, adapter->br))
1931			em_mq_start_locked(ifp, NULL);
1932#else
1933		if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1934			em_start_locked(ifp);
1935#endif
1936		EM_TX_UNLOCK(adapter);
1937	}
1938}
1939#endif /* EM_FAST_IRQ */
1940
1941/*********************************************************************
1942 *
1943 *  Media Ioctl callback
1944 *
1945 *  This routine is called whenever the user queries the status of
1946 *  the interface using ifconfig.
1947 *
1948 **********************************************************************/
1949static void
1950em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
1951{
1952	struct adapter *adapter = ifp->if_softc;
1953	u_char fiber_type = IFM_1000_SX;
1954
1955	INIT_DEBUGOUT("em_media_status: begin");
1956
1957	EM_CORE_LOCK(adapter);
1958	em_update_link_status(adapter);
1959
1960	ifmr->ifm_status = IFM_AVALID;
1961	ifmr->ifm_active = IFM_ETHER;
1962
1963	if (!adapter->link_active) {
1964		EM_CORE_UNLOCK(adapter);
1965		return;
1966	}
1967
1968	ifmr->ifm_status |= IFM_ACTIVE;
1969
1970	if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
1971	    (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
1972		if (adapter->hw.mac.type == e1000_82545)
1973			fiber_type = IFM_1000_LX;
1974		ifmr->ifm_active |= fiber_type | IFM_FDX;
1975	} else {
1976		switch (adapter->link_speed) {
1977		case 10:
1978			ifmr->ifm_active |= IFM_10_T;
1979			break;
1980		case 100:
1981			ifmr->ifm_active |= IFM_100_TX;
1982			break;
1983		case 1000:
1984			ifmr->ifm_active |= IFM_1000_T;
1985			break;
1986		}
1987		if (adapter->link_duplex == FULL_DUPLEX)
1988			ifmr->ifm_active |= IFM_FDX;
1989		else
1990			ifmr->ifm_active |= IFM_HDX;
1991	}
1992	EM_CORE_UNLOCK(adapter);
1993}
1994
1995/*********************************************************************
1996 *
1997 *  Media Ioctl callback
1998 *
1999 *  This routine is called when the user changes speed/duplex using
2000 *  media/mediopt option with ifconfig.
2001 *
2002 **********************************************************************/
2003static int
2004em_media_change(struct ifnet *ifp)
2005{
2006	struct adapter *adapter = ifp->if_softc;
2007	struct ifmedia  *ifm = &adapter->media;
2008
2009	INIT_DEBUGOUT("em_media_change: begin");
2010
2011	if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
2012		return (EINVAL);
2013
2014	EM_CORE_LOCK(adapter);
2015	switch (IFM_SUBTYPE(ifm->ifm_media)) {
2016	case IFM_AUTO:
2017		adapter->hw.mac.autoneg = DO_AUTO_NEG;
2018		adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
2019		break;
2020	case IFM_1000_LX:
2021	case IFM_1000_SX:
2022	case IFM_1000_T:
2023		adapter->hw.mac.autoneg = DO_AUTO_NEG;
2024		adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
2025		break;
2026	case IFM_100_TX:
2027		adapter->hw.mac.autoneg = FALSE;
2028		adapter->hw.phy.autoneg_advertised = 0;
2029		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
2030			adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
2031		else
2032			adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
2033		break;
2034	case IFM_10_T:
2035		adapter->hw.mac.autoneg = FALSE;
2036		adapter->hw.phy.autoneg_advertised = 0;
2037		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
2038			adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
2039		else
2040			adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
2041		break;
2042	default:
2043		device_printf(adapter->dev, "Unsupported media type\n");
2044	}
2045
2046	/* As the speed/duplex settings my have changed we need to
2047	 * reset the PHY.
2048	 */
2049	adapter->hw.phy.reset_disable = FALSE;
2050
2051	em_init_locked(adapter);
2052	EM_CORE_UNLOCK(adapter);
2053
2054	return (0);
2055}
2056
2057/*********************************************************************
2058 *
2059 *  This routine maps the mbufs to tx descriptors.
2060 *
2061 *  return 0 on success, positive on failure
2062 **********************************************************************/
2063
2064static int
2065em_xmit(struct adapter *adapter, struct mbuf **m_headp)
2066{
2067	bus_dma_segment_t	segs[EM_MAX_SCATTER];
2068	bus_dmamap_t		map;
2069	struct em_buffer	*tx_buffer, *tx_buffer_mapped;
2070	struct e1000_tx_desc	*ctxd = NULL;
2071	struct mbuf		*m_head;
2072	u32			txd_upper, txd_lower, txd_used, txd_saved;
2073	int			nsegs, i, j, first, last = 0;
2074	int			error, do_tso, tso_desc = 0;
2075#if __FreeBSD_version < 700000
2076	struct m_tag		*mtag;
2077#endif
2078	m_head = *m_headp;
2079	txd_upper = txd_lower = txd_used = txd_saved = 0;
2080
2081#if __FreeBSD_version >= 700000
2082	do_tso = ((m_head->m_pkthdr.csum_flags & CSUM_TSO) != 0);
2083#else
2084	do_tso = 0;
2085#endif
2086
2087        /*
2088         * Force a cleanup if number of TX descriptors
2089         * available hits the threshold
2090         */
2091	if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
2092		em_txeof(adapter);
2093		/* Now do we at least have a minimal? */
2094		if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD) {
2095			adapter->no_tx_desc_avail1++;
2096			return (ENOBUFS);
2097		}
2098	}
2099
2100
2101	/*
2102	 * TSO workaround:
2103	 *  If an mbuf is only header we need
2104	 *     to pull 4 bytes of data into it.
2105	 */
2106	if (do_tso && (m_head->m_len <= M_TSO_LEN)) {
2107		m_head = m_pullup(m_head, M_TSO_LEN + 4);
2108		*m_headp = m_head;
2109		if (m_head == NULL)
2110			return (ENOBUFS);
2111	}
2112
2113	/*
2114	 * Map the packet for DMA
2115	 *
2116	 * Capture the first descriptor index,
2117	 * this descriptor will have the index
2118	 * of the EOP which is the only one that
2119	 * now gets a DONE bit writeback.
2120	 */
2121	first = adapter->next_avail_tx_desc;
2122	tx_buffer = &adapter->tx_buffer_area[first];
2123	tx_buffer_mapped = tx_buffer;
2124	map = tx_buffer->map;
2125
2126	error = bus_dmamap_load_mbuf_sg(adapter->txtag, map,
2127	    *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2128
2129	/*
2130	 * There are two types of errors we can (try) to handle:
2131	 * - EFBIG means the mbuf chain was too long and bus_dma ran
2132	 *   out of segments.  Defragment the mbuf chain and try again.
2133	 * - ENOMEM means bus_dma could not obtain enough bounce buffers
2134	 *   at this point in time.  Defer sending and try again later.
2135	 * All other errors, in particular EINVAL, are fatal and prevent the
2136	 * mbuf chain from ever going through.  Drop it and report error.
2137	 */
2138	if (error == EFBIG) {
2139		struct mbuf *m;
2140
2141		m = m_defrag(*m_headp, M_DONTWAIT);
2142		if (m == NULL) {
2143			adapter->mbuf_alloc_failed++;
2144			m_freem(*m_headp);
2145			*m_headp = NULL;
2146			return (ENOBUFS);
2147		}
2148		*m_headp = m;
2149
2150		/* Try it again */
2151		error = bus_dmamap_load_mbuf_sg(adapter->txtag, map,
2152		    *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2153
2154		if (error) {
2155			adapter->no_tx_dma_setup++;
2156			m_freem(*m_headp);
2157			*m_headp = NULL;
2158			return (error);
2159		}
2160	} else if (error != 0) {
2161		adapter->no_tx_dma_setup++;
2162		return (error);
2163	}
2164
2165	/*
2166	 * TSO Hardware workaround, if this packet is not
2167	 * TSO, and is only a single descriptor long, and
2168	 * it follows a TSO burst, then we need to add a
2169	 * sentinel descriptor to prevent premature writeback.
2170	 */
2171	if ((do_tso == 0) && (adapter->tx_tso == TRUE)) {
2172		if (nsegs == 1)
2173			tso_desc = TRUE;
2174		adapter->tx_tso = FALSE;
2175	}
2176
2177        if (nsegs > (adapter->num_tx_desc_avail - 2)) {
2178                adapter->no_tx_desc_avail2++;
2179		bus_dmamap_unload(adapter->txtag, map);
2180		return (ENOBUFS);
2181        }
2182	m_head = *m_headp;
2183
2184	/* Do hardware assists */
2185#if __FreeBSD_version >= 700000
2186	if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
2187		error = em_tso_setup(adapter, m_head, &txd_upper, &txd_lower);
2188		if (error != TRUE)
2189			return (ENXIO); /* something foobar */
2190		/* we need to make a final sentinel transmit desc */
2191		tso_desc = TRUE;
2192	} else
2193#endif
2194	if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)
2195		em_transmit_checksum_setup(adapter,  m_head,
2196		    &txd_upper, &txd_lower);
2197
2198	i = adapter->next_avail_tx_desc;
2199	if (adapter->pcix_82544)
2200		txd_saved = i;
2201
2202	/* Set up our transmit descriptors */
2203	for (j = 0; j < nsegs; j++) {
2204		bus_size_t seg_len;
2205		bus_addr_t seg_addr;
2206		/* If adapter is 82544 and on PCIX bus */
2207		if(adapter->pcix_82544) {
2208			DESC_ARRAY	desc_array;
2209			u32		array_elements, counter;
2210			/*
2211			 * Check the Address and Length combination and
2212			 * split the data accordingly
2213			 */
2214			array_elements = em_fill_descriptors(segs[j].ds_addr,
2215			    segs[j].ds_len, &desc_array);
2216			for (counter = 0; counter < array_elements; counter++) {
2217				if (txd_used == adapter->num_tx_desc_avail) {
2218					adapter->next_avail_tx_desc = txd_saved;
2219					adapter->no_tx_desc_avail2++;
2220					bus_dmamap_unload(adapter->txtag, map);
2221					return (ENOBUFS);
2222				}
2223				tx_buffer = &adapter->tx_buffer_area[i];
2224				ctxd = &adapter->tx_desc_base[i];
2225				ctxd->buffer_addr = htole64(
2226				    desc_array.descriptor[counter].address);
2227				ctxd->lower.data = htole32(
2228				    (adapter->txd_cmd | txd_lower | (u16)
2229				    desc_array.descriptor[counter].length));
2230				ctxd->upper.data =
2231				    htole32((txd_upper));
2232				last = i;
2233				if (++i == adapter->num_tx_desc)
2234                                         i = 0;
2235				tx_buffer->m_head = NULL;
2236				tx_buffer->next_eop = -1;
2237				txd_used++;
2238                        }
2239		} else {
2240			tx_buffer = &adapter->tx_buffer_area[i];
2241			ctxd = &adapter->tx_desc_base[i];
2242			seg_addr = segs[j].ds_addr;
2243			seg_len  = segs[j].ds_len;
2244			/*
2245			** TSO Workaround:
2246			** If this is the last descriptor, we want to
2247			** split it so we have a small final sentinel
2248			*/
2249			if (tso_desc && (j == (nsegs -1)) && (seg_len > 8)) {
2250				seg_len -= 4;
2251				ctxd->buffer_addr = htole64(seg_addr);
2252				ctxd->lower.data = htole32(
2253				adapter->txd_cmd | txd_lower | seg_len);
2254				ctxd->upper.data =
2255				    htole32(txd_upper);
2256				if (++i == adapter->num_tx_desc)
2257					i = 0;
2258				/* Now make the sentinel */
2259				++txd_used; /* using an extra txd */
2260				ctxd = &adapter->tx_desc_base[i];
2261				tx_buffer = &adapter->tx_buffer_area[i];
2262				ctxd->buffer_addr =
2263				    htole64(seg_addr + seg_len);
2264				ctxd->lower.data = htole32(
2265				adapter->txd_cmd | txd_lower | 4);
2266				ctxd->upper.data =
2267				    htole32(txd_upper);
2268				last = i;
2269				if (++i == adapter->num_tx_desc)
2270					i = 0;
2271			} else {
2272				ctxd->buffer_addr = htole64(seg_addr);
2273				ctxd->lower.data = htole32(
2274				adapter->txd_cmd | txd_lower | seg_len);
2275				ctxd->upper.data =
2276				    htole32(txd_upper);
2277				last = i;
2278				if (++i == adapter->num_tx_desc)
2279					i = 0;
2280			}
2281			tx_buffer->m_head = NULL;
2282			tx_buffer->next_eop = -1;
2283		}
2284	}
2285
2286	adapter->next_avail_tx_desc = i;
2287	if (adapter->pcix_82544)
2288		adapter->num_tx_desc_avail -= txd_used;
2289	else {
2290		adapter->num_tx_desc_avail -= nsegs;
2291		if (tso_desc) /* TSO used an extra for sentinel */
2292			adapter->num_tx_desc_avail -= txd_used;
2293	}
2294
2295        /*
2296	** Handle VLAN tag, this is the
2297	** biggest difference between
2298	** 6.x and 7
2299	*/
2300#if __FreeBSD_version < 700000
2301        /* Find out if we are in vlan mode. */
2302        mtag = VLAN_OUTPUT_TAG(ifp, m_head);
2303        if (mtag != NULL) {
2304                ctxd->upper.fields.special =
2305                    htole16(VLAN_TAG_VALUE(mtag));
2306#else /* FreeBSD 7 */
2307	if (m_head->m_flags & M_VLANTAG) {
2308		/* Set the vlan id. */
2309		ctxd->upper.fields.special =
2310		    htole16(m_head->m_pkthdr.ether_vtag);
2311#endif
2312                /* Tell hardware to add tag */
2313                ctxd->lower.data |= htole32(E1000_TXD_CMD_VLE);
2314        }
2315
2316        tx_buffer->m_head = m_head;
2317	tx_buffer_mapped->map = tx_buffer->map;
2318	tx_buffer->map = map;
2319        bus_dmamap_sync(adapter->txtag, map, BUS_DMASYNC_PREWRITE);
2320
2321        /*
2322         * Last Descriptor of Packet
2323	 * needs End Of Packet (EOP)
2324	 * and Report Status (RS)
2325         */
2326        ctxd->lower.data |=
2327	    htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS);
2328	/*
2329	 * Keep track in the first buffer which
2330	 * descriptor will be written back
2331	 */
2332	tx_buffer = &adapter->tx_buffer_area[first];
2333	tx_buffer->next_eop = last;
2334
2335	/*
2336	 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000
2337	 * that this frame is available to transmit.
2338	 */
2339	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
2340	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
2341	if (adapter->hw.mac.type == e1000_82547 &&
2342	    adapter->link_duplex == HALF_DUPLEX)
2343		em_82547_move_tail(adapter);
2344	else {
2345		E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), i);
2346		if (adapter->hw.mac.type == e1000_82547)
2347			em_82547_update_fifo_head(adapter,
2348			    m_head->m_pkthdr.len);
2349	}
2350
2351	return (0);
2352}
2353
2354/*********************************************************************
2355 *
2356 * 82547 workaround to avoid controller hang in half-duplex environment.
2357 * The workaround is to avoid queuing a large packet that would span
2358 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
2359 * in this case. We do that only when FIFO is quiescent.
2360 *
2361 **********************************************************************/
2362static void
2363em_82547_move_tail(void *arg)
2364{
2365	struct adapter *adapter = arg;
2366	struct e1000_tx_desc *tx_desc;
2367	u16	hw_tdt, sw_tdt, length = 0;
2368	bool	eop = 0;
2369
2370	EM_TX_LOCK_ASSERT(adapter);
2371
2372	hw_tdt = E1000_READ_REG(&adapter->hw, E1000_TDT(0));
2373	sw_tdt = adapter->next_avail_tx_desc;
2374
2375	while (hw_tdt != sw_tdt) {
2376		tx_desc = &adapter->tx_desc_base[hw_tdt];
2377		length += tx_desc->lower.flags.length;
2378		eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
2379		if (++hw_tdt == adapter->num_tx_desc)
2380			hw_tdt = 0;
2381
2382		if (eop) {
2383			if (em_82547_fifo_workaround(adapter, length)) {
2384				adapter->tx_fifo_wrk_cnt++;
2385				callout_reset(&adapter->tx_fifo_timer, 1,
2386					em_82547_move_tail, adapter);
2387				break;
2388			}
2389			E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), hw_tdt);
2390			em_82547_update_fifo_head(adapter, length);
2391			length = 0;
2392		}
2393	}
2394}
2395
2396static int
2397em_82547_fifo_workaround(struct adapter *adapter, int len)
2398{
2399	int fifo_space, fifo_pkt_len;
2400
2401	fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
2402
2403	if (adapter->link_duplex == HALF_DUPLEX) {
2404		fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;
2405
2406		if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
2407			if (em_82547_tx_fifo_reset(adapter))
2408				return (0);
2409			else
2410				return (1);
2411		}
2412	}
2413
2414	return (0);
2415}
2416
2417static void
2418em_82547_update_fifo_head(struct adapter *adapter, int len)
2419{
2420	int fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
2421
2422	/* tx_fifo_head is always 16 byte aligned */
2423	adapter->tx_fifo_head += fifo_pkt_len;
2424	if (adapter->tx_fifo_head >= adapter->tx_fifo_size) {
2425		adapter->tx_fifo_head -= adapter->tx_fifo_size;
2426	}
2427}
2428
2429
2430static int
2431em_82547_tx_fifo_reset(struct adapter *adapter)
2432{
2433	u32 tctl;
2434
2435	if ((E1000_READ_REG(&adapter->hw, E1000_TDT(0)) ==
2436	    E1000_READ_REG(&adapter->hw, E1000_TDH(0))) &&
2437	    (E1000_READ_REG(&adapter->hw, E1000_TDFT) ==
2438	    E1000_READ_REG(&adapter->hw, E1000_TDFH)) &&
2439	    (E1000_READ_REG(&adapter->hw, E1000_TDFTS) ==
2440	    E1000_READ_REG(&adapter->hw, E1000_TDFHS)) &&
2441	    (E1000_READ_REG(&adapter->hw, E1000_TDFPC) == 0)) {
2442		/* Disable TX unit */
2443		tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
2444		E1000_WRITE_REG(&adapter->hw, E1000_TCTL,
2445		    tctl & ~E1000_TCTL_EN);
2446
2447		/* Reset FIFO pointers */
2448		E1000_WRITE_REG(&adapter->hw, E1000_TDFT,
2449		    adapter->tx_head_addr);
2450		E1000_WRITE_REG(&adapter->hw, E1000_TDFH,
2451		    adapter->tx_head_addr);
2452		E1000_WRITE_REG(&adapter->hw, E1000_TDFTS,
2453		    adapter->tx_head_addr);
2454		E1000_WRITE_REG(&adapter->hw, E1000_TDFHS,
2455		    adapter->tx_head_addr);
2456
2457		/* Re-enable TX unit */
2458		E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
2459		E1000_WRITE_FLUSH(&adapter->hw);
2460
2461		adapter->tx_fifo_head = 0;
2462		adapter->tx_fifo_reset_cnt++;
2463
2464		return (TRUE);
2465	}
2466	else {
2467		return (FALSE);
2468	}
2469}
2470
2471static void
2472em_set_promisc(struct adapter *adapter)
2473{
2474	struct ifnet	*ifp = adapter->ifp;
2475	u32		reg_rctl;
2476
2477	reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2478
2479	if (ifp->if_flags & IFF_PROMISC) {
2480		reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
2481		/* Turn this on if you want to see bad packets */
2482		if (em_debug_sbp)
2483			reg_rctl |= E1000_RCTL_SBP;
2484		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2485	} else if (ifp->if_flags & IFF_ALLMULTI) {
2486		reg_rctl |= E1000_RCTL_MPE;
2487		reg_rctl &= ~E1000_RCTL_UPE;
2488		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2489	}
2490}
2491
2492static void
2493em_disable_promisc(struct adapter *adapter)
2494{
2495	u32	reg_rctl;
2496
2497	reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2498
2499	reg_rctl &=  (~E1000_RCTL_UPE);
2500	reg_rctl &=  (~E1000_RCTL_MPE);
2501	reg_rctl &=  (~E1000_RCTL_SBP);
2502	E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2503}
2504
2505
2506/*********************************************************************
2507 *  Multicast Update
2508 *
2509 *  This routine is called whenever multicast address list is updated.
2510 *
2511 **********************************************************************/
2512
2513static void
2514em_set_multi(struct adapter *adapter)
2515{
2516	struct ifnet	*ifp = adapter->ifp;
2517	struct ifmultiaddr *ifma;
2518	u32 reg_rctl = 0;
2519	u8  *mta; /* Multicast array memory */
2520	int mcnt = 0;
2521
2522	IOCTL_DEBUGOUT("em_set_multi: begin");
2523
2524	if (adapter->hw.mac.type == e1000_82542 &&
2525	    adapter->hw.revision_id == E1000_REVISION_2) {
2526		reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2527		if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2528			e1000_pci_clear_mwi(&adapter->hw);
2529		reg_rctl |= E1000_RCTL_RST;
2530		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2531		msec_delay(5);
2532	}
2533
2534	/* Allocate temporary memory to setup array */
2535	mta = malloc(sizeof(u8) *
2536	    (ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES),
2537	    M_DEVBUF, M_NOWAIT | M_ZERO);
2538	if (mta == NULL)
2539		panic("em_set_multi memory failure\n");
2540
2541	if_maddr_rlock(ifp);
2542	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
2543		if (ifma->ifma_addr->sa_family != AF_LINK)
2544			continue;
2545
2546		if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
2547			break;
2548
2549		bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
2550		    &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN);
2551		mcnt++;
2552	}
2553	if_maddr_runlock(ifp);
2554
2555	if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
2556		reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2557		reg_rctl |= E1000_RCTL_MPE;
2558		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2559	} else
2560		e1000_update_mc_addr_list(&adapter->hw, mta, mcnt);
2561
2562	if (adapter->hw.mac.type == e1000_82542 &&
2563	    adapter->hw.revision_id == E1000_REVISION_2) {
2564		reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2565		reg_rctl &= ~E1000_RCTL_RST;
2566		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2567		msec_delay(5);
2568		if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2569			e1000_pci_set_mwi(&adapter->hw);
2570	}
2571	free(mta, M_DEVBUF);
2572}
2573
2574
2575/*********************************************************************
2576 *  Timer routine
2577 *
2578 *  This routine checks for link status and updates statistics.
2579 *
2580 **********************************************************************/
2581
2582static void
2583em_local_timer(void *arg)
2584{
2585	struct adapter	*adapter = arg;
2586	struct ifnet	*ifp = adapter->ifp;
2587
2588	EM_CORE_LOCK_ASSERT(adapter);
2589
2590	taskqueue_enqueue(adapter->tq,
2591	    &adapter->rxtx_task);
2592	em_update_link_status(adapter);
2593	em_update_stats_counters(adapter);
2594
2595	/* Reset LAA into RAR[0] on 82571 */
2596	if (e1000_get_laa_state_82571(&adapter->hw) == TRUE)
2597		e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
2598
2599	if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING)
2600		em_print_hw_stats(adapter);
2601
2602	em_smartspeed(adapter);
2603
2604	/*
2605	 * Each second we check the watchdog to
2606	 * protect against hardware hangs.
2607	 */
2608	em_watchdog(adapter);
2609
2610	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
2611
2612}
2613
2614static void
2615em_update_link_status(struct adapter *adapter)
2616{
2617	struct e1000_hw *hw = &adapter->hw;
2618	struct ifnet *ifp = adapter->ifp;
2619	device_t dev = adapter->dev;
2620	u32 link_check = 0;
2621
2622	/* Get the cached link value or read phy for real */
2623	switch (hw->phy.media_type) {
2624	case e1000_media_type_copper:
2625		if (hw->mac.get_link_status) {
2626			/* Do the work to read phy */
2627			e1000_check_for_link(hw);
2628			link_check = !hw->mac.get_link_status;
2629			if (link_check) /* ESB2 fix */
2630				e1000_cfg_on_link_up(hw);
2631		} else
2632			link_check = TRUE;
2633		break;
2634	case e1000_media_type_fiber:
2635		e1000_check_for_link(hw);
2636		link_check = (E1000_READ_REG(hw, E1000_STATUS) &
2637                                 E1000_STATUS_LU);
2638		break;
2639	case e1000_media_type_internal_serdes:
2640		e1000_check_for_link(hw);
2641		link_check = adapter->hw.mac.serdes_has_link;
2642		break;
2643	default:
2644	case e1000_media_type_unknown:
2645		break;
2646	}
2647
2648	/* Now check for a transition */
2649	if (link_check && (adapter->link_active == 0)) {
2650		e1000_get_speed_and_duplex(hw, &adapter->link_speed,
2651		    &adapter->link_duplex);
2652		/* Check if we must disable SPEED_MODE bit on PCI-E */
2653		if ((adapter->link_speed != SPEED_1000) &&
2654		    ((hw->mac.type == e1000_82571) ||
2655		    (hw->mac.type == e1000_82572))) {
2656			int tarc0;
2657			tarc0 = E1000_READ_REG(hw, E1000_TARC(0));
2658			tarc0 &= ~SPEED_MODE_BIT;
2659			E1000_WRITE_REG(hw, E1000_TARC(0), tarc0);
2660		}
2661		if (bootverbose)
2662			device_printf(dev, "Link is up %d Mbps %s\n",
2663			    adapter->link_speed,
2664			    ((adapter->link_duplex == FULL_DUPLEX) ?
2665			    "Full Duplex" : "Half Duplex"));
2666		adapter->link_active = 1;
2667		adapter->smartspeed = 0;
2668		ifp->if_baudrate = adapter->link_speed * 1000000;
2669		if_link_state_change(ifp, LINK_STATE_UP);
2670	} else if (!link_check && (adapter->link_active == 1)) {
2671		ifp->if_baudrate = adapter->link_speed = 0;
2672		adapter->link_duplex = 0;
2673		if (bootverbose)
2674			device_printf(dev, "Link is Down\n");
2675		adapter->link_active = 0;
2676		/* Link down, disable watchdog */
2677		adapter->watchdog_timer = FALSE;
2678		if_link_state_change(ifp, LINK_STATE_DOWN);
2679	}
2680}
2681
2682/*********************************************************************
2683 *
2684 *  This routine disables all traffic on the adapter by issuing a
2685 *  global reset on the MAC and deallocates TX/RX buffers.
2686 *
2687 *  This routine should always be called with BOTH the CORE
2688 *  and TX locks.
2689 **********************************************************************/
2690
2691static void
2692em_stop(void *arg)
2693{
2694	struct adapter	*adapter = arg;
2695	struct ifnet	*ifp = adapter->ifp;
2696
2697	EM_CORE_LOCK_ASSERT(adapter);
2698	EM_TX_LOCK_ASSERT(adapter);
2699
2700	INIT_DEBUGOUT("em_stop: begin");
2701
2702	em_disable_intr(adapter);
2703	callout_stop(&adapter->timer);
2704	callout_stop(&adapter->tx_fifo_timer);
2705
2706	/* Tell the stack that the interface is no longer active */
2707	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
2708
2709	e1000_reset_hw(&adapter->hw);
2710	if (adapter->hw.mac.type >= e1000_82544)
2711		E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0);
2712}
2713
2714
2715/*********************************************************************
2716 *
2717 *  Determine hardware revision.
2718 *
2719 **********************************************************************/
2720static void
2721em_identify_hardware(struct adapter *adapter)
2722{
2723	device_t dev = adapter->dev;
2724
2725	/* Make sure our PCI config space has the necessary stuff set */
2726	adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
2727	if (!((adapter->hw.bus.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
2728	    (adapter->hw.bus.pci_cmd_word & PCIM_CMD_MEMEN))) {
2729		device_printf(dev, "Memory Access and/or Bus Master bits "
2730		    "were not set!\n");
2731		adapter->hw.bus.pci_cmd_word |=
2732		(PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
2733		pci_write_config(dev, PCIR_COMMAND,
2734		    adapter->hw.bus.pci_cmd_word, 2);
2735	}
2736
2737	/* Save off the information about this board */
2738	adapter->hw.vendor_id = pci_get_vendor(dev);
2739	adapter->hw.device_id = pci_get_device(dev);
2740	adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
2741	adapter->hw.subsystem_vendor_id =
2742	    pci_read_config(dev, PCIR_SUBVEND_0, 2);
2743	adapter->hw.subsystem_device_id =
2744	    pci_read_config(dev, PCIR_SUBDEV_0, 2);
2745
2746	/* Do Shared Code Init and Setup */
2747	if (e1000_set_mac_type(&adapter->hw)) {
2748		device_printf(dev, "Setup init failure\n");
2749		return;
2750	}
2751}
2752
2753static int
2754em_allocate_pci_resources(struct adapter *adapter)
2755{
2756	device_t	dev = adapter->dev;
2757	int		val, rid, error = E1000_SUCCESS;
2758
2759	rid = PCIR_BAR(0);
2760	adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
2761	    &rid, RF_ACTIVE);
2762	if (adapter->memory == NULL) {
2763		device_printf(dev, "Unable to allocate bus resource: memory\n");
2764		return (ENXIO);
2765	}
2766	adapter->osdep.mem_bus_space_tag =
2767	    rman_get_bustag(adapter->memory);
2768	adapter->osdep.mem_bus_space_handle =
2769	    rman_get_bushandle(adapter->memory);
2770	adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
2771
2772	/* Only older adapters use IO mapping */
2773	if ((adapter->hw.mac.type > e1000_82543) &&
2774	    (adapter->hw.mac.type < e1000_82571)) {
2775		/* Figure our where our IO BAR is ? */
2776		for (rid = PCIR_BAR(0); rid < PCIR_CIS;) {
2777			val = pci_read_config(dev, rid, 4);
2778			if (EM_BAR_TYPE(val) == EM_BAR_TYPE_IO) {
2779				adapter->io_rid = rid;
2780				break;
2781			}
2782			rid += 4;
2783			/* check for 64bit BAR */
2784			if (EM_BAR_MEM_TYPE(val) == EM_BAR_MEM_TYPE_64BIT)
2785				rid += 4;
2786		}
2787		if (rid >= PCIR_CIS) {
2788			device_printf(dev, "Unable to locate IO BAR\n");
2789			return (ENXIO);
2790		}
2791		adapter->ioport = bus_alloc_resource_any(dev,
2792		    SYS_RES_IOPORT, &adapter->io_rid, RF_ACTIVE);
2793		if (adapter->ioport == NULL) {
2794			device_printf(dev, "Unable to allocate bus resource: "
2795			    "ioport\n");
2796			return (ENXIO);
2797		}
2798		adapter->hw.io_base = 0;
2799		adapter->osdep.io_bus_space_tag =
2800		    rman_get_bustag(adapter->ioport);
2801		adapter->osdep.io_bus_space_handle =
2802		    rman_get_bushandle(adapter->ioport);
2803	}
2804
2805	/*
2806	** Init the resource arrays
2807	**  used by MSIX setup
2808	*/
2809	for (int i = 0; i < 3; i++) {
2810		adapter->rid[i] = i + 1; /* MSI/X RID starts at 1 */
2811		adapter->tag[i] = NULL;
2812		adapter->res[i] = NULL;
2813	}
2814
2815	/*
2816	 * Setup MSI/X or MSI if PCI Express
2817	 */
2818	if (em_enable_msi)
2819		adapter->msi = em_setup_msix(adapter);
2820
2821	adapter->hw.back = &adapter->osdep;
2822
2823	return (error);
2824}
2825
2826/*********************************************************************
2827 *
2828 *  Setup the Legacy or MSI Interrupt handler
2829 *
2830 **********************************************************************/
2831int
2832em_allocate_legacy(struct adapter *adapter)
2833{
2834	device_t dev = adapter->dev;
2835	int error;
2836
2837	/* Manually turn off all interrupts */
2838	E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2839
2840	/* Legacy RID is 0 */
2841	if (adapter->msi == 0)
2842		adapter->rid[0] = 0;
2843
2844	/* We allocate a single interrupt resource */
2845	adapter->res[0] = bus_alloc_resource_any(dev,
2846	    SYS_RES_IRQ, &adapter->rid[0], RF_SHAREABLE | RF_ACTIVE);
2847	if (adapter->res[0] == NULL) {
2848		device_printf(dev, "Unable to allocate bus resource: "
2849		    "interrupt\n");
2850		return (ENXIO);
2851	}
2852
2853#ifdef EM_LEGACY_IRQ
2854	/* We do Legacy setup */
2855	if ((error = bus_setup_intr(dev, adapter->res[0],
2856#if __FreeBSD_version > 700000
2857	    INTR_TYPE_NET | INTR_MPSAFE, NULL, em_intr, adapter,
2858#else /* 6.X */
2859	    INTR_TYPE_NET | INTR_MPSAFE, em_intr, adapter,
2860#endif
2861	    &adapter->tag[0])) != 0) {
2862		device_printf(dev, "Failed to register interrupt handler");
2863		return (error);
2864	}
2865
2866#else /* FAST_IRQ */
2867	/*
2868	 * Try allocating a fast interrupt and the associated deferred
2869	 * processing contexts.
2870	 */
2871	TASK_INIT(&adapter->rxtx_task, 0, em_handle_rxtx, adapter);
2872	TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2873	adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2874	    taskqueue_thread_enqueue, &adapter->tq);
2875	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq",
2876	    device_get_nameunit(adapter->dev));
2877#if __FreeBSD_version < 700000
2878	if ((error = bus_setup_intr(dev, adapter->res[0],
2879	    INTR_TYPE_NET | INTR_FAST, em_irq_fast, adapter,
2880#else
2881	if ((error = bus_setup_intr(dev, adapter->res[0],
2882	    INTR_TYPE_NET, em_irq_fast, NULL, adapter,
2883#endif
2884	    &adapter->tag[0])) != 0) {
2885		device_printf(dev, "Failed to register fast interrupt "
2886			    "handler: %d\n", error);
2887		taskqueue_free(adapter->tq);
2888		adapter->tq = NULL;
2889		return (error);
2890	}
2891#endif  /* EM_LEGACY_IRQ */
2892
2893	return (0);
2894}
2895
2896/*********************************************************************
2897 *
2898 *  Setup the MSIX Interrupt handlers
2899 *   This is not really Multiqueue, rather
2900 *   its just multiple interrupt vectors.
2901 *
2902 **********************************************************************/
2903int
2904em_allocate_msix(struct adapter *adapter)
2905{
2906	device_t dev = adapter->dev;
2907	int error;
2908
2909	/* Make sure all interrupts are disabled */
2910	E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2911
2912	/* First get the resources */
2913	for (int i = 0; i < adapter->msi; i++) {
2914		adapter->res[i] = bus_alloc_resource_any(dev,
2915		    SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE);
2916		if (adapter->res[i] == NULL) {
2917			device_printf(dev,
2918			    "Unable to allocate bus resource: "
2919			    "MSIX Interrupt\n");
2920			return (ENXIO);
2921		}
2922	}
2923
2924	/*
2925	 * Now allocate deferred processing contexts.
2926	 */
2927	TASK_INIT(&adapter->rx_task, 0, em_handle_rx, adapter);
2928	TASK_INIT(&adapter->tx_task, 0, em_handle_tx, adapter);
2929	/*
2930	 * Handle compatibility for msi case for deferral due to
2931	 * trylock failure
2932	 */
2933	TASK_INIT(&adapter->rxtx_task, 0, em_handle_tx, adapter);
2934	TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2935	adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2936	    taskqueue_thread_enqueue, &adapter->tq);
2937	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq",
2938	    device_get_nameunit(adapter->dev));
2939
2940	/*
2941	 * And setup the interrupt handlers
2942	 */
2943
2944	/* First slot to RX */
2945	if ((error = bus_setup_intr(dev, adapter->res[0],
2946#if __FreeBSD_version > 700000
2947	    INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx, adapter,
2948#else /* 6.X */
2949	    INTR_TYPE_NET | INTR_MPSAFE, em_msix_rx, adapter,
2950#endif
2951	    &adapter->tag[0])) != 0) {
2952		device_printf(dev, "Failed to register RX handler");
2953		return (error);
2954	}
2955
2956	/* Next TX */
2957	if ((error = bus_setup_intr(dev, adapter->res[1],
2958#if __FreeBSD_version > 700000
2959	    INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx, adapter,
2960#else /* 6.X */
2961	    INTR_TYPE_NET | INTR_MPSAFE, em_msix_tx, adapter,
2962#endif
2963	    &adapter->tag[1])) != 0) {
2964		device_printf(dev, "Failed to register TX handler");
2965		return (error);
2966	}
2967
2968	/* And Link */
2969	if ((error = bus_setup_intr(dev, adapter->res[2],
2970#if __FreeBSD_version > 700000
2971	    INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_link, adapter,
2972#else /* 6.X */
2973	    INTR_TYPE_NET | INTR_MPSAFE, em_msix_link, adapter,
2974#endif
2975	    &adapter->tag[2])) != 0) {
2976		device_printf(dev, "Failed to register TX handler");
2977		return (error);
2978	}
2979
2980	return (0);
2981}
2982
2983
2984static void
2985em_free_pci_resources(struct adapter *adapter)
2986{
2987	device_t dev = adapter->dev;
2988
2989	/* Make sure the for loop below runs once */
2990	if (adapter->msi == 0)
2991		adapter->msi = 1;
2992
2993	/*
2994	 * First release all the interrupt resources:
2995	 *      notice that since these are just kept
2996	 *      in an array we can do the same logic
2997	 *      whether its MSIX or just legacy.
2998	 */
2999	for (int i = 0; i < adapter->msi; i++) {
3000		if (adapter->tag[i] != NULL) {
3001			bus_teardown_intr(dev, adapter->res[i],
3002			    adapter->tag[i]);
3003			adapter->tag[i] = NULL;
3004		}
3005		if (adapter->res[i] != NULL) {
3006			bus_release_resource(dev, SYS_RES_IRQ,
3007			    adapter->rid[i], adapter->res[i]);
3008		}
3009	}
3010
3011	if (adapter->msi)
3012		pci_release_msi(dev);
3013
3014	if (adapter->msix != NULL)
3015		bus_release_resource(dev, SYS_RES_MEMORY,
3016		    PCIR_BAR(EM_MSIX_BAR), adapter->msix);
3017
3018	if (adapter->memory != NULL)
3019		bus_release_resource(dev, SYS_RES_MEMORY,
3020		    PCIR_BAR(0), adapter->memory);
3021
3022	if (adapter->flash != NULL)
3023		bus_release_resource(dev, SYS_RES_MEMORY,
3024		    EM_FLASH, adapter->flash);
3025
3026	if (adapter->ioport != NULL)
3027		bus_release_resource(dev, SYS_RES_IOPORT,
3028		    adapter->io_rid, adapter->ioport);
3029}
3030
3031/*
3032 * Setup MSI or MSI/X
3033 */
3034static int
3035em_setup_msix(struct adapter *adapter)
3036{
3037	device_t dev = adapter->dev;
3038	int val = 0;
3039
3040	if (adapter->hw.mac.type < e1000_82571)
3041		return (0);
3042
3043	/* Setup MSI/X for Hartwell */
3044	if (adapter->hw.mac.type == e1000_82574) {
3045		/* Map the MSIX BAR */
3046		int rid = PCIR_BAR(EM_MSIX_BAR);
3047		adapter->msix = bus_alloc_resource_any(dev,
3048		    SYS_RES_MEMORY, &rid, RF_ACTIVE);
3049       		if (!adapter->msix) {
3050			/* May not be enabled */
3051               		device_printf(adapter->dev,
3052			    "Unable to map MSIX table \n");
3053			goto msi;
3054       		}
3055		val = pci_msix_count(dev);
3056		/*
3057		** 82574 can be configured for 5 but
3058		** we limit use to 3.
3059		*/
3060		if (val > 3) val = 3;
3061		if ((val) && pci_alloc_msix(dev, &val) == 0) {
3062               		device_printf(adapter->dev,"Using MSIX interrupts\n");
3063			return (val);
3064		}
3065	}
3066msi:
3067       	val = pci_msi_count(dev);
3068       	if (val == 1 && pci_alloc_msi(dev, &val) == 0) {
3069               	adapter->msi = 1;
3070               	device_printf(adapter->dev,"Using MSI interrupt\n");
3071		return (val);
3072	}
3073	return (0);
3074}
3075
3076/*********************************************************************
3077 *
3078 *  Initialize the hardware to a configuration
3079 *  as specified by the adapter structure.
3080 *
3081 **********************************************************************/
3082static int
3083em_hardware_init(struct adapter *adapter)
3084{
3085	device_t dev = adapter->dev;
3086	u16 	rx_buffer_size;
3087
3088	INIT_DEBUGOUT("em_hardware_init: begin");
3089
3090	/* Issue a global reset */
3091	e1000_reset_hw(&adapter->hw);
3092
3093	/* Get control from any management/hw control */
3094	if (((adapter->hw.mac.type == e1000_82573) ||
3095	    (adapter->hw.mac.type == e1000_82583) ||
3096	    (adapter->hw.mac.type == e1000_ich8lan) ||
3097	    (adapter->hw.mac.type == e1000_ich10lan) ||
3098	    (adapter->hw.mac.type == e1000_ich9lan)) &&
3099	    e1000_check_mng_mode(&adapter->hw))
3100		em_get_hw_control(adapter);
3101
3102	/* When hardware is reset, fifo_head is also reset */
3103	adapter->tx_fifo_head = 0;
3104
3105	/* Set up smart power down as default off on newer adapters. */
3106	if (!em_smart_pwr_down && (adapter->hw.mac.type == e1000_82571 ||
3107	    adapter->hw.mac.type == e1000_82572)) {
3108		u16 phy_tmp = 0;
3109
3110		/* Speed up time to link by disabling smart power down. */
3111		e1000_read_phy_reg(&adapter->hw,
3112		    IGP02E1000_PHY_POWER_MGMT, &phy_tmp);
3113		phy_tmp &= ~IGP02E1000_PM_SPD;
3114		e1000_write_phy_reg(&adapter->hw,
3115		    IGP02E1000_PHY_POWER_MGMT, phy_tmp);
3116	}
3117
3118	/*
3119	 * These parameters control the automatic generation (Tx) and
3120	 * response (Rx) to Ethernet PAUSE frames.
3121	 * - High water mark should allow for at least two frames to be
3122	 *   received after sending an XOFF.
3123	 * - Low water mark works best when it is very near the high water mark.
3124	 *   This allows the receiver to restart by sending XON when it has
3125	 *   drained a bit. Here we use an arbitary value of 1500 which will
3126	 *   restart after one full frame is pulled from the buffer. There
3127	 *   could be several smaller frames in the buffer and if so they will
3128	 *   not trigger the XON until their total number reduces the buffer
3129	 *   by 1500.
3130	 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
3131	 */
3132	rx_buffer_size = ((E1000_READ_REG(&adapter->hw, E1000_PBA) &
3133	    0xffff) << 10 );
3134
3135	adapter->hw.fc.high_water = rx_buffer_size -
3136	    roundup2(adapter->max_frame_size, 1024);
3137	adapter->hw.fc.low_water = adapter->hw.fc.high_water - 1500;
3138
3139	if (adapter->hw.mac.type == e1000_80003es2lan)
3140		adapter->hw.fc.pause_time = 0xFFFF;
3141	else
3142		adapter->hw.fc.pause_time = EM_FC_PAUSE_TIME;
3143	adapter->hw.fc.send_xon = TRUE;
3144
3145        /* Set Flow control, use the tunable location if sane */
3146        if ((em_fc_setting >= 0) || (em_fc_setting < 4))
3147                adapter->hw.fc.requested_mode = em_fc_setting;
3148        else
3149                adapter->hw.fc.requested_mode = e1000_fc_none;
3150
3151
3152	if (e1000_init_hw(&adapter->hw) < 0) {
3153		device_printf(dev, "Hardware Initialization Failed\n");
3154		return (EIO);
3155	}
3156
3157	e1000_check_for_link(&adapter->hw);
3158
3159	return (0);
3160}
3161
3162/*********************************************************************
3163 *
3164 *  Setup networking device structure and register an interface.
3165 *
3166 **********************************************************************/
3167static void
3168em_setup_interface(device_t dev, struct adapter *adapter)
3169{
3170	struct ifnet   *ifp;
3171
3172	INIT_DEBUGOUT("em_setup_interface: begin");
3173
3174	ifp = adapter->ifp = if_alloc(IFT_ETHER);
3175	if (ifp == NULL)
3176		panic("%s: can not if_alloc()", device_get_nameunit(dev));
3177	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
3178	ifp->if_mtu = ETHERMTU;
3179	ifp->if_init =  em_init;
3180	ifp->if_softc = adapter;
3181	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
3182	ifp->if_ioctl = em_ioctl;
3183	ifp->if_start = em_start;
3184	IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1);
3185	ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1;
3186	IFQ_SET_READY(&ifp->if_snd);
3187
3188	ether_ifattach(ifp, adapter->hw.mac.addr);
3189
3190	ifp->if_capabilities = ifp->if_capenable = 0;
3191
3192#if __FreeBSD_version >= 800000
3193	/* Multiqueue tx functions */
3194	ifp->if_transmit = em_mq_start;
3195	ifp->if_qflush = em_qflush;
3196	adapter->br = buf_ring_alloc(4096, M_DEVBUF, M_WAITOK, &adapter->tx_mtx);
3197#endif
3198	if (adapter->hw.mac.type >= e1000_82543) {
3199		int version_cap;
3200#if __FreeBSD_version < 700000
3201		version_cap = IFCAP_HWCSUM;
3202#else
3203		version_cap = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM;
3204#endif
3205		ifp->if_capabilities |= version_cap;
3206		ifp->if_capenable |= version_cap;
3207	}
3208
3209#if __FreeBSD_version >= 700000
3210	/* Identify TSO capable adapters */
3211	if ((adapter->hw.mac.type > e1000_82544) &&
3212	    (adapter->hw.mac.type != e1000_82547))
3213		ifp->if_capabilities |= IFCAP_TSO4;
3214	/*
3215	 * By default only enable on PCI-E, this
3216	 * can be overriden by ifconfig.
3217	 */
3218	if (adapter->hw.mac.type >= e1000_82571)
3219		ifp->if_capenable |= IFCAP_TSO4;
3220#endif
3221
3222	/*
3223	 * Tell the upper layer(s) we support long frames.
3224	 */
3225	ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
3226	ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
3227	ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
3228
3229#ifdef DEVICE_POLLING
3230	ifp->if_capabilities |= IFCAP_POLLING;
3231#endif
3232
3233	/*
3234	 * Specify the media types supported by this adapter and register
3235	 * callbacks to update media and link information
3236	 */
3237	ifmedia_init(&adapter->media, IFM_IMASK,
3238	    em_media_change, em_media_status);
3239	if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3240	    (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
3241		u_char fiber_type = IFM_1000_SX;	/* default type */
3242
3243		if (adapter->hw.mac.type == e1000_82545)
3244			fiber_type = IFM_1000_LX;
3245		ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX,
3246			    0, NULL);
3247		ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL);
3248	} else {
3249		ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
3250		ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
3251			    0, NULL);
3252		ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
3253			    0, NULL);
3254		ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
3255			    0, NULL);
3256		if (adapter->hw.phy.type != e1000_phy_ife) {
3257			ifmedia_add(&adapter->media,
3258				IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
3259			ifmedia_add(&adapter->media,
3260				IFM_ETHER | IFM_1000_T, 0, NULL);
3261		}
3262	}
3263	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
3264	ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
3265}
3266
3267
3268/*********************************************************************
3269 *
3270 *  Workaround for SmartSpeed on 82541 and 82547 controllers
3271 *
3272 **********************************************************************/
3273static void
3274em_smartspeed(struct adapter *adapter)
3275{
3276	u16 phy_tmp;
3277
3278	if (adapter->link_active || (adapter->hw.phy.type != e1000_phy_igp) ||
3279	    adapter->hw.mac.autoneg == 0 ||
3280	    (adapter->hw.phy.autoneg_advertised & ADVERTISE_1000_FULL) == 0)
3281		return;
3282
3283	if (adapter->smartspeed == 0) {
3284		/* If Master/Slave config fault is asserted twice,
3285		 * we assume back-to-back */
3286		e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
3287		if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT))
3288			return;
3289		e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
3290		if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
3291			e1000_read_phy_reg(&adapter->hw,
3292			    PHY_1000T_CTRL, &phy_tmp);
3293			if(phy_tmp & CR_1000T_MS_ENABLE) {
3294				phy_tmp &= ~CR_1000T_MS_ENABLE;
3295				e1000_write_phy_reg(&adapter->hw,
3296				    PHY_1000T_CTRL, phy_tmp);
3297				adapter->smartspeed++;
3298				if(adapter->hw.mac.autoneg &&
3299				   !e1000_phy_setup_autoneg(&adapter->hw) &&
3300				   !e1000_read_phy_reg(&adapter->hw,
3301				    PHY_CONTROL, &phy_tmp)) {
3302					phy_tmp |= (MII_CR_AUTO_NEG_EN |
3303						    MII_CR_RESTART_AUTO_NEG);
3304					e1000_write_phy_reg(&adapter->hw,
3305					    PHY_CONTROL, phy_tmp);
3306				}
3307			}
3308		}
3309		return;
3310	} else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
3311		/* If still no link, perhaps using 2/3 pair cable */
3312		e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
3313		phy_tmp |= CR_1000T_MS_ENABLE;
3314		e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
3315		if(adapter->hw.mac.autoneg &&
3316		   !e1000_phy_setup_autoneg(&adapter->hw) &&
3317		   !e1000_read_phy_reg(&adapter->hw, PHY_CONTROL, &phy_tmp)) {
3318			phy_tmp |= (MII_CR_AUTO_NEG_EN |
3319				    MII_CR_RESTART_AUTO_NEG);
3320			e1000_write_phy_reg(&adapter->hw, PHY_CONTROL, phy_tmp);
3321		}
3322	}
3323	/* Restart process after EM_SMARTSPEED_MAX iterations */
3324	if(adapter->smartspeed++ == EM_SMARTSPEED_MAX)
3325		adapter->smartspeed = 0;
3326}
3327
3328
3329/*
3330 * Manage DMA'able memory.
3331 */
3332static void
3333em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
3334{
3335	if (error)
3336		return;
3337	*(bus_addr_t *) arg = segs[0].ds_addr;
3338}
3339
3340static int
3341em_dma_malloc(struct adapter *adapter, bus_size_t size,
3342        struct em_dma_alloc *dma, int mapflags)
3343{
3344	int error;
3345
3346#if __FreeBSD_version >= 700000
3347	error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */
3348#else
3349	error = bus_dma_tag_create(NULL,		 /* parent */
3350#endif
3351				EM_DBA_ALIGN, 0,	/* alignment, bounds */
3352				BUS_SPACE_MAXADDR,	/* lowaddr */
3353				BUS_SPACE_MAXADDR,	/* highaddr */
3354				NULL, NULL,		/* filter, filterarg */
3355				size,			/* maxsize */
3356				1,			/* nsegments */
3357				size,			/* maxsegsize */
3358				0,			/* flags */
3359				NULL,			/* lockfunc */
3360				NULL,			/* lockarg */
3361				&dma->dma_tag);
3362	if (error) {
3363		device_printf(adapter->dev,
3364		    "%s: bus_dma_tag_create failed: %d\n",
3365		    __func__, error);
3366		goto fail_0;
3367	}
3368
3369	error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
3370	    BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map);
3371	if (error) {
3372		device_printf(adapter->dev,
3373		    "%s: bus_dmamem_alloc(%ju) failed: %d\n",
3374		    __func__, (uintmax_t)size, error);
3375		goto fail_2;
3376	}
3377
3378	dma->dma_paddr = 0;
3379	error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
3380	    size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT);
3381	if (error || dma->dma_paddr == 0) {
3382		device_printf(adapter->dev,
3383		    "%s: bus_dmamap_load failed: %d\n",
3384		    __func__, error);
3385		goto fail_3;
3386	}
3387
3388	return (0);
3389
3390fail_3:
3391	bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3392fail_2:
3393	bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3394	bus_dma_tag_destroy(dma->dma_tag);
3395fail_0:
3396	dma->dma_map = NULL;
3397	dma->dma_tag = NULL;
3398
3399	return (error);
3400}
3401
3402static void
3403em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
3404{
3405	if (dma->dma_tag == NULL)
3406		return;
3407	if (dma->dma_map != NULL) {
3408		bus_dmamap_sync(dma->dma_tag, dma->dma_map,
3409		    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
3410		bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3411		bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3412		dma->dma_map = NULL;
3413	}
3414	bus_dma_tag_destroy(dma->dma_tag);
3415	dma->dma_tag = NULL;
3416}
3417
3418
3419/*********************************************************************
3420 *
3421 *  Allocate memory for tx_buffer structures. The tx_buffer stores all
3422 *  the information needed to transmit a packet on the wire.
3423 *
3424 **********************************************************************/
3425static int
3426em_allocate_transmit_structures(struct adapter *adapter)
3427{
3428	device_t dev = adapter->dev;
3429	struct em_buffer *tx_buffer;
3430	int error;
3431
3432	/*
3433	 * Create DMA tags for tx descriptors
3434	 */
3435#if __FreeBSD_version >= 700000
3436	if ((error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
3437#else
3438	if ((error = bus_dma_tag_create(NULL,		 /* parent */
3439#endif
3440				1, 0,			/* alignment, bounds */
3441				BUS_SPACE_MAXADDR,	/* lowaddr */
3442				BUS_SPACE_MAXADDR,	/* highaddr */
3443				NULL, NULL,		/* filter, filterarg */
3444				EM_TSO_SIZE,		/* maxsize */
3445				EM_MAX_SCATTER,		/* nsegments */
3446				EM_TSO_SEG_SIZE,	/* maxsegsize */
3447				0,			/* flags */
3448				NULL,		/* lockfunc */
3449				NULL,		/* lockarg */
3450				&adapter->txtag)) != 0) {
3451		device_printf(dev, "Unable to allocate TX DMA tag\n");
3452		goto fail;
3453	}
3454
3455	adapter->tx_buffer_area = malloc(sizeof(struct em_buffer) *
3456	    adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
3457	if (adapter->tx_buffer_area == NULL) {
3458		device_printf(dev, "Unable to allocate tx_buffer memory\n");
3459		error = ENOMEM;
3460		goto fail;
3461	}
3462
3463	/* Create the descriptor buffer dma maps */
3464	for (int i = 0; i < adapter->num_tx_desc; i++) {
3465		tx_buffer = &adapter->tx_buffer_area[i];
3466		error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map);
3467		if (error != 0) {
3468			device_printf(dev, "Unable to create TX DMA map\n");
3469			goto fail;
3470		}
3471		tx_buffer->next_eop = -1;
3472	}
3473
3474	return (0);
3475fail:
3476	em_free_transmit_structures(adapter);
3477	return (error);
3478}
3479
3480/*********************************************************************
3481 *
3482 *  (Re)Initialize transmit structures.
3483 *
3484 **********************************************************************/
3485static void
3486em_setup_transmit_structures(struct adapter *adapter)
3487{
3488	struct em_buffer *tx_buffer;
3489
3490	/* Clear the old ring contents */
3491	bzero(adapter->tx_desc_base,
3492	    (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc);
3493
3494	/* Free any existing TX buffers */
3495	for (int i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
3496		tx_buffer = &adapter->tx_buffer_area[i];
3497		bus_dmamap_sync(adapter->txtag, tx_buffer->map,
3498		    BUS_DMASYNC_POSTWRITE);
3499		bus_dmamap_unload(adapter->txtag, tx_buffer->map);
3500		m_freem(tx_buffer->m_head);
3501		tx_buffer->m_head = NULL;
3502		tx_buffer->next_eop = -1;
3503	}
3504
3505	/* Reset state */
3506	adapter->next_avail_tx_desc = 0;
3507	adapter->next_tx_to_clean = 0;
3508	adapter->num_tx_desc_avail = adapter->num_tx_desc;
3509
3510	bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
3511	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3512
3513	return;
3514}
3515
3516/*********************************************************************
3517 *
3518 *  Enable transmit unit.
3519 *
3520 **********************************************************************/
3521static void
3522em_initialize_transmit_unit(struct adapter *adapter)
3523{
3524	u32	tctl, tarc, tipg = 0;
3525	u64	bus_addr;
3526
3527	 INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
3528	/* Setup the Base and Length of the Tx Descriptor Ring */
3529	bus_addr = adapter->txdma.dma_paddr;
3530	E1000_WRITE_REG(&adapter->hw, E1000_TDLEN(0),
3531	    adapter->num_tx_desc * sizeof(struct e1000_tx_desc));
3532	E1000_WRITE_REG(&adapter->hw, E1000_TDBAH(0),
3533	    (u32)(bus_addr >> 32));
3534	E1000_WRITE_REG(&adapter->hw, E1000_TDBAL(0),
3535	    (u32)bus_addr);
3536	/* Setup the HW Tx Head and Tail descriptor pointers */
3537	E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), 0);
3538	E1000_WRITE_REG(&adapter->hw, E1000_TDH(0), 0);
3539
3540	HW_DEBUGOUT2("Base = %x, Length = %x\n",
3541	    E1000_READ_REG(&adapter->hw, E1000_TDBAL(0)),
3542	    E1000_READ_REG(&adapter->hw, E1000_TDLEN(0)));
3543
3544	/* Set the default values for the Tx Inter Packet Gap timer */
3545	switch (adapter->hw.mac.type) {
3546	case e1000_82542:
3547		tipg = DEFAULT_82542_TIPG_IPGT;
3548		tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3549		tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3550		break;
3551	case e1000_80003es2lan:
3552		tipg = DEFAULT_82543_TIPG_IPGR1;
3553		tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 <<
3554		    E1000_TIPG_IPGR2_SHIFT;
3555		break;
3556	default:
3557		if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3558		    (adapter->hw.phy.media_type ==
3559		    e1000_media_type_internal_serdes))
3560			tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
3561		else
3562			tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
3563		tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3564		tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3565	}
3566
3567	E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg);
3568	E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value);
3569	if(adapter->hw.mac.type >= e1000_82540)
3570		E1000_WRITE_REG(&adapter->hw, E1000_TADV,
3571		    adapter->tx_abs_int_delay.value);
3572
3573	if ((adapter->hw.mac.type == e1000_82571) ||
3574	    (adapter->hw.mac.type == e1000_82572)) {
3575		tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3576		tarc |= SPEED_MODE_BIT;
3577		E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3578	} else if (adapter->hw.mac.type == e1000_80003es2lan) {
3579		tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3580		tarc |= 1;
3581		E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3582		tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1));
3583		tarc |= 1;
3584		E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3585	}
3586
3587	/* Program the Transmit Control Register */
3588	tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
3589	tctl &= ~E1000_TCTL_CT;
3590	tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN |
3591		   (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT));
3592
3593	if (adapter->hw.mac.type >= e1000_82571)
3594		tctl |= E1000_TCTL_MULR;
3595
3596	/* This write will effectively turn on the transmit unit. */
3597	E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
3598
3599	/* Setup Transmit Descriptor Base Settings */
3600	adapter->txd_cmd = E1000_TXD_CMD_IFCS;
3601
3602	if (adapter->tx_int_delay.value > 0)
3603		adapter->txd_cmd |= E1000_TXD_CMD_IDE;
3604}
3605
3606/*********************************************************************
3607 *
3608 *  Free all transmit related data structures.
3609 *
3610 **********************************************************************/
3611static void
3612em_free_transmit_structures(struct adapter *adapter)
3613{
3614	struct em_buffer *tx_buffer;
3615
3616	INIT_DEBUGOUT("free_transmit_structures: begin");
3617
3618	if (adapter->tx_buffer_area != NULL) {
3619		for (int i = 0; i < adapter->num_tx_desc; i++) {
3620			tx_buffer = &adapter->tx_buffer_area[i];
3621			if (tx_buffer->m_head != NULL) {
3622				bus_dmamap_sync(adapter->txtag, tx_buffer->map,
3623				    BUS_DMASYNC_POSTWRITE);
3624				bus_dmamap_unload(adapter->txtag,
3625				    tx_buffer->map);
3626				m_freem(tx_buffer->m_head);
3627				tx_buffer->m_head = NULL;
3628			} else if (tx_buffer->map != NULL)
3629				bus_dmamap_unload(adapter->txtag,
3630				    tx_buffer->map);
3631			if (tx_buffer->map != NULL) {
3632				bus_dmamap_destroy(adapter->txtag,
3633				    tx_buffer->map);
3634				tx_buffer->map = NULL;
3635			}
3636		}
3637	}
3638	if (adapter->tx_buffer_area != NULL) {
3639		free(adapter->tx_buffer_area, M_DEVBUF);
3640		adapter->tx_buffer_area = NULL;
3641	}
3642	if (adapter->txtag != NULL) {
3643		bus_dma_tag_destroy(adapter->txtag);
3644		adapter->txtag = NULL;
3645	}
3646#if __FreeBSD_version >= 800000
3647        buf_ring_free(adapter->br, M_DEVBUF);
3648#endif
3649}
3650
3651/*********************************************************************
3652 *
3653 *  The offload context needs to be set when we transfer the first
3654 *  packet of a particular protocol (TCP/UDP). This routine has been
3655 *  enhanced to deal with inserted VLAN headers, and IPV6 (not complete)
3656 *
3657 *  Added back the old method of keeping the current context type
3658 *  and not setting if unnecessary, as this is reported to be a
3659 *  big performance win.  -jfv
3660 **********************************************************************/
3661static void
3662em_transmit_checksum_setup(struct adapter *adapter, struct mbuf *mp,
3663    u32 *txd_upper, u32 *txd_lower)
3664{
3665	struct e1000_context_desc *TXD = NULL;
3666	struct em_buffer *tx_buffer;
3667	struct ether_vlan_header *eh;
3668	struct ip *ip = NULL;
3669	struct ip6_hdr *ip6;
3670	int curr_txd, ehdrlen;
3671	u32 cmd, hdr_len, ip_hlen;
3672	u16 etype;
3673	u8 ipproto;
3674
3675
3676	cmd = hdr_len = ipproto = 0;
3677	curr_txd = adapter->next_avail_tx_desc;
3678
3679	/*
3680	 * Determine where frame payload starts.
3681	 * Jump over vlan headers if already present,
3682	 * helpful for QinQ too.
3683	 */
3684	eh = mtod(mp, struct ether_vlan_header *);
3685	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
3686		etype = ntohs(eh->evl_proto);
3687		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3688	} else {
3689		etype = ntohs(eh->evl_encap_proto);
3690		ehdrlen = ETHER_HDR_LEN;
3691	}
3692
3693	/*
3694	 * We only support TCP/UDP for IPv4 and IPv6 for the moment.
3695	 * TODO: Support SCTP too when it hits the tree.
3696	 */
3697	switch (etype) {
3698	case ETHERTYPE_IP:
3699		ip = (struct ip *)(mp->m_data + ehdrlen);
3700		ip_hlen = ip->ip_hl << 2;
3701
3702		/* Setup of IP header checksum. */
3703		if (mp->m_pkthdr.csum_flags & CSUM_IP) {
3704			/*
3705			 * Start offset for header checksum calculation.
3706			 * End offset for header checksum calculation.
3707			 * Offset of place to put the checksum.
3708			 */
3709			TXD = (struct e1000_context_desc *)
3710			    &adapter->tx_desc_base[curr_txd];
3711			TXD->lower_setup.ip_fields.ipcss = ehdrlen;
3712			TXD->lower_setup.ip_fields.ipcse =
3713			    htole16(ehdrlen + ip_hlen);
3714			TXD->lower_setup.ip_fields.ipcso =
3715			    ehdrlen + offsetof(struct ip, ip_sum);
3716			cmd |= E1000_TXD_CMD_IP;
3717			*txd_upper |= E1000_TXD_POPTS_IXSM << 8;
3718		}
3719
3720		if (mp->m_len < ehdrlen + ip_hlen)
3721			return;	/* failure */
3722
3723		hdr_len = ehdrlen + ip_hlen;
3724		ipproto = ip->ip_p;
3725
3726		break;
3727	case ETHERTYPE_IPV6:
3728		ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
3729		ip_hlen = sizeof(struct ip6_hdr); /* XXX: No header stacking. */
3730
3731		if (mp->m_len < ehdrlen + ip_hlen)
3732			return;	/* failure */
3733
3734		/* IPv6 doesn't have a header checksum. */
3735
3736		hdr_len = ehdrlen + ip_hlen;
3737		ipproto = ip6->ip6_nxt;
3738
3739		break;
3740	default:
3741		*txd_upper = 0;
3742		*txd_lower = 0;
3743		return;
3744	}
3745
3746	switch (ipproto) {
3747	case IPPROTO_TCP:
3748		if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
3749			*txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3750			*txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3751			/* no need for context if already set */
3752			if (adapter->last_hw_offload == CSUM_TCP)
3753				return;
3754			adapter->last_hw_offload = CSUM_TCP;
3755			/*
3756			 * Start offset for payload checksum calculation.
3757			 * End offset for payload checksum calculation.
3758			 * Offset of place to put the checksum.
3759			 */
3760			TXD = (struct e1000_context_desc *)
3761			    &adapter->tx_desc_base[curr_txd];
3762			TXD->upper_setup.tcp_fields.tucss = hdr_len;
3763			TXD->upper_setup.tcp_fields.tucse = htole16(0);
3764			TXD->upper_setup.tcp_fields.tucso =
3765			    hdr_len + offsetof(struct tcphdr, th_sum);
3766			cmd |= E1000_TXD_CMD_TCP;
3767		}
3768		break;
3769	case IPPROTO_UDP:
3770	{
3771		if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
3772			*txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3773			*txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3774			/* no need for context if already set */
3775			if (adapter->last_hw_offload == CSUM_UDP)
3776				return;
3777			adapter->last_hw_offload = CSUM_UDP;
3778			/*
3779			 * Start offset for header checksum calculation.
3780			 * End offset for header checksum calculation.
3781			 * Offset of place to put the checksum.
3782			 */
3783			TXD = (struct e1000_context_desc *)
3784			    &adapter->tx_desc_base[curr_txd];
3785			TXD->upper_setup.tcp_fields.tucss = hdr_len;
3786			TXD->upper_setup.tcp_fields.tucse = htole16(0);
3787			TXD->upper_setup.tcp_fields.tucso =
3788			    hdr_len + offsetof(struct udphdr, uh_sum);
3789		}
3790		/* Fall Thru */
3791	}
3792	default:
3793		break;
3794	}
3795
3796	TXD->tcp_seg_setup.data = htole32(0);
3797	TXD->cmd_and_length =
3798	    htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd);
3799	tx_buffer = &adapter->tx_buffer_area[curr_txd];
3800	tx_buffer->m_head = NULL;
3801	tx_buffer->next_eop = -1;
3802
3803	if (++curr_txd == adapter->num_tx_desc)
3804		curr_txd = 0;
3805
3806	adapter->num_tx_desc_avail--;
3807	adapter->next_avail_tx_desc = curr_txd;
3808}
3809
3810
3811#if __FreeBSD_version >= 700000
3812/**********************************************************************
3813 *
3814 *  Setup work for hardware segmentation offload (TSO)
3815 *
3816 **********************************************************************/
3817static bool
3818em_tso_setup(struct adapter *adapter, struct mbuf *mp, u32 *txd_upper,
3819   u32 *txd_lower)
3820{
3821	struct e1000_context_desc *TXD;
3822	struct em_buffer *tx_buffer;
3823	struct ether_vlan_header *eh;
3824	struct ip *ip;
3825	struct ip6_hdr *ip6;
3826	struct tcphdr *th;
3827	int curr_txd, ehdrlen, hdr_len, ip_hlen, isip6;
3828	u16 etype;
3829
3830	/*
3831	 * This function could/should be extended to support IP/IPv6
3832	 * fragmentation as well.  But as they say, one step at a time.
3833	 */
3834
3835	/*
3836	 * Determine where frame payload starts.
3837	 * Jump over vlan headers if already present,
3838	 * helpful for QinQ too.
3839	 */
3840	eh = mtod(mp, struct ether_vlan_header *);
3841	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
3842		etype = ntohs(eh->evl_proto);
3843		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3844	} else {
3845		etype = ntohs(eh->evl_encap_proto);
3846		ehdrlen = ETHER_HDR_LEN;
3847	}
3848
3849	/* Ensure we have at least the IP+TCP header in the first mbuf. */
3850	if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
3851		return FALSE;	/* -1 */
3852
3853	/*
3854	 * We only support TCP for IPv4 and IPv6 (notyet) for the moment.
3855	 * TODO: Support SCTP too when it hits the tree.
3856	 */
3857	switch (etype) {
3858	case ETHERTYPE_IP:
3859		isip6 = 0;
3860		ip = (struct ip *)(mp->m_data + ehdrlen);
3861		if (ip->ip_p != IPPROTO_TCP)
3862			return FALSE;	/* 0 */
3863		ip->ip_len = 0;
3864		ip->ip_sum = 0;
3865		ip_hlen = ip->ip_hl << 2;
3866		if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr))
3867			return FALSE;	/* -1 */
3868		th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
3869#if 1
3870		th->th_sum = in_pseudo(ip->ip_src.s_addr,
3871		    ip->ip_dst.s_addr, htons(IPPROTO_TCP));
3872#else
3873		th->th_sum = mp->m_pkthdr.csum_data;
3874#endif
3875		break;
3876	case ETHERTYPE_IPV6:
3877		isip6 = 1;
3878		return FALSE;			/* Not supported yet. */
3879		ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
3880		if (ip6->ip6_nxt != IPPROTO_TCP)
3881			return FALSE;	/* 0 */
3882		ip6->ip6_plen = 0;
3883		ip_hlen = sizeof(struct ip6_hdr); /* XXX: no header stacking. */
3884		if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr))
3885			return FALSE;	/* -1 */
3886		th = (struct tcphdr *)((caddr_t)ip6 + ip_hlen);
3887#if 0
3888		th->th_sum = in6_pseudo(ip6->ip6_src, ip->ip6_dst,
3889		    htons(IPPROTO_TCP));	/* XXX: function notyet. */
3890#else
3891		th->th_sum = mp->m_pkthdr.csum_data;
3892#endif
3893		break;
3894	default:
3895		return FALSE;
3896	}
3897	hdr_len = ehdrlen + ip_hlen + (th->th_off << 2);
3898
3899	*txd_lower = (E1000_TXD_CMD_DEXT |	/* Extended descr type */
3900		      E1000_TXD_DTYP_D |	/* Data descr type */
3901		      E1000_TXD_CMD_TSE);	/* Do TSE on this packet */
3902
3903	/* IP and/or TCP header checksum calculation and insertion. */
3904	*txd_upper = ((isip6 ? 0 : E1000_TXD_POPTS_IXSM) |
3905		      E1000_TXD_POPTS_TXSM) << 8;
3906
3907	curr_txd = adapter->next_avail_tx_desc;
3908	tx_buffer = &adapter->tx_buffer_area[curr_txd];
3909	TXD = (struct e1000_context_desc *) &adapter->tx_desc_base[curr_txd];
3910
3911	/* IPv6 doesn't have a header checksum. */
3912	if (!isip6) {
3913		/*
3914		 * Start offset for header checksum calculation.
3915		 * End offset for header checksum calculation.
3916		 * Offset of place put the checksum.
3917		 */
3918		TXD->lower_setup.ip_fields.ipcss = ehdrlen;
3919		TXD->lower_setup.ip_fields.ipcse =
3920		    htole16(ehdrlen + ip_hlen - 1);
3921		TXD->lower_setup.ip_fields.ipcso =
3922		    ehdrlen + offsetof(struct ip, ip_sum);
3923	}
3924	/*
3925	 * Start offset for payload checksum calculation.
3926	 * End offset for payload checksum calculation.
3927	 * Offset of place to put the checksum.
3928	 */
3929	TXD->upper_setup.tcp_fields.tucss =
3930	    ehdrlen + ip_hlen;
3931	TXD->upper_setup.tcp_fields.tucse = 0;
3932	TXD->upper_setup.tcp_fields.tucso =
3933	    ehdrlen + ip_hlen + offsetof(struct tcphdr, th_sum);
3934	/*
3935	 * Payload size per packet w/o any headers.
3936	 * Length of all headers up to payload.
3937	 */
3938	TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz);
3939	TXD->tcp_seg_setup.fields.hdr_len = hdr_len;
3940
3941	TXD->cmd_and_length = htole32(adapter->txd_cmd |
3942				E1000_TXD_CMD_DEXT |	/* Extended descr */
3943				E1000_TXD_CMD_TSE |	/* TSE context */
3944				(isip6 ? 0 : E1000_TXD_CMD_IP) | /* Do IP csum */
3945				E1000_TXD_CMD_TCP |	/* Do TCP checksum */
3946				(mp->m_pkthdr.len - (hdr_len))); /* Total len */
3947
3948	tx_buffer->m_head = NULL;
3949	tx_buffer->next_eop = -1;
3950
3951	if (++curr_txd == adapter->num_tx_desc)
3952		curr_txd = 0;
3953
3954	adapter->num_tx_desc_avail--;
3955	adapter->next_avail_tx_desc = curr_txd;
3956	adapter->tx_tso = TRUE;
3957
3958	return TRUE;
3959}
3960
3961#endif /* __FreeBSD_version >= 700000 */
3962
3963/**********************************************************************
3964 *
3965 *  Examine each tx_buffer in the used queue. If the hardware is done
3966 *  processing the packet then free associated resources. The
3967 *  tx_buffer is put back on the free queue.
3968 *
3969 **********************************************************************/
3970static void
3971em_txeof(struct adapter *adapter)
3972{
3973        int first, last, done, num_avail;
3974	u32 cleaned = 0;
3975        struct em_buffer *tx_buffer;
3976        struct e1000_tx_desc   *tx_desc, *eop_desc;
3977	struct ifnet   *ifp = adapter->ifp;
3978
3979	EM_TX_LOCK_ASSERT(adapter);
3980
3981        if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
3982                return;
3983
3984        num_avail = adapter->num_tx_desc_avail;
3985        first = adapter->next_tx_to_clean;
3986        tx_desc = &adapter->tx_desc_base[first];
3987        tx_buffer = &adapter->tx_buffer_area[first];
3988	last = tx_buffer->next_eop;
3989        eop_desc = &adapter->tx_desc_base[last];
3990
3991	/*
3992	 * What this does is get the index of the
3993	 * first descriptor AFTER the EOP of the
3994	 * first packet, that way we can do the
3995	 * simple comparison on the inner while loop.
3996	 */
3997	if (++last == adapter->num_tx_desc)
3998 		last = 0;
3999	done = last;
4000
4001        bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
4002            BUS_DMASYNC_POSTREAD);
4003
4004        while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
4005		/* We clean the range of the packet */
4006		while (first != done) {
4007                	tx_desc->upper.data = 0;
4008                	tx_desc->lower.data = 0;
4009                	tx_desc->buffer_addr = 0;
4010                	++num_avail; ++cleaned;
4011
4012			if (tx_buffer->m_head) {
4013				ifp->if_opackets++;
4014				bus_dmamap_sync(adapter->txtag,
4015				    tx_buffer->map,
4016				    BUS_DMASYNC_POSTWRITE);
4017				bus_dmamap_unload(adapter->txtag,
4018				    tx_buffer->map);
4019
4020                        	m_freem(tx_buffer->m_head);
4021                        	tx_buffer->m_head = NULL;
4022                	}
4023			tx_buffer->next_eop = -1;
4024
4025	                if (++first == adapter->num_tx_desc)
4026				first = 0;
4027
4028	                tx_buffer = &adapter->tx_buffer_area[first];
4029			tx_desc = &adapter->tx_desc_base[first];
4030		}
4031		/* See if we can continue to the next packet */
4032		last = tx_buffer->next_eop;
4033		if (last != -1) {
4034        		eop_desc = &adapter->tx_desc_base[last];
4035			/* Get new done point */
4036			if (++last == adapter->num_tx_desc) last = 0;
4037			done = last;
4038		} else
4039			break;
4040        }
4041        bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
4042            BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4043
4044        adapter->next_tx_to_clean = first;
4045
4046        /*
4047         * If we have enough room, clear IFF_DRV_OACTIVE to
4048         * tell the stack that it is OK to send packets.
4049         * If there are no pending descriptors, clear the timeout.
4050         */
4051        if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
4052                ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
4053                if (num_avail == adapter->num_tx_desc) {
4054			adapter->watchdog_timer = 0;
4055        		adapter->num_tx_desc_avail = num_avail;
4056			return;
4057		}
4058        }
4059
4060	/* If any descriptors cleaned, reset the watchdog */
4061	if (cleaned)
4062		adapter->watchdog_timer = EM_TX_TIMEOUT;
4063        adapter->num_tx_desc_avail = num_avail;
4064	return;
4065}
4066
4067/*********************************************************************
4068 *
4069 *  When Link is lost sometimes there is work still in the TX ring
4070 *  which will result in a watchdog, rather than allow that do an
4071 *  attempted cleanup and then reinit here. Note that this has been
4072 *  seens mostly with fiber adapters.
4073 *
4074 **********************************************************************/
4075static void
4076em_tx_purge(struct adapter *adapter)
4077{
4078	if ((!adapter->link_active) && (adapter->watchdog_timer)) {
4079		EM_TX_LOCK(adapter);
4080		em_txeof(adapter);
4081		EM_TX_UNLOCK(adapter);
4082		if (adapter->watchdog_timer) { /* Still not clean? */
4083			adapter->watchdog_timer = 0;
4084			em_init_locked(adapter);
4085		}
4086	}
4087}
4088
4089/*********************************************************************
4090 *
4091 *  Get a buffer from system mbuf buffer pool.
4092 *
4093 **********************************************************************/
4094static int
4095em_get_buf(struct adapter *adapter, int i)
4096{
4097	struct mbuf		*m;
4098	bus_dma_segment_t	segs[1];
4099	bus_dmamap_t		map;
4100	struct em_buffer	*rx_buffer;
4101	int			error, nsegs;
4102
4103	m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
4104	if (m == NULL) {
4105		adapter->mbuf_cluster_failed++;
4106		return (ENOBUFS);
4107	}
4108	m->m_len = m->m_pkthdr.len = MCLBYTES;
4109
4110	if (adapter->max_frame_size <= (MCLBYTES - ETHER_ALIGN))
4111		m_adj(m, ETHER_ALIGN);
4112
4113	/*
4114	 * Using memory from the mbuf cluster pool, invoke the
4115	 * bus_dma machinery to arrange the memory mapping.
4116	 */
4117	error = bus_dmamap_load_mbuf_sg(adapter->rxtag,
4118	    adapter->rx_sparemap, m, segs, &nsegs, BUS_DMA_NOWAIT);
4119	if (error != 0) {
4120		m_free(m);
4121		return (error);
4122	}
4123
4124	/* If nsegs is wrong then the stack is corrupt. */
4125	KASSERT(nsegs == 1, ("Too many segments returned!"));
4126
4127	rx_buffer = &adapter->rx_buffer_area[i];
4128	if (rx_buffer->m_head != NULL)
4129		bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
4130
4131	map = rx_buffer->map;
4132	rx_buffer->map = adapter->rx_sparemap;
4133	adapter->rx_sparemap = map;
4134	bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD);
4135	rx_buffer->m_head = m;
4136
4137	adapter->rx_desc_base[i].buffer_addr = htole64(segs[0].ds_addr);
4138	return (0);
4139}
4140
4141/*********************************************************************
4142 *
4143 *  Allocate memory for rx_buffer structures. Since we use one
4144 *  rx_buffer per received packet, the maximum number of rx_buffer's
4145 *  that we'll need is equal to the number of receive descriptors
4146 *  that we've allocated.
4147 *
4148 **********************************************************************/
4149static int
4150em_allocate_receive_structures(struct adapter *adapter)
4151{
4152	device_t dev = adapter->dev;
4153	struct em_buffer *rx_buffer;
4154	int i, error;
4155
4156	adapter->rx_buffer_area = malloc(sizeof(struct em_buffer) *
4157	    adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
4158	if (adapter->rx_buffer_area == NULL) {
4159		device_printf(dev, "Unable to allocate rx_buffer memory\n");
4160		return (ENOMEM);
4161	}
4162
4163#if __FreeBSD_version >= 700000
4164	error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
4165#else
4166	error = bus_dma_tag_create(NULL,		 /* parent */
4167#endif
4168				1, 0,			/* alignment, bounds */
4169				BUS_SPACE_MAXADDR,	/* lowaddr */
4170				BUS_SPACE_MAXADDR,	/* highaddr */
4171				NULL, NULL,		/* filter, filterarg */
4172				MCLBYTES,		/* maxsize */
4173				1,			/* nsegments */
4174				MCLBYTES,		/* maxsegsize */
4175				0,			/* flags */
4176				NULL,			/* lockfunc */
4177				NULL,			/* lockarg */
4178				&adapter->rxtag);
4179	if (error) {
4180		device_printf(dev, "%s: bus_dma_tag_create failed %d\n",
4181		    __func__, error);
4182		goto fail;
4183	}
4184
4185	/* Create the spare map (used by getbuf) */
4186	error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
4187	     &adapter->rx_sparemap);
4188	if (error) {
4189		device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4190		    __func__, error);
4191		goto fail;
4192	}
4193
4194	rx_buffer = adapter->rx_buffer_area;
4195	for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4196		error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
4197		    &rx_buffer->map);
4198		if (error) {
4199			device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4200			    __func__, error);
4201			goto fail;
4202		}
4203	}
4204
4205	return (0);
4206
4207fail:
4208	em_free_receive_structures(adapter);
4209	return (error);
4210}
4211
4212/*********************************************************************
4213 *
4214 *  (Re)initialize receive structures.
4215 *
4216 **********************************************************************/
4217static int
4218em_setup_receive_structures(struct adapter *adapter)
4219{
4220	struct em_buffer *rx_buffer;
4221	int i, error;
4222
4223	/* Reset descriptor ring */
4224	bzero(adapter->rx_desc_base,
4225	    (sizeof(struct e1000_rx_desc)) * adapter->num_rx_desc);
4226
4227	/* Free current RX buffers. */
4228	rx_buffer = adapter->rx_buffer_area;
4229	for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4230		if (rx_buffer->m_head != NULL) {
4231			bus_dmamap_sync(adapter->rxtag, rx_buffer->map,
4232			    BUS_DMASYNC_POSTREAD);
4233			bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
4234			m_freem(rx_buffer->m_head);
4235			rx_buffer->m_head = NULL;
4236		}
4237        }
4238
4239	/* Allocate new ones. */
4240	for (i = 0; i < adapter->num_rx_desc; i++) {
4241		error = em_get_buf(adapter, i);
4242		if (error)
4243                        return (error);
4244	}
4245
4246	/* Setup our descriptor pointers */
4247	adapter->next_rx_desc_to_check = 0;
4248	bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4249	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4250
4251	return (0);
4252}
4253
4254/*********************************************************************
4255 *
4256 *  Enable receive unit.
4257 *
4258 **********************************************************************/
4259#define MAX_INTS_PER_SEC	8000
4260#define DEFAULT_ITR	     1000000000/(MAX_INTS_PER_SEC * 256)
4261
4262static void
4263em_initialize_receive_unit(struct adapter *adapter)
4264{
4265	struct ifnet	*ifp = adapter->ifp;
4266	u64	bus_addr;
4267	u32	rctl, rxcsum;
4268
4269	INIT_DEBUGOUT("em_initialize_receive_unit: begin");
4270
4271	/*
4272	 * Make sure receives are disabled while setting
4273	 * up the descriptor ring
4274	 */
4275	rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
4276	E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
4277
4278	if (adapter->hw.mac.type >= e1000_82540) {
4279		E1000_WRITE_REG(&adapter->hw, E1000_RADV,
4280		    adapter->rx_abs_int_delay.value);
4281		/*
4282		 * Set the interrupt throttling rate. Value is calculated
4283		 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns)
4284		 */
4285		E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR);
4286	}
4287
4288	/*
4289	** When using MSIX interrupts we need to throttle
4290	** using the EITR register (82574 only)
4291	*/
4292	if (adapter->msix)
4293		for (int i = 0; i < 4; i++)
4294			E1000_WRITE_REG(&adapter->hw,
4295			    E1000_EITR_82574(i), DEFAULT_ITR);
4296
4297	/* Disable accelerated ackknowledge */
4298	if (adapter->hw.mac.type == e1000_82574)
4299		E1000_WRITE_REG(&adapter->hw,
4300		    E1000_RFCTL, E1000_RFCTL_ACK_DIS);
4301
4302	/* Setup the Base and Length of the Rx Descriptor Ring */
4303	bus_addr = adapter->rxdma.dma_paddr;
4304	E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0),
4305	    adapter->num_rx_desc * sizeof(struct e1000_rx_desc));
4306	E1000_WRITE_REG(&adapter->hw, E1000_RDBAH(0),
4307	    (u32)(bus_addr >> 32));
4308	E1000_WRITE_REG(&adapter->hw, E1000_RDBAL(0),
4309	    (u32)bus_addr);
4310
4311	/* Setup the Receive Control Register */
4312	rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
4313	rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
4314		   E1000_RCTL_RDMTS_HALF |
4315		   (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
4316
4317	/* Make sure VLAN Filters are off */
4318	rctl &= ~E1000_RCTL_VFE;
4319
4320	if (e1000_tbi_sbp_enabled_82543(&adapter->hw))
4321		rctl |= E1000_RCTL_SBP;
4322	else
4323		rctl &= ~E1000_RCTL_SBP;
4324
4325	switch (adapter->rx_buffer_len) {
4326	default:
4327	case 2048:
4328		rctl |= E1000_RCTL_SZ_2048;
4329		break;
4330	case 4096:
4331		rctl |= E1000_RCTL_SZ_4096 |
4332		    E1000_RCTL_BSEX | E1000_RCTL_LPE;
4333		break;
4334	case 8192:
4335		rctl |= E1000_RCTL_SZ_8192 |
4336		    E1000_RCTL_BSEX | E1000_RCTL_LPE;
4337		break;
4338	case 16384:
4339		rctl |= E1000_RCTL_SZ_16384 |
4340		    E1000_RCTL_BSEX | E1000_RCTL_LPE;
4341		break;
4342	}
4343
4344	if (ifp->if_mtu > ETHERMTU)
4345		rctl |= E1000_RCTL_LPE;
4346	else
4347		rctl &= ~E1000_RCTL_LPE;
4348
4349	/* Enable 82543 Receive Checksum Offload for TCP and UDP */
4350	if ((adapter->hw.mac.type >= e1000_82543) &&
4351	    (ifp->if_capenable & IFCAP_RXCSUM)) {
4352		rxcsum = E1000_READ_REG(&adapter->hw, E1000_RXCSUM);
4353		rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
4354		E1000_WRITE_REG(&adapter->hw, E1000_RXCSUM, rxcsum);
4355	}
4356
4357	/*
4358	** XXX TEMPORARY WORKAROUND: on some systems with 82573
4359	** long latencies are observed, like Lenovo X60. This
4360	** change eliminates the problem, but since having positive
4361	** values in RDTR is a known source of problems on other
4362	** platforms another solution is being sought.
4363	*/
4364	if (adapter->hw.mac.type == e1000_82573)
4365		E1000_WRITE_REG(&adapter->hw, E1000_RDTR, 0x20);
4366
4367	/* Enable Receives */
4368	E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl);
4369
4370	/*
4371	 * Setup the HW Rx Head and
4372	 * Tail Descriptor Pointers
4373	 */
4374	E1000_WRITE_REG(&adapter->hw, E1000_RDH(0), 0);
4375	E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), adapter->num_rx_desc - 1);
4376
4377	return;
4378}
4379
4380/*********************************************************************
4381 *
4382 *  Free receive related data structures.
4383 *
4384 **********************************************************************/
4385static void
4386em_free_receive_structures(struct adapter *adapter)
4387{
4388	struct em_buffer *rx_buffer;
4389	int i;
4390
4391	INIT_DEBUGOUT("free_receive_structures: begin");
4392
4393	if (adapter->rx_sparemap) {
4394		bus_dmamap_destroy(adapter->rxtag, adapter->rx_sparemap);
4395		adapter->rx_sparemap = NULL;
4396	}
4397
4398	/* Cleanup any existing buffers */
4399	if (adapter->rx_buffer_area != NULL) {
4400		rx_buffer = adapter->rx_buffer_area;
4401		for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4402			if (rx_buffer->m_head != NULL) {
4403				bus_dmamap_sync(adapter->rxtag, rx_buffer->map,
4404				    BUS_DMASYNC_POSTREAD);
4405				bus_dmamap_unload(adapter->rxtag,
4406				    rx_buffer->map);
4407				m_freem(rx_buffer->m_head);
4408				rx_buffer->m_head = NULL;
4409			} else if (rx_buffer->map != NULL)
4410				bus_dmamap_unload(adapter->rxtag,
4411				    rx_buffer->map);
4412			if (rx_buffer->map != NULL) {
4413				bus_dmamap_destroy(adapter->rxtag,
4414				    rx_buffer->map);
4415				rx_buffer->map = NULL;
4416			}
4417		}
4418	}
4419
4420	if (adapter->rx_buffer_area != NULL) {
4421		free(adapter->rx_buffer_area, M_DEVBUF);
4422		adapter->rx_buffer_area = NULL;
4423	}
4424
4425	if (adapter->rxtag != NULL) {
4426		bus_dma_tag_destroy(adapter->rxtag);
4427		adapter->rxtag = NULL;
4428	}
4429}
4430
4431/*********************************************************************
4432 *
4433 *  This routine executes in interrupt context. It replenishes
4434 *  the mbufs in the descriptor and sends data which has been
4435 *  dma'ed into host memory to upper layer.
4436 *
4437 *  We loop at most count times if count is > 0, or until done if
4438 *  count < 0.
4439 *
4440 *  For polling we also now return the number of cleaned packets
4441 *********************************************************************/
4442static int
4443em_rxeof(struct adapter *adapter, int count)
4444{
4445	struct ifnet	*ifp = adapter->ifp;;
4446	struct mbuf	*mp;
4447	u8		status, accept_frame = 0, eop = 0;
4448	u16 		len, desc_len, prev_len_adj;
4449	int		i, rx_sent = 0;
4450	struct e1000_rx_desc   *current_desc;
4451
4452	EM_RX_LOCK(adapter);
4453	i = adapter->next_rx_desc_to_check;
4454	current_desc = &adapter->rx_desc_base[i];
4455	bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4456	    BUS_DMASYNC_POSTREAD);
4457
4458	if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
4459		EM_RX_UNLOCK(adapter);
4460		return (rx_sent);
4461	}
4462
4463	while ((current_desc->status & E1000_RXD_STAT_DD) &&
4464	    (count != 0) &&
4465	    (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
4466		struct mbuf *m = NULL;
4467
4468		mp = adapter->rx_buffer_area[i].m_head;
4469		/*
4470		 * Can't defer bus_dmamap_sync(9) because TBI_ACCEPT
4471		 * needs to access the last received byte in the mbuf.
4472		 */
4473		bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map,
4474		    BUS_DMASYNC_POSTREAD);
4475
4476		accept_frame = 1;
4477		prev_len_adj = 0;
4478		desc_len = le16toh(current_desc->length);
4479		status = current_desc->status;
4480		if (status & E1000_RXD_STAT_EOP) {
4481			count--;
4482			eop = 1;
4483			if (desc_len < ETHER_CRC_LEN) {
4484				len = 0;
4485				prev_len_adj = ETHER_CRC_LEN - desc_len;
4486			} else
4487				len = desc_len - ETHER_CRC_LEN;
4488		} else {
4489			eop = 0;
4490			len = desc_len;
4491		}
4492
4493		if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
4494			u8	last_byte;
4495			u32	pkt_len = desc_len;
4496
4497			if (adapter->fmp != NULL)
4498				pkt_len += adapter->fmp->m_pkthdr.len;
4499
4500			last_byte = *(mtod(mp, caddr_t) + desc_len - 1);
4501			if (TBI_ACCEPT(&adapter->hw, status,
4502			    current_desc->errors, pkt_len, last_byte,
4503			    adapter->min_frame_size, adapter->max_frame_size)) {
4504				e1000_tbi_adjust_stats_82543(&adapter->hw,
4505				    &adapter->stats, pkt_len,
4506				    adapter->hw.mac.addr,
4507				    adapter->max_frame_size);
4508				if (len > 0)
4509					len--;
4510			} else
4511				accept_frame = 0;
4512		}
4513
4514		if (accept_frame) {
4515			if (em_get_buf(adapter, i) != 0) {
4516				ifp->if_iqdrops++;
4517				goto discard;
4518			}
4519
4520			/* Assign correct length to the current fragment */
4521			mp->m_len = len;
4522
4523			if (adapter->fmp == NULL) {
4524				mp->m_pkthdr.len = len;
4525				adapter->fmp = mp; /* Store the first mbuf */
4526				adapter->lmp = mp;
4527			} else {
4528				/* Chain mbuf's together */
4529				mp->m_flags &= ~M_PKTHDR;
4530				/*
4531				 * Adjust length of previous mbuf in chain if
4532				 * we received less than 4 bytes in the last
4533				 * descriptor.
4534				 */
4535				if (prev_len_adj > 0) {
4536					adapter->lmp->m_len -= prev_len_adj;
4537					adapter->fmp->m_pkthdr.len -=
4538					    prev_len_adj;
4539				}
4540				adapter->lmp->m_next = mp;
4541				adapter->lmp = adapter->lmp->m_next;
4542				adapter->fmp->m_pkthdr.len += len;
4543			}
4544
4545			if (eop) {
4546				adapter->fmp->m_pkthdr.rcvif = ifp;
4547				ifp->if_ipackets++;
4548				em_receive_checksum(adapter, current_desc,
4549				    adapter->fmp);
4550#ifndef __NO_STRICT_ALIGNMENT
4551				if (adapter->max_frame_size >
4552				    (MCLBYTES - ETHER_ALIGN) &&
4553				    em_fixup_rx(adapter) != 0)
4554					goto skip;
4555#endif
4556				if (status & E1000_RXD_STAT_VP) {
4557#if __FreeBSD_version < 700000
4558					VLAN_INPUT_TAG_NEW(ifp, adapter->fmp,
4559					    (le16toh(current_desc->special) &
4560					    E1000_RXD_SPC_VLAN_MASK));
4561#else
4562					adapter->fmp->m_pkthdr.ether_vtag =
4563					    (le16toh(current_desc->special) &
4564					    E1000_RXD_SPC_VLAN_MASK);
4565					adapter->fmp->m_flags |= M_VLANTAG;
4566#endif
4567				}
4568#ifndef __NO_STRICT_ALIGNMENT
4569skip:
4570#endif
4571				m = adapter->fmp;
4572				adapter->fmp = NULL;
4573				adapter->lmp = NULL;
4574			}
4575		} else {
4576			ifp->if_ierrors++;
4577discard:
4578			/* Reuse loaded DMA map and just update mbuf chain */
4579			mp = adapter->rx_buffer_area[i].m_head;
4580			mp->m_len = mp->m_pkthdr.len = MCLBYTES;
4581			mp->m_data = mp->m_ext.ext_buf;
4582			mp->m_next = NULL;
4583			if (adapter->max_frame_size <=
4584			    (MCLBYTES - ETHER_ALIGN))
4585				m_adj(mp, ETHER_ALIGN);
4586			if (adapter->fmp != NULL) {
4587				m_freem(adapter->fmp);
4588				adapter->fmp = NULL;
4589				adapter->lmp = NULL;
4590			}
4591			m = NULL;
4592		}
4593
4594		/* Zero out the receive descriptors status. */
4595		current_desc->status = 0;
4596		bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4597		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4598
4599		/* Advance our pointers to the next descriptor. */
4600		if (++i == adapter->num_rx_desc)
4601			i = 0;
4602		/* Call into the stack */
4603		if (m != NULL) {
4604			adapter->next_rx_desc_to_check = i;
4605			EM_RX_UNLOCK(adapter);
4606			(*ifp->if_input)(ifp, m);
4607			EM_RX_LOCK(adapter);
4608			rx_sent++;
4609			i = adapter->next_rx_desc_to_check;
4610		}
4611		current_desc = &adapter->rx_desc_base[i];
4612	}
4613	adapter->next_rx_desc_to_check = i;
4614
4615	/* Advance the E1000's Receive Queue #0  "Tail Pointer". */
4616	if (--i < 0)
4617		i = adapter->num_rx_desc - 1;
4618	E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), i);
4619	EM_RX_UNLOCK(adapter);
4620	return (rx_sent);
4621}
4622
4623#ifndef __NO_STRICT_ALIGNMENT
4624/*
4625 * When jumbo frames are enabled we should realign entire payload on
4626 * architecures with strict alignment. This is serious design mistake of 8254x
4627 * as it nullifies DMA operations. 8254x just allows RX buffer size to be
4628 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its
4629 * payload. On architecures without strict alignment restrictions 8254x still
4630 * performs unaligned memory access which would reduce the performance too.
4631 * To avoid copying over an entire frame to align, we allocate a new mbuf and
4632 * copy ethernet header to the new mbuf. The new mbuf is prepended into the
4633 * existing mbuf chain.
4634 *
4635 * Be aware, best performance of the 8254x is achived only when jumbo frame is
4636 * not used at all on architectures with strict alignment.
4637 */
4638static int
4639em_fixup_rx(struct adapter *adapter)
4640{
4641	struct mbuf *m, *n;
4642	int error;
4643
4644	error = 0;
4645	m = adapter->fmp;
4646	if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) {
4647		bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len);
4648		m->m_data += ETHER_HDR_LEN;
4649	} else {
4650		MGETHDR(n, M_DONTWAIT, MT_DATA);
4651		if (n != NULL) {
4652			bcopy(m->m_data, n->m_data, ETHER_HDR_LEN);
4653			m->m_data += ETHER_HDR_LEN;
4654			m->m_len -= ETHER_HDR_LEN;
4655			n->m_len = ETHER_HDR_LEN;
4656			M_MOVE_PKTHDR(n, m);
4657			n->m_next = m;
4658			adapter->fmp = n;
4659		} else {
4660			adapter->dropped_pkts++;
4661			m_freem(adapter->fmp);
4662			adapter->fmp = NULL;
4663			error = ENOMEM;
4664		}
4665	}
4666
4667	return (error);
4668}
4669#endif
4670
4671/*********************************************************************
4672 *
4673 *  Verify that the hardware indicated that the checksum is valid.
4674 *  Inform the stack about the status of checksum so that stack
4675 *  doesn't spend time verifying the checksum.
4676 *
4677 *********************************************************************/
4678static void
4679em_receive_checksum(struct adapter *adapter,
4680	    struct e1000_rx_desc *rx_desc, struct mbuf *mp)
4681{
4682	/* 82543 or newer only */
4683	if ((adapter->hw.mac.type < e1000_82543) ||
4684	    /* Ignore Checksum bit is set */
4685	    (rx_desc->status & E1000_RXD_STAT_IXSM)) {
4686		mp->m_pkthdr.csum_flags = 0;
4687		return;
4688	}
4689
4690	if (rx_desc->status & E1000_RXD_STAT_IPCS) {
4691		/* Did it pass? */
4692		if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
4693			/* IP Checksum Good */
4694			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
4695			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
4696
4697		} else {
4698			mp->m_pkthdr.csum_flags = 0;
4699		}
4700	}
4701
4702	if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
4703		/* Did it pass? */
4704		if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
4705			mp->m_pkthdr.csum_flags |=
4706			(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
4707			mp->m_pkthdr.csum_data = htons(0xffff);
4708		}
4709	}
4710}
4711
4712#if __FreeBSD_version >= 700029
4713/*
4714 * This routine is run via an vlan
4715 * config EVENT
4716 */
4717static void
4718em_register_vlan(void *unused, struct ifnet *ifp, u16 vtag)
4719{
4720	struct adapter	*adapter = ifp->if_softc;
4721	u32		index, bit;
4722
4723	if ((vtag == 0) || (vtag > 4095))       /* Invalid */
4724                return;
4725
4726	index = (vtag >> 5) & 0x7F;
4727	bit = vtag & 0x1F;
4728	em_shadow_vfta[index] |= (1 << bit);
4729	++adapter->num_vlans;
4730	/* Re-init to load the changes */
4731	em_init(adapter);
4732}
4733
4734/*
4735 * This routine is run via an vlan
4736 * unconfig EVENT
4737 */
4738static void
4739em_unregister_vlan(void *unused, struct ifnet *ifp, u16 vtag)
4740{
4741	struct adapter	*adapter = ifp->if_softc;
4742	u32		index, bit;
4743
4744	if ((vtag == 0) || (vtag > 4095))       /* Invalid */
4745                return;
4746
4747	index = (vtag >> 5) & 0x7F;
4748	bit = vtag & 0x1F;
4749	em_shadow_vfta[index] &= ~(1 << bit);
4750	--adapter->num_vlans;
4751	/* Re-init to load the changes */
4752	em_init(adapter);
4753}
4754
4755static void
4756em_setup_vlan_hw_support(struct adapter *adapter)
4757{
4758	struct e1000_hw *hw = &adapter->hw;
4759	u32             reg;
4760
4761	/*
4762	** We get here thru init_locked, meaning
4763	** a soft reset, this has already cleared
4764	** the VFTA and other state, so if there
4765	** have been no vlan's registered do nothing.
4766	*/
4767	if (adapter->num_vlans == 0)
4768                return;
4769
4770	/*
4771	** A soft reset zero's out the VFTA, so
4772	** we need to repopulate it now.
4773	*/
4774	for (int i = 0; i < EM_VFTA_SIZE; i++)
4775                if (em_shadow_vfta[i] != 0)
4776			E1000_WRITE_REG_ARRAY(hw, E1000_VFTA,
4777                            i, em_shadow_vfta[i]);
4778
4779	reg = E1000_READ_REG(hw, E1000_CTRL);
4780	reg |= E1000_CTRL_VME;
4781	E1000_WRITE_REG(hw, E1000_CTRL, reg);
4782
4783	/* Enable the Filter Table */
4784	reg = E1000_READ_REG(hw, E1000_RCTL);
4785	reg &= ~E1000_RCTL_CFIEN;
4786	reg |= E1000_RCTL_VFE;
4787	E1000_WRITE_REG(hw, E1000_RCTL, reg);
4788
4789	/* Update the frame size */
4790	E1000_WRITE_REG(&adapter->hw, E1000_RLPML,
4791	    adapter->max_frame_size + VLAN_TAG_SIZE);
4792}
4793#endif
4794
4795static void
4796em_enable_intr(struct adapter *adapter)
4797{
4798	struct e1000_hw *hw = &adapter->hw;
4799	u32 ims_mask = IMS_ENABLE_MASK;
4800
4801	if (adapter->msix) {
4802		E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
4803		ims_mask |= EM_MSIX_MASK;
4804	}
4805	E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
4806}
4807
4808static void
4809em_disable_intr(struct adapter *adapter)
4810{
4811	struct e1000_hw *hw = &adapter->hw;
4812
4813	if (adapter->msix)
4814		E1000_WRITE_REG(hw, EM_EIAC, 0);
4815	E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
4816}
4817
4818/*
4819 * Bit of a misnomer, what this really means is
4820 * to enable OS management of the system... aka
4821 * to disable special hardware management features
4822 */
4823static void
4824em_init_manageability(struct adapter *adapter)
4825{
4826	/* A shared code workaround */
4827#define E1000_82542_MANC2H E1000_MANC2H
4828	if (adapter->has_manage) {
4829		int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H);
4830		int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4831
4832		/* disable hardware interception of ARP */
4833		manc &= ~(E1000_MANC_ARP_EN);
4834
4835                /* enable receiving management packets to the host */
4836                if (adapter->hw.mac.type >= e1000_82571) {
4837			manc |= E1000_MANC_EN_MNG2HOST;
4838#define E1000_MNG2HOST_PORT_623 (1 << 5)
4839#define E1000_MNG2HOST_PORT_664 (1 << 6)
4840			manc2h |= E1000_MNG2HOST_PORT_623;
4841			manc2h |= E1000_MNG2HOST_PORT_664;
4842			E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h);
4843		}
4844
4845		E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4846	}
4847}
4848
4849/*
4850 * Give control back to hardware management
4851 * controller if there is one.
4852 */
4853static void
4854em_release_manageability(struct adapter *adapter)
4855{
4856	if (adapter->has_manage) {
4857		int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4858
4859		/* re-enable hardware interception of ARP */
4860		manc |= E1000_MANC_ARP_EN;
4861
4862		if (adapter->hw.mac.type >= e1000_82571)
4863			manc &= ~E1000_MANC_EN_MNG2HOST;
4864
4865		E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4866	}
4867}
4868
4869/*
4870 * em_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
4871 * For ASF and Pass Through versions of f/w this means that
4872 * the driver is loaded. For AMT version (only with 82573)
4873 * of the f/w this means that the network i/f is open.
4874 *
4875 */
4876static void
4877em_get_hw_control(struct adapter *adapter)
4878{
4879	u32 ctrl_ext, swsm;
4880
4881	/* Let firmware know the driver has taken over */
4882	switch (adapter->hw.mac.type) {
4883	case e1000_82573:
4884		swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
4885		E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
4886		    swsm | E1000_SWSM_DRV_LOAD);
4887		break;
4888	case e1000_82571:
4889	case e1000_82572:
4890	case e1000_80003es2lan:
4891	case e1000_ich8lan:
4892	case e1000_ich9lan:
4893	case e1000_ich10lan:
4894		ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4895		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4896		    ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
4897		break;
4898	default:
4899		break;
4900	}
4901}
4902
4903/*
4904 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit.
4905 * For ASF and Pass Through versions of f/w this means that the
4906 * driver is no longer loaded. For AMT version (only with 82573) i
4907 * of the f/w this means that the network i/f is closed.
4908 *
4909 */
4910static void
4911em_release_hw_control(struct adapter *adapter)
4912{
4913	u32 ctrl_ext, swsm;
4914
4915	/* Let firmware taken over control of h/w */
4916	switch (adapter->hw.mac.type) {
4917	case e1000_82573:
4918		swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
4919		E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
4920		    swsm & ~E1000_SWSM_DRV_LOAD);
4921		break;
4922	case e1000_82571:
4923	case e1000_82572:
4924	case e1000_80003es2lan:
4925	case e1000_ich8lan:
4926	case e1000_ich9lan:
4927	case e1000_ich10lan:
4928		ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4929		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4930		    ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
4931		break;
4932	default:
4933		break;
4934
4935	}
4936}
4937
4938static int
4939em_is_valid_ether_addr(u8 *addr)
4940{
4941	char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
4942
4943	if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
4944		return (FALSE);
4945	}
4946
4947	return (TRUE);
4948}
4949
4950/*
4951 * Enable PCI Wake On Lan capability
4952 */
4953void
4954em_enable_wakeup(device_t dev)
4955{
4956	u16     cap, status;
4957	u8      id;
4958
4959	/* First find the capabilities pointer*/
4960	cap = pci_read_config(dev, PCIR_CAP_PTR, 2);
4961	/* Read the PM Capabilities */
4962	id = pci_read_config(dev, cap, 1);
4963	if (id != PCIY_PMG)     /* Something wrong */
4964		return;
4965	/* OK, we have the power capabilities, so
4966	   now get the status register */
4967	cap += PCIR_POWER_STATUS;
4968	status = pci_read_config(dev, cap, 2);
4969	status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
4970	pci_write_config(dev, cap, status, 2);
4971	return;
4972}
4973
4974
4975/*********************************************************************
4976* 82544 Coexistence issue workaround.
4977*    There are 2 issues.
4978*       1. Transmit Hang issue.
4979*    To detect this issue, following equation can be used...
4980*	  SIZE[3:0] + ADDR[2:0] = SUM[3:0].
4981*	  If SUM[3:0] is in between 1 to 4, we will have this issue.
4982*
4983*       2. DAC issue.
4984*    To detect this issue, following equation can be used...
4985*	  SIZE[3:0] + ADDR[2:0] = SUM[3:0].
4986*	  If SUM[3:0] is in between 9 to c, we will have this issue.
4987*
4988*
4989*    WORKAROUND:
4990*	  Make sure we do not have ending address
4991*	  as 1,2,3,4(Hang) or 9,a,b,c (DAC)
4992*
4993*************************************************************************/
4994static u32
4995em_fill_descriptors (bus_addr_t address, u32 length,
4996		PDESC_ARRAY desc_array)
4997{
4998	u32 safe_terminator;
4999
5000	/* Since issue is sensitive to length and address.*/
5001	/* Let us first check the address...*/
5002	if (length <= 4) {
5003		desc_array->descriptor[0].address = address;
5004		desc_array->descriptor[0].length = length;
5005		desc_array->elements = 1;
5006		return (desc_array->elements);
5007	}
5008	safe_terminator = (u32)((((u32)address & 0x7) +
5009	    (length & 0xF)) & 0xF);
5010	/* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */
5011	if (safe_terminator == 0   ||
5012	(safe_terminator > 4   &&
5013	safe_terminator < 9)   ||
5014	(safe_terminator > 0xC &&
5015	safe_terminator <= 0xF)) {
5016		desc_array->descriptor[0].address = address;
5017		desc_array->descriptor[0].length = length;
5018		desc_array->elements = 1;
5019		return (desc_array->elements);
5020	}
5021
5022	desc_array->descriptor[0].address = address;
5023	desc_array->descriptor[0].length = length - 4;
5024	desc_array->descriptor[1].address = address + (length - 4);
5025	desc_array->descriptor[1].length = 4;
5026	desc_array->elements = 2;
5027	return (desc_array->elements);
5028}
5029
5030/**********************************************************************
5031 *
5032 *  Update the board statistics counters.
5033 *
5034 **********************************************************************/
5035static void
5036em_update_stats_counters(struct adapter *adapter)
5037{
5038	struct ifnet   *ifp;
5039
5040	if(adapter->hw.phy.media_type == e1000_media_type_copper ||
5041	   (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
5042		adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
5043		adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
5044	}
5045	adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
5046	adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);
5047	adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC);
5048	adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL);
5049
5050	adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC);
5051	adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL);
5052	adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC);
5053	adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC);
5054	adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC);
5055	adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC);
5056	adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC);
5057	adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC);
5058	adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC);
5059	adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC);
5060	adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64);
5061	adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127);
5062	adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255);
5063	adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511);
5064	adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023);
5065	adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522);
5066	adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC);
5067	adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC);
5068	adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC);
5069	adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC);
5070
5071	/* For the 64-bit byte counters the low dword must be read first. */
5072	/* Both registers clear on the read of the high dword */
5073
5074	adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH);
5075	adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH);
5076
5077	adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
5078	adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
5079	adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC);
5080	adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC);
5081	adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC);
5082
5083	adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH);
5084	adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH);
5085
5086	adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR);
5087	adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT);
5088	adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64);
5089	adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127);
5090	adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255);
5091	adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511);
5092	adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023);
5093	adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522);
5094	adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
5095	adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
5096
5097	if (adapter->hw.mac.type >= e1000_82543) {
5098		adapter->stats.algnerrc +=
5099		E1000_READ_REG(&adapter->hw, E1000_ALGNERRC);
5100		adapter->stats.rxerrc +=
5101		E1000_READ_REG(&adapter->hw, E1000_RXERRC);
5102		adapter->stats.tncrs +=
5103		E1000_READ_REG(&adapter->hw, E1000_TNCRS);
5104		adapter->stats.cexterr +=
5105		E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
5106		adapter->stats.tsctc +=
5107		E1000_READ_REG(&adapter->hw, E1000_TSCTC);
5108		adapter->stats.tsctfc +=
5109		E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
5110	}
5111	ifp = adapter->ifp;
5112
5113	ifp->if_collisions = adapter->stats.colc;
5114
5115	/* Rx Errors */
5116	ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc +
5117	    adapter->stats.crcerrs + adapter->stats.algnerrc +
5118	    adapter->stats.ruc + adapter->stats.roc +
5119	    adapter->stats.mpc + adapter->stats.cexterr;
5120
5121	/* Tx Errors */
5122	ifp->if_oerrors = adapter->stats.ecol +
5123	    adapter->stats.latecol + adapter->watchdog_events;
5124}
5125
5126
5127/**********************************************************************
5128 *
5129 *  This routine is called only when em_display_debug_stats is enabled.
5130 *  This routine provides a way to take a look at important statistics
5131 *  maintained by the driver and hardware.
5132 *
5133 **********************************************************************/
5134static void
5135em_print_debug_info(struct adapter *adapter)
5136{
5137	device_t dev = adapter->dev;
5138	u8 *hw_addr = adapter->hw.hw_addr;
5139
5140	device_printf(dev, "Adapter hardware address = %p \n", hw_addr);
5141	device_printf(dev, "CTRL = 0x%x RCTL = 0x%x \n",
5142	    E1000_READ_REG(&adapter->hw, E1000_CTRL),
5143	    E1000_READ_REG(&adapter->hw, E1000_RCTL));
5144	device_printf(dev, "Packet buffer = Tx=%dk Rx=%dk \n",
5145	    ((E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff0000) >> 16),\
5146	    (E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff) );
5147	device_printf(dev, "Flow control watermarks high = %d low = %d\n",
5148	    adapter->hw.fc.high_water,
5149	    adapter->hw.fc.low_water);
5150	device_printf(dev, "tx_int_delay = %d, tx_abs_int_delay = %d\n",
5151	    E1000_READ_REG(&adapter->hw, E1000_TIDV),
5152	    E1000_READ_REG(&adapter->hw, E1000_TADV));
5153	device_printf(dev, "rx_int_delay = %d, rx_abs_int_delay = %d\n",
5154	    E1000_READ_REG(&adapter->hw, E1000_RDTR),
5155	    E1000_READ_REG(&adapter->hw, E1000_RADV));
5156	device_printf(dev, "fifo workaround = %lld, fifo_reset_count = %lld\n",
5157	    (long long)adapter->tx_fifo_wrk_cnt,
5158	    (long long)adapter->tx_fifo_reset_cnt);
5159	device_printf(dev, "hw tdh = %d, hw tdt = %d\n",
5160	    E1000_READ_REG(&adapter->hw, E1000_TDH(0)),
5161	    E1000_READ_REG(&adapter->hw, E1000_TDT(0)));
5162	device_printf(dev, "hw rdh = %d, hw rdt = %d\n",
5163	    E1000_READ_REG(&adapter->hw, E1000_RDH(0)),
5164	    E1000_READ_REG(&adapter->hw, E1000_RDT(0)));
5165	device_printf(dev, "Num Tx descriptors avail = %d\n",
5166	    adapter->num_tx_desc_avail);
5167	device_printf(dev, "Tx Descriptors not avail1 = %ld\n",
5168	    adapter->no_tx_desc_avail1);
5169	device_printf(dev, "Tx Descriptors not avail2 = %ld\n",
5170	    adapter->no_tx_desc_avail2);
5171	device_printf(dev, "Std mbuf failed = %ld\n",
5172	    adapter->mbuf_alloc_failed);
5173	device_printf(dev, "Std mbuf cluster failed = %ld\n",
5174	    adapter->mbuf_cluster_failed);
5175	device_printf(dev, "Driver dropped packets = %ld\n",
5176	    adapter->dropped_pkts);
5177	device_printf(dev, "Driver tx dma failure in encap = %ld\n",
5178		adapter->no_tx_dma_setup);
5179}
5180
5181static void
5182em_print_hw_stats(struct adapter *adapter)
5183{
5184	device_t dev = adapter->dev;
5185
5186	device_printf(dev, "Excessive collisions = %lld\n",
5187	    (long long)adapter->stats.ecol);
5188#if	(DEBUG_HW > 0)  /* Dont output these errors normally */
5189	device_printf(dev, "Symbol errors = %lld\n",
5190	    (long long)adapter->stats.symerrs);
5191#endif
5192	device_printf(dev, "Sequence errors = %lld\n",
5193	    (long long)adapter->stats.sec);
5194	device_printf(dev, "Defer count = %lld\n",
5195	    (long long)adapter->stats.dc);
5196	device_printf(dev, "Missed Packets = %lld\n",
5197	    (long long)adapter->stats.mpc);
5198	device_printf(dev, "Receive No Buffers = %lld\n",
5199	    (long long)adapter->stats.rnbc);
5200	/* RLEC is inaccurate on some hardware, calculate our own. */
5201	device_printf(dev, "Receive Length Errors = %lld\n",
5202	    ((long long)adapter->stats.roc + (long long)adapter->stats.ruc));
5203	device_printf(dev, "Receive errors = %lld\n",
5204	    (long long)adapter->stats.rxerrc);
5205	device_printf(dev, "Crc errors = %lld\n",
5206	    (long long)adapter->stats.crcerrs);
5207	device_printf(dev, "Alignment errors = %lld\n",
5208	    (long long)adapter->stats.algnerrc);
5209	device_printf(dev, "Collision/Carrier extension errors = %lld\n",
5210	    (long long)adapter->stats.cexterr);
5211	device_printf(dev, "RX overruns = %ld\n", adapter->rx_overruns);
5212	device_printf(dev, "watchdog timeouts = %ld\n",
5213	    adapter->watchdog_events);
5214	device_printf(dev, "RX MSIX IRQ = %ld TX MSIX IRQ = %ld"
5215	    " LINK MSIX IRQ = %ld\n", adapter->rx_irq,
5216	    adapter->tx_irq , adapter->link_irq);
5217	device_printf(dev, "XON Rcvd = %lld\n",
5218	    (long long)adapter->stats.xonrxc);
5219	device_printf(dev, "XON Xmtd = %lld\n",
5220	    (long long)adapter->stats.xontxc);
5221	device_printf(dev, "XOFF Rcvd = %lld\n",
5222	    (long long)adapter->stats.xoffrxc);
5223	device_printf(dev, "XOFF Xmtd = %lld\n",
5224	    (long long)adapter->stats.xofftxc);
5225	device_printf(dev, "Good Packets Rcvd = %lld\n",
5226	    (long long)adapter->stats.gprc);
5227	device_printf(dev, "Good Packets Xmtd = %lld\n",
5228	    (long long)adapter->stats.gptc);
5229	device_printf(dev, "TSO Contexts Xmtd = %lld\n",
5230	    (long long)adapter->stats.tsctc);
5231	device_printf(dev, "TSO Contexts Failed = %lld\n",
5232	    (long long)adapter->stats.tsctfc);
5233}
5234
5235/**********************************************************************
5236 *
5237 *  This routine provides a way to dump out the adapter eeprom,
5238 *  often a useful debug/service tool. This only dumps the first
5239 *  32 words, stuff that matters is in that extent.
5240 *
5241 **********************************************************************/
5242static void
5243em_print_nvm_info(struct adapter *adapter)
5244{
5245	u16	eeprom_data;
5246	int	i, j, row = 0;
5247
5248	/* Its a bit crude, but it gets the job done */
5249	printf("\nInterface EEPROM Dump:\n");
5250	printf("Offset\n0x0000  ");
5251	for (i = 0, j = 0; i < 32; i++, j++) {
5252		if (j == 8) { /* Make the offset block */
5253			j = 0; ++row;
5254			printf("\n0x00%x0  ",row);
5255		}
5256		e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data);
5257		printf("%04x ", eeprom_data);
5258	}
5259	printf("\n");
5260}
5261
5262static int
5263em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
5264{
5265	struct adapter *adapter;
5266	int error;
5267	int result;
5268
5269	result = -1;
5270	error = sysctl_handle_int(oidp, &result, 0, req);
5271
5272	if (error || !req->newptr)
5273		return (error);
5274
5275	if (result == 1) {
5276		adapter = (struct adapter *)arg1;
5277		em_print_debug_info(adapter);
5278	}
5279	/*
5280	 * This value will cause a hex dump of the
5281	 * first 32 16-bit words of the EEPROM to
5282	 * the screen.
5283	 */
5284	if (result == 2) {
5285		adapter = (struct adapter *)arg1;
5286		em_print_nvm_info(adapter);
5287        }
5288
5289	return (error);
5290}
5291
5292
5293static int
5294em_sysctl_stats(SYSCTL_HANDLER_ARGS)
5295{
5296	struct adapter *adapter;
5297	int error;
5298	int result;
5299
5300	result = -1;
5301	error = sysctl_handle_int(oidp, &result, 0, req);
5302
5303	if (error || !req->newptr)
5304		return (error);
5305
5306	if (result == 1) {
5307		adapter = (struct adapter *)arg1;
5308		em_print_hw_stats(adapter);
5309	}
5310
5311	return (error);
5312}
5313
5314static int
5315em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
5316{
5317	struct em_int_delay_info *info;
5318	struct adapter *adapter;
5319	u32 regval;
5320	int error;
5321	int usecs;
5322	int ticks;
5323
5324	info = (struct em_int_delay_info *)arg1;
5325	usecs = info->value;
5326	error = sysctl_handle_int(oidp, &usecs, 0, req);
5327	if (error != 0 || req->newptr == NULL)
5328		return (error);
5329	if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535))
5330		return (EINVAL);
5331	info->value = usecs;
5332	ticks = EM_USECS_TO_TICKS(usecs);
5333
5334	adapter = info->adapter;
5335
5336	EM_CORE_LOCK(adapter);
5337	regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
5338	regval = (regval & ~0xffff) | (ticks & 0xffff);
5339	/* Handle a few special cases. */
5340	switch (info->offset) {
5341	case E1000_RDTR:
5342		break;
5343	case E1000_TIDV:
5344		if (ticks == 0) {
5345			adapter->txd_cmd &= ~E1000_TXD_CMD_IDE;
5346			/* Don't write 0 into the TIDV register. */
5347			regval++;
5348		} else
5349			adapter->txd_cmd |= E1000_TXD_CMD_IDE;
5350		break;
5351	}
5352	E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
5353	EM_CORE_UNLOCK(adapter);
5354	return (0);
5355}
5356
5357static void
5358em_add_int_delay_sysctl(struct adapter *adapter, const char *name,
5359	const char *description, struct em_int_delay_info *info,
5360	int offset, int value)
5361{
5362	info->adapter = adapter;
5363	info->offset = offset;
5364	info->value = value;
5365	SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev),
5366	    SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5367	    OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
5368	    info, 0, em_sysctl_int_delay, "I", description);
5369}
5370
5371#ifndef EM_LEGACY_IRQ
5372static void
5373em_add_rx_process_limit(struct adapter *adapter, const char *name,
5374	const char *description, int *limit, int value)
5375{
5376	*limit = value;
5377	SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
5378	    SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5379	    OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
5380}
5381#endif
5382
5383
5384