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