1 /******************************************************************************
3 Copyright (c) 2001-2009, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
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.
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.
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.
32 ******************************************************************************/
35 #ifdef HAVE_KERNEL_OPTION_HEADERS
36 #include "opt_device_polling.h"
40 #include <sys/param.h>
41 #include <sys/systm.h>
42 #if __FreeBSD_version >= 800000
43 #include <sys/buf_ring.h>
46 #include <sys/endian.h>
47 #include <sys/kernel.h>
48 #include <sys/kthread.h>
49 #include <sys/malloc.h>
51 #include <sys/module.h>
53 #include <sys/socket.h>
54 #include <sys/sockio.h>
55 #include <sys/sysctl.h>
56 #include <sys/taskqueue.h>
57 #if __FreeBSD_version >= 700029
58 #include <sys/eventhandler.h>
60 #include <machine/bus.h>
61 #include <machine/resource.h>
64 #include <net/ethernet.h>
66 #include <net/if_arp.h>
67 #include <net/if_dl.h>
68 #include <net/if_media.h>
70 #include <net/if_types.h>
71 #include <net/if_vlan_var.h>
73 #include <netinet/in_systm.h>
74 #include <netinet/in.h>
75 #include <netinet/if_ether.h>
76 #include <netinet/ip.h>
77 #include <netinet/ip6.h>
78 #include <netinet/tcp.h>
79 #include <netinet/udp.h>
81 #include <machine/in_cksum.h>
82 #include <dev/pci/pcivar.h>
83 #include <dev/pci/pcireg.h>
85 #include "e1000_api.h"
86 #include "e1000_82571.h"
89 /*********************************************************************
90 * Set this to one to display debug statistics
91 *********************************************************************/
92 int em_display_debug_stats = 0;
94 /*********************************************************************
96 *********************************************************************/
97 char em_driver_version[] = "6.9.14";
100 /*********************************************************************
101 * PCI Device ID Table
103 * Used by probe to select devices to load on
104 * Last field stores an index into e1000_strings
105 * Last entry must be all 0s
107 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
108 *********************************************************************/
110 static em_vendor_info_t em_vendor_info_array[] =
112 /* Intel(R) PRO/1000 Network Connection */
113 { 0x8086, E1000_DEV_ID_82540EM, PCI_ANY_ID, PCI_ANY_ID, 0},
114 { 0x8086, E1000_DEV_ID_82540EM_LOM, PCI_ANY_ID, PCI_ANY_ID, 0},
115 { 0x8086, E1000_DEV_ID_82540EP, PCI_ANY_ID, PCI_ANY_ID, 0},
116 { 0x8086, E1000_DEV_ID_82540EP_LOM, PCI_ANY_ID, PCI_ANY_ID, 0},
117 { 0x8086, E1000_DEV_ID_82540EP_LP, PCI_ANY_ID, PCI_ANY_ID, 0},
119 { 0x8086, E1000_DEV_ID_82541EI, PCI_ANY_ID, PCI_ANY_ID, 0},
120 { 0x8086, E1000_DEV_ID_82541ER, PCI_ANY_ID, PCI_ANY_ID, 0},
121 { 0x8086, E1000_DEV_ID_82541ER_LOM, PCI_ANY_ID, PCI_ANY_ID, 0},
122 { 0x8086, E1000_DEV_ID_82541EI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0},
123 { 0x8086, E1000_DEV_ID_82541GI, PCI_ANY_ID, PCI_ANY_ID, 0},
124 { 0x8086, E1000_DEV_ID_82541GI_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
125 { 0x8086, E1000_DEV_ID_82541GI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0},
127 { 0x8086, E1000_DEV_ID_82542, PCI_ANY_ID, PCI_ANY_ID, 0},
129 { 0x8086, E1000_DEV_ID_82543GC_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
130 { 0x8086, E1000_DEV_ID_82543GC_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
132 { 0x8086, E1000_DEV_ID_82544EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
133 { 0x8086, E1000_DEV_ID_82544EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
134 { 0x8086, E1000_DEV_ID_82544GC_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
135 { 0x8086, E1000_DEV_ID_82544GC_LOM, PCI_ANY_ID, PCI_ANY_ID, 0},
137 { 0x8086, E1000_DEV_ID_82545EM_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
138 { 0x8086, E1000_DEV_ID_82545EM_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
139 { 0x8086, E1000_DEV_ID_82545GM_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
140 { 0x8086, E1000_DEV_ID_82545GM_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
141 { 0x8086, E1000_DEV_ID_82545GM_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
143 { 0x8086, E1000_DEV_ID_82546EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
144 { 0x8086, E1000_DEV_ID_82546EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
145 { 0x8086, E1000_DEV_ID_82546EB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
146 { 0x8086, E1000_DEV_ID_82546GB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
147 { 0x8086, E1000_DEV_ID_82546GB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
148 { 0x8086, E1000_DEV_ID_82546GB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
149 { 0x8086, E1000_DEV_ID_82546GB_PCIE, PCI_ANY_ID, PCI_ANY_ID, 0},
150 { 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
151 { 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3,
152 PCI_ANY_ID, PCI_ANY_ID, 0},
154 { 0x8086, E1000_DEV_ID_82547EI, PCI_ANY_ID, PCI_ANY_ID, 0},
155 { 0x8086, E1000_DEV_ID_82547EI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0},
156 { 0x8086, E1000_DEV_ID_82547GI, PCI_ANY_ID, PCI_ANY_ID, 0},
158 { 0x8086, E1000_DEV_ID_82571EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
159 { 0x8086, E1000_DEV_ID_82571EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
160 { 0x8086, E1000_DEV_ID_82571EB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
161 { 0x8086, E1000_DEV_ID_82571EB_SERDES_DUAL,
162 PCI_ANY_ID, PCI_ANY_ID, 0},
163 { 0x8086, E1000_DEV_ID_82571EB_SERDES_QUAD,
164 PCI_ANY_ID, PCI_ANY_ID, 0},
165 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER,
166 PCI_ANY_ID, PCI_ANY_ID, 0},
167 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LP,
168 PCI_ANY_ID, PCI_ANY_ID, 0},
169 { 0x8086, E1000_DEV_ID_82571EB_QUAD_FIBER,
170 PCI_ANY_ID, PCI_ANY_ID, 0},
171 { 0x8086, E1000_DEV_ID_82571PT_QUAD_COPPER,
172 PCI_ANY_ID, PCI_ANY_ID, 0},
173 { 0x8086, E1000_DEV_ID_82572EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
174 { 0x8086, E1000_DEV_ID_82572EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
175 { 0x8086, E1000_DEV_ID_82572EI_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
176 { 0x8086, E1000_DEV_ID_82572EI, PCI_ANY_ID, PCI_ANY_ID, 0},
178 { 0x8086, E1000_DEV_ID_82573E, PCI_ANY_ID, PCI_ANY_ID, 0},
179 { 0x8086, E1000_DEV_ID_82573E_IAMT, PCI_ANY_ID, PCI_ANY_ID, 0},
180 { 0x8086, E1000_DEV_ID_82573L, PCI_ANY_ID, PCI_ANY_ID, 0},
181 { 0x8086, E1000_DEV_ID_82583V, PCI_ANY_ID, PCI_ANY_ID, 0},
182 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT,
183 PCI_ANY_ID, PCI_ANY_ID, 0},
184 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT,
185 PCI_ANY_ID, PCI_ANY_ID, 0},
186 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT,
187 PCI_ANY_ID, PCI_ANY_ID, 0},
188 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT,
189 PCI_ANY_ID, PCI_ANY_ID, 0},
190 { 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
191 { 0x8086, E1000_DEV_ID_ICH8_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
192 { 0x8086, E1000_DEV_ID_ICH8_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
193 { 0x8086, E1000_DEV_ID_ICH8_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
194 { 0x8086, E1000_DEV_ID_ICH8_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
195 { 0x8086, E1000_DEV_ID_ICH8_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
196 { 0x8086, E1000_DEV_ID_ICH8_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
198 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
199 { 0x8086, E1000_DEV_ID_ICH9_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
200 { 0x8086, E1000_DEV_ID_ICH9_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
201 { 0x8086, E1000_DEV_ID_ICH9_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
202 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_V, PCI_ANY_ID, PCI_ANY_ID, 0},
203 { 0x8086, E1000_DEV_ID_ICH9_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
204 { 0x8086, E1000_DEV_ID_ICH9_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
205 { 0x8086, E1000_DEV_ID_ICH9_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
206 { 0x8086, E1000_DEV_ID_ICH9_BM, PCI_ANY_ID, PCI_ANY_ID, 0},
207 { 0x8086, E1000_DEV_ID_82574L, PCI_ANY_ID, PCI_ANY_ID, 0},
208 { 0x8086, E1000_DEV_ID_82574LA, PCI_ANY_ID, PCI_ANY_ID, 0},
209 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
210 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
211 { 0x8086, E1000_DEV_ID_ICH10_R_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0},
212 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
213 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
214 /* required last entry */
218 /*********************************************************************
219 * Table of branding strings for all supported NICs.
220 *********************************************************************/
222 static char *em_strings[] = {
223 "Intel(R) PRO/1000 Network Connection"
226 /*********************************************************************
227 * Function prototypes
228 *********************************************************************/
229 static int em_probe(device_t);
230 static int em_attach(device_t);
231 static int em_detach(device_t);
232 static int em_shutdown(device_t);
233 static int em_suspend(device_t);
234 static int em_resume(device_t);
235 static void em_start(struct ifnet *);
236 static void em_start_locked(struct ifnet *ifp);
237 #if __FreeBSD_version >= 800000
238 static int em_mq_start(struct ifnet *, struct mbuf *);
239 static int em_mq_start_locked(struct ifnet *, struct mbuf *);
240 static void em_qflush(struct ifnet *);
242 static int em_ioctl(struct ifnet *, u_long, caddr_t);
243 static void em_watchdog(struct adapter *);
244 static void em_init(void *);
245 static void em_init_locked(struct adapter *);
246 static void em_stop(void *);
247 static void em_media_status(struct ifnet *, struct ifmediareq *);
248 static int em_media_change(struct ifnet *);
249 static void em_identify_hardware(struct adapter *);
250 static int em_allocate_pci_resources(struct adapter *);
251 static int em_allocate_legacy(struct adapter *adapter);
252 static int em_allocate_msix(struct adapter *adapter);
253 static int em_setup_msix(struct adapter *);
254 static void em_free_pci_resources(struct adapter *);
255 static void em_local_timer(void *);
256 static int em_hardware_init(struct adapter *);
257 static void em_setup_interface(device_t, struct adapter *);
258 static void em_setup_transmit_structures(struct adapter *);
259 static void em_initialize_transmit_unit(struct adapter *);
260 static int em_setup_receive_structures(struct adapter *);
261 static void em_initialize_receive_unit(struct adapter *);
262 static void em_enable_intr(struct adapter *);
263 static void em_disable_intr(struct adapter *);
264 static void em_free_transmit_structures(struct adapter *);
265 static void em_free_receive_structures(struct adapter *);
266 static void em_update_stats_counters(struct adapter *);
267 static void em_txeof(struct adapter *);
268 static void em_tx_purge(struct adapter *);
269 static int em_allocate_receive_structures(struct adapter *);
270 static int em_allocate_transmit_structures(struct adapter *);
271 static int em_rxeof(struct adapter *, int);
272 #ifndef __NO_STRICT_ALIGNMENT
273 static int em_fixup_rx(struct adapter *);
275 static void em_receive_checksum(struct adapter *, struct e1000_rx_desc *,
277 static void em_transmit_checksum_setup(struct adapter *, struct mbuf *,
279 #if __FreeBSD_version >= 700000
280 static bool em_tso_setup(struct adapter *, struct mbuf *,
282 #endif /* FreeBSD_version >= 700000 */
283 static void em_set_promisc(struct adapter *);
284 static void em_disable_promisc(struct adapter *);
285 static void em_set_multi(struct adapter *);
286 static void em_print_hw_stats(struct adapter *);
287 static void em_update_link_status(struct adapter *);
288 static int em_get_buf(struct adapter *, int);
289 #if __FreeBSD_version >= 700029
290 static void em_register_vlan(void *, struct ifnet *, u16);
291 static void em_unregister_vlan(void *, struct ifnet *, u16);
292 static void em_setup_vlan_hw_support(struct adapter *);
294 static int em_xmit(struct adapter *, struct mbuf **);
295 static void em_smartspeed(struct adapter *);
296 static int em_82547_fifo_workaround(struct adapter *, int);
297 static void em_82547_update_fifo_head(struct adapter *, int);
298 static int em_82547_tx_fifo_reset(struct adapter *);
299 static void em_82547_move_tail(void *);
300 static int em_dma_malloc(struct adapter *, bus_size_t,
301 struct em_dma_alloc *, int);
302 static void em_dma_free(struct adapter *, struct em_dma_alloc *);
303 static void em_print_debug_info(struct adapter *);
304 static void em_print_nvm_info(struct adapter *);
305 static int em_is_valid_ether_addr(u8 *);
306 static int em_sysctl_stats(SYSCTL_HANDLER_ARGS);
307 static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
308 static u32 em_fill_descriptors (bus_addr_t address, u32 length,
309 PDESC_ARRAY desc_array);
310 static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
311 static void em_add_int_delay_sysctl(struct adapter *, const char *,
312 const char *, struct em_int_delay_info *, int, int);
313 /* Management and WOL Support */
314 static void em_init_manageability(struct adapter *);
315 static void em_release_manageability(struct adapter *);
316 static void em_get_hw_control(struct adapter *);
317 static void em_release_hw_control(struct adapter *);
318 static void em_enable_wakeup(device_t);
321 static void em_intr(void *);
323 #if __FreeBSD_version < 700000
324 static void em_irq_fast(void *);
326 static int em_irq_fast(void *);
330 static void em_msix_tx(void *);
331 static void em_msix_rx(void *);
332 static void em_msix_link(void *);
333 static void em_handle_rx(void *context, int pending);
334 static void em_handle_tx(void *context, int pending);
336 static void em_handle_rxtx(void *context, int pending);
337 static void em_handle_link(void *context, int pending);
338 static void em_add_rx_process_limit(struct adapter *, const char *,
339 const char *, int *, int);
340 #endif /* ~EM_LEGACY_IRQ */
342 #ifdef DEVICE_POLLING
343 static poll_handler_t em_poll;
346 /*********************************************************************
347 * FreeBSD Device Interface Entry Points
348 *********************************************************************/
350 static device_method_t em_methods[] = {
351 /* Device interface */
352 DEVMETHOD(device_probe, em_probe),
353 DEVMETHOD(device_attach, em_attach),
354 DEVMETHOD(device_detach, em_detach),
355 DEVMETHOD(device_shutdown, em_shutdown),
356 DEVMETHOD(device_suspend, em_suspend),
357 DEVMETHOD(device_resume, em_resume),
361 static driver_t em_driver = {
362 "em", em_methods, sizeof(struct adapter),
365 static devclass_t em_devclass;
366 DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0);
367 MODULE_DEPEND(em, pci, 1, 1, 1);
368 MODULE_DEPEND(em, ether, 1, 1, 1);
370 /*********************************************************************
371 * Tunable default values.
372 *********************************************************************/
374 #define EM_TICKS_TO_USECS(ticks) ((1024 * (ticks) + 500) / 1000)
375 #define EM_USECS_TO_TICKS(usecs) ((1000 * (usecs) + 512) / 1024)
378 /* Allow common code without TSO */
383 static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV);
384 static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR);
385 static int em_tx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_TADV);
386 static int em_rx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_RADV);
387 static int em_rxd = EM_DEFAULT_RXD;
388 static int em_txd = EM_DEFAULT_TXD;
389 static int em_smart_pwr_down = FALSE;
390 /* Controls whether promiscuous also shows bad packets */
391 static int em_debug_sbp = FALSE;
392 /* Local switch for MSI/MSIX */
393 static int em_enable_msi = TRUE;
395 TUNABLE_INT("hw.em.tx_int_delay", &em_tx_int_delay_dflt);
396 TUNABLE_INT("hw.em.rx_int_delay", &em_rx_int_delay_dflt);
397 TUNABLE_INT("hw.em.tx_abs_int_delay", &em_tx_abs_int_delay_dflt);
398 TUNABLE_INT("hw.em.rx_abs_int_delay", &em_rx_abs_int_delay_dflt);
399 TUNABLE_INT("hw.em.rxd", &em_rxd);
400 TUNABLE_INT("hw.em.txd", &em_txd);
401 TUNABLE_INT("hw.em.smart_pwr_down", &em_smart_pwr_down);
402 TUNABLE_INT("hw.em.sbp", &em_debug_sbp);
403 TUNABLE_INT("hw.em.enable_msi", &em_enable_msi);
405 #ifndef EM_LEGACY_IRQ
406 /* How many packets rxeof tries to clean at a time */
407 static int em_rx_process_limit = 100;
408 TUNABLE_INT("hw.em.rx_process_limit", &em_rx_process_limit);
411 /* Flow control setting - default to FULL */
412 static int em_fc_setting = e1000_fc_full;
413 TUNABLE_INT("hw.em.fc_setting", &em_fc_setting);
416 ** Shadow VFTA table, this is needed because
417 ** the real vlan filter table gets cleared during
418 ** a soft reset and the driver needs to be able
421 static u32 em_shadow_vfta[EM_VFTA_SIZE];
423 /* Global used in WOL setup with multiport cards */
424 static int global_quad_port_a = 0;
426 /*********************************************************************
427 * Device identification routine
429 * em_probe determines if the driver should be loaded on
430 * adapter based on PCI vendor/device id of the adapter.
432 * return BUS_PROBE_DEFAULT on success, positive on failure
433 *********************************************************************/
436 em_probe(device_t dev)
438 char adapter_name[60];
439 u16 pci_vendor_id = 0;
440 u16 pci_device_id = 0;
441 u16 pci_subvendor_id = 0;
442 u16 pci_subdevice_id = 0;
443 em_vendor_info_t *ent;
445 INIT_DEBUGOUT("em_probe: begin");
447 pci_vendor_id = pci_get_vendor(dev);
448 if (pci_vendor_id != EM_VENDOR_ID)
451 pci_device_id = pci_get_device(dev);
452 pci_subvendor_id = pci_get_subvendor(dev);
453 pci_subdevice_id = pci_get_subdevice(dev);
455 ent = em_vendor_info_array;
456 while (ent->vendor_id != 0) {
457 if ((pci_vendor_id == ent->vendor_id) &&
458 (pci_device_id == ent->device_id) &&
460 ((pci_subvendor_id == ent->subvendor_id) ||
461 (ent->subvendor_id == PCI_ANY_ID)) &&
463 ((pci_subdevice_id == ent->subdevice_id) ||
464 (ent->subdevice_id == PCI_ANY_ID))) {
465 sprintf(adapter_name, "%s %s",
466 em_strings[ent->index],
468 device_set_desc_copy(dev, adapter_name);
469 return (BUS_PROBE_DEFAULT);
477 /*********************************************************************
478 * Device initialization routine
480 * The attach entry point is called when the driver is being loaded.
481 * This routine identifies the type of hardware, allocates all resources
482 * and initializes the hardware.
484 * return 0 on success, positive on failure
485 *********************************************************************/
488 em_attach(device_t dev)
490 struct adapter *adapter;
493 u16 eeprom_data, device_id;
495 INIT_DEBUGOUT("em_attach: begin");
497 adapter = device_get_softc(dev);
498 adapter->dev = adapter->osdep.dev = dev;
499 EM_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
500 EM_TX_LOCK_INIT(adapter, device_get_nameunit(dev));
501 EM_RX_LOCK_INIT(adapter, device_get_nameunit(dev));
504 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
505 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
506 OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
507 em_sysctl_debug_info, "I", "Debug Information");
509 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
510 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
511 OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
512 em_sysctl_stats, "I", "Statistics");
514 callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
515 callout_init_mtx(&adapter->tx_fifo_timer, &adapter->tx_mtx, 0);
517 /* Determine hardware and mac info */
518 em_identify_hardware(adapter);
520 /* Setup PCI resources */
521 if (em_allocate_pci_resources(adapter)) {
522 device_printf(dev, "Allocation of PCI resources failed\n");
528 ** For ICH8 and family we need to
529 ** map the flash memory, and this
530 ** must happen after the MAC is
533 if ((adapter->hw.mac.type == e1000_ich8lan) ||
534 (adapter->hw.mac.type == e1000_ich9lan) ||
535 (adapter->hw.mac.type == e1000_ich10lan)) {
536 int rid = EM_BAR_TYPE_FLASH;
537 adapter->flash = bus_alloc_resource_any(dev,
538 SYS_RES_MEMORY, &rid, RF_ACTIVE);
539 if (adapter->flash == NULL) {
540 device_printf(dev, "Mapping of Flash failed\n");
544 /* This is used in the shared code */
545 adapter->hw.flash_address = (u8 *)adapter->flash;
546 adapter->osdep.flash_bus_space_tag =
547 rman_get_bustag(adapter->flash);
548 adapter->osdep.flash_bus_space_handle =
549 rman_get_bushandle(adapter->flash);
552 /* Do Shared Code initialization */
553 if (e1000_setup_init_funcs(&adapter->hw, TRUE)) {
554 device_printf(dev, "Setup of Shared code failed\n");
559 e1000_get_bus_info(&adapter->hw);
561 /* Set up some sysctls for the tunable interrupt delays */
562 em_add_int_delay_sysctl(adapter, "rx_int_delay",
563 "receive interrupt delay in usecs", &adapter->rx_int_delay,
564 E1000_REGISTER(&adapter->hw, E1000_RDTR), em_rx_int_delay_dflt);
565 em_add_int_delay_sysctl(adapter, "tx_int_delay",
566 "transmit interrupt delay in usecs", &adapter->tx_int_delay,
567 E1000_REGISTER(&adapter->hw, E1000_TIDV), em_tx_int_delay_dflt);
568 if (adapter->hw.mac.type >= e1000_82540) {
569 em_add_int_delay_sysctl(adapter, "rx_abs_int_delay",
570 "receive interrupt delay limit in usecs",
571 &adapter->rx_abs_int_delay,
572 E1000_REGISTER(&adapter->hw, E1000_RADV),
573 em_rx_abs_int_delay_dflt);
574 em_add_int_delay_sysctl(adapter, "tx_abs_int_delay",
575 "transmit interrupt delay limit in usecs",
576 &adapter->tx_abs_int_delay,
577 E1000_REGISTER(&adapter->hw, E1000_TADV),
578 em_tx_abs_int_delay_dflt);
581 #ifndef EM_LEGACY_IRQ
582 /* Sysctls for limiting the amount of work done in the taskqueue */
583 em_add_rx_process_limit(adapter, "rx_processing_limit",
584 "max number of rx packets to process", &adapter->rx_process_limit,
585 em_rx_process_limit);
589 * Validate number of transmit and receive descriptors. It
590 * must not exceed hardware maximum, and must be multiple
591 * of E1000_DBA_ALIGN.
593 if (((em_txd * sizeof(struct e1000_tx_desc)) % EM_DBA_ALIGN) != 0 ||
594 (adapter->hw.mac.type >= e1000_82544 && em_txd > EM_MAX_TXD) ||
595 (adapter->hw.mac.type < e1000_82544 && em_txd > EM_MAX_TXD_82543) ||
596 (em_txd < EM_MIN_TXD)) {
597 device_printf(dev, "Using %d TX descriptors instead of %d!\n",
598 EM_DEFAULT_TXD, em_txd);
599 adapter->num_tx_desc = EM_DEFAULT_TXD;
601 adapter->num_tx_desc = em_txd;
602 if (((em_rxd * sizeof(struct e1000_rx_desc)) % EM_DBA_ALIGN) != 0 ||
603 (adapter->hw.mac.type >= e1000_82544 && em_rxd > EM_MAX_RXD) ||
604 (adapter->hw.mac.type < e1000_82544 && em_rxd > EM_MAX_RXD_82543) ||
605 (em_rxd < EM_MIN_RXD)) {
606 device_printf(dev, "Using %d RX descriptors instead of %d!\n",
607 EM_DEFAULT_RXD, em_rxd);
608 adapter->num_rx_desc = EM_DEFAULT_RXD;
610 adapter->num_rx_desc = em_rxd;
612 adapter->hw.mac.autoneg = DO_AUTO_NEG;
613 adapter->hw.phy.autoneg_wait_to_complete = FALSE;
614 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
615 adapter->rx_buffer_len = 2048;
617 e1000_init_script_state_82541(&adapter->hw, TRUE);
618 e1000_set_tbi_compatibility_82543(&adapter->hw, TRUE);
621 if (adapter->hw.phy.media_type == e1000_media_type_copper) {
622 adapter->hw.phy.mdix = AUTO_ALL_MODES;
623 adapter->hw.phy.disable_polarity_correction = FALSE;
624 adapter->hw.phy.ms_type = EM_MASTER_SLAVE;
628 * Set the frame limits assuming
629 * standard ethernet sized frames.
631 adapter->max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE;
632 adapter->min_frame_size = ETH_ZLEN + ETHERNET_FCS_SIZE;
635 * This controls when hardware reports transmit completion
638 adapter->hw.mac.report_tx_early = 1;
640 tsize = roundup2(adapter->num_tx_desc * sizeof(struct e1000_tx_desc),
643 /* Allocate Transmit Descriptor ring */
644 if (em_dma_malloc(adapter, tsize, &adapter->txdma, BUS_DMA_NOWAIT)) {
645 device_printf(dev, "Unable to allocate tx_desc memory\n");
649 adapter->tx_desc_base =
650 (struct e1000_tx_desc *)adapter->txdma.dma_vaddr;
652 rsize = roundup2(adapter->num_rx_desc * sizeof(struct e1000_rx_desc),
655 /* Allocate Receive Descriptor ring */
656 if (em_dma_malloc(adapter, rsize, &adapter->rxdma, BUS_DMA_NOWAIT)) {
657 device_printf(dev, "Unable to allocate rx_desc memory\n");
661 adapter->rx_desc_base =
662 (struct e1000_rx_desc *)adapter->rxdma.dma_vaddr;
665 ** Start from a known state, this is
666 ** important in reading the nvm and
669 e1000_reset_hw(&adapter->hw);
671 /* Make sure we have a good EEPROM before we read from it */
672 if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
674 ** Some PCI-E parts fail the first check due to
675 ** the link being in sleep state, call it again,
676 ** if it fails a second time its a real issue.
678 if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
680 "The EEPROM Checksum Is Not Valid\n");
686 /* Copy the permanent MAC address out of the EEPROM */
687 if (e1000_read_mac_addr(&adapter->hw) < 0) {
688 device_printf(dev, "EEPROM read error while reading MAC"
694 if (!em_is_valid_ether_addr(adapter->hw.mac.addr)) {
695 device_printf(dev, "Invalid MAC address\n");
700 /* Initialize the hardware */
701 if (em_hardware_init(adapter)) {
702 device_printf(dev, "Unable to initialize the hardware\n");
707 /* Allocate transmit descriptors and buffers */
708 if (em_allocate_transmit_structures(adapter)) {
709 device_printf(dev, "Could not setup transmit structures\n");
714 /* Allocate receive descriptors and buffers */
715 if (em_allocate_receive_structures(adapter)) {
716 device_printf(dev, "Could not setup receive structures\n");
722 ** Do interrupt configuration
724 if (adapter->msi > 1) /* Do MSI/X */
725 error = em_allocate_msix(adapter);
726 else /* MSI or Legacy */
727 error = em_allocate_legacy(adapter);
731 /* Setup OS specific network interface */
732 em_setup_interface(dev, adapter);
734 /* Initialize statistics */
735 em_update_stats_counters(adapter);
737 adapter->hw.mac.get_link_status = 1;
738 em_update_link_status(adapter);
740 /* Indicate SOL/IDER usage */
741 if (e1000_check_reset_block(&adapter->hw))
743 "PHY reset is blocked due to SOL/IDER session.\n");
745 /* Determine if we have to control management hardware */
746 adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
751 switch (adapter->hw.mac.type) {
757 case e1000_82546_rev_3:
759 case e1000_80003es2lan:
760 if (adapter->hw.bus.func == 1)
761 e1000_read_nvm(&adapter->hw,
762 NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
764 e1000_read_nvm(&adapter->hw,
765 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
766 eeprom_data &= EM_EEPROM_APME;
769 /* APME bit in EEPROM is mapped to WUC.APME */
770 eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC) &
775 adapter->wol = E1000_WUFC_MAG;
777 * We have the eeprom settings, now apply the special cases
778 * where the eeprom may be wrong or the board won't support
779 * wake on lan on a particular port
781 device_id = pci_get_device(dev);
783 case E1000_DEV_ID_82546GB_PCIE:
786 case E1000_DEV_ID_82546EB_FIBER:
787 case E1000_DEV_ID_82546GB_FIBER:
788 case E1000_DEV_ID_82571EB_FIBER:
789 /* Wake events only supported on port A for dual fiber
790 * regardless of eeprom setting */
791 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
795 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
796 case E1000_DEV_ID_82571EB_QUAD_COPPER:
797 case E1000_DEV_ID_82571EB_QUAD_FIBER:
798 case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
799 /* if quad port adapter, disable WoL on all but port A */
800 if (global_quad_port_a != 0)
802 /* Reset for multiple quad port adapters */
803 if (++global_quad_port_a == 4)
804 global_quad_port_a = 0;
808 /* Do we need workaround for 82544 PCI-X adapter? */
809 if (adapter->hw.bus.type == e1000_bus_type_pcix &&
810 adapter->hw.mac.type == e1000_82544)
811 adapter->pcix_82544 = TRUE;
813 adapter->pcix_82544 = FALSE;
815 #if __FreeBSD_version >= 700029
816 /* Register for VLAN events */
817 adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
818 em_register_vlan, adapter, EVENTHANDLER_PRI_FIRST);
819 adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
820 em_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
823 /* Tell the stack that the interface is not active */
824 adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
826 INIT_DEBUGOUT("em_attach: end");
831 em_free_transmit_structures(adapter);
834 em_release_hw_control(adapter);
835 em_dma_free(adapter, &adapter->rxdma);
837 em_dma_free(adapter, &adapter->txdma);
840 em_free_pci_resources(adapter);
841 EM_TX_LOCK_DESTROY(adapter);
842 EM_RX_LOCK_DESTROY(adapter);
843 EM_CORE_LOCK_DESTROY(adapter);
848 /*********************************************************************
849 * Device removal routine
851 * The detach entry point is called when the driver is being removed.
852 * This routine stops the adapter and deallocates all the resources
853 * that were allocated for driver operation.
855 * return 0 on success, positive on failure
856 *********************************************************************/
859 em_detach(device_t dev)
861 struct adapter *adapter = device_get_softc(dev);
862 struct ifnet *ifp = adapter->ifp;
864 INIT_DEBUGOUT("em_detach: begin");
866 /* Make sure VLANS are not using driver */
867 #if __FreeBSD_version >= 700000
868 if (adapter->ifp->if_vlantrunk != NULL) {
870 if (adapter->ifp->if_nvlans != 0) {
872 device_printf(dev,"Vlan in use, detach first\n");
876 #ifdef DEVICE_POLLING
877 if (ifp->if_capenable & IFCAP_POLLING)
878 ether_poll_deregister(ifp);
881 EM_CORE_LOCK(adapter);
883 adapter->in_detach = 1;
885 e1000_phy_hw_reset(&adapter->hw);
887 em_release_manageability(adapter);
889 if (((adapter->hw.mac.type == e1000_82573) ||
890 (adapter->hw.mac.type == e1000_82583) ||
891 (adapter->hw.mac.type == e1000_ich8lan) ||
892 (adapter->hw.mac.type == e1000_ich10lan) ||
893 (adapter->hw.mac.type == e1000_ich9lan)) &&
894 e1000_check_mng_mode(&adapter->hw))
895 em_release_hw_control(adapter);
898 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
899 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
900 em_enable_wakeup(dev);
903 EM_TX_UNLOCK(adapter);
904 EM_CORE_UNLOCK(adapter);
906 #if __FreeBSD_version >= 700029
907 /* Unregister VLAN events */
908 if (adapter->vlan_attach != NULL)
909 EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
910 if (adapter->vlan_detach != NULL)
911 EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
914 ether_ifdetach(adapter->ifp);
915 callout_drain(&adapter->timer);
916 callout_drain(&adapter->tx_fifo_timer);
918 em_free_pci_resources(adapter);
919 bus_generic_detach(dev);
922 em_free_transmit_structures(adapter);
923 em_free_receive_structures(adapter);
925 /* Free Transmit Descriptor ring */
926 if (adapter->tx_desc_base) {
927 em_dma_free(adapter, &adapter->txdma);
928 adapter->tx_desc_base = NULL;
931 /* Free Receive Descriptor ring */
932 if (adapter->rx_desc_base) {
933 em_dma_free(adapter, &adapter->rxdma);
934 adapter->rx_desc_base = NULL;
937 EM_TX_LOCK_DESTROY(adapter);
938 EM_RX_LOCK_DESTROY(adapter);
939 EM_CORE_LOCK_DESTROY(adapter);
944 /*********************************************************************
946 * Shutdown entry point
948 **********************************************************************/
951 em_shutdown(device_t dev)
953 return em_suspend(dev);
957 * Suspend/resume device methods.
960 em_suspend(device_t dev)
962 struct adapter *adapter = device_get_softc(dev);
964 EM_CORE_LOCK(adapter);
968 EM_TX_UNLOCK(adapter);
970 em_release_manageability(adapter);
972 if (((adapter->hw.mac.type == e1000_82573) ||
973 (adapter->hw.mac.type == e1000_82583) ||
974 (adapter->hw.mac.type == e1000_ich8lan) ||
975 (adapter->hw.mac.type == e1000_ich10lan) ||
976 (adapter->hw.mac.type == e1000_ich9lan)) &&
977 e1000_check_mng_mode(&adapter->hw))
978 em_release_hw_control(adapter);
981 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
982 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
983 em_enable_wakeup(dev);
986 EM_CORE_UNLOCK(adapter);
988 return bus_generic_suspend(dev);
992 em_resume(device_t dev)
994 struct adapter *adapter = device_get_softc(dev);
995 struct ifnet *ifp = adapter->ifp;
997 EM_CORE_LOCK(adapter);
998 em_init_locked(adapter);
999 em_init_manageability(adapter);
1000 EM_CORE_UNLOCK(adapter);
1003 return bus_generic_resume(dev);
1007 /*********************************************************************
1008 * Transmit entry point
1010 * em_start is called by the stack to initiate a transmit.
1011 * The driver will remain in this routine as long as there are
1012 * packets to transmit and transmit resources are available.
1013 * In case resources are not available stack is notified and
1014 * the packet is requeued.
1015 **********************************************************************/
1017 #if __FreeBSD_version >= 800000
1019 em_mq_start_locked(struct ifnet *ifp, struct mbuf *m)
1021 struct adapter *adapter = ifp->if_softc;
1023 int error = E1000_SUCCESS;
1025 EM_TX_LOCK_ASSERT(adapter);
1026 /* To allow being called from a tasklet */
1030 if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
1032 || (!adapter->link_active)) {
1033 error = drbr_enqueue(ifp, adapter->br, m);
1035 } else if (drbr_empty(ifp, adapter->br) &&
1036 (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) {
1037 if ((error = em_xmit(adapter, &m)) != 0) {
1039 error = drbr_enqueue(ifp, adapter->br, m);
1043 * We've bypassed the buf ring so we need to update
1046 drbr_stats_update(ifp, m->m_pkthdr.len, m->m_flags);
1048 ** Send a copy of the frame to the BPF
1049 ** listener and set the watchdog on.
1051 ETHER_BPF_MTAP(ifp, m);
1052 adapter->watchdog_timer = EM_TX_TIMEOUT;
1054 } else if ((error = drbr_enqueue(ifp, adapter->br, m)) != 0)
1058 if (drbr_empty(ifp, adapter->br))
1060 /* Process the queue */
1062 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
1064 next = drbr_dequeue(ifp, adapter->br);
1067 if ((error = em_xmit(adapter, &next)) != 0) {
1069 error = drbr_enqueue(ifp, adapter->br, next);
1072 drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
1073 ETHER_BPF_MTAP(ifp, next);
1074 /* Set the watchdog */
1075 adapter->watchdog_timer = EM_TX_TIMEOUT;
1078 if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
1079 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1085 ** Multiqueue capable stack interface, this is not
1086 ** yet truely multiqueue, but that is coming...
1089 em_mq_start(struct ifnet *ifp, struct mbuf *m)
1092 struct adapter *adapter = ifp->if_softc;
1095 if (EM_TX_TRYLOCK(adapter)) {
1096 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
1097 error = em_mq_start_locked(ifp, m);
1098 EM_TX_UNLOCK(adapter);
1100 error = drbr_enqueue(ifp, adapter->br, m);
1106 em_qflush(struct ifnet *ifp)
1109 struct adapter *adapter = (struct adapter *)ifp->if_softc;
1111 EM_TX_LOCK(adapter);
1112 while ((m = buf_ring_dequeue_sc(adapter->br)) != NULL)
1115 EM_TX_UNLOCK(adapter);
1117 #endif /* FreeBSD_version */
1120 em_start_locked(struct ifnet *ifp)
1122 struct adapter *adapter = ifp->if_softc;
1123 struct mbuf *m_head;
1125 EM_TX_LOCK_ASSERT(adapter);
1127 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
1130 if (!adapter->link_active)
1133 while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
1135 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
1139 * Encapsulation can modify our pointer, and or make it
1140 * NULL on failure. In that event, we can't requeue.
1142 if (em_xmit(adapter, &m_head)) {
1145 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1146 IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
1150 /* Send a copy of the frame to the BPF listener */
1151 ETHER_BPF_MTAP(ifp, m_head);
1153 /* Set timeout in case hardware has problems transmitting. */
1154 adapter->watchdog_timer = EM_TX_TIMEOUT;
1156 if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
1157 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
1163 em_start(struct ifnet *ifp)
1165 struct adapter *adapter = ifp->if_softc;
1167 EM_TX_LOCK(adapter);
1168 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
1169 em_start_locked(ifp);
1170 EM_TX_UNLOCK(adapter);
1173 /*********************************************************************
1176 * em_ioctl is called when the user wants to configure the
1179 * return 0 on success, positive on failure
1180 **********************************************************************/
1183 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
1185 struct adapter *adapter = ifp->if_softc;
1186 struct ifreq *ifr = (struct ifreq *)data;
1188 struct ifaddr *ifa = (struct ifaddr *)data;
1192 if (adapter->in_detach)
1198 if (ifa->ifa_addr->sa_family == AF_INET) {
1201 * Since resetting hardware takes a very long time
1202 * and results in link renegotiation we only
1203 * initialize the hardware only when it is absolutely
1206 ifp->if_flags |= IFF_UP;
1207 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
1208 EM_CORE_LOCK(adapter);
1209 em_init_locked(adapter);
1210 EM_CORE_UNLOCK(adapter);
1212 if (!(ifp->if_flags & IFF_NOARP))
1213 arp_ifinit(ifp, ifa);
1216 error = ether_ioctl(ifp, command, data);
1221 u16 eeprom_data = 0;
1223 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
1225 EM_CORE_LOCK(adapter);
1226 switch (adapter->hw.mac.type) {
1229 * 82573 only supports jumbo frames
1230 * if ASPM is disabled.
1232 e1000_read_nvm(&adapter->hw,
1233 NVM_INIT_3GIO_3, 1, &eeprom_data);
1234 if (eeprom_data & NVM_WORD1A_ASPM_MASK) {
1235 max_frame_size = ETHER_MAX_LEN;
1238 /* Allow Jumbo frames - fall thru */
1242 case e1000_ich10lan:
1244 case e1000_80003es2lan: /* Limit Jumbo Frame size */
1245 max_frame_size = 9234;
1247 /* Adapters that do not support jumbo frames */
1251 max_frame_size = ETHER_MAX_LEN;
1254 max_frame_size = MAX_JUMBO_FRAME_SIZE;
1256 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN -
1258 EM_CORE_UNLOCK(adapter);
1263 ifp->if_mtu = ifr->ifr_mtu;
1264 adapter->max_frame_size =
1265 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
1266 em_init_locked(adapter);
1267 EM_CORE_UNLOCK(adapter);
1271 IOCTL_DEBUGOUT("ioctl rcv'd:\
1272 SIOCSIFFLAGS (Set Interface Flags)");
1273 EM_CORE_LOCK(adapter);
1274 if (ifp->if_flags & IFF_UP) {
1275 if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) {
1276 if ((ifp->if_flags ^ adapter->if_flags) &
1277 (IFF_PROMISC | IFF_ALLMULTI)) {
1278 em_disable_promisc(adapter);
1279 em_set_promisc(adapter);
1282 em_init_locked(adapter);
1284 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1285 EM_TX_LOCK(adapter);
1287 EM_TX_UNLOCK(adapter);
1289 adapter->if_flags = ifp->if_flags;
1290 EM_CORE_UNLOCK(adapter);
1294 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
1295 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1296 EM_CORE_LOCK(adapter);
1297 em_disable_intr(adapter);
1298 em_set_multi(adapter);
1299 if (adapter->hw.mac.type == e1000_82542 &&
1300 adapter->hw.revision_id == E1000_REVISION_2) {
1301 em_initialize_receive_unit(adapter);
1303 #ifdef DEVICE_POLLING
1304 if (!(ifp->if_capenable & IFCAP_POLLING))
1306 em_enable_intr(adapter);
1307 EM_CORE_UNLOCK(adapter);
1311 /* Check SOL/IDER usage */
1312 EM_CORE_LOCK(adapter);
1313 if (e1000_check_reset_block(&adapter->hw)) {
1314 EM_CORE_UNLOCK(adapter);
1315 device_printf(adapter->dev, "Media change is"
1316 " blocked due to SOL/IDER session.\n");
1319 EM_CORE_UNLOCK(adapter);
1321 IOCTL_DEBUGOUT("ioctl rcv'd: \
1322 SIOCxIFMEDIA (Get/Set Interface Media)");
1323 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
1329 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
1331 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
1332 #ifdef DEVICE_POLLING
1333 if (mask & IFCAP_POLLING) {
1334 if (ifr->ifr_reqcap & IFCAP_POLLING) {
1335 error = ether_poll_register(em_poll, ifp);
1338 EM_CORE_LOCK(adapter);
1339 em_disable_intr(adapter);
1340 ifp->if_capenable |= IFCAP_POLLING;
1341 EM_CORE_UNLOCK(adapter);
1343 error = ether_poll_deregister(ifp);
1344 /* Enable interrupt even in error case */
1345 EM_CORE_LOCK(adapter);
1346 em_enable_intr(adapter);
1347 ifp->if_capenable &= ~IFCAP_POLLING;
1348 EM_CORE_UNLOCK(adapter);
1352 if (mask & IFCAP_HWCSUM) {
1353 ifp->if_capenable ^= IFCAP_HWCSUM;
1356 #if __FreeBSD_version >= 700000
1357 if (mask & IFCAP_TSO4) {
1358 ifp->if_capenable ^= IFCAP_TSO4;
1363 if (mask & IFCAP_VLAN_HWTAGGING) {
1364 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
1367 if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING))
1369 #if __FreeBSD_version >= 700000
1370 VLAN_CAPABILITIES(ifp);
1376 error = ether_ioctl(ifp, command, data);
1383 /*********************************************************************
1386 * This routine is called from the local timer every second.
1387 * As long as transmit descriptors are being cleaned the value
1388 * is non-zero and we do nothing. Reaching 0 indicates a tx hang
1389 * and we then reset the device.
1391 **********************************************************************/
1394 em_watchdog(struct adapter *adapter)
1397 EM_CORE_LOCK_ASSERT(adapter);
1400 ** The timer is set to 5 every time start queues a packet.
1401 ** Then txeof keeps resetting it as long as it cleans at
1402 ** least one descriptor.
1403 ** Finally, anytime all descriptors are clean the timer is
1406 EM_TX_LOCK(adapter);
1407 if ((adapter->watchdog_timer == 0) || (--adapter->watchdog_timer)) {
1408 EM_TX_UNLOCK(adapter);
1412 /* If we are in this routine because of pause frames, then
1413 * don't reset the hardware.
1415 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
1416 E1000_STATUS_TXOFF) {
1417 adapter->watchdog_timer = EM_TX_TIMEOUT;
1418 EM_TX_UNLOCK(adapter);
1422 if (e1000_check_for_link(&adapter->hw) == 0)
1423 device_printf(adapter->dev, "watchdog timeout -- resetting\n");
1424 adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
1425 adapter->watchdog_events++;
1426 EM_TX_UNLOCK(adapter);
1428 em_init_locked(adapter);
1431 /*********************************************************************
1434 * This routine is used in two ways. It is used by the stack as
1435 * init entry point in network interface structure. It is also used
1436 * by the driver as a hw/sw initialization routine to get to a
1439 * return 0 on success, positive on failure
1440 **********************************************************************/
1443 em_init_locked(struct adapter *adapter)
1445 struct ifnet *ifp = adapter->ifp;
1446 device_t dev = adapter->dev;
1449 INIT_DEBUGOUT("em_init: begin");
1451 EM_CORE_LOCK_ASSERT(adapter);
1453 EM_TX_LOCK(adapter);
1455 EM_TX_UNLOCK(adapter);
1458 * Packet Buffer Allocation (PBA)
1459 * Writing PBA sets the receive portion of the buffer
1460 * the remainder is used for the transmit buffer.
1462 * Devices before the 82547 had a Packet Buffer of 64K.
1463 * Default allocation: PBA=48K for Rx, leaving 16K for Tx.
1464 * After the 82547 the buffer was reduced to 40K.
1465 * Default allocation: PBA=30K for Rx, leaving 10K for Tx.
1466 * Note: default does not leave enough room for Jumbo Frame >10k.
1468 switch (adapter->hw.mac.type) {
1470 case e1000_82547_rev_2: /* 82547: Total Packet Buffer is 40K */
1471 if (adapter->max_frame_size > 8192)
1472 pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */
1474 pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */
1475 adapter->tx_fifo_head = 0;
1476 adapter->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT;
1477 adapter->tx_fifo_size =
1478 (E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT;
1480 /* Total Packet Buffer on these is 48K */
1483 case e1000_80003es2lan:
1484 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
1486 case e1000_82573: /* 82573: Total Packet Buffer is 32K */
1487 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
1491 pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */
1494 case e1000_ich10lan:
1499 /* Devices before 82547 had a Packet Buffer of 64K. */
1500 if (adapter->max_frame_size > 8192)
1501 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
1503 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
1506 INIT_DEBUGOUT1("em_init: pba=%dK",pba);
1507 E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba);
1509 /* Get the latest mac address, User can use a LAA */
1510 bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr,
1513 /* Put the address into the Receive Address Array */
1514 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
1517 * With the 82571 adapter, RAR[0] may be overwritten
1518 * when the other port is reset, we make a duplicate
1519 * in RAR[14] for that eventuality, this assures
1520 * the interface continues to function.
1522 if (adapter->hw.mac.type == e1000_82571) {
1523 e1000_set_laa_state_82571(&adapter->hw, TRUE);
1524 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr,
1525 E1000_RAR_ENTRIES - 1);
1528 /* Initialize the hardware */
1529 if (em_hardware_init(adapter)) {
1530 device_printf(dev, "Unable to initialize the hardware\n");
1533 em_update_link_status(adapter);
1535 /* Setup VLAN support, basic and offload if available */
1536 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
1538 #if __FreeBSD_version < 700029
1539 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
1541 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
1542 ctrl |= E1000_CTRL_VME;
1543 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
1546 /* Use real VLAN Filter support */
1547 em_setup_vlan_hw_support(adapter);
1550 /* Set hardware offload abilities */
1551 ifp->if_hwassist = 0;
1552 if (adapter->hw.mac.type >= e1000_82543) {
1553 if (ifp->if_capenable & IFCAP_TXCSUM)
1554 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
1555 #if __FreeBSD_version >= 700000
1556 if (ifp->if_capenable & IFCAP_TSO4)
1557 ifp->if_hwassist |= CSUM_TSO;
1561 /* Configure for OS presence */
1562 em_init_manageability(adapter);
1564 /* Prepare transmit descriptors and buffers */
1565 em_setup_transmit_structures(adapter);
1566 em_initialize_transmit_unit(adapter);
1568 /* Setup Multicast table */
1569 em_set_multi(adapter);
1571 /* Prepare receive descriptors and buffers */
1572 if (em_setup_receive_structures(adapter)) {
1573 device_printf(dev, "Could not setup receive structures\n");
1574 EM_TX_LOCK(adapter);
1576 EM_TX_UNLOCK(adapter);
1579 em_initialize_receive_unit(adapter);
1581 /* Don't lose promiscuous settings */
1582 em_set_promisc(adapter);
1584 ifp->if_drv_flags |= IFF_DRV_RUNNING;
1585 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
1587 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1588 e1000_clear_hw_cntrs_base_generic(&adapter->hw);
1590 /* MSI/X configuration for 82574 */
1591 if (adapter->hw.mac.type == e1000_82574) {
1593 tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
1594 tmp |= E1000_CTRL_EXT_PBA_CLR;
1595 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
1597 ** Set the IVAR - interrupt vector routing.
1598 ** Each nibble represents a vector, high bit
1599 ** is enable, other 3 bits are the MSIX table
1600 ** entry, we map RXQ0 to 0, TXQ0 to 1, and
1601 ** Link (other) to 2, hence the magic number.
1603 E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908);
1606 #ifdef DEVICE_POLLING
1608 * Only enable interrupts if we are not polling, make sure
1609 * they are off otherwise.
1611 if (ifp->if_capenable & IFCAP_POLLING)
1612 em_disable_intr(adapter);
1614 #endif /* DEVICE_POLLING */
1615 em_enable_intr(adapter);
1617 /* Don't reset the phy next time init gets called */
1618 adapter->hw.phy.reset_disable = TRUE;
1624 struct adapter *adapter = arg;
1626 EM_CORE_LOCK(adapter);
1627 em_init_locked(adapter);
1628 EM_CORE_UNLOCK(adapter);
1632 #ifdef DEVICE_POLLING
1633 /*********************************************************************
1635 * Legacy polling routine
1637 *********************************************************************/
1639 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
1641 struct adapter *adapter = ifp->if_softc;
1642 u32 reg_icr, rx_done = 0;
1644 EM_CORE_LOCK(adapter);
1645 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
1646 EM_CORE_UNLOCK(adapter);
1650 if (cmd == POLL_AND_CHECK_STATUS) {
1651 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1652 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1653 callout_stop(&adapter->timer);
1654 adapter->hw.mac.get_link_status = 1;
1655 em_update_link_status(adapter);
1656 callout_reset(&adapter->timer, hz,
1657 em_local_timer, adapter);
1660 EM_CORE_UNLOCK(adapter);
1662 rx_done = em_rxeof(adapter, count);
1664 EM_TX_LOCK(adapter);
1666 #if __FreeBSD_version >= 800000
1667 if (!drbr_empty(ifp, adapter->br))
1668 em_mq_start_locked(ifp, NULL);
1670 if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1671 em_start_locked(ifp);
1673 EM_TX_UNLOCK(adapter);
1676 #endif /* DEVICE_POLLING */
1678 #ifdef EM_LEGACY_IRQ
1679 /*********************************************************************
1681 * Legacy Interrupt Service routine
1683 *********************************************************************/
1688 struct adapter *adapter = arg;
1689 struct ifnet *ifp = adapter->ifp;
1693 if (ifp->if_capenable & IFCAP_POLLING)
1696 EM_CORE_LOCK(adapter);
1697 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1698 if (reg_icr & E1000_ICR_RXO)
1699 adapter->rx_overruns++;
1700 if ((reg_icr == 0xffffffff) || (reg_icr == 0)||
1701 (adapter->hw.mac.type >= e1000_82571 &&
1702 (reg_icr & E1000_ICR_INT_ASSERTED) == 0))
1705 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
1708 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1709 callout_stop(&adapter->timer);
1710 adapter->hw.mac.get_link_status = 1;
1711 em_update_link_status(adapter);
1712 /* Deal with TX cruft when link lost */
1713 em_tx_purge(adapter);
1714 callout_reset(&adapter->timer, hz,
1715 em_local_timer, adapter);
1719 EM_TX_LOCK(adapter);
1721 em_rxeof(adapter, -1);
1723 if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
1724 !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
1725 em_start_locked(ifp);
1726 EM_TX_UNLOCK(adapter);
1729 EM_CORE_UNLOCK(adapter);
1733 #else /* EM_FAST_IRQ, then fast interrupt routines only */
1736 em_handle_link(void *context, int pending)
1738 struct adapter *adapter = context;
1739 struct ifnet *ifp = adapter->ifp;
1741 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
1744 EM_CORE_LOCK(adapter);
1745 callout_stop(&adapter->timer);
1746 em_update_link_status(adapter);
1747 /* Deal with TX cruft when link lost */
1748 em_tx_purge(adapter);
1749 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1750 EM_CORE_UNLOCK(adapter);
1754 /* Combined RX/TX handler, used by Legacy and MSI */
1756 em_handle_rxtx(void *context, int pending)
1758 struct adapter *adapter = context;
1759 struct ifnet *ifp = adapter->ifp;
1762 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1763 if (em_rxeof(adapter, adapter->rx_process_limit) != 0)
1764 taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
1765 EM_TX_LOCK(adapter);
1768 #if __FreeBSD_version >= 800000
1769 if (!drbr_empty(ifp, adapter->br))
1770 em_mq_start_locked(ifp, NULL);
1772 if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1773 em_start_locked(ifp);
1775 EM_TX_UNLOCK(adapter);
1778 em_enable_intr(adapter);
1781 /*********************************************************************
1783 * Fast Legacy/MSI Combined Interrupt Service routine
1785 *********************************************************************/
1786 #if __FreeBSD_version < 700000
1787 #define FILTER_STRAY
1788 #define FILTER_HANDLED
1793 em_irq_fast(void *arg)
1795 struct adapter *adapter = arg;
1801 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1804 if (reg_icr == 0xffffffff)
1805 return FILTER_STRAY;
1807 /* Definitely not our interrupt. */
1809 return FILTER_STRAY;
1812 * Starting with the 82571 chip, bit 31 should be used to
1813 * determine whether the interrupt belongs to us.
1815 if (adapter->hw.mac.type >= e1000_82571 &&
1816 (reg_icr & E1000_ICR_INT_ASSERTED) == 0)
1817 return FILTER_STRAY;
1820 * Mask interrupts until the taskqueue is finished running. This is
1821 * cheap, just assume that it is needed. This also works around the
1822 * MSI message reordering errata on certain systems.
1824 em_disable_intr(adapter);
1825 taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
1827 /* Link status change */
1828 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1829 adapter->hw.mac.get_link_status = 1;
1830 taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1833 if (reg_icr & E1000_ICR_RXO)
1834 adapter->rx_overruns++;
1835 return FILTER_HANDLED;
1838 /*********************************************************************
1840 * MSIX Interrupt Service Routines
1842 **********************************************************************/
1843 #define EM_MSIX_TX 0x00040000
1844 #define EM_MSIX_RX 0x00010000
1845 #define EM_MSIX_LINK 0x00100000
1848 em_msix_tx(void *arg)
1850 struct adapter *adapter = arg;
1851 struct ifnet *ifp = adapter->ifp;
1854 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1855 EM_TX_LOCK(adapter);
1857 EM_TX_UNLOCK(adapter);
1858 taskqueue_enqueue(adapter->tq, &adapter->tx_task);
1860 /* Reenable this interrupt */
1861 E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_TX);
1865 /*********************************************************************
1867 * MSIX RX Interrupt Service routine
1869 **********************************************************************/
1872 em_msix_rx(void *arg)
1874 struct adapter *adapter = arg;
1875 struct ifnet *ifp = adapter->ifp;
1878 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) &&
1879 (em_rxeof(adapter, adapter->rx_process_limit) != 0))
1880 taskqueue_enqueue(adapter->tq, &adapter->rx_task);
1881 /* Reenable this interrupt */
1882 E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_RX);
1886 /*********************************************************************
1888 * MSIX Link Fast Interrupt Service routine
1890 **********************************************************************/
1893 em_msix_link(void *arg)
1895 struct adapter *adapter = arg;
1898 ++adapter->link_irq;
1899 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1901 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1902 adapter->hw.mac.get_link_status = 1;
1903 taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1905 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1906 EM_MSIX_LINK | E1000_IMS_LSC);
1911 em_handle_rx(void *context, int pending)
1913 struct adapter *adapter = context;
1914 struct ifnet *ifp = adapter->ifp;
1916 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) &&
1917 (em_rxeof(adapter, adapter->rx_process_limit) != 0))
1918 taskqueue_enqueue(adapter->tq, &adapter->rx_task);
1923 em_handle_tx(void *context, int pending)
1925 struct adapter *adapter = context;
1926 struct ifnet *ifp = adapter->ifp;
1928 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1929 if (!EM_TX_TRYLOCK(adapter))
1932 #if __FreeBSD_version >= 800000
1933 if (!drbr_empty(ifp, adapter->br))
1934 em_mq_start_locked(ifp, NULL);
1936 if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
1937 em_start_locked(ifp);
1939 EM_TX_UNLOCK(adapter);
1942 #endif /* EM_FAST_IRQ */
1944 /*********************************************************************
1946 * Media Ioctl callback
1948 * This routine is called whenever the user queries the status of
1949 * the interface using ifconfig.
1951 **********************************************************************/
1953 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
1955 struct adapter *adapter = ifp->if_softc;
1956 u_char fiber_type = IFM_1000_SX;
1958 INIT_DEBUGOUT("em_media_status: begin");
1960 EM_CORE_LOCK(adapter);
1961 em_update_link_status(adapter);
1963 ifmr->ifm_status = IFM_AVALID;
1964 ifmr->ifm_active = IFM_ETHER;
1966 if (!adapter->link_active) {
1967 EM_CORE_UNLOCK(adapter);
1971 ifmr->ifm_status |= IFM_ACTIVE;
1973 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
1974 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
1975 if (adapter->hw.mac.type == e1000_82545)
1976 fiber_type = IFM_1000_LX;
1977 ifmr->ifm_active |= fiber_type | IFM_FDX;
1979 switch (adapter->link_speed) {
1981 ifmr->ifm_active |= IFM_10_T;
1984 ifmr->ifm_active |= IFM_100_TX;
1987 ifmr->ifm_active |= IFM_1000_T;
1990 if (adapter->link_duplex == FULL_DUPLEX)
1991 ifmr->ifm_active |= IFM_FDX;
1993 ifmr->ifm_active |= IFM_HDX;
1995 EM_CORE_UNLOCK(adapter);
1998 /*********************************************************************
2000 * Media Ioctl callback
2002 * This routine is called when the user changes speed/duplex using
2003 * media/mediopt option with ifconfig.
2005 **********************************************************************/
2007 em_media_change(struct ifnet *ifp)
2009 struct adapter *adapter = ifp->if_softc;
2010 struct ifmedia *ifm = &adapter->media;
2012 INIT_DEBUGOUT("em_media_change: begin");
2014 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
2017 EM_CORE_LOCK(adapter);
2018 switch (IFM_SUBTYPE(ifm->ifm_media)) {
2020 adapter->hw.mac.autoneg = DO_AUTO_NEG;
2021 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
2026 adapter->hw.mac.autoneg = DO_AUTO_NEG;
2027 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
2030 adapter->hw.mac.autoneg = FALSE;
2031 adapter->hw.phy.autoneg_advertised = 0;
2032 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
2033 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
2035 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
2038 adapter->hw.mac.autoneg = FALSE;
2039 adapter->hw.phy.autoneg_advertised = 0;
2040 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
2041 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
2043 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
2046 device_printf(adapter->dev, "Unsupported media type\n");
2049 /* As the speed/duplex settings my have changed we need to
2052 adapter->hw.phy.reset_disable = FALSE;
2054 em_init_locked(adapter);
2055 EM_CORE_UNLOCK(adapter);
2060 /*********************************************************************
2062 * This routine maps the mbufs to tx descriptors.
2064 * return 0 on success, positive on failure
2065 **********************************************************************/
2068 em_xmit(struct adapter *adapter, struct mbuf **m_headp)
2070 bus_dma_segment_t segs[EM_MAX_SCATTER];
2072 struct em_buffer *tx_buffer, *tx_buffer_mapped;
2073 struct e1000_tx_desc *ctxd = NULL;
2074 struct mbuf *m_head;
2075 u32 txd_upper, txd_lower, txd_used, txd_saved;
2076 int nsegs, i, j, first, last = 0;
2077 int error, do_tso, tso_desc = 0;
2078 #if __FreeBSD_version < 700000
2082 txd_upper = txd_lower = txd_used = txd_saved = 0;
2084 #if __FreeBSD_version >= 700000
2085 do_tso = ((m_head->m_pkthdr.csum_flags & CSUM_TSO) != 0);
2091 * Force a cleanup if number of TX descriptors
2092 * available hits the threshold
2094 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
2096 /* Now do we at least have a minimal? */
2097 if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD) {
2098 adapter->no_tx_desc_avail1++;
2106 * If an mbuf is only header we need
2107 * to pull 4 bytes of data into it.
2109 if (do_tso && (m_head->m_len <= M_TSO_LEN)) {
2110 m_head = m_pullup(m_head, M_TSO_LEN + 4);
2117 * Map the packet for DMA
2119 * Capture the first descriptor index,
2120 * this descriptor will have the index
2121 * of the EOP which is the only one that
2122 * now gets a DONE bit writeback.
2124 first = adapter->next_avail_tx_desc;
2125 tx_buffer = &adapter->tx_buffer_area[first];
2126 tx_buffer_mapped = tx_buffer;
2127 map = tx_buffer->map;
2129 error = bus_dmamap_load_mbuf_sg(adapter->txtag, map,
2130 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2133 * There are two types of errors we can (try) to handle:
2134 * - EFBIG means the mbuf chain was too long and bus_dma ran
2135 * out of segments. Defragment the mbuf chain and try again.
2136 * - ENOMEM means bus_dma could not obtain enough bounce buffers
2137 * at this point in time. Defer sending and try again later.
2138 * All other errors, in particular EINVAL, are fatal and prevent the
2139 * mbuf chain from ever going through. Drop it and report error.
2141 if (error == EFBIG) {
2144 m = m_defrag(*m_headp, M_DONTWAIT);
2146 adapter->mbuf_alloc_failed++;
2154 error = bus_dmamap_load_mbuf_sg(adapter->txtag, map,
2155 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2158 adapter->no_tx_dma_setup++;
2163 } else if (error != 0) {
2164 adapter->no_tx_dma_setup++;
2169 * TSO Hardware workaround, if this packet is not
2170 * TSO, and is only a single descriptor long, and
2171 * it follows a TSO burst, then we need to add a
2172 * sentinel descriptor to prevent premature writeback.
2174 if ((do_tso == 0) && (adapter->tx_tso == TRUE)) {
2177 adapter->tx_tso = FALSE;
2180 if (nsegs > (adapter->num_tx_desc_avail - 2)) {
2181 adapter->no_tx_desc_avail2++;
2182 bus_dmamap_unload(adapter->txtag, map);
2187 /* Do hardware assists */
2188 #if __FreeBSD_version >= 700000
2189 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
2190 error = em_tso_setup(adapter, m_head, &txd_upper, &txd_lower);
2192 return (ENXIO); /* something foobar */
2193 /* we need to make a final sentinel transmit desc */
2197 if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)
2198 em_transmit_checksum_setup(adapter, m_head,
2199 &txd_upper, &txd_lower);
2201 i = adapter->next_avail_tx_desc;
2202 if (adapter->pcix_82544)
2205 /* Set up our transmit descriptors */
2206 for (j = 0; j < nsegs; j++) {
2208 bus_addr_t seg_addr;
2209 /* If adapter is 82544 and on PCIX bus */
2210 if(adapter->pcix_82544) {
2211 DESC_ARRAY desc_array;
2212 u32 array_elements, counter;
2214 * Check the Address and Length combination and
2215 * split the data accordingly
2217 array_elements = em_fill_descriptors(segs[j].ds_addr,
2218 segs[j].ds_len, &desc_array);
2219 for (counter = 0; counter < array_elements; counter++) {
2220 if (txd_used == adapter->num_tx_desc_avail) {
2221 adapter->next_avail_tx_desc = txd_saved;
2222 adapter->no_tx_desc_avail2++;
2223 bus_dmamap_unload(adapter->txtag, map);
2226 tx_buffer = &adapter->tx_buffer_area[i];
2227 ctxd = &adapter->tx_desc_base[i];
2228 ctxd->buffer_addr = htole64(
2229 desc_array.descriptor[counter].address);
2230 ctxd->lower.data = htole32(
2231 (adapter->txd_cmd | txd_lower | (u16)
2232 desc_array.descriptor[counter].length));
2234 htole32((txd_upper));
2236 if (++i == adapter->num_tx_desc)
2238 tx_buffer->m_head = NULL;
2239 tx_buffer->next_eop = -1;
2243 tx_buffer = &adapter->tx_buffer_area[i];
2244 ctxd = &adapter->tx_desc_base[i];
2245 seg_addr = segs[j].ds_addr;
2246 seg_len = segs[j].ds_len;
2249 ** If this is the last descriptor, we want to
2250 ** split it so we have a small final sentinel
2252 if (tso_desc && (j == (nsegs -1)) && (seg_len > 8)) {
2254 ctxd->buffer_addr = htole64(seg_addr);
2255 ctxd->lower.data = htole32(
2256 adapter->txd_cmd | txd_lower | seg_len);
2259 if (++i == adapter->num_tx_desc)
2261 /* Now make the sentinel */
2262 ++txd_used; /* using an extra txd */
2263 ctxd = &adapter->tx_desc_base[i];
2264 tx_buffer = &adapter->tx_buffer_area[i];
2266 htole64(seg_addr + seg_len);
2267 ctxd->lower.data = htole32(
2268 adapter->txd_cmd | txd_lower | 4);
2272 if (++i == adapter->num_tx_desc)
2275 ctxd->buffer_addr = htole64(seg_addr);
2276 ctxd->lower.data = htole32(
2277 adapter->txd_cmd | txd_lower | seg_len);
2281 if (++i == adapter->num_tx_desc)
2284 tx_buffer->m_head = NULL;
2285 tx_buffer->next_eop = -1;
2289 adapter->next_avail_tx_desc = i;
2290 if (adapter->pcix_82544)
2291 adapter->num_tx_desc_avail -= txd_used;
2293 adapter->num_tx_desc_avail -= nsegs;
2294 if (tso_desc) /* TSO used an extra for sentinel */
2295 adapter->num_tx_desc_avail -= txd_used;
2299 ** Handle VLAN tag, this is the
2300 ** biggest difference between
2303 #if __FreeBSD_version < 700000
2304 /* Find out if we are in vlan mode. */
2305 mtag = VLAN_OUTPUT_TAG(ifp, m_head);
2307 ctxd->upper.fields.special =
2308 htole16(VLAN_TAG_VALUE(mtag));
2309 #else /* FreeBSD 7 */
2310 if (m_head->m_flags & M_VLANTAG) {
2311 /* Set the vlan id. */
2312 ctxd->upper.fields.special =
2313 htole16(m_head->m_pkthdr.ether_vtag);
2315 /* Tell hardware to add tag */
2316 ctxd->lower.data |= htole32(E1000_TXD_CMD_VLE);
2319 tx_buffer->m_head = m_head;
2320 tx_buffer_mapped->map = tx_buffer->map;
2321 tx_buffer->map = map;
2322 bus_dmamap_sync(adapter->txtag, map, BUS_DMASYNC_PREWRITE);
2325 * Last Descriptor of Packet
2326 * needs End Of Packet (EOP)
2327 * and Report Status (RS)
2330 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS);
2332 * Keep track in the first buffer which
2333 * descriptor will be written back
2335 tx_buffer = &adapter->tx_buffer_area[first];
2336 tx_buffer->next_eop = last;
2339 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000
2340 * that this frame is available to transmit.
2342 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
2343 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
2344 if (adapter->hw.mac.type == e1000_82547 &&
2345 adapter->link_duplex == HALF_DUPLEX)
2346 em_82547_move_tail(adapter);
2348 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), i);
2349 if (adapter->hw.mac.type == e1000_82547)
2350 em_82547_update_fifo_head(adapter,
2351 m_head->m_pkthdr.len);
2357 /*********************************************************************
2359 * 82547 workaround to avoid controller hang in half-duplex environment.
2360 * The workaround is to avoid queuing a large packet that would span
2361 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
2362 * in this case. We do that only when FIFO is quiescent.
2364 **********************************************************************/
2366 em_82547_move_tail(void *arg)
2368 struct adapter *adapter = arg;
2369 struct e1000_tx_desc *tx_desc;
2370 u16 hw_tdt, sw_tdt, length = 0;
2373 EM_TX_LOCK_ASSERT(adapter);
2375 hw_tdt = E1000_READ_REG(&adapter->hw, E1000_TDT(0));
2376 sw_tdt = adapter->next_avail_tx_desc;
2378 while (hw_tdt != sw_tdt) {
2379 tx_desc = &adapter->tx_desc_base[hw_tdt];
2380 length += tx_desc->lower.flags.length;
2381 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
2382 if (++hw_tdt == adapter->num_tx_desc)
2386 if (em_82547_fifo_workaround(adapter, length)) {
2387 adapter->tx_fifo_wrk_cnt++;
2388 callout_reset(&adapter->tx_fifo_timer, 1,
2389 em_82547_move_tail, adapter);
2392 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), hw_tdt);
2393 em_82547_update_fifo_head(adapter, length);
2400 em_82547_fifo_workaround(struct adapter *adapter, int len)
2402 int fifo_space, fifo_pkt_len;
2404 fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
2406 if (adapter->link_duplex == HALF_DUPLEX) {
2407 fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;
2409 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
2410 if (em_82547_tx_fifo_reset(adapter))
2421 em_82547_update_fifo_head(struct adapter *adapter, int len)
2423 int fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR);
2425 /* tx_fifo_head is always 16 byte aligned */
2426 adapter->tx_fifo_head += fifo_pkt_len;
2427 if (adapter->tx_fifo_head >= adapter->tx_fifo_size) {
2428 adapter->tx_fifo_head -= adapter->tx_fifo_size;
2434 em_82547_tx_fifo_reset(struct adapter *adapter)
2438 if ((E1000_READ_REG(&adapter->hw, E1000_TDT(0)) ==
2439 E1000_READ_REG(&adapter->hw, E1000_TDH(0))) &&
2440 (E1000_READ_REG(&adapter->hw, E1000_TDFT) ==
2441 E1000_READ_REG(&adapter->hw, E1000_TDFH)) &&
2442 (E1000_READ_REG(&adapter->hw, E1000_TDFTS) ==
2443 E1000_READ_REG(&adapter->hw, E1000_TDFHS)) &&
2444 (E1000_READ_REG(&adapter->hw, E1000_TDFPC) == 0)) {
2445 /* Disable TX unit */
2446 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
2447 E1000_WRITE_REG(&adapter->hw, E1000_TCTL,
2448 tctl & ~E1000_TCTL_EN);
2450 /* Reset FIFO pointers */
2451 E1000_WRITE_REG(&adapter->hw, E1000_TDFT,
2452 adapter->tx_head_addr);
2453 E1000_WRITE_REG(&adapter->hw, E1000_TDFH,
2454 adapter->tx_head_addr);
2455 E1000_WRITE_REG(&adapter->hw, E1000_TDFTS,
2456 adapter->tx_head_addr);
2457 E1000_WRITE_REG(&adapter->hw, E1000_TDFHS,
2458 adapter->tx_head_addr);
2460 /* Re-enable TX unit */
2461 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
2462 E1000_WRITE_FLUSH(&adapter->hw);
2464 adapter->tx_fifo_head = 0;
2465 adapter->tx_fifo_reset_cnt++;
2475 em_set_promisc(struct adapter *adapter)
2477 struct ifnet *ifp = adapter->ifp;
2480 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2482 if (ifp->if_flags & IFF_PROMISC) {
2483 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
2484 /* Turn this on if you want to see bad packets */
2486 reg_rctl |= E1000_RCTL_SBP;
2487 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2488 } else if (ifp->if_flags & IFF_ALLMULTI) {
2489 reg_rctl |= E1000_RCTL_MPE;
2490 reg_rctl &= ~E1000_RCTL_UPE;
2491 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2496 em_disable_promisc(struct adapter *adapter)
2500 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2502 reg_rctl &= (~E1000_RCTL_UPE);
2503 reg_rctl &= (~E1000_RCTL_MPE);
2504 reg_rctl &= (~E1000_RCTL_SBP);
2505 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2509 /*********************************************************************
2512 * This routine is called whenever multicast address list is updated.
2514 **********************************************************************/
2517 em_set_multi(struct adapter *adapter)
2519 struct ifnet *ifp = adapter->ifp;
2520 struct ifmultiaddr *ifma;
2522 u8 *mta; /* Multicast array memory */
2525 IOCTL_DEBUGOUT("em_set_multi: begin");
2527 if (adapter->hw.mac.type == e1000_82542 &&
2528 adapter->hw.revision_id == E1000_REVISION_2) {
2529 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2530 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2531 e1000_pci_clear_mwi(&adapter->hw);
2532 reg_rctl |= E1000_RCTL_RST;
2533 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2537 /* Allocate temporary memory to setup array */
2538 mta = malloc(sizeof(u8) *
2539 (ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES),
2540 M_DEVBUF, M_NOWAIT | M_ZERO);
2542 panic("em_set_multi memory failure\n");
2544 if_maddr_rlock(ifp);
2545 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
2546 if (ifma->ifma_addr->sa_family != AF_LINK)
2549 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
2552 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
2553 &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN);
2556 if_maddr_runlock(ifp);
2558 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
2559 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2560 reg_rctl |= E1000_RCTL_MPE;
2561 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2563 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt);
2565 if (adapter->hw.mac.type == e1000_82542 &&
2566 adapter->hw.revision_id == E1000_REVISION_2) {
2567 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2568 reg_rctl &= ~E1000_RCTL_RST;
2569 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2571 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2572 e1000_pci_set_mwi(&adapter->hw);
2574 free(mta, M_DEVBUF);
2578 /*********************************************************************
2581 * This routine checks for link status and updates statistics.
2583 **********************************************************************/
2586 em_local_timer(void *arg)
2588 struct adapter *adapter = arg;
2589 struct ifnet *ifp = adapter->ifp;
2591 EM_CORE_LOCK_ASSERT(adapter);
2593 taskqueue_enqueue(adapter->tq,
2594 &adapter->rxtx_task);
2595 em_update_link_status(adapter);
2596 em_update_stats_counters(adapter);
2598 /* Reset LAA into RAR[0] on 82571 */
2599 if (e1000_get_laa_state_82571(&adapter->hw) == TRUE)
2600 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
2602 if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING)
2603 em_print_hw_stats(adapter);
2605 em_smartspeed(adapter);
2608 * Each second we check the watchdog to
2609 * protect against hardware hangs.
2611 em_watchdog(adapter);
2613 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
2618 em_update_link_status(struct adapter *adapter)
2620 struct e1000_hw *hw = &adapter->hw;
2621 struct ifnet *ifp = adapter->ifp;
2622 device_t dev = adapter->dev;
2625 /* Get the cached link value or read phy for real */
2626 switch (hw->phy.media_type) {
2627 case e1000_media_type_copper:
2628 if (hw->mac.get_link_status) {
2629 /* Do the work to read phy */
2630 e1000_check_for_link(hw);
2631 link_check = !hw->mac.get_link_status;
2632 if (link_check) /* ESB2 fix */
2633 e1000_cfg_on_link_up(hw);
2637 case e1000_media_type_fiber:
2638 e1000_check_for_link(hw);
2639 link_check = (E1000_READ_REG(hw, E1000_STATUS) &
2642 case e1000_media_type_internal_serdes:
2643 e1000_check_for_link(hw);
2644 link_check = adapter->hw.mac.serdes_has_link;
2647 case e1000_media_type_unknown:
2651 /* Now check for a transition */
2652 if (link_check && (adapter->link_active == 0)) {
2653 e1000_get_speed_and_duplex(hw, &adapter->link_speed,
2654 &adapter->link_duplex);
2655 /* Check if we must disable SPEED_MODE bit on PCI-E */
2656 if ((adapter->link_speed != SPEED_1000) &&
2657 ((hw->mac.type == e1000_82571) ||
2658 (hw->mac.type == e1000_82572))) {
2660 tarc0 = E1000_READ_REG(hw, E1000_TARC(0));
2661 tarc0 &= ~SPEED_MODE_BIT;
2662 E1000_WRITE_REG(hw, E1000_TARC(0), tarc0);
2665 device_printf(dev, "Link is up %d Mbps %s\n",
2666 adapter->link_speed,
2667 ((adapter->link_duplex == FULL_DUPLEX) ?
2668 "Full Duplex" : "Half Duplex"));
2669 adapter->link_active = 1;
2670 adapter->smartspeed = 0;
2671 ifp->if_baudrate = adapter->link_speed * 1000000;
2672 if_link_state_change(ifp, LINK_STATE_UP);
2673 } else if (!link_check && (adapter->link_active == 1)) {
2674 ifp->if_baudrate = adapter->link_speed = 0;
2675 adapter->link_duplex = 0;
2677 device_printf(dev, "Link is Down\n");
2678 adapter->link_active = 0;
2679 /* Link down, disable watchdog */
2680 adapter->watchdog_timer = FALSE;
2681 if_link_state_change(ifp, LINK_STATE_DOWN);
2685 /*********************************************************************
2687 * This routine disables all traffic on the adapter by issuing a
2688 * global reset on the MAC and deallocates TX/RX buffers.
2690 * This routine should always be called with BOTH the CORE
2692 **********************************************************************/
2697 struct adapter *adapter = arg;
2698 struct ifnet *ifp = adapter->ifp;
2700 EM_CORE_LOCK_ASSERT(adapter);
2701 EM_TX_LOCK_ASSERT(adapter);
2703 INIT_DEBUGOUT("em_stop: begin");
2705 em_disable_intr(adapter);
2706 callout_stop(&adapter->timer);
2707 callout_stop(&adapter->tx_fifo_timer);
2709 /* Tell the stack that the interface is no longer active */
2710 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
2712 e1000_reset_hw(&adapter->hw);
2713 if (adapter->hw.mac.type >= e1000_82544)
2714 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0);
2718 /*********************************************************************
2720 * Determine hardware revision.
2722 **********************************************************************/
2724 em_identify_hardware(struct adapter *adapter)
2726 device_t dev = adapter->dev;
2728 /* Make sure our PCI config space has the necessary stuff set */
2729 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
2730 if (!((adapter->hw.bus.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
2731 (adapter->hw.bus.pci_cmd_word & PCIM_CMD_MEMEN))) {
2732 device_printf(dev, "Memory Access and/or Bus Master bits "
2734 adapter->hw.bus.pci_cmd_word |=
2735 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
2736 pci_write_config(dev, PCIR_COMMAND,
2737 adapter->hw.bus.pci_cmd_word, 2);
2740 /* Save off the information about this board */
2741 adapter->hw.vendor_id = pci_get_vendor(dev);
2742 adapter->hw.device_id = pci_get_device(dev);
2743 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
2744 adapter->hw.subsystem_vendor_id =
2745 pci_read_config(dev, PCIR_SUBVEND_0, 2);
2746 adapter->hw.subsystem_device_id =
2747 pci_read_config(dev, PCIR_SUBDEV_0, 2);
2749 /* Do Shared Code Init and Setup */
2750 if (e1000_set_mac_type(&adapter->hw)) {
2751 device_printf(dev, "Setup init failure\n");
2757 em_allocate_pci_resources(struct adapter *adapter)
2759 device_t dev = adapter->dev;
2760 int val, rid, error = E1000_SUCCESS;
2763 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
2765 if (adapter->memory == NULL) {
2766 device_printf(dev, "Unable to allocate bus resource: memory\n");
2769 adapter->osdep.mem_bus_space_tag =
2770 rman_get_bustag(adapter->memory);
2771 adapter->osdep.mem_bus_space_handle =
2772 rman_get_bushandle(adapter->memory);
2773 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
2775 /* Only older adapters use IO mapping */
2776 if ((adapter->hw.mac.type > e1000_82543) &&
2777 (adapter->hw.mac.type < e1000_82571)) {
2778 /* Figure our where our IO BAR is ? */
2779 for (rid = PCIR_BAR(0); rid < PCIR_CIS;) {
2780 val = pci_read_config(dev, rid, 4);
2781 if (EM_BAR_TYPE(val) == EM_BAR_TYPE_IO) {
2782 adapter->io_rid = rid;
2786 /* check for 64bit BAR */
2787 if (EM_BAR_MEM_TYPE(val) == EM_BAR_MEM_TYPE_64BIT)
2790 if (rid >= PCIR_CIS) {
2791 device_printf(dev, "Unable to locate IO BAR\n");
2794 adapter->ioport = bus_alloc_resource_any(dev,
2795 SYS_RES_IOPORT, &adapter->io_rid, RF_ACTIVE);
2796 if (adapter->ioport == NULL) {
2797 device_printf(dev, "Unable to allocate bus resource: "
2801 adapter->hw.io_base = 0;
2802 adapter->osdep.io_bus_space_tag =
2803 rman_get_bustag(adapter->ioport);
2804 adapter->osdep.io_bus_space_handle =
2805 rman_get_bushandle(adapter->ioport);
2809 ** Init the resource arrays
2810 ** used by MSIX setup
2812 for (int i = 0; i < 3; i++) {
2813 adapter->rid[i] = i + 1; /* MSI/X RID starts at 1 */
2814 adapter->tag[i] = NULL;
2815 adapter->res[i] = NULL;
2819 * Setup MSI/X or MSI if PCI Express
2822 adapter->msi = em_setup_msix(adapter);
2824 adapter->hw.back = &adapter->osdep;
2829 /*********************************************************************
2831 * Setup the Legacy or MSI Interrupt handler
2833 **********************************************************************/
2835 em_allocate_legacy(struct adapter *adapter)
2837 device_t dev = adapter->dev;
2840 /* Manually turn off all interrupts */
2841 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2843 /* Legacy RID is 0 */
2844 if (adapter->msi == 0)
2845 adapter->rid[0] = 0;
2847 /* We allocate a single interrupt resource */
2848 adapter->res[0] = bus_alloc_resource_any(dev,
2849 SYS_RES_IRQ, &adapter->rid[0], RF_SHAREABLE | RF_ACTIVE);
2850 if (adapter->res[0] == NULL) {
2851 device_printf(dev, "Unable to allocate bus resource: "
2856 #ifdef EM_LEGACY_IRQ
2857 /* We do Legacy setup */
2858 if ((error = bus_setup_intr(dev, adapter->res[0],
2859 #if __FreeBSD_version > 700000
2860 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_intr, adapter,
2862 INTR_TYPE_NET | INTR_MPSAFE, em_intr, adapter,
2864 &adapter->tag[0])) != 0) {
2865 device_printf(dev, "Failed to register interrupt handler");
2869 #else /* FAST_IRQ */
2871 * Try allocating a fast interrupt and the associated deferred
2872 * processing contexts.
2874 TASK_INIT(&adapter->rxtx_task, 0, em_handle_rxtx, adapter);
2875 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2876 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2877 taskqueue_thread_enqueue, &adapter->tq);
2878 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq",
2879 device_get_nameunit(adapter->dev));
2880 #if __FreeBSD_version < 700000
2881 if ((error = bus_setup_intr(dev, adapter->res[0],
2882 INTR_TYPE_NET | INTR_FAST, em_irq_fast, adapter,
2884 if ((error = bus_setup_intr(dev, adapter->res[0],
2885 INTR_TYPE_NET, em_irq_fast, NULL, adapter,
2887 &adapter->tag[0])) != 0) {
2888 device_printf(dev, "Failed to register fast interrupt "
2889 "handler: %d\n", error);
2890 taskqueue_free(adapter->tq);
2894 #endif /* EM_LEGACY_IRQ */
2899 /*********************************************************************
2901 * Setup the MSIX Interrupt handlers
2902 * This is not really Multiqueue, rather
2903 * its just multiple interrupt vectors.
2905 **********************************************************************/
2907 em_allocate_msix(struct adapter *adapter)
2909 device_t dev = adapter->dev;
2912 /* Make sure all interrupts are disabled */
2913 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2915 /* First get the resources */
2916 for (int i = 0; i < adapter->msi; i++) {
2917 adapter->res[i] = bus_alloc_resource_any(dev,
2918 SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE);
2919 if (adapter->res[i] == NULL) {
2921 "Unable to allocate bus resource: "
2922 "MSIX Interrupt\n");
2928 * Now allocate deferred processing contexts.
2930 TASK_INIT(&adapter->rx_task, 0, em_handle_rx, adapter);
2931 TASK_INIT(&adapter->tx_task, 0, em_handle_tx, adapter);
2933 * Handle compatibility for msi case for deferral due to
2936 TASK_INIT(&adapter->rxtx_task, 0, em_handle_tx, adapter);
2937 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2938 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2939 taskqueue_thread_enqueue, &adapter->tq);
2940 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq",
2941 device_get_nameunit(adapter->dev));
2944 * And setup the interrupt handlers
2947 /* First slot to RX */
2948 if ((error = bus_setup_intr(dev, adapter->res[0],
2949 #if __FreeBSD_version > 700000
2950 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx, adapter,
2952 INTR_TYPE_NET | INTR_MPSAFE, em_msix_rx, adapter,
2954 &adapter->tag[0])) != 0) {
2955 device_printf(dev, "Failed to register RX handler");
2960 if ((error = bus_setup_intr(dev, adapter->res[1],
2961 #if __FreeBSD_version > 700000
2962 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx, adapter,
2964 INTR_TYPE_NET | INTR_MPSAFE, em_msix_tx, adapter,
2966 &adapter->tag[1])) != 0) {
2967 device_printf(dev, "Failed to register TX handler");
2972 if ((error = bus_setup_intr(dev, adapter->res[2],
2973 #if __FreeBSD_version > 700000
2974 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_link, adapter,
2976 INTR_TYPE_NET | INTR_MPSAFE, em_msix_link, adapter,
2978 &adapter->tag[2])) != 0) {
2979 device_printf(dev, "Failed to register TX handler");
2988 em_free_pci_resources(struct adapter *adapter)
2990 device_t dev = adapter->dev;
2992 /* Make sure the for loop below runs once */
2993 if (adapter->msi == 0)
2997 * First release all the interrupt resources:
2998 * notice that since these are just kept
2999 * in an array we can do the same logic
3000 * whether its MSIX or just legacy.
3002 for (int i = 0; i < adapter->msi; i++) {
3003 if (adapter->tag[i] != NULL) {
3004 bus_teardown_intr(dev, adapter->res[i],
3006 adapter->tag[i] = NULL;
3008 if (adapter->res[i] != NULL) {
3009 bus_release_resource(dev, SYS_RES_IRQ,
3010 adapter->rid[i], adapter->res[i]);
3015 pci_release_msi(dev);
3017 if (adapter->msix != NULL)
3018 bus_release_resource(dev, SYS_RES_MEMORY,
3019 PCIR_BAR(EM_MSIX_BAR), adapter->msix);
3021 if (adapter->memory != NULL)
3022 bus_release_resource(dev, SYS_RES_MEMORY,
3023 PCIR_BAR(0), adapter->memory);
3025 if (adapter->flash != NULL)
3026 bus_release_resource(dev, SYS_RES_MEMORY,
3027 EM_FLASH, adapter->flash);
3029 if (adapter->ioport != NULL)
3030 bus_release_resource(dev, SYS_RES_IOPORT,
3031 adapter->io_rid, adapter->ioport);
3035 * Setup MSI or MSI/X
3038 em_setup_msix(struct adapter *adapter)
3040 device_t dev = adapter->dev;
3043 if (adapter->hw.mac.type < e1000_82571)
3046 /* Setup MSI/X for Hartwell */
3047 if (adapter->hw.mac.type == e1000_82574) {
3048 /* Map the MSIX BAR */
3049 int rid = PCIR_BAR(EM_MSIX_BAR);
3050 adapter->msix = bus_alloc_resource_any(dev,
3051 SYS_RES_MEMORY, &rid, RF_ACTIVE);
3052 if (!adapter->msix) {
3053 /* May not be enabled */
3054 device_printf(adapter->dev,
3055 "Unable to map MSIX table \n");
3058 val = pci_msix_count(dev);
3060 ** 82574 can be configured for 5 but
3061 ** we limit use to 3.
3063 if (val > 3) val = 3;
3064 if ((val) && pci_alloc_msix(dev, &val) == 0) {
3065 device_printf(adapter->dev,"Using MSIX interrupts\n");
3070 val = pci_msi_count(dev);
3071 if (val == 1 && pci_alloc_msi(dev, &val) == 0) {
3073 device_printf(adapter->dev,"Using MSI interrupt\n");
3079 /*********************************************************************
3081 * Initialize the hardware to a configuration
3082 * as specified by the adapter structure.
3084 **********************************************************************/
3086 em_hardware_init(struct adapter *adapter)
3088 device_t dev = adapter->dev;
3091 INIT_DEBUGOUT("em_hardware_init: begin");
3093 /* Issue a global reset */
3094 e1000_reset_hw(&adapter->hw);
3096 /* Get control from any management/hw control */
3097 if (((adapter->hw.mac.type == e1000_82573) ||
3098 (adapter->hw.mac.type == e1000_82583) ||
3099 (adapter->hw.mac.type == e1000_ich8lan) ||
3100 (adapter->hw.mac.type == e1000_ich10lan) ||
3101 (adapter->hw.mac.type == e1000_ich9lan)) &&
3102 e1000_check_mng_mode(&adapter->hw))
3103 em_get_hw_control(adapter);
3105 /* When hardware is reset, fifo_head is also reset */
3106 adapter->tx_fifo_head = 0;
3108 /* Set up smart power down as default off on newer adapters. */
3109 if (!em_smart_pwr_down && (adapter->hw.mac.type == e1000_82571 ||
3110 adapter->hw.mac.type == e1000_82572)) {
3113 /* Speed up time to link by disabling smart power down. */
3114 e1000_read_phy_reg(&adapter->hw,
3115 IGP02E1000_PHY_POWER_MGMT, &phy_tmp);
3116 phy_tmp &= ~IGP02E1000_PM_SPD;
3117 e1000_write_phy_reg(&adapter->hw,
3118 IGP02E1000_PHY_POWER_MGMT, phy_tmp);
3122 * These parameters control the automatic generation (Tx) and
3123 * response (Rx) to Ethernet PAUSE frames.
3124 * - High water mark should allow for at least two frames to be
3125 * received after sending an XOFF.
3126 * - Low water mark works best when it is very near the high water mark.
3127 * This allows the receiver to restart by sending XON when it has
3128 * drained a bit. Here we use an arbitary value of 1500 which will
3129 * restart after one full frame is pulled from the buffer. There
3130 * could be several smaller frames in the buffer and if so they will
3131 * not trigger the XON until their total number reduces the buffer
3133 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
3135 rx_buffer_size = ((E1000_READ_REG(&adapter->hw, E1000_PBA) &
3138 adapter->hw.fc.high_water = rx_buffer_size -
3139 roundup2(adapter->max_frame_size, 1024);
3140 adapter->hw.fc.low_water = adapter->hw.fc.high_water - 1500;
3142 if (adapter->hw.mac.type == e1000_80003es2lan)
3143 adapter->hw.fc.pause_time = 0xFFFF;
3145 adapter->hw.fc.pause_time = EM_FC_PAUSE_TIME;
3146 adapter->hw.fc.send_xon = TRUE;
3148 /* Set Flow control, use the tunable location if sane */
3149 if ((em_fc_setting >= 0) || (em_fc_setting < 4))
3150 adapter->hw.fc.requested_mode = em_fc_setting;
3152 adapter->hw.fc.requested_mode = e1000_fc_none;
3155 if (e1000_init_hw(&adapter->hw) < 0) {
3156 device_printf(dev, "Hardware Initialization Failed\n");
3160 e1000_check_for_link(&adapter->hw);
3165 /*********************************************************************
3167 * Setup networking device structure and register an interface.
3169 **********************************************************************/
3171 em_setup_interface(device_t dev, struct adapter *adapter)
3175 INIT_DEBUGOUT("em_setup_interface: begin");
3177 ifp = adapter->ifp = if_alloc(IFT_ETHER);
3179 panic("%s: can not if_alloc()", device_get_nameunit(dev));
3180 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
3181 ifp->if_mtu = ETHERMTU;
3182 ifp->if_init = em_init;
3183 ifp->if_softc = adapter;
3184 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
3185 ifp->if_ioctl = em_ioctl;
3186 ifp->if_start = em_start;
3187 IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1);
3188 ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1;
3189 IFQ_SET_READY(&ifp->if_snd);
3191 ether_ifattach(ifp, adapter->hw.mac.addr);
3193 ifp->if_capabilities = ifp->if_capenable = 0;
3195 #if __FreeBSD_version >= 800000
3196 /* Multiqueue tx functions */
3197 ifp->if_transmit = em_mq_start;
3198 ifp->if_qflush = em_qflush;
3199 adapter->br = buf_ring_alloc(4096, M_DEVBUF, M_WAITOK, &adapter->tx_mtx);
3201 if (adapter->hw.mac.type >= e1000_82543) {
3203 #if __FreeBSD_version < 700000
3204 version_cap = IFCAP_HWCSUM;
3206 version_cap = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM;
3208 ifp->if_capabilities |= version_cap;
3209 ifp->if_capenable |= version_cap;
3212 #if __FreeBSD_version >= 700000
3213 /* Identify TSO capable adapters */
3214 if ((adapter->hw.mac.type > e1000_82544) &&
3215 (adapter->hw.mac.type != e1000_82547))
3216 ifp->if_capabilities |= IFCAP_TSO4;
3218 * By default only enable on PCI-E, this
3219 * can be overriden by ifconfig.
3221 if (adapter->hw.mac.type >= e1000_82571)
3222 ifp->if_capenable |= IFCAP_TSO4;
3226 * Tell the upper layer(s) we support long frames.
3228 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
3229 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
3230 ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
3232 #ifdef DEVICE_POLLING
3233 ifp->if_capabilities |= IFCAP_POLLING;
3237 * Specify the media types supported by this adapter and register
3238 * callbacks to update media and link information
3240 ifmedia_init(&adapter->media, IFM_IMASK,
3241 em_media_change, em_media_status);
3242 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3243 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
3244 u_char fiber_type = IFM_1000_SX; /* default type */
3246 if (adapter->hw.mac.type == e1000_82545)
3247 fiber_type = IFM_1000_LX;
3248 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX,
3250 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL);
3252 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
3253 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
3255 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
3257 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
3259 if (adapter->hw.phy.type != e1000_phy_ife) {
3260 ifmedia_add(&adapter->media,
3261 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
3262 ifmedia_add(&adapter->media,
3263 IFM_ETHER | IFM_1000_T, 0, NULL);
3266 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
3267 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
3271 /*********************************************************************
3273 * Workaround for SmartSpeed on 82541 and 82547 controllers
3275 **********************************************************************/
3277 em_smartspeed(struct adapter *adapter)
3281 if (adapter->link_active || (adapter->hw.phy.type != e1000_phy_igp) ||
3282 adapter->hw.mac.autoneg == 0 ||
3283 (adapter->hw.phy.autoneg_advertised & ADVERTISE_1000_FULL) == 0)
3286 if (adapter->smartspeed == 0) {
3287 /* If Master/Slave config fault is asserted twice,
3288 * we assume back-to-back */
3289 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
3290 if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT))
3292 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
3293 if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
3294 e1000_read_phy_reg(&adapter->hw,
3295 PHY_1000T_CTRL, &phy_tmp);
3296 if(phy_tmp & CR_1000T_MS_ENABLE) {
3297 phy_tmp &= ~CR_1000T_MS_ENABLE;
3298 e1000_write_phy_reg(&adapter->hw,
3299 PHY_1000T_CTRL, phy_tmp);
3300 adapter->smartspeed++;
3301 if(adapter->hw.mac.autoneg &&
3302 !e1000_phy_setup_autoneg(&adapter->hw) &&
3303 !e1000_read_phy_reg(&adapter->hw,
3304 PHY_CONTROL, &phy_tmp)) {
3305 phy_tmp |= (MII_CR_AUTO_NEG_EN |
3306 MII_CR_RESTART_AUTO_NEG);
3307 e1000_write_phy_reg(&adapter->hw,
3308 PHY_CONTROL, phy_tmp);
3313 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
3314 /* If still no link, perhaps using 2/3 pair cable */
3315 e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
3316 phy_tmp |= CR_1000T_MS_ENABLE;
3317 e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
3318 if(adapter->hw.mac.autoneg &&
3319 !e1000_phy_setup_autoneg(&adapter->hw) &&
3320 !e1000_read_phy_reg(&adapter->hw, PHY_CONTROL, &phy_tmp)) {
3321 phy_tmp |= (MII_CR_AUTO_NEG_EN |
3322 MII_CR_RESTART_AUTO_NEG);
3323 e1000_write_phy_reg(&adapter->hw, PHY_CONTROL, phy_tmp);
3326 /* Restart process after EM_SMARTSPEED_MAX iterations */
3327 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX)
3328 adapter->smartspeed = 0;
3333 * Manage DMA'able memory.
3336 em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
3340 *(bus_addr_t *) arg = segs[0].ds_addr;
3344 em_dma_malloc(struct adapter *adapter, bus_size_t size,
3345 struct em_dma_alloc *dma, int mapflags)
3349 #if __FreeBSD_version >= 700000
3350 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */
3352 error = bus_dma_tag_create(NULL, /* parent */
3354 EM_DBA_ALIGN, 0, /* alignment, bounds */
3355 BUS_SPACE_MAXADDR, /* lowaddr */
3356 BUS_SPACE_MAXADDR, /* highaddr */
3357 NULL, NULL, /* filter, filterarg */
3360 size, /* maxsegsize */
3362 NULL, /* lockfunc */
3366 device_printf(adapter->dev,
3367 "%s: bus_dma_tag_create failed: %d\n",
3372 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
3373 BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map);
3375 device_printf(adapter->dev,
3376 "%s: bus_dmamem_alloc(%ju) failed: %d\n",
3377 __func__, (uintmax_t)size, error);
3382 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
3383 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT);
3384 if (error || dma->dma_paddr == 0) {
3385 device_printf(adapter->dev,
3386 "%s: bus_dmamap_load failed: %d\n",
3394 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3396 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3397 bus_dma_tag_destroy(dma->dma_tag);
3399 dma->dma_map = NULL;
3400 dma->dma_tag = NULL;
3406 em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
3408 if (dma->dma_tag == NULL)
3410 if (dma->dma_map != NULL) {
3411 bus_dmamap_sync(dma->dma_tag, dma->dma_map,
3412 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
3413 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3414 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3415 dma->dma_map = NULL;
3417 bus_dma_tag_destroy(dma->dma_tag);
3418 dma->dma_tag = NULL;
3422 /*********************************************************************
3424 * Allocate memory for tx_buffer structures. The tx_buffer stores all
3425 * the information needed to transmit a packet on the wire.
3427 **********************************************************************/
3429 em_allocate_transmit_structures(struct adapter *adapter)
3431 device_t dev = adapter->dev;
3432 struct em_buffer *tx_buffer;
3436 * Create DMA tags for tx descriptors
3438 #if __FreeBSD_version >= 700000
3439 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
3441 if ((error = bus_dma_tag_create(NULL, /* parent */
3443 1, 0, /* alignment, bounds */
3444 BUS_SPACE_MAXADDR, /* lowaddr */
3445 BUS_SPACE_MAXADDR, /* highaddr */
3446 NULL, NULL, /* filter, filterarg */
3447 EM_TSO_SIZE, /* maxsize */
3448 EM_MAX_SCATTER, /* nsegments */
3449 EM_TSO_SEG_SIZE, /* maxsegsize */
3451 NULL, /* lockfunc */
3453 &adapter->txtag)) != 0) {
3454 device_printf(dev, "Unable to allocate TX DMA tag\n");
3458 adapter->tx_buffer_area = malloc(sizeof(struct em_buffer) *
3459 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
3460 if (adapter->tx_buffer_area == NULL) {
3461 device_printf(dev, "Unable to allocate tx_buffer memory\n");
3466 /* Create the descriptor buffer dma maps */
3467 for (int i = 0; i < adapter->num_tx_desc; i++) {
3468 tx_buffer = &adapter->tx_buffer_area[i];
3469 error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map);
3471 device_printf(dev, "Unable to create TX DMA map\n");
3474 tx_buffer->next_eop = -1;
3479 em_free_transmit_structures(adapter);
3483 /*********************************************************************
3485 * (Re)Initialize transmit structures.
3487 **********************************************************************/
3489 em_setup_transmit_structures(struct adapter *adapter)
3491 struct em_buffer *tx_buffer;
3493 /* Clear the old ring contents */
3494 bzero(adapter->tx_desc_base,
3495 (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc);
3497 /* Free any existing TX buffers */
3498 for (int i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
3499 tx_buffer = &adapter->tx_buffer_area[i];
3500 bus_dmamap_sync(adapter->txtag, tx_buffer->map,
3501 BUS_DMASYNC_POSTWRITE);
3502 bus_dmamap_unload(adapter->txtag, tx_buffer->map);
3503 m_freem(tx_buffer->m_head);
3504 tx_buffer->m_head = NULL;
3505 tx_buffer->next_eop = -1;
3509 adapter->next_avail_tx_desc = 0;
3510 adapter->next_tx_to_clean = 0;
3511 adapter->num_tx_desc_avail = adapter->num_tx_desc;
3513 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
3514 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3519 /*********************************************************************
3521 * Enable transmit unit.
3523 **********************************************************************/
3525 em_initialize_transmit_unit(struct adapter *adapter)
3527 u32 tctl, tarc, tipg = 0;
3530 INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
3531 /* Setup the Base and Length of the Tx Descriptor Ring */
3532 bus_addr = adapter->txdma.dma_paddr;
3533 E1000_WRITE_REG(&adapter->hw, E1000_TDLEN(0),
3534 adapter->num_tx_desc * sizeof(struct e1000_tx_desc));
3535 E1000_WRITE_REG(&adapter->hw, E1000_TDBAH(0),
3536 (u32)(bus_addr >> 32));
3537 E1000_WRITE_REG(&adapter->hw, E1000_TDBAL(0),
3539 /* Setup the HW Tx Head and Tail descriptor pointers */
3540 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), 0);
3541 E1000_WRITE_REG(&adapter->hw, E1000_TDH(0), 0);
3543 HW_DEBUGOUT2("Base = %x, Length = %x\n",
3544 E1000_READ_REG(&adapter->hw, E1000_TDBAL(0)),
3545 E1000_READ_REG(&adapter->hw, E1000_TDLEN(0)));
3547 /* Set the default values for the Tx Inter Packet Gap timer */
3548 switch (adapter->hw.mac.type) {
3550 tipg = DEFAULT_82542_TIPG_IPGT;
3551 tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3552 tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3554 case e1000_80003es2lan:
3555 tipg = DEFAULT_82543_TIPG_IPGR1;
3556 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 <<
3557 E1000_TIPG_IPGR2_SHIFT;
3560 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3561 (adapter->hw.phy.media_type ==
3562 e1000_media_type_internal_serdes))
3563 tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
3565 tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
3566 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3567 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3570 E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg);
3571 E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value);
3572 if(adapter->hw.mac.type >= e1000_82540)
3573 E1000_WRITE_REG(&adapter->hw, E1000_TADV,
3574 adapter->tx_abs_int_delay.value);
3576 if ((adapter->hw.mac.type == e1000_82571) ||
3577 (adapter->hw.mac.type == e1000_82572)) {
3578 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3579 tarc |= SPEED_MODE_BIT;
3580 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3581 } else if (adapter->hw.mac.type == e1000_80003es2lan) {
3582 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3584 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3585 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1));
3587 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3590 /* Program the Transmit Control Register */
3591 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
3592 tctl &= ~E1000_TCTL_CT;
3593 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN |
3594 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT));
3596 if (adapter->hw.mac.type >= e1000_82571)
3597 tctl |= E1000_TCTL_MULR;
3599 /* This write will effectively turn on the transmit unit. */
3600 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
3602 /* Setup Transmit Descriptor Base Settings */
3603 adapter->txd_cmd = E1000_TXD_CMD_IFCS;
3605 if (adapter->tx_int_delay.value > 0)
3606 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
3609 /*********************************************************************
3611 * Free all transmit related data structures.
3613 **********************************************************************/
3615 em_free_transmit_structures(struct adapter *adapter)
3617 struct em_buffer *tx_buffer;
3619 INIT_DEBUGOUT("free_transmit_structures: begin");
3621 if (adapter->tx_buffer_area != NULL) {
3622 for (int i = 0; i < adapter->num_tx_desc; i++) {
3623 tx_buffer = &adapter->tx_buffer_area[i];
3624 if (tx_buffer->m_head != NULL) {
3625 bus_dmamap_sync(adapter->txtag, tx_buffer->map,
3626 BUS_DMASYNC_POSTWRITE);
3627 bus_dmamap_unload(adapter->txtag,
3629 m_freem(tx_buffer->m_head);
3630 tx_buffer->m_head = NULL;
3631 } else if (tx_buffer->map != NULL)
3632 bus_dmamap_unload(adapter->txtag,
3634 if (tx_buffer->map != NULL) {
3635 bus_dmamap_destroy(adapter->txtag,
3637 tx_buffer->map = NULL;
3641 if (adapter->tx_buffer_area != NULL) {
3642 free(adapter->tx_buffer_area, M_DEVBUF);
3643 adapter->tx_buffer_area = NULL;
3645 if (adapter->txtag != NULL) {
3646 bus_dma_tag_destroy(adapter->txtag);
3647 adapter->txtag = NULL;
3649 #if __FreeBSD_version >= 800000
3650 if (adapter->br != NULL)
3651 buf_ring_free(adapter->br, M_DEVBUF);
3655 /*********************************************************************
3657 * The offload context needs to be set when we transfer the first
3658 * packet of a particular protocol (TCP/UDP). This routine has been
3659 * enhanced to deal with inserted VLAN headers, and IPV6 (not complete)
3661 * Added back the old method of keeping the current context type
3662 * and not setting if unnecessary, as this is reported to be a
3663 * big performance win. -jfv
3664 **********************************************************************/
3666 em_transmit_checksum_setup(struct adapter *adapter, struct mbuf *mp,
3667 u32 *txd_upper, u32 *txd_lower)
3669 struct e1000_context_desc *TXD = NULL;
3670 struct em_buffer *tx_buffer;
3671 struct ether_vlan_header *eh;
3672 struct ip *ip = NULL;
3673 struct ip6_hdr *ip6;
3674 int curr_txd, ehdrlen;
3675 u32 cmd, hdr_len, ip_hlen;
3680 cmd = hdr_len = ipproto = 0;
3681 curr_txd = adapter->next_avail_tx_desc;
3684 * Determine where frame payload starts.
3685 * Jump over vlan headers if already present,
3686 * helpful for QinQ too.
3688 eh = mtod(mp, struct ether_vlan_header *);
3689 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
3690 etype = ntohs(eh->evl_proto);
3691 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3693 etype = ntohs(eh->evl_encap_proto);
3694 ehdrlen = ETHER_HDR_LEN;
3698 * We only support TCP/UDP for IPv4 and IPv6 for the moment.
3699 * TODO: Support SCTP too when it hits the tree.
3703 ip = (struct ip *)(mp->m_data + ehdrlen);
3704 ip_hlen = ip->ip_hl << 2;
3706 /* Setup of IP header checksum. */
3707 if (mp->m_pkthdr.csum_flags & CSUM_IP) {
3709 * Start offset for header checksum calculation.
3710 * End offset for header checksum calculation.
3711 * Offset of place to put the checksum.
3713 TXD = (struct e1000_context_desc *)
3714 &adapter->tx_desc_base[curr_txd];
3715 TXD->lower_setup.ip_fields.ipcss = ehdrlen;
3716 TXD->lower_setup.ip_fields.ipcse =
3717 htole16(ehdrlen + ip_hlen);
3718 TXD->lower_setup.ip_fields.ipcso =
3719 ehdrlen + offsetof(struct ip, ip_sum);
3720 cmd |= E1000_TXD_CMD_IP;
3721 *txd_upper |= E1000_TXD_POPTS_IXSM << 8;
3724 if (mp->m_len < ehdrlen + ip_hlen)
3725 return; /* failure */
3727 hdr_len = ehdrlen + ip_hlen;
3731 case ETHERTYPE_IPV6:
3732 ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
3733 ip_hlen = sizeof(struct ip6_hdr); /* XXX: No header stacking. */
3735 if (mp->m_len < ehdrlen + ip_hlen)
3736 return; /* failure */
3738 /* IPv6 doesn't have a header checksum. */
3740 hdr_len = ehdrlen + ip_hlen;
3741 ipproto = ip6->ip6_nxt;
3752 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
3753 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3754 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3755 /* no need for context if already set */
3756 if (adapter->last_hw_offload == CSUM_TCP)
3758 adapter->last_hw_offload = CSUM_TCP;
3760 * Start offset for payload checksum calculation.
3761 * End offset for payload checksum calculation.
3762 * Offset of place to put the checksum.
3764 TXD = (struct e1000_context_desc *)
3765 &adapter->tx_desc_base[curr_txd];
3766 TXD->upper_setup.tcp_fields.tucss = hdr_len;
3767 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3768 TXD->upper_setup.tcp_fields.tucso =
3769 hdr_len + offsetof(struct tcphdr, th_sum);
3770 cmd |= E1000_TXD_CMD_TCP;
3775 if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
3776 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3777 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3778 /* no need for context if already set */
3779 if (adapter->last_hw_offload == CSUM_UDP)
3781 adapter->last_hw_offload = CSUM_UDP;
3783 * Start offset for header checksum calculation.
3784 * End offset for header checksum calculation.
3785 * Offset of place to put the checksum.
3787 TXD = (struct e1000_context_desc *)
3788 &adapter->tx_desc_base[curr_txd];
3789 TXD->upper_setup.tcp_fields.tucss = hdr_len;
3790 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3791 TXD->upper_setup.tcp_fields.tucso =
3792 hdr_len + offsetof(struct udphdr, uh_sum);
3800 TXD->tcp_seg_setup.data = htole32(0);
3801 TXD->cmd_and_length =
3802 htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd);
3803 tx_buffer = &adapter->tx_buffer_area[curr_txd];
3804 tx_buffer->m_head = NULL;
3805 tx_buffer->next_eop = -1;
3807 if (++curr_txd == adapter->num_tx_desc)
3810 adapter->num_tx_desc_avail--;
3811 adapter->next_avail_tx_desc = curr_txd;
3815 #if __FreeBSD_version >= 700000
3816 /**********************************************************************
3818 * Setup work for hardware segmentation offload (TSO)
3820 **********************************************************************/
3822 em_tso_setup(struct adapter *adapter, struct mbuf *mp, u32 *txd_upper,
3825 struct e1000_context_desc *TXD;
3826 struct em_buffer *tx_buffer;
3827 struct ether_vlan_header *eh;
3829 struct ip6_hdr *ip6;
3831 int curr_txd, ehdrlen, hdr_len, ip_hlen, isip6;
3835 * This function could/should be extended to support IP/IPv6
3836 * fragmentation as well. But as they say, one step at a time.
3840 * Determine where frame payload starts.
3841 * Jump over vlan headers if already present,
3842 * helpful for QinQ too.
3844 eh = mtod(mp, struct ether_vlan_header *);
3845 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
3846 etype = ntohs(eh->evl_proto);
3847 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3849 etype = ntohs(eh->evl_encap_proto);
3850 ehdrlen = ETHER_HDR_LEN;
3853 /* Ensure we have at least the IP+TCP header in the first mbuf. */
3854 if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
3855 return FALSE; /* -1 */
3858 * We only support TCP for IPv4 and IPv6 (notyet) for the moment.
3859 * TODO: Support SCTP too when it hits the tree.
3864 ip = (struct ip *)(mp->m_data + ehdrlen);
3865 if (ip->ip_p != IPPROTO_TCP)
3866 return FALSE; /* 0 */
3869 ip_hlen = ip->ip_hl << 2;
3870 if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr))
3871 return FALSE; /* -1 */
3872 th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
3874 th->th_sum = in_pseudo(ip->ip_src.s_addr,
3875 ip->ip_dst.s_addr, htons(IPPROTO_TCP));
3877 th->th_sum = mp->m_pkthdr.csum_data;
3880 case ETHERTYPE_IPV6:
3882 return FALSE; /* Not supported yet. */
3883 ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
3884 if (ip6->ip6_nxt != IPPROTO_TCP)
3885 return FALSE; /* 0 */
3887 ip_hlen = sizeof(struct ip6_hdr); /* XXX: no header stacking. */
3888 if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr))
3889 return FALSE; /* -1 */
3890 th = (struct tcphdr *)((caddr_t)ip6 + ip_hlen);
3892 th->th_sum = in6_pseudo(ip6->ip6_src, ip->ip6_dst,
3893 htons(IPPROTO_TCP)); /* XXX: function notyet. */
3895 th->th_sum = mp->m_pkthdr.csum_data;
3901 hdr_len = ehdrlen + ip_hlen + (th->th_off << 2);
3903 *txd_lower = (E1000_TXD_CMD_DEXT | /* Extended descr type */
3904 E1000_TXD_DTYP_D | /* Data descr type */
3905 E1000_TXD_CMD_TSE); /* Do TSE on this packet */
3907 /* IP and/or TCP header checksum calculation and insertion. */
3908 *txd_upper = ((isip6 ? 0 : E1000_TXD_POPTS_IXSM) |
3909 E1000_TXD_POPTS_TXSM) << 8;
3911 curr_txd = adapter->next_avail_tx_desc;
3912 tx_buffer = &adapter->tx_buffer_area[curr_txd];
3913 TXD = (struct e1000_context_desc *) &adapter->tx_desc_base[curr_txd];
3915 /* IPv6 doesn't have a header checksum. */
3918 * Start offset for header checksum calculation.
3919 * End offset for header checksum calculation.
3920 * Offset of place put the checksum.
3922 TXD->lower_setup.ip_fields.ipcss = ehdrlen;
3923 TXD->lower_setup.ip_fields.ipcse =
3924 htole16(ehdrlen + ip_hlen - 1);
3925 TXD->lower_setup.ip_fields.ipcso =
3926 ehdrlen + offsetof(struct ip, ip_sum);
3929 * Start offset for payload checksum calculation.
3930 * End offset for payload checksum calculation.
3931 * Offset of place to put the checksum.
3933 TXD->upper_setup.tcp_fields.tucss =
3935 TXD->upper_setup.tcp_fields.tucse = 0;
3936 TXD->upper_setup.tcp_fields.tucso =
3937 ehdrlen + ip_hlen + offsetof(struct tcphdr, th_sum);
3939 * Payload size per packet w/o any headers.
3940 * Length of all headers up to payload.
3942 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz);
3943 TXD->tcp_seg_setup.fields.hdr_len = hdr_len;
3945 TXD->cmd_and_length = htole32(adapter->txd_cmd |
3946 E1000_TXD_CMD_DEXT | /* Extended descr */
3947 E1000_TXD_CMD_TSE | /* TSE context */
3948 (isip6 ? 0 : E1000_TXD_CMD_IP) | /* Do IP csum */
3949 E1000_TXD_CMD_TCP | /* Do TCP checksum */
3950 (mp->m_pkthdr.len - (hdr_len))); /* Total len */
3952 tx_buffer->m_head = NULL;
3953 tx_buffer->next_eop = -1;
3955 if (++curr_txd == adapter->num_tx_desc)
3958 adapter->num_tx_desc_avail--;
3959 adapter->next_avail_tx_desc = curr_txd;
3960 adapter->tx_tso = TRUE;
3965 #endif /* __FreeBSD_version >= 700000 */
3967 /**********************************************************************
3969 * Examine each tx_buffer in the used queue. If the hardware is done
3970 * processing the packet then free associated resources. The
3971 * tx_buffer is put back on the free queue.
3973 **********************************************************************/
3975 em_txeof(struct adapter *adapter)
3977 int first, last, done, num_avail;
3979 struct em_buffer *tx_buffer;
3980 struct e1000_tx_desc *tx_desc, *eop_desc;
3981 struct ifnet *ifp = adapter->ifp;
3983 EM_TX_LOCK_ASSERT(adapter);
3985 if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
3988 num_avail = adapter->num_tx_desc_avail;
3989 first = adapter->next_tx_to_clean;
3990 tx_desc = &adapter->tx_desc_base[first];
3991 tx_buffer = &adapter->tx_buffer_area[first];
3992 last = tx_buffer->next_eop;
3993 eop_desc = &adapter->tx_desc_base[last];
3996 * What this does is get the index of the
3997 * first descriptor AFTER the EOP of the
3998 * first packet, that way we can do the
3999 * simple comparison on the inner while loop.
4001 if (++last == adapter->num_tx_desc)
4005 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
4006 BUS_DMASYNC_POSTREAD);
4008 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
4009 /* We clean the range of the packet */
4010 while (first != done) {
4011 tx_desc->upper.data = 0;
4012 tx_desc->lower.data = 0;
4013 tx_desc->buffer_addr = 0;
4014 ++num_avail; ++cleaned;
4016 if (tx_buffer->m_head) {
4018 bus_dmamap_sync(adapter->txtag,
4020 BUS_DMASYNC_POSTWRITE);
4021 bus_dmamap_unload(adapter->txtag,
4024 m_freem(tx_buffer->m_head);
4025 tx_buffer->m_head = NULL;
4027 tx_buffer->next_eop = -1;
4029 if (++first == adapter->num_tx_desc)
4032 tx_buffer = &adapter->tx_buffer_area[first];
4033 tx_desc = &adapter->tx_desc_base[first];
4035 /* See if we can continue to the next packet */
4036 last = tx_buffer->next_eop;
4038 eop_desc = &adapter->tx_desc_base[last];
4039 /* Get new done point */
4040 if (++last == adapter->num_tx_desc) last = 0;
4045 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map,
4046 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4048 adapter->next_tx_to_clean = first;
4051 * If we have enough room, clear IFF_DRV_OACTIVE to
4052 * tell the stack that it is OK to send packets.
4053 * If there are no pending descriptors, clear the timeout.
4055 if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
4056 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
4057 if (num_avail == adapter->num_tx_desc) {
4058 adapter->watchdog_timer = 0;
4059 adapter->num_tx_desc_avail = num_avail;
4064 /* If any descriptors cleaned, reset the watchdog */
4066 adapter->watchdog_timer = EM_TX_TIMEOUT;
4067 adapter->num_tx_desc_avail = num_avail;
4071 /*********************************************************************
4073 * When Link is lost sometimes there is work still in the TX ring
4074 * which will result in a watchdog, rather than allow that do an
4075 * attempted cleanup and then reinit here. Note that this has been
4076 * seens mostly with fiber adapters.
4078 **********************************************************************/
4080 em_tx_purge(struct adapter *adapter)
4082 if ((!adapter->link_active) && (adapter->watchdog_timer)) {
4083 EM_TX_LOCK(adapter);
4085 EM_TX_UNLOCK(adapter);
4086 if (adapter->watchdog_timer) { /* Still not clean? */
4087 adapter->watchdog_timer = 0;
4088 em_init_locked(adapter);
4093 /*********************************************************************
4095 * Get a buffer from system mbuf buffer pool.
4097 **********************************************************************/
4099 em_get_buf(struct adapter *adapter, int i)
4102 bus_dma_segment_t segs[1];
4104 struct em_buffer *rx_buffer;
4107 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
4109 adapter->mbuf_cluster_failed++;
4112 m->m_len = m->m_pkthdr.len = MCLBYTES;
4114 if (adapter->max_frame_size <= (MCLBYTES - ETHER_ALIGN))
4115 m_adj(m, ETHER_ALIGN);
4118 * Using memory from the mbuf cluster pool, invoke the
4119 * bus_dma machinery to arrange the memory mapping.
4121 error = bus_dmamap_load_mbuf_sg(adapter->rxtag,
4122 adapter->rx_sparemap, m, segs, &nsegs, BUS_DMA_NOWAIT);
4128 /* If nsegs is wrong then the stack is corrupt. */
4129 KASSERT(nsegs == 1, ("Too many segments returned!"));
4131 rx_buffer = &adapter->rx_buffer_area[i];
4132 if (rx_buffer->m_head != NULL)
4133 bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
4135 map = rx_buffer->map;
4136 rx_buffer->map = adapter->rx_sparemap;
4137 adapter->rx_sparemap = map;
4138 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD);
4139 rx_buffer->m_head = m;
4141 adapter->rx_desc_base[i].buffer_addr = htole64(segs[0].ds_addr);
4145 /*********************************************************************
4147 * Allocate memory for rx_buffer structures. Since we use one
4148 * rx_buffer per received packet, the maximum number of rx_buffer's
4149 * that we'll need is equal to the number of receive descriptors
4150 * that we've allocated.
4152 **********************************************************************/
4154 em_allocate_receive_structures(struct adapter *adapter)
4156 device_t dev = adapter->dev;
4157 struct em_buffer *rx_buffer;
4160 adapter->rx_buffer_area = malloc(sizeof(struct em_buffer) *
4161 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
4162 if (adapter->rx_buffer_area == NULL) {
4163 device_printf(dev, "Unable to allocate rx_buffer memory\n");
4167 #if __FreeBSD_version >= 700000
4168 error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
4170 error = bus_dma_tag_create(NULL, /* parent */
4172 1, 0, /* alignment, bounds */
4173 BUS_SPACE_MAXADDR, /* lowaddr */
4174 BUS_SPACE_MAXADDR, /* highaddr */
4175 NULL, NULL, /* filter, filterarg */
4176 MCLBYTES, /* maxsize */
4178 MCLBYTES, /* maxsegsize */
4180 NULL, /* lockfunc */
4184 device_printf(dev, "%s: bus_dma_tag_create failed %d\n",
4189 /* Create the spare map (used by getbuf) */
4190 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
4191 &adapter->rx_sparemap);
4193 device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4198 rx_buffer = adapter->rx_buffer_area;
4199 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4200 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
4203 device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4212 em_free_receive_structures(adapter);
4216 /*********************************************************************
4218 * (Re)initialize receive structures.
4220 **********************************************************************/
4222 em_setup_receive_structures(struct adapter *adapter)
4224 struct em_buffer *rx_buffer;
4227 /* Reset descriptor ring */
4228 bzero(adapter->rx_desc_base,
4229 (sizeof(struct e1000_rx_desc)) * adapter->num_rx_desc);
4231 /* Free current RX buffers. */
4232 rx_buffer = adapter->rx_buffer_area;
4233 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4234 if (rx_buffer->m_head != NULL) {
4235 bus_dmamap_sync(adapter->rxtag, rx_buffer->map,
4236 BUS_DMASYNC_POSTREAD);
4237 bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
4238 m_freem(rx_buffer->m_head);
4239 rx_buffer->m_head = NULL;
4243 /* Allocate new ones. */
4244 for (i = 0; i < adapter->num_rx_desc; i++) {
4245 error = em_get_buf(adapter, i);
4250 /* Setup our descriptor pointers */
4251 adapter->next_rx_desc_to_check = 0;
4252 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4253 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4258 /*********************************************************************
4260 * Enable receive unit.
4262 **********************************************************************/
4263 #define MAX_INTS_PER_SEC 8000
4264 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256)
4267 em_initialize_receive_unit(struct adapter *adapter)
4269 struct ifnet *ifp = adapter->ifp;
4273 INIT_DEBUGOUT("em_initialize_receive_unit: begin");
4276 * Make sure receives are disabled while setting
4277 * up the descriptor ring
4279 rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
4280 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
4282 if (adapter->hw.mac.type >= e1000_82540) {
4283 E1000_WRITE_REG(&adapter->hw, E1000_RADV,
4284 adapter->rx_abs_int_delay.value);
4286 * Set the interrupt throttling rate. Value is calculated
4287 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns)
4289 E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR);
4293 ** When using MSIX interrupts we need to throttle
4294 ** using the EITR register (82574 only)
4297 for (int i = 0; i < 4; i++)
4298 E1000_WRITE_REG(&adapter->hw,
4299 E1000_EITR_82574(i), DEFAULT_ITR);
4301 /* Disable accelerated ackknowledge */
4302 if (adapter->hw.mac.type == e1000_82574)
4303 E1000_WRITE_REG(&adapter->hw,
4304 E1000_RFCTL, E1000_RFCTL_ACK_DIS);
4306 /* Setup the Base and Length of the Rx Descriptor Ring */
4307 bus_addr = adapter->rxdma.dma_paddr;
4308 E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0),
4309 adapter->num_rx_desc * sizeof(struct e1000_rx_desc));
4310 E1000_WRITE_REG(&adapter->hw, E1000_RDBAH(0),
4311 (u32)(bus_addr >> 32));
4312 E1000_WRITE_REG(&adapter->hw, E1000_RDBAL(0),
4315 /* Setup the Receive Control Register */
4316 rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
4317 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
4318 E1000_RCTL_RDMTS_HALF |
4319 (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
4321 /* Make sure VLAN Filters are off */
4322 rctl &= ~E1000_RCTL_VFE;
4324 if (e1000_tbi_sbp_enabled_82543(&adapter->hw))
4325 rctl |= E1000_RCTL_SBP;
4327 rctl &= ~E1000_RCTL_SBP;
4329 switch (adapter->rx_buffer_len) {
4332 rctl |= E1000_RCTL_SZ_2048;
4335 rctl |= E1000_RCTL_SZ_4096 |
4336 E1000_RCTL_BSEX | E1000_RCTL_LPE;
4339 rctl |= E1000_RCTL_SZ_8192 |
4340 E1000_RCTL_BSEX | E1000_RCTL_LPE;
4343 rctl |= E1000_RCTL_SZ_16384 |
4344 E1000_RCTL_BSEX | E1000_RCTL_LPE;
4348 if (ifp->if_mtu > ETHERMTU)
4349 rctl |= E1000_RCTL_LPE;
4351 rctl &= ~E1000_RCTL_LPE;
4353 /* Enable 82543 Receive Checksum Offload for TCP and UDP */
4354 if ((adapter->hw.mac.type >= e1000_82543) &&
4355 (ifp->if_capenable & IFCAP_RXCSUM)) {
4356 rxcsum = E1000_READ_REG(&adapter->hw, E1000_RXCSUM);
4357 rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
4358 E1000_WRITE_REG(&adapter->hw, E1000_RXCSUM, rxcsum);
4362 ** XXX TEMPORARY WORKAROUND: on some systems with 82573
4363 ** long latencies are observed, like Lenovo X60. This
4364 ** change eliminates the problem, but since having positive
4365 ** values in RDTR is a known source of problems on other
4366 ** platforms another solution is being sought.
4368 if (adapter->hw.mac.type == e1000_82573)
4369 E1000_WRITE_REG(&adapter->hw, E1000_RDTR, 0x20);
4371 /* Enable Receives */
4372 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl);
4375 * Setup the HW Rx Head and
4376 * Tail Descriptor Pointers
4378 E1000_WRITE_REG(&adapter->hw, E1000_RDH(0), 0);
4379 E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), adapter->num_rx_desc - 1);
4384 /*********************************************************************
4386 * Free receive related data structures.
4388 **********************************************************************/
4390 em_free_receive_structures(struct adapter *adapter)
4392 struct em_buffer *rx_buffer;
4395 INIT_DEBUGOUT("free_receive_structures: begin");
4397 if (adapter->rx_sparemap) {
4398 bus_dmamap_destroy(adapter->rxtag, adapter->rx_sparemap);
4399 adapter->rx_sparemap = NULL;
4402 /* Cleanup any existing buffers */
4403 if (adapter->rx_buffer_area != NULL) {
4404 rx_buffer = adapter->rx_buffer_area;
4405 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
4406 if (rx_buffer->m_head != NULL) {
4407 bus_dmamap_sync(adapter->rxtag, rx_buffer->map,
4408 BUS_DMASYNC_POSTREAD);
4409 bus_dmamap_unload(adapter->rxtag,
4411 m_freem(rx_buffer->m_head);
4412 rx_buffer->m_head = NULL;
4413 } else if (rx_buffer->map != NULL)
4414 bus_dmamap_unload(adapter->rxtag,
4416 if (rx_buffer->map != NULL) {
4417 bus_dmamap_destroy(adapter->rxtag,
4419 rx_buffer->map = NULL;
4424 if (adapter->rx_buffer_area != NULL) {
4425 free(adapter->rx_buffer_area, M_DEVBUF);
4426 adapter->rx_buffer_area = NULL;
4429 if (adapter->rxtag != NULL) {
4430 bus_dma_tag_destroy(adapter->rxtag);
4431 adapter->rxtag = NULL;
4435 /*********************************************************************
4437 * This routine executes in interrupt context. It replenishes
4438 * the mbufs in the descriptor and sends data which has been
4439 * dma'ed into host memory to upper layer.
4441 * We loop at most count times if count is > 0, or until done if
4444 * For polling we also now return the number of cleaned packets
4445 *********************************************************************/
4447 em_rxeof(struct adapter *adapter, int count)
4449 struct ifnet *ifp = adapter->ifp;;
4451 u8 status, accept_frame = 0, eop = 0;
4452 u16 len, desc_len, prev_len_adj;
4454 struct e1000_rx_desc *current_desc;
4456 EM_RX_LOCK(adapter);
4457 i = adapter->next_rx_desc_to_check;
4458 current_desc = &adapter->rx_desc_base[i];
4459 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4460 BUS_DMASYNC_POSTREAD);
4462 if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
4463 EM_RX_UNLOCK(adapter);
4467 while ((current_desc->status & E1000_RXD_STAT_DD) &&
4469 (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
4470 struct mbuf *m = NULL;
4472 mp = adapter->rx_buffer_area[i].m_head;
4474 * Can't defer bus_dmamap_sync(9) because TBI_ACCEPT
4475 * needs to access the last received byte in the mbuf.
4477 bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map,
4478 BUS_DMASYNC_POSTREAD);
4482 desc_len = le16toh(current_desc->length);
4483 status = current_desc->status;
4484 if (status & E1000_RXD_STAT_EOP) {
4487 if (desc_len < ETHER_CRC_LEN) {
4489 prev_len_adj = ETHER_CRC_LEN - desc_len;
4491 len = desc_len - ETHER_CRC_LEN;
4497 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
4499 u32 pkt_len = desc_len;
4501 if (adapter->fmp != NULL)
4502 pkt_len += adapter->fmp->m_pkthdr.len;
4504 last_byte = *(mtod(mp, caddr_t) + desc_len - 1);
4505 if (TBI_ACCEPT(&adapter->hw, status,
4506 current_desc->errors, pkt_len, last_byte,
4507 adapter->min_frame_size, adapter->max_frame_size)) {
4508 e1000_tbi_adjust_stats_82543(&adapter->hw,
4509 &adapter->stats, pkt_len,
4510 adapter->hw.mac.addr,
4511 adapter->max_frame_size);
4519 if (em_get_buf(adapter, i) != 0) {
4524 /* Assign correct length to the current fragment */
4527 if (adapter->fmp == NULL) {
4528 mp->m_pkthdr.len = len;
4529 adapter->fmp = mp; /* Store the first mbuf */
4532 /* Chain mbuf's together */
4533 mp->m_flags &= ~M_PKTHDR;
4535 * Adjust length of previous mbuf in chain if
4536 * we received less than 4 bytes in the last
4539 if (prev_len_adj > 0) {
4540 adapter->lmp->m_len -= prev_len_adj;
4541 adapter->fmp->m_pkthdr.len -=
4544 adapter->lmp->m_next = mp;
4545 adapter->lmp = adapter->lmp->m_next;
4546 adapter->fmp->m_pkthdr.len += len;
4550 adapter->fmp->m_pkthdr.rcvif = ifp;
4552 em_receive_checksum(adapter, current_desc,
4554 #ifndef __NO_STRICT_ALIGNMENT
4555 if (adapter->max_frame_size >
4556 (MCLBYTES - ETHER_ALIGN) &&
4557 em_fixup_rx(adapter) != 0)
4560 if (status & E1000_RXD_STAT_VP) {
4561 #if __FreeBSD_version < 700000
4562 VLAN_INPUT_TAG_NEW(ifp, adapter->fmp,
4563 (le16toh(current_desc->special) &
4564 E1000_RXD_SPC_VLAN_MASK));
4566 adapter->fmp->m_pkthdr.ether_vtag =
4567 (le16toh(current_desc->special) &
4568 E1000_RXD_SPC_VLAN_MASK);
4569 adapter->fmp->m_flags |= M_VLANTAG;
4572 #ifndef __NO_STRICT_ALIGNMENT
4576 adapter->fmp = NULL;
4577 adapter->lmp = NULL;
4582 /* Reuse loaded DMA map and just update mbuf chain */
4583 mp = adapter->rx_buffer_area[i].m_head;
4584 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
4585 mp->m_data = mp->m_ext.ext_buf;
4587 if (adapter->max_frame_size <=
4588 (MCLBYTES - ETHER_ALIGN))
4589 m_adj(mp, ETHER_ALIGN);
4590 if (adapter->fmp != NULL) {
4591 m_freem(adapter->fmp);
4592 adapter->fmp = NULL;
4593 adapter->lmp = NULL;
4598 /* Zero out the receive descriptors status. */
4599 current_desc->status = 0;
4600 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
4601 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4603 /* Advance our pointers to the next descriptor. */
4604 if (++i == adapter->num_rx_desc)
4606 /* Call into the stack */
4608 adapter->next_rx_desc_to_check = i;
4609 EM_RX_UNLOCK(adapter);
4610 (*ifp->if_input)(ifp, m);
4611 EM_RX_LOCK(adapter);
4613 i = adapter->next_rx_desc_to_check;
4615 current_desc = &adapter->rx_desc_base[i];
4617 adapter->next_rx_desc_to_check = i;
4619 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */
4621 i = adapter->num_rx_desc - 1;
4622 E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), i);
4623 EM_RX_UNLOCK(adapter);
4627 #ifndef __NO_STRICT_ALIGNMENT
4629 * When jumbo frames are enabled we should realign entire payload on
4630 * architecures with strict alignment. This is serious design mistake of 8254x
4631 * as it nullifies DMA operations. 8254x just allows RX buffer size to be
4632 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its
4633 * payload. On architecures without strict alignment restrictions 8254x still
4634 * performs unaligned memory access which would reduce the performance too.
4635 * To avoid copying over an entire frame to align, we allocate a new mbuf and
4636 * copy ethernet header to the new mbuf. The new mbuf is prepended into the
4637 * existing mbuf chain.
4639 * Be aware, best performance of the 8254x is achived only when jumbo frame is
4640 * not used at all on architectures with strict alignment.
4643 em_fixup_rx(struct adapter *adapter)
4650 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) {
4651 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len);
4652 m->m_data += ETHER_HDR_LEN;
4654 MGETHDR(n, M_DONTWAIT, MT_DATA);
4656 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN);
4657 m->m_data += ETHER_HDR_LEN;
4658 m->m_len -= ETHER_HDR_LEN;
4659 n->m_len = ETHER_HDR_LEN;
4660 M_MOVE_PKTHDR(n, m);
4664 adapter->dropped_pkts++;
4665 m_freem(adapter->fmp);
4666 adapter->fmp = NULL;
4675 /*********************************************************************
4677 * Verify that the hardware indicated that the checksum is valid.
4678 * Inform the stack about the status of checksum so that stack
4679 * doesn't spend time verifying the checksum.
4681 *********************************************************************/
4683 em_receive_checksum(struct adapter *adapter,
4684 struct e1000_rx_desc *rx_desc, struct mbuf *mp)
4686 /* 82543 or newer only */
4687 if ((adapter->hw.mac.type < e1000_82543) ||
4688 /* Ignore Checksum bit is set */
4689 (rx_desc->status & E1000_RXD_STAT_IXSM)) {
4690 mp->m_pkthdr.csum_flags = 0;
4694 if (rx_desc->status & E1000_RXD_STAT_IPCS) {
4696 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
4697 /* IP Checksum Good */
4698 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
4699 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
4702 mp->m_pkthdr.csum_flags = 0;
4706 if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
4708 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
4709 mp->m_pkthdr.csum_flags |=
4710 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
4711 mp->m_pkthdr.csum_data = htons(0xffff);
4716 #if __FreeBSD_version >= 700029
4718 * This routine is run via an vlan
4722 em_register_vlan(void *arg, struct ifnet *ifp, u16 vtag)
4724 struct adapter *adapter = ifp->if_softc;
4727 if (ifp->if_softc != arg) /* Not our event */
4730 if ((vtag == 0) || (vtag > 4095)) /* Invalid ID */
4733 index = (vtag >> 5) & 0x7F;
4735 em_shadow_vfta[index] |= (1 << bit);
4736 ++adapter->num_vlans;
4737 /* Re-init to load the changes */
4742 * This routine is run via an vlan
4746 em_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag)
4748 struct adapter *adapter = ifp->if_softc;
4751 if (ifp->if_softc != arg)
4754 if ((vtag == 0) || (vtag > 4095)) /* Invalid */
4757 index = (vtag >> 5) & 0x7F;
4759 em_shadow_vfta[index] &= ~(1 << bit);
4760 --adapter->num_vlans;
4761 /* Re-init to load the changes */
4766 em_setup_vlan_hw_support(struct adapter *adapter)
4768 struct e1000_hw *hw = &adapter->hw;
4772 ** We get here thru init_locked, meaning
4773 ** a soft reset, this has already cleared
4774 ** the VFTA and other state, so if there
4775 ** have been no vlan's registered do nothing.
4777 if (adapter->num_vlans == 0)
4781 ** A soft reset zero's out the VFTA, so
4782 ** we need to repopulate it now.
4784 for (int i = 0; i < EM_VFTA_SIZE; i++)
4785 if (em_shadow_vfta[i] != 0)
4786 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA,
4787 i, em_shadow_vfta[i]);
4789 reg = E1000_READ_REG(hw, E1000_CTRL);
4790 reg |= E1000_CTRL_VME;
4791 E1000_WRITE_REG(hw, E1000_CTRL, reg);
4793 /* Enable the Filter Table */
4794 reg = E1000_READ_REG(hw, E1000_RCTL);
4795 reg &= ~E1000_RCTL_CFIEN;
4796 reg |= E1000_RCTL_VFE;
4797 E1000_WRITE_REG(hw, E1000_RCTL, reg);
4799 /* Update the frame size */
4800 E1000_WRITE_REG(&adapter->hw, E1000_RLPML,
4801 adapter->max_frame_size + VLAN_TAG_SIZE);
4806 em_enable_intr(struct adapter *adapter)
4808 struct e1000_hw *hw = &adapter->hw;
4809 u32 ims_mask = IMS_ENABLE_MASK;
4811 if (adapter->msix) {
4812 E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
4813 ims_mask |= EM_MSIX_MASK;
4815 E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
4819 em_disable_intr(struct adapter *adapter)
4821 struct e1000_hw *hw = &adapter->hw;
4824 E1000_WRITE_REG(hw, EM_EIAC, 0);
4825 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
4829 * Bit of a misnomer, what this really means is
4830 * to enable OS management of the system... aka
4831 * to disable special hardware management features
4834 em_init_manageability(struct adapter *adapter)
4836 /* A shared code workaround */
4837 #define E1000_82542_MANC2H E1000_MANC2H
4838 if (adapter->has_manage) {
4839 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H);
4840 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4842 /* disable hardware interception of ARP */
4843 manc &= ~(E1000_MANC_ARP_EN);
4845 /* enable receiving management packets to the host */
4846 if (adapter->hw.mac.type >= e1000_82571) {
4847 manc |= E1000_MANC_EN_MNG2HOST;
4848 #define E1000_MNG2HOST_PORT_623 (1 << 5)
4849 #define E1000_MNG2HOST_PORT_664 (1 << 6)
4850 manc2h |= E1000_MNG2HOST_PORT_623;
4851 manc2h |= E1000_MNG2HOST_PORT_664;
4852 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h);
4855 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4860 * Give control back to hardware management
4861 * controller if there is one.
4864 em_release_manageability(struct adapter *adapter)
4866 if (adapter->has_manage) {
4867 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4869 /* re-enable hardware interception of ARP */
4870 manc |= E1000_MANC_ARP_EN;
4872 if (adapter->hw.mac.type >= e1000_82571)
4873 manc &= ~E1000_MANC_EN_MNG2HOST;
4875 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4880 * em_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
4881 * For ASF and Pass Through versions of f/w this means that
4882 * the driver is loaded. For AMT version (only with 82573)
4883 * of the f/w this means that the network i/f is open.
4887 em_get_hw_control(struct adapter *adapter)
4891 /* Let firmware know the driver has taken over */
4892 switch (adapter->hw.mac.type) {
4894 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
4895 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
4896 swsm | E1000_SWSM_DRV_LOAD);
4900 case e1000_80003es2lan:
4903 case e1000_ich10lan:
4904 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4905 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4906 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
4914 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit.
4915 * For ASF and Pass Through versions of f/w this means that the
4916 * driver is no longer loaded. For AMT version (only with 82573) i
4917 * of the f/w this means that the network i/f is closed.
4921 em_release_hw_control(struct adapter *adapter)
4925 /* Let firmware taken over control of h/w */
4926 switch (adapter->hw.mac.type) {
4928 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
4929 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
4930 swsm & ~E1000_SWSM_DRV_LOAD);
4934 case e1000_80003es2lan:
4937 case e1000_ich10lan:
4938 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4939 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4940 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
4949 em_is_valid_ether_addr(u8 *addr)
4951 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
4953 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
4961 * Enable PCI Wake On Lan capability
4964 em_enable_wakeup(device_t dev)
4969 /* First find the capabilities pointer*/
4970 cap = pci_read_config(dev, PCIR_CAP_PTR, 2);
4971 /* Read the PM Capabilities */
4972 id = pci_read_config(dev, cap, 1);
4973 if (id != PCIY_PMG) /* Something wrong */
4975 /* OK, we have the power capabilities, so
4976 now get the status register */
4977 cap += PCIR_POWER_STATUS;
4978 status = pci_read_config(dev, cap, 2);
4979 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
4980 pci_write_config(dev, cap, status, 2);
4985 /*********************************************************************
4986 * 82544 Coexistence issue workaround.
4987 * There are 2 issues.
4988 * 1. Transmit Hang issue.
4989 * To detect this issue, following equation can be used...
4990 * SIZE[3:0] + ADDR[2:0] = SUM[3:0].
4991 * If SUM[3:0] is in between 1 to 4, we will have this issue.
4994 * To detect this issue, following equation can be used...
4995 * SIZE[3:0] + ADDR[2:0] = SUM[3:0].
4996 * If SUM[3:0] is in between 9 to c, we will have this issue.
5000 * Make sure we do not have ending address
5001 * as 1,2,3,4(Hang) or 9,a,b,c (DAC)
5003 *************************************************************************/
5005 em_fill_descriptors (bus_addr_t address, u32 length,
5006 PDESC_ARRAY desc_array)
5008 u32 safe_terminator;
5010 /* Since issue is sensitive to length and address.*/
5011 /* Let us first check the address...*/
5013 desc_array->descriptor[0].address = address;
5014 desc_array->descriptor[0].length = length;
5015 desc_array->elements = 1;
5016 return (desc_array->elements);
5018 safe_terminator = (u32)((((u32)address & 0x7) +
5019 (length & 0xF)) & 0xF);
5020 /* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */
5021 if (safe_terminator == 0 ||
5022 (safe_terminator > 4 &&
5023 safe_terminator < 9) ||
5024 (safe_terminator > 0xC &&
5025 safe_terminator <= 0xF)) {
5026 desc_array->descriptor[0].address = address;
5027 desc_array->descriptor[0].length = length;
5028 desc_array->elements = 1;
5029 return (desc_array->elements);
5032 desc_array->descriptor[0].address = address;
5033 desc_array->descriptor[0].length = length - 4;
5034 desc_array->descriptor[1].address = address + (length - 4);
5035 desc_array->descriptor[1].length = 4;
5036 desc_array->elements = 2;
5037 return (desc_array->elements);
5040 /**********************************************************************
5042 * Update the board statistics counters.
5044 **********************************************************************/
5046 em_update_stats_counters(struct adapter *adapter)
5050 if(adapter->hw.phy.media_type == e1000_media_type_copper ||
5051 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
5052 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
5053 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
5055 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
5056 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);
5057 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC);
5058 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL);
5060 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC);
5061 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL);
5062 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC);
5063 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC);
5064 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC);
5065 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC);
5066 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC);
5067 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC);
5068 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC);
5069 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC);
5070 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64);
5071 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127);
5072 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255);
5073 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511);
5074 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023);
5075 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522);
5076 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC);
5077 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC);
5078 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC);
5079 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC);
5081 /* For the 64-bit byte counters the low dword must be read first. */
5082 /* Both registers clear on the read of the high dword */
5084 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH);
5085 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH);
5087 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
5088 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
5089 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC);
5090 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC);
5091 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC);
5093 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH);
5094 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH);
5096 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR);
5097 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT);
5098 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64);
5099 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127);
5100 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255);
5101 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511);
5102 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023);
5103 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522);
5104 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
5105 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
5107 if (adapter->hw.mac.type >= e1000_82543) {
5108 adapter->stats.algnerrc +=
5109 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC);
5110 adapter->stats.rxerrc +=
5111 E1000_READ_REG(&adapter->hw, E1000_RXERRC);
5112 adapter->stats.tncrs +=
5113 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
5114 adapter->stats.cexterr +=
5115 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
5116 adapter->stats.tsctc +=
5117 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
5118 adapter->stats.tsctfc +=
5119 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
5123 ifp->if_collisions = adapter->stats.colc;
5126 ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc +
5127 adapter->stats.crcerrs + adapter->stats.algnerrc +
5128 adapter->stats.ruc + adapter->stats.roc +
5129 adapter->stats.mpc + adapter->stats.cexterr;
5132 ifp->if_oerrors = adapter->stats.ecol +
5133 adapter->stats.latecol + adapter->watchdog_events;
5137 /**********************************************************************
5139 * This routine is called only when em_display_debug_stats is enabled.
5140 * This routine provides a way to take a look at important statistics
5141 * maintained by the driver and hardware.
5143 **********************************************************************/
5145 em_print_debug_info(struct adapter *adapter)
5147 device_t dev = adapter->dev;
5148 u8 *hw_addr = adapter->hw.hw_addr;
5150 device_printf(dev, "Adapter hardware address = %p \n", hw_addr);
5151 device_printf(dev, "CTRL = 0x%x RCTL = 0x%x \n",
5152 E1000_READ_REG(&adapter->hw, E1000_CTRL),
5153 E1000_READ_REG(&adapter->hw, E1000_RCTL));
5154 device_printf(dev, "Packet buffer = Tx=%dk Rx=%dk \n",
5155 ((E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff0000) >> 16),\
5156 (E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff) );
5157 device_printf(dev, "Flow control watermarks high = %d low = %d\n",
5158 adapter->hw.fc.high_water,
5159 adapter->hw.fc.low_water);
5160 device_printf(dev, "tx_int_delay = %d, tx_abs_int_delay = %d\n",
5161 E1000_READ_REG(&adapter->hw, E1000_TIDV),
5162 E1000_READ_REG(&adapter->hw, E1000_TADV));
5163 device_printf(dev, "rx_int_delay = %d, rx_abs_int_delay = %d\n",
5164 E1000_READ_REG(&adapter->hw, E1000_RDTR),
5165 E1000_READ_REG(&adapter->hw, E1000_RADV));
5166 device_printf(dev, "fifo workaround = %lld, fifo_reset_count = %lld\n",
5167 (long long)adapter->tx_fifo_wrk_cnt,
5168 (long long)adapter->tx_fifo_reset_cnt);
5169 device_printf(dev, "hw tdh = %d, hw tdt = %d\n",
5170 E1000_READ_REG(&adapter->hw, E1000_TDH(0)),
5171 E1000_READ_REG(&adapter->hw, E1000_TDT(0)));
5172 device_printf(dev, "hw rdh = %d, hw rdt = %d\n",
5173 E1000_READ_REG(&adapter->hw, E1000_RDH(0)),
5174 E1000_READ_REG(&adapter->hw, E1000_RDT(0)));
5175 device_printf(dev, "Num Tx descriptors avail = %d\n",
5176 adapter->num_tx_desc_avail);
5177 device_printf(dev, "Tx Descriptors not avail1 = %ld\n",
5178 adapter->no_tx_desc_avail1);
5179 device_printf(dev, "Tx Descriptors not avail2 = %ld\n",
5180 adapter->no_tx_desc_avail2);
5181 device_printf(dev, "Std mbuf failed = %ld\n",
5182 adapter->mbuf_alloc_failed);
5183 device_printf(dev, "Std mbuf cluster failed = %ld\n",
5184 adapter->mbuf_cluster_failed);
5185 device_printf(dev, "Driver dropped packets = %ld\n",
5186 adapter->dropped_pkts);
5187 device_printf(dev, "Driver tx dma failure in encap = %ld\n",
5188 adapter->no_tx_dma_setup);
5192 em_print_hw_stats(struct adapter *adapter)
5194 device_t dev = adapter->dev;
5196 device_printf(dev, "Excessive collisions = %lld\n",
5197 (long long)adapter->stats.ecol);
5198 #if (DEBUG_HW > 0) /* Dont output these errors normally */
5199 device_printf(dev, "Symbol errors = %lld\n",
5200 (long long)adapter->stats.symerrs);
5202 device_printf(dev, "Sequence errors = %lld\n",
5203 (long long)adapter->stats.sec);
5204 device_printf(dev, "Defer count = %lld\n",
5205 (long long)adapter->stats.dc);
5206 device_printf(dev, "Missed Packets = %lld\n",
5207 (long long)adapter->stats.mpc);
5208 device_printf(dev, "Receive No Buffers = %lld\n",
5209 (long long)adapter->stats.rnbc);
5210 /* RLEC is inaccurate on some hardware, calculate our own. */
5211 device_printf(dev, "Receive Length Errors = %lld\n",
5212 ((long long)adapter->stats.roc + (long long)adapter->stats.ruc));
5213 device_printf(dev, "Receive errors = %lld\n",
5214 (long long)adapter->stats.rxerrc);
5215 device_printf(dev, "Crc errors = %lld\n",
5216 (long long)adapter->stats.crcerrs);
5217 device_printf(dev, "Alignment errors = %lld\n",
5218 (long long)adapter->stats.algnerrc);
5219 device_printf(dev, "Collision/Carrier extension errors = %lld\n",
5220 (long long)adapter->stats.cexterr);
5221 device_printf(dev, "RX overruns = %ld\n", adapter->rx_overruns);
5222 device_printf(dev, "watchdog timeouts = %ld\n",
5223 adapter->watchdog_events);
5224 device_printf(dev, "RX MSIX IRQ = %ld TX MSIX IRQ = %ld"
5225 " LINK MSIX IRQ = %ld\n", adapter->rx_irq,
5226 adapter->tx_irq , adapter->link_irq);
5227 device_printf(dev, "XON Rcvd = %lld\n",
5228 (long long)adapter->stats.xonrxc);
5229 device_printf(dev, "XON Xmtd = %lld\n",
5230 (long long)adapter->stats.xontxc);
5231 device_printf(dev, "XOFF Rcvd = %lld\n",
5232 (long long)adapter->stats.xoffrxc);
5233 device_printf(dev, "XOFF Xmtd = %lld\n",
5234 (long long)adapter->stats.xofftxc);
5235 device_printf(dev, "Good Packets Rcvd = %lld\n",
5236 (long long)adapter->stats.gprc);
5237 device_printf(dev, "Good Packets Xmtd = %lld\n",
5238 (long long)adapter->stats.gptc);
5239 device_printf(dev, "TSO Contexts Xmtd = %lld\n",
5240 (long long)adapter->stats.tsctc);
5241 device_printf(dev, "TSO Contexts Failed = %lld\n",
5242 (long long)adapter->stats.tsctfc);
5245 /**********************************************************************
5247 * This routine provides a way to dump out the adapter eeprom,
5248 * often a useful debug/service tool. This only dumps the first
5249 * 32 words, stuff that matters is in that extent.
5251 **********************************************************************/
5253 em_print_nvm_info(struct adapter *adapter)
5258 /* Its a bit crude, but it gets the job done */
5259 printf("\nInterface EEPROM Dump:\n");
5260 printf("Offset\n0x0000 ");
5261 for (i = 0, j = 0; i < 32; i++, j++) {
5262 if (j == 8) { /* Make the offset block */
5264 printf("\n0x00%x0 ",row);
5266 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data);
5267 printf("%04x ", eeprom_data);
5273 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
5275 struct adapter *adapter;
5280 error = sysctl_handle_int(oidp, &result, 0, req);
5282 if (error || !req->newptr)
5286 adapter = (struct adapter *)arg1;
5287 em_print_debug_info(adapter);
5290 * This value will cause a hex dump of the
5291 * first 32 16-bit words of the EEPROM to
5295 adapter = (struct adapter *)arg1;
5296 em_print_nvm_info(adapter);
5304 em_sysctl_stats(SYSCTL_HANDLER_ARGS)
5306 struct adapter *adapter;
5311 error = sysctl_handle_int(oidp, &result, 0, req);
5313 if (error || !req->newptr)
5317 adapter = (struct adapter *)arg1;
5318 em_print_hw_stats(adapter);
5325 em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
5327 struct em_int_delay_info *info;
5328 struct adapter *adapter;
5334 info = (struct em_int_delay_info *)arg1;
5335 usecs = info->value;
5336 error = sysctl_handle_int(oidp, &usecs, 0, req);
5337 if (error != 0 || req->newptr == NULL)
5339 if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535))
5341 info->value = usecs;
5342 ticks = EM_USECS_TO_TICKS(usecs);
5344 adapter = info->adapter;
5346 EM_CORE_LOCK(adapter);
5347 regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
5348 regval = (regval & ~0xffff) | (ticks & 0xffff);
5349 /* Handle a few special cases. */
5350 switch (info->offset) {
5355 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE;
5356 /* Don't write 0 into the TIDV register. */
5359 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
5362 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
5363 EM_CORE_UNLOCK(adapter);
5368 em_add_int_delay_sysctl(struct adapter *adapter, const char *name,
5369 const char *description, struct em_int_delay_info *info,
5370 int offset, int value)
5372 info->adapter = adapter;
5373 info->offset = offset;
5374 info->value = value;
5375 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev),
5376 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5377 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
5378 info, 0, em_sysctl_int_delay, "I", description);
5381 #ifndef EM_LEGACY_IRQ
5383 em_add_rx_process_limit(struct adapter *adapter, const char *name,
5384 const char *description, int *limit, int value)
5387 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
5388 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5389 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);