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