1 /******************************************************************************
3 Copyright (c) 2001-2010, 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 ******************************************************************************/
36 #ifdef HAVE_KERNEL_OPTION_HEADERS
37 #include "opt_device_polling.h"
42 #include <sys/param.h>
43 #include <sys/systm.h>
44 #if __FreeBSD_version >= 800000
45 #include <sys/buf_ring.h>
48 #include <sys/endian.h>
49 #include <sys/kernel.h>
50 #include <sys/kthread.h>
51 #include <sys/malloc.h>
53 #include <sys/module.h>
55 #include <sys/socket.h>
56 #include <sys/sockio.h>
57 #include <sys/sysctl.h>
58 #include <sys/taskqueue.h>
59 #include <sys/eventhandler.h>
62 #include <machine/smp.h>
63 #include <machine/bus.h>
64 #include <machine/resource.h>
67 #include <net/ethernet.h>
69 #include <net/if_arp.h>
70 #include <net/if_dl.h>
71 #include <net/if_media.h>
73 #include <net/if_types.h>
74 #include <net/if_vlan_var.h>
76 #include <netinet/in_systm.h>
77 #include <netinet/in.h>
78 #include <netinet/if_ether.h>
79 #include <netinet/ip.h>
80 #include <netinet/ip6.h>
81 #include <netinet/tcp.h>
82 #include <netinet/tcp_lro.h>
83 #include <netinet/udp.h>
85 #include <machine/in_cksum.h>
86 #include <dev/led/led.h>
87 #include <dev/pci/pcivar.h>
88 #include <dev/pci/pcireg.h>
90 #include "e1000_api.h"
91 #include "e1000_82575.h"
94 /*********************************************************************
95 * Set this to one to display debug statistics
96 *********************************************************************/
97 int igb_display_debug_stats = 0;
99 /*********************************************************************
101 *********************************************************************/
102 char igb_driver_version[] = "version - 1.9.6";
105 /*********************************************************************
106 * PCI Device ID Table
108 * Used by probe to select devices to load on
109 * Last field stores an index into e1000_strings
110 * Last entry must be all 0s
112 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
113 *********************************************************************/
115 static igb_vendor_info_t igb_vendor_info_array[] =
117 { 0x8086, E1000_DEV_ID_82575EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
118 { 0x8086, E1000_DEV_ID_82575EB_FIBER_SERDES,
119 PCI_ANY_ID, PCI_ANY_ID, 0},
120 { 0x8086, E1000_DEV_ID_82575GB_QUAD_COPPER,
121 PCI_ANY_ID, PCI_ANY_ID, 0},
122 { 0x8086, E1000_DEV_ID_82576, PCI_ANY_ID, PCI_ANY_ID, 0},
123 { 0x8086, E1000_DEV_ID_82576_NS, PCI_ANY_ID, PCI_ANY_ID, 0},
124 { 0x8086, E1000_DEV_ID_82576_NS_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
125 { 0x8086, E1000_DEV_ID_82576_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
126 { 0x8086, E1000_DEV_ID_82576_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
127 { 0x8086, E1000_DEV_ID_82576_SERDES_QUAD,
128 PCI_ANY_ID, PCI_ANY_ID, 0},
129 { 0x8086, E1000_DEV_ID_82576_QUAD_COPPER,
130 PCI_ANY_ID, PCI_ANY_ID, 0},
131 { 0x8086, E1000_DEV_ID_82580_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
132 { 0x8086, E1000_DEV_ID_82580_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
133 { 0x8086, E1000_DEV_ID_82580_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
134 { 0x8086, E1000_DEV_ID_82580_SGMII, PCI_ANY_ID, PCI_ANY_ID, 0},
135 { 0x8086, E1000_DEV_ID_82580_COPPER_DUAL,
136 PCI_ANY_ID, PCI_ANY_ID, 0},
137 /* required last entry */
141 /*********************************************************************
142 * Table of branding strings for all supported NICs.
143 *********************************************************************/
145 static char *igb_strings[] = {
146 "Intel(R) PRO/1000 Network Connection"
149 /*********************************************************************
150 * Function prototypes
151 *********************************************************************/
152 static int igb_probe(device_t);
153 static int igb_attach(device_t);
154 static int igb_detach(device_t);
155 static int igb_shutdown(device_t);
156 static int igb_suspend(device_t);
157 static int igb_resume(device_t);
158 static void igb_start(struct ifnet *);
159 static void igb_start_locked(struct tx_ring *, struct ifnet *ifp);
160 #if __FreeBSD_version >= 800000
161 static int igb_mq_start(struct ifnet *, struct mbuf *);
162 static int igb_mq_start_locked(struct ifnet *,
163 struct tx_ring *, struct mbuf *);
164 static void igb_qflush(struct ifnet *);
166 static int igb_ioctl(struct ifnet *, u_long, caddr_t);
167 static void igb_init(void *);
168 static void igb_init_locked(struct adapter *);
169 static void igb_stop(void *);
170 static void igb_media_status(struct ifnet *, struct ifmediareq *);
171 static int igb_media_change(struct ifnet *);
172 static void igb_identify_hardware(struct adapter *);
173 static int igb_allocate_pci_resources(struct adapter *);
174 static int igb_allocate_msix(struct adapter *);
175 static int igb_allocate_legacy(struct adapter *);
176 static int igb_setup_msix(struct adapter *);
177 static void igb_free_pci_resources(struct adapter *);
178 static void igb_local_timer(void *);
179 static void igb_reset(struct adapter *);
180 static void igb_setup_interface(device_t, struct adapter *);
181 static int igb_allocate_queues(struct adapter *);
182 static void igb_configure_queues(struct adapter *);
184 static int igb_allocate_transmit_buffers(struct tx_ring *);
185 static void igb_setup_transmit_structures(struct adapter *);
186 static void igb_setup_transmit_ring(struct tx_ring *);
187 static void igb_initialize_transmit_units(struct adapter *);
188 static void igb_free_transmit_structures(struct adapter *);
189 static void igb_free_transmit_buffers(struct tx_ring *);
191 static int igb_allocate_receive_buffers(struct rx_ring *);
192 static int igb_setup_receive_structures(struct adapter *);
193 static int igb_setup_receive_ring(struct rx_ring *);
194 static void igb_initialize_receive_units(struct adapter *);
195 static void igb_free_receive_structures(struct adapter *);
196 static void igb_free_receive_buffers(struct rx_ring *);
197 static void igb_free_receive_ring(struct rx_ring *);
199 static void igb_enable_intr(struct adapter *);
200 static void igb_disable_intr(struct adapter *);
201 static void igb_update_stats_counters(struct adapter *);
202 static bool igb_txeof(struct tx_ring *);
204 static __inline void igb_rx_discard(struct rx_ring *, int);
205 static __inline void igb_rx_input(struct rx_ring *,
206 struct ifnet *, struct mbuf *, u32);
208 static bool igb_rxeof(struct igb_queue *, int, int *);
209 static void igb_rx_checksum(u32, struct mbuf *, u32);
210 static int igb_tx_ctx_setup(struct tx_ring *, struct mbuf *);
211 static bool igb_tso_setup(struct tx_ring *, struct mbuf *, u32 *);
212 static void igb_set_promisc(struct adapter *);
213 static void igb_disable_promisc(struct adapter *);
214 static void igb_set_multi(struct adapter *);
215 static void igb_update_link_status(struct adapter *);
216 static void igb_refresh_mbufs(struct rx_ring *, int);
218 static void igb_register_vlan(void *, struct ifnet *, u16);
219 static void igb_unregister_vlan(void *, struct ifnet *, u16);
220 static void igb_setup_vlan_hw_support(struct adapter *);
222 static int igb_xmit(struct tx_ring *, struct mbuf **);
223 static int igb_dma_malloc(struct adapter *, bus_size_t,
224 struct igb_dma_alloc *, int);
225 static void igb_dma_free(struct adapter *, struct igb_dma_alloc *);
226 static int igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS);
227 static void igb_print_nvm_info(struct adapter *);
228 static int igb_is_valid_ether_addr(u8 *);
229 static void igb_add_hw_stats(struct adapter *adapter);
230 /* Management and WOL Support */
231 static void igb_init_manageability(struct adapter *);
232 static void igb_release_manageability(struct adapter *);
233 static void igb_get_hw_control(struct adapter *);
234 static void igb_release_hw_control(struct adapter *);
235 static void igb_enable_wakeup(device_t);
236 static void igb_led_func(void *, int);
238 static int igb_irq_fast(void *);
239 static void igb_add_rx_process_limit(struct adapter *, const char *,
240 const char *, int *, int);
241 static void igb_handle_que(void *context, int pending);
242 static void igb_handle_link(void *context, int pending);
244 /* These are MSIX only irq handlers */
245 static void igb_msix_que(void *);
246 static void igb_msix_link(void *);
248 #ifdef DEVICE_POLLING
249 static poll_handler_t igb_poll;
252 /*********************************************************************
253 * FreeBSD Device Interface Entry Points
254 *********************************************************************/
256 static device_method_t igb_methods[] = {
257 /* Device interface */
258 DEVMETHOD(device_probe, igb_probe),
259 DEVMETHOD(device_attach, igb_attach),
260 DEVMETHOD(device_detach, igb_detach),
261 DEVMETHOD(device_shutdown, igb_shutdown),
262 DEVMETHOD(device_suspend, igb_suspend),
263 DEVMETHOD(device_resume, igb_resume),
267 static driver_t igb_driver = {
268 "igb", igb_methods, sizeof(struct adapter),
271 static devclass_t igb_devclass;
272 DRIVER_MODULE(igb, pci, igb_driver, igb_devclass, 0, 0);
273 MODULE_DEPEND(igb, pci, 1, 1, 1);
274 MODULE_DEPEND(igb, ether, 1, 1, 1);
276 /*********************************************************************
277 * Tunable default values.
278 *********************************************************************/
280 /* Descriptor defaults */
281 static int igb_rxd = IGB_DEFAULT_RXD;
282 static int igb_txd = IGB_DEFAULT_TXD;
283 TUNABLE_INT("hw.igb.rxd", &igb_rxd);
284 TUNABLE_INT("hw.igb.txd", &igb_txd);
287 ** AIM: Adaptive Interrupt Moderation
288 ** which means that the interrupt rate
289 ** is varied over time based on the
290 ** traffic for that interrupt vector
292 static int igb_enable_aim = TRUE;
293 TUNABLE_INT("hw.igb.enable_aim", &igb_enable_aim);
296 * MSIX should be the default for best performance,
297 * but this allows it to be forced off for testing.
299 static int igb_enable_msix = 1;
300 TUNABLE_INT("hw.igb.enable_msix", &igb_enable_msix);
303 * Header split has seemed to be beneficial in
304 * many circumstances tested, however there have
305 * been some stability issues, so the default is
308 static bool igb_header_split = FALSE;
309 TUNABLE_INT("hw.igb.hdr_split", &igb_header_split);
312 ** This will autoconfigure based on
313 ** the number of CPUs if left at 0.
315 static int igb_num_queues = 0;
316 TUNABLE_INT("hw.igb.num_queues", &igb_num_queues);
318 /* How many packets rxeof tries to clean at a time */
319 static int igb_rx_process_limit = 100;
320 TUNABLE_INT("hw.igb.rx_process_limit", &igb_rx_process_limit);
322 /* Flow control setting - default to FULL */
323 static int igb_fc_setting = e1000_fc_full;
324 TUNABLE_INT("hw.igb.fc_setting", &igb_fc_setting);
327 ** Shadow VFTA table, this is needed because
328 ** the real filter table gets cleared during
329 ** a soft reset and the driver needs to be able
332 static u32 igb_shadow_vfta[IGB_VFTA_SIZE];
335 /*********************************************************************
336 * Device identification routine
338 * igb_probe determines if the driver should be loaded on
339 * adapter based on PCI vendor/device id of the adapter.
341 * return BUS_PROBE_DEFAULT on success, positive on failure
342 *********************************************************************/
345 igb_probe(device_t dev)
347 char adapter_name[60];
348 uint16_t pci_vendor_id = 0;
349 uint16_t pci_device_id = 0;
350 uint16_t pci_subvendor_id = 0;
351 uint16_t pci_subdevice_id = 0;
352 igb_vendor_info_t *ent;
354 INIT_DEBUGOUT("igb_probe: begin");
356 pci_vendor_id = pci_get_vendor(dev);
357 if (pci_vendor_id != IGB_VENDOR_ID)
360 pci_device_id = pci_get_device(dev);
361 pci_subvendor_id = pci_get_subvendor(dev);
362 pci_subdevice_id = pci_get_subdevice(dev);
364 ent = igb_vendor_info_array;
365 while (ent->vendor_id != 0) {
366 if ((pci_vendor_id == ent->vendor_id) &&
367 (pci_device_id == ent->device_id) &&
369 ((pci_subvendor_id == ent->subvendor_id) ||
370 (ent->subvendor_id == PCI_ANY_ID)) &&
372 ((pci_subdevice_id == ent->subdevice_id) ||
373 (ent->subdevice_id == PCI_ANY_ID))) {
374 sprintf(adapter_name, "%s %s",
375 igb_strings[ent->index],
377 device_set_desc_copy(dev, adapter_name);
378 return (BUS_PROBE_DEFAULT);
386 /*********************************************************************
387 * Device initialization routine
389 * The attach entry point is called when the driver is being loaded.
390 * This routine identifies the type of hardware, allocates all resources
391 * and initializes the hardware.
393 * return 0 on success, positive on failure
394 *********************************************************************/
397 igb_attach(device_t dev)
399 struct adapter *adapter;
403 INIT_DEBUGOUT("igb_attach: begin");
405 adapter = device_get_softc(dev);
406 adapter->dev = adapter->osdep.dev = dev;
407 IGB_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
410 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
411 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
412 OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
413 igb_sysctl_nvm_info, "I", "NVM Information");
415 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
416 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
417 OID_AUTO, "flow_control", CTLTYPE_INT|CTLFLAG_RW,
418 &igb_fc_setting, 0, "Flow Control");
420 SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
421 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
422 OID_AUTO, "enable_aim", CTLTYPE_INT|CTLFLAG_RW,
423 &igb_enable_aim, 1, "Interrupt Moderation");
425 callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
427 /* Determine hardware and mac info */
428 igb_identify_hardware(adapter);
430 /* Setup PCI resources */
431 if (igb_allocate_pci_resources(adapter)) {
432 device_printf(dev, "Allocation of PCI resources failed\n");
437 /* Do Shared Code initialization */
438 if (e1000_setup_init_funcs(&adapter->hw, TRUE)) {
439 device_printf(dev, "Setup of Shared code failed\n");
444 e1000_get_bus_info(&adapter->hw);
446 /* Sysctls for limiting the amount of work done in the taskqueue */
447 igb_add_rx_process_limit(adapter, "rx_processing_limit",
448 "max number of rx packets to process", &adapter->rx_process_limit,
449 igb_rx_process_limit);
452 * Validate number of transmit and receive descriptors. It
453 * must not exceed hardware maximum, and must be multiple
454 * of E1000_DBA_ALIGN.
456 if (((igb_txd * sizeof(struct e1000_tx_desc)) % IGB_DBA_ALIGN) != 0 ||
457 (igb_txd > IGB_MAX_TXD) || (igb_txd < IGB_MIN_TXD)) {
458 device_printf(dev, "Using %d TX descriptors instead of %d!\n",
459 IGB_DEFAULT_TXD, igb_txd);
460 adapter->num_tx_desc = IGB_DEFAULT_TXD;
462 adapter->num_tx_desc = igb_txd;
463 if (((igb_rxd * sizeof(struct e1000_rx_desc)) % IGB_DBA_ALIGN) != 0 ||
464 (igb_rxd > IGB_MAX_RXD) || (igb_rxd < IGB_MIN_RXD)) {
465 device_printf(dev, "Using %d RX descriptors instead of %d!\n",
466 IGB_DEFAULT_RXD, igb_rxd);
467 adapter->num_rx_desc = IGB_DEFAULT_RXD;
469 adapter->num_rx_desc = igb_rxd;
471 adapter->hw.mac.autoneg = DO_AUTO_NEG;
472 adapter->hw.phy.autoneg_wait_to_complete = FALSE;
473 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
476 if (adapter->hw.phy.media_type == e1000_media_type_copper) {
477 adapter->hw.phy.mdix = AUTO_ALL_MODES;
478 adapter->hw.phy.disable_polarity_correction = FALSE;
479 adapter->hw.phy.ms_type = IGB_MASTER_SLAVE;
483 * Set the frame limits assuming
484 * standard ethernet sized frames.
486 adapter->max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE;
487 adapter->min_frame_size = ETH_ZLEN + ETHERNET_FCS_SIZE;
490 ** Allocate and Setup Queues
492 if (igb_allocate_queues(adapter)) {
498 ** Start from a known state, this is
499 ** important in reading the nvm and
502 e1000_reset_hw(&adapter->hw);
504 /* Make sure we have a good EEPROM before we read from it */
505 if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
507 ** Some PCI-E parts fail the first check due to
508 ** the link being in sleep state, call it again,
509 ** if it fails a second time its a real issue.
511 if (e1000_validate_nvm_checksum(&adapter->hw) < 0) {
513 "The EEPROM Checksum Is Not Valid\n");
520 ** Copy the permanent MAC address out of the EEPROM
522 if (e1000_read_mac_addr(&adapter->hw) < 0) {
523 device_printf(dev, "EEPROM read error while reading MAC"
528 /* Check its sanity */
529 if (!igb_is_valid_ether_addr(adapter->hw.mac.addr)) {
530 device_printf(dev, "Invalid MAC address\n");
536 ** Configure Interrupts
538 if ((adapter->msix > 1) && (igb_enable_msix))
539 error = igb_allocate_msix(adapter);
540 else /* MSI or Legacy */
541 error = igb_allocate_legacy(adapter);
545 /* Setup OS specific network interface */
546 igb_setup_interface(dev, adapter);
548 /* Now get a good starting state */
551 /* Initialize statistics */
552 igb_update_stats_counters(adapter);
554 adapter->hw.mac.get_link_status = 1;
555 igb_update_link_status(adapter);
557 /* Indicate SOL/IDER usage */
558 if (e1000_check_reset_block(&adapter->hw))
560 "PHY reset is blocked due to SOL/IDER session.\n");
562 /* Determine if we have to control management hardware */
563 adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
568 /* APME bit in EEPROM is mapped to WUC.APME */
569 eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC) & E1000_WUC_APME;
571 adapter->wol = E1000_WUFC_MAG;
573 /* Register for VLAN events */
574 adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
575 igb_register_vlan, adapter, EVENTHANDLER_PRI_FIRST);
576 adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
577 igb_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
579 igb_add_hw_stats(adapter);
581 /* Tell the stack that the interface is not active */
582 adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
584 adapter->led_dev = led_create(igb_led_func, adapter,
585 device_get_nameunit(dev));
587 INIT_DEBUGOUT("igb_attach: end");
592 igb_free_transmit_structures(adapter);
593 igb_free_receive_structures(adapter);
594 igb_release_hw_control(adapter);
596 igb_free_pci_resources(adapter);
597 IGB_CORE_LOCK_DESTROY(adapter);
602 /*********************************************************************
603 * Device removal routine
605 * The detach entry point is called when the driver is being removed.
606 * This routine stops the adapter and deallocates all the resources
607 * that were allocated for driver operation.
609 * return 0 on success, positive on failure
610 *********************************************************************/
613 igb_detach(device_t dev)
615 struct adapter *adapter = device_get_softc(dev);
616 struct ifnet *ifp = adapter->ifp;
618 INIT_DEBUGOUT("igb_detach: begin");
620 /* Make sure VLANS are not using driver */
621 if (adapter->ifp->if_vlantrunk != NULL) {
622 device_printf(dev,"Vlan in use, detach first\n");
626 if (adapter->led_dev != NULL)
627 led_destroy(adapter->led_dev);
629 #ifdef DEVICE_POLLING
630 if (ifp->if_capenable & IFCAP_POLLING)
631 ether_poll_deregister(ifp);
634 IGB_CORE_LOCK(adapter);
635 adapter->in_detach = 1;
637 IGB_CORE_UNLOCK(adapter);
639 e1000_phy_hw_reset(&adapter->hw);
641 /* Give control back to firmware */
642 igb_release_manageability(adapter);
643 igb_release_hw_control(adapter);
646 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
647 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
648 igb_enable_wakeup(dev);
651 /* Unregister VLAN events */
652 if (adapter->vlan_attach != NULL)
653 EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
654 if (adapter->vlan_detach != NULL)
655 EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
657 ether_ifdetach(adapter->ifp);
659 callout_drain(&adapter->timer);
661 igb_free_pci_resources(adapter);
662 bus_generic_detach(dev);
665 igb_free_transmit_structures(adapter);
666 igb_free_receive_structures(adapter);
668 IGB_CORE_LOCK_DESTROY(adapter);
673 /*********************************************************************
675 * Shutdown entry point
677 **********************************************************************/
680 igb_shutdown(device_t dev)
682 return igb_suspend(dev);
686 * Suspend/resume device methods.
689 igb_suspend(device_t dev)
691 struct adapter *adapter = device_get_softc(dev);
693 IGB_CORE_LOCK(adapter);
697 igb_release_manageability(adapter);
698 igb_release_hw_control(adapter);
701 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
702 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
703 igb_enable_wakeup(dev);
706 IGB_CORE_UNLOCK(adapter);
708 return bus_generic_suspend(dev);
712 igb_resume(device_t dev)
714 struct adapter *adapter = device_get_softc(dev);
715 struct ifnet *ifp = adapter->ifp;
717 IGB_CORE_LOCK(adapter);
718 igb_init_locked(adapter);
719 igb_init_manageability(adapter);
721 if ((ifp->if_flags & IFF_UP) &&
722 (ifp->if_drv_flags & IFF_DRV_RUNNING))
725 IGB_CORE_UNLOCK(adapter);
727 return bus_generic_resume(dev);
731 /*********************************************************************
732 * Transmit entry point
734 * igb_start is called by the stack to initiate a transmit.
735 * The driver will remain in this routine as long as there are
736 * packets to transmit and transmit resources are available.
737 * In case resources are not available stack is notified and
738 * the packet is requeued.
739 **********************************************************************/
742 igb_start_locked(struct tx_ring *txr, struct ifnet *ifp)
744 struct adapter *adapter = ifp->if_softc;
747 IGB_TX_LOCK_ASSERT(txr);
749 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
752 if (!adapter->link_active)
755 /* Call cleanup if number of TX descriptors low */
756 if (txr->tx_avail <= IGB_TX_CLEANUP_THRESHOLD)
759 while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
760 if (txr->tx_avail <= IGB_TX_OP_THRESHOLD) {
761 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
764 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
768 * Encapsulation can modify our pointer, and or make it
769 * NULL on failure. In that event, we can't requeue.
771 if (igb_xmit(txr, &m_head)) {
774 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
775 IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
779 /* Send a copy of the frame to the BPF listener */
780 ETHER_BPF_MTAP(ifp, m_head);
782 /* Set watchdog on */
783 txr->watchdog_time = ticks;
784 txr->watchdog_check = TRUE;
789 * Legacy TX driver routine, called from the
790 * stack, always uses tx[0], and spins for it.
791 * Should not be used with multiqueue tx
794 igb_start(struct ifnet *ifp)
796 struct adapter *adapter = ifp->if_softc;
797 struct tx_ring *txr = adapter->tx_rings;
799 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
801 igb_start_locked(txr, ifp);
807 #if __FreeBSD_version >= 800000
809 ** Multiqueue Transmit driver
813 igb_mq_start(struct ifnet *ifp, struct mbuf *m)
815 struct adapter *adapter = ifp->if_softc;
816 struct igb_queue *que;
820 /* Which queue to use */
821 if ((m->m_flags & M_FLOWID) != 0)
822 i = m->m_pkthdr.flowid % adapter->num_queues;
824 txr = &adapter->tx_rings[i];
825 que = &adapter->queues[i];
827 if (IGB_TX_TRYLOCK(txr)) {
828 err = igb_mq_start_locked(ifp, txr, m);
831 err = drbr_enqueue(ifp, txr->br, m);
832 taskqueue_enqueue(que->tq, &que->que_task);
839 igb_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m)
841 struct adapter *adapter = txr->adapter;
845 IGB_TX_LOCK_ASSERT(txr);
847 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
848 IFF_DRV_RUNNING || adapter->link_active == 0) {
850 err = drbr_enqueue(ifp, txr->br, m);
854 /* Call cleanup if number of TX descriptors low */
855 if (txr->tx_avail <= IGB_TX_CLEANUP_THRESHOLD)
860 next = drbr_dequeue(ifp, txr->br);
861 } else if (drbr_needs_enqueue(ifp, txr->br)) {
862 if ((err = drbr_enqueue(ifp, txr->br, m)) != 0)
864 next = drbr_dequeue(ifp, txr->br);
868 /* Process the queue */
869 while (next != NULL) {
870 if ((err = igb_xmit(txr, &next)) != 0) {
872 err = drbr_enqueue(ifp, txr->br, next);
876 drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
877 ETHER_BPF_MTAP(ifp, next);
878 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
880 if (txr->tx_avail <= IGB_TX_OP_THRESHOLD) {
881 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
884 next = drbr_dequeue(ifp, txr->br);
887 /* Set the watchdog */
888 txr->watchdog_check = TRUE;
889 txr->watchdog_time = ticks;
895 ** Flush all ring buffers
898 igb_qflush(struct ifnet *ifp)
900 struct adapter *adapter = ifp->if_softc;
901 struct tx_ring *txr = adapter->tx_rings;
904 for (int i = 0; i < adapter->num_queues; i++, txr++) {
906 while ((m = buf_ring_dequeue_sc(txr->br)) != NULL)
912 #endif /* __FreeBSD_version >= 800000 */
914 /*********************************************************************
917 * igb_ioctl is called when the user wants to configure the
920 * return 0 on success, positive on failure
921 **********************************************************************/
924 igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
926 struct adapter *adapter = ifp->if_softc;
927 struct ifreq *ifr = (struct ifreq *)data;
929 struct ifaddr *ifa = (struct ifaddr *)data;
933 if (adapter->in_detach)
939 if (ifa->ifa_addr->sa_family == AF_INET) {
942 * Since resetting hardware takes a very long time
943 * and results in link renegotiation we only
944 * initialize the hardware only when it is absolutely
947 ifp->if_flags |= IFF_UP;
948 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
949 IGB_CORE_LOCK(adapter);
950 igb_init_locked(adapter);
951 IGB_CORE_UNLOCK(adapter);
953 if (!(ifp->if_flags & IFF_NOARP))
954 arp_ifinit(ifp, ifa);
957 error = ether_ioctl(ifp, command, data);
963 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
965 IGB_CORE_LOCK(adapter);
966 max_frame_size = 9234;
967 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN -
969 IGB_CORE_UNLOCK(adapter);
974 ifp->if_mtu = ifr->ifr_mtu;
975 adapter->max_frame_size =
976 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
977 igb_init_locked(adapter);
978 IGB_CORE_UNLOCK(adapter);
982 IOCTL_DEBUGOUT("ioctl rcv'd:\
983 SIOCSIFFLAGS (Set Interface Flags)");
984 IGB_CORE_LOCK(adapter);
985 if (ifp->if_flags & IFF_UP) {
986 if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) {
987 if ((ifp->if_flags ^ adapter->if_flags) &
988 (IFF_PROMISC | IFF_ALLMULTI)) {
989 igb_disable_promisc(adapter);
990 igb_set_promisc(adapter);
993 igb_init_locked(adapter);
995 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
997 adapter->if_flags = ifp->if_flags;
998 IGB_CORE_UNLOCK(adapter);
1002 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
1003 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1004 IGB_CORE_LOCK(adapter);
1005 igb_disable_intr(adapter);
1006 igb_set_multi(adapter);
1007 #ifdef DEVICE_POLLING
1008 if (!(ifp->if_capenable & IFCAP_POLLING))
1010 igb_enable_intr(adapter);
1011 IGB_CORE_UNLOCK(adapter);
1015 /* Check SOL/IDER usage */
1016 IGB_CORE_LOCK(adapter);
1017 if (e1000_check_reset_block(&adapter->hw)) {
1018 IGB_CORE_UNLOCK(adapter);
1019 device_printf(adapter->dev, "Media change is"
1020 " blocked due to SOL/IDER session.\n");
1023 IGB_CORE_UNLOCK(adapter);
1025 IOCTL_DEBUGOUT("ioctl rcv'd: \
1026 SIOCxIFMEDIA (Get/Set Interface Media)");
1027 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
1033 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
1035 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
1036 #ifdef DEVICE_POLLING
1037 if (mask & IFCAP_POLLING) {
1038 if (ifr->ifr_reqcap & IFCAP_POLLING) {
1039 error = ether_poll_register(igb_poll, ifp);
1042 IGB_CORE_LOCK(adapter);
1043 igb_disable_intr(adapter);
1044 ifp->if_capenable |= IFCAP_POLLING;
1045 IGB_CORE_UNLOCK(adapter);
1047 error = ether_poll_deregister(ifp);
1048 /* Enable interrupt even in error case */
1049 IGB_CORE_LOCK(adapter);
1050 igb_enable_intr(adapter);
1051 ifp->if_capenable &= ~IFCAP_POLLING;
1052 IGB_CORE_UNLOCK(adapter);
1056 if (mask & IFCAP_HWCSUM) {
1057 ifp->if_capenable ^= IFCAP_HWCSUM;
1060 if (mask & IFCAP_TSO4) {
1061 ifp->if_capenable ^= IFCAP_TSO4;
1064 if (mask & IFCAP_VLAN_HWTAGGING) {
1065 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
1068 if (mask & IFCAP_VLAN_HWFILTER) {
1069 ifp->if_capenable ^= IFCAP_VLAN_HWFILTER;
1072 if (mask & IFCAP_LRO) {
1073 ifp->if_capenable ^= IFCAP_LRO;
1076 if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING))
1078 VLAN_CAPABILITIES(ifp);
1083 error = ether_ioctl(ifp, command, data);
1091 /*********************************************************************
1094 * This routine is used in two ways. It is used by the stack as
1095 * init entry point in network interface structure. It is also used
1096 * by the driver as a hw/sw initialization routine to get to a
1099 * return 0 on success, positive on failure
1100 **********************************************************************/
1103 igb_init_locked(struct adapter *adapter)
1105 struct ifnet *ifp = adapter->ifp;
1106 device_t dev = adapter->dev;
1108 INIT_DEBUGOUT("igb_init: begin");
1110 IGB_CORE_LOCK_ASSERT(adapter);
1112 igb_disable_intr(adapter);
1113 callout_stop(&adapter->timer);
1115 /* Get the latest mac address, User can use a LAA */
1116 bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr,
1119 /* Put the address into the Receive Address Array */
1120 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
1123 igb_update_link_status(adapter);
1125 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
1127 /* Use real VLAN Filter support? */
1128 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
1129 if (ifp->if_capenable & IFCAP_VLAN_HWFILTER)
1130 /* Use real VLAN Filter support */
1131 igb_setup_vlan_hw_support(adapter);
1134 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
1135 ctrl |= E1000_CTRL_VME;
1136 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
1140 /* Set hardware offload abilities */
1141 ifp->if_hwassist = 0;
1142 if (ifp->if_capenable & IFCAP_TXCSUM) {
1143 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
1144 #if __FreeBSD_version >= 800000
1145 if (adapter->hw.mac.type == e1000_82576)
1146 ifp->if_hwassist |= CSUM_SCTP;
1150 if (ifp->if_capenable & IFCAP_TSO4)
1151 ifp->if_hwassist |= CSUM_TSO;
1153 /* Configure for OS presence */
1154 igb_init_manageability(adapter);
1156 /* Prepare transmit descriptors and buffers */
1157 igb_setup_transmit_structures(adapter);
1158 igb_initialize_transmit_units(adapter);
1160 /* Setup Multicast table */
1161 igb_set_multi(adapter);
1164 ** Figure out the desired mbuf pool
1165 ** for doing jumbo/packetsplit
1167 if (ifp->if_mtu > ETHERMTU)
1168 adapter->rx_mbuf_sz = MJUMPAGESIZE;
1170 adapter->rx_mbuf_sz = MCLBYTES;
1172 /* Prepare receive descriptors and buffers */
1173 if (igb_setup_receive_structures(adapter)) {
1174 device_printf(dev, "Could not setup receive structures\n");
1177 igb_initialize_receive_units(adapter);
1179 /* Don't lose promiscuous settings */
1180 igb_set_promisc(adapter);
1182 ifp->if_drv_flags |= IFF_DRV_RUNNING;
1183 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
1185 callout_reset(&adapter->timer, hz, igb_local_timer, adapter);
1186 e1000_clear_hw_cntrs_base_generic(&adapter->hw);
1188 if (adapter->msix > 1) /* Set up queue routing */
1189 igb_configure_queues(adapter);
1191 /* Set up VLAN tag offload and filter */
1192 igb_setup_vlan_hw_support(adapter);
1194 /* this clears any pending interrupts */
1195 E1000_READ_REG(&adapter->hw, E1000_ICR);
1196 #ifdef DEVICE_POLLING
1198 * Only enable interrupts if we are not polling, make sure
1199 * they are off otherwise.
1201 if (ifp->if_capenable & IFCAP_POLLING)
1202 igb_disable_intr(adapter);
1204 #endif /* DEVICE_POLLING */
1206 igb_enable_intr(adapter);
1207 E1000_WRITE_REG(&adapter->hw, E1000_ICS, E1000_ICS_LSC);
1210 /* Don't reset the phy next time init gets called */
1211 adapter->hw.phy.reset_disable = TRUE;
1217 struct adapter *adapter = arg;
1219 IGB_CORE_LOCK(adapter);
1220 igb_init_locked(adapter);
1221 IGB_CORE_UNLOCK(adapter);
1226 igb_handle_que(void *context, int pending)
1228 struct igb_queue *que = context;
1229 struct adapter *adapter = que->adapter;
1230 struct tx_ring *txr = que->txr;
1231 struct ifnet *ifp = adapter->ifp;
1233 if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
1236 more = igb_rxeof(que, -1, NULL);
1241 #if __FreeBSD_version >= 800000
1242 if (!drbr_empty(ifp, txr->br))
1243 igb_mq_start_locked(ifp, txr, NULL);
1245 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
1246 igb_start_locked(txr, ifp);
1250 taskqueue_enqueue(que->tq, &que->que_task);
1255 #ifdef DEVICE_POLLING
1256 if (ifp->if_capenable & IFCAP_POLLING)
1259 /* Reenable this interrupt */
1261 E1000_WRITE_REG(&adapter->hw, E1000_EIMS, que->eims);
1263 igb_enable_intr(adapter);
1266 /* Deal with link in a sleepable context */
1268 igb_handle_link(void *context, int pending)
1270 struct adapter *adapter = context;
1272 adapter->hw.mac.get_link_status = 1;
1273 igb_update_link_status(adapter);
1276 /*********************************************************************
1278 * MSI/Legacy Deferred
1279 * Interrupt Service routine
1281 *********************************************************************/
1283 igb_irq_fast(void *arg)
1285 struct adapter *adapter = arg;
1286 struct igb_queue *que = adapter->queues;
1290 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1293 if (reg_icr == 0xffffffff)
1294 return FILTER_STRAY;
1296 /* Definitely not our interrupt. */
1298 return FILTER_STRAY;
1300 if ((reg_icr & E1000_ICR_INT_ASSERTED) == 0)
1301 return FILTER_STRAY;
1304 * Mask interrupts until the taskqueue is finished running. This is
1305 * cheap, just assume that it is needed. This also works around the
1306 * MSI message reordering errata on certain systems.
1308 igb_disable_intr(adapter);
1309 taskqueue_enqueue(que->tq, &que->que_task);
1311 /* Link status change */
1312 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))
1313 taskqueue_enqueue(que->tq, &adapter->link_task);
1315 if (reg_icr & E1000_ICR_RXO)
1316 adapter->rx_overruns++;
1317 return FILTER_HANDLED;
1320 #ifdef DEVICE_POLLING
1321 /*********************************************************************
1323 * Legacy polling routine : if using this code you MUST be sure that
1324 * multiqueue is not defined, ie, set igb_num_queues to 1.
1326 *********************************************************************/
1327 #if __FreeBSD_version >= 800000
1328 #define POLL_RETURN_COUNT(a) (a)
1331 #define POLL_RETURN_COUNT(a)
1334 igb_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
1336 struct adapter *adapter = ifp->if_softc;
1337 struct igb_queue *que = adapter->queues;
1338 struct tx_ring *txr = adapter->tx_rings;
1339 u32 reg_icr, rx_done = 0;
1340 u32 loop = IGB_MAX_LOOP;
1343 IGB_CORE_LOCK(adapter);
1344 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
1345 IGB_CORE_UNLOCK(adapter);
1346 return POLL_RETURN_COUNT(rx_done);
1349 if (cmd == POLL_AND_CHECK_STATUS) {
1350 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1351 /* Link status change */
1352 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))
1353 igb_handle_link(adapter, 0);
1355 if (reg_icr & E1000_ICR_RXO)
1356 adapter->rx_overruns++;
1358 IGB_CORE_UNLOCK(adapter);
1360 igb_rxeof(que, count, &rx_done);
1364 more = igb_txeof(txr);
1365 } while (loop-- && more);
1366 #if __FreeBSD_version >= 800000
1367 if (!drbr_empty(ifp, txr->br))
1368 igb_mq_start_locked(ifp, txr, NULL);
1370 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
1371 igb_start_locked(txr, ifp);
1374 return POLL_RETURN_COUNT(rx_done);
1376 #endif /* DEVICE_POLLING */
1378 /*********************************************************************
1380 * MSIX TX Interrupt Service routine
1382 **********************************************************************/
1384 igb_msix_que(void *arg)
1386 struct igb_queue *que = arg;
1387 struct adapter *adapter = que->adapter;
1388 struct tx_ring *txr = que->txr;
1389 struct rx_ring *rxr = que->rxr;
1391 bool more_tx, more_rx;
1393 E1000_WRITE_REG(&adapter->hw, E1000_EIMC, que->eims);
1397 more_tx = igb_txeof(txr);
1400 more_rx = igb_rxeof(que, adapter->rx_process_limit, NULL);
1402 if (igb_enable_aim == FALSE)
1405 ** Do Adaptive Interrupt Moderation:
1406 ** - Write out last calculated setting
1407 ** - Calculate based on average size over
1408 ** the last interval.
1410 if (que->eitr_setting)
1411 E1000_WRITE_REG(&adapter->hw,
1412 E1000_EITR(que->msix), que->eitr_setting);
1414 que->eitr_setting = 0;
1416 /* Idle, do nothing */
1417 if ((txr->bytes == 0) && (rxr->bytes == 0))
1420 /* Used half Default if sub-gig */
1421 if (adapter->link_speed != 1000)
1422 newitr = IGB_DEFAULT_ITR / 2;
1424 if ((txr->bytes) && (txr->packets))
1425 newitr = txr->bytes/txr->packets;
1426 if ((rxr->bytes) && (rxr->packets))
1427 newitr = max(newitr,
1428 (rxr->bytes / rxr->packets));
1429 newitr += 24; /* account for hardware frame, crc */
1430 /* set an upper boundary */
1431 newitr = min(newitr, 3000);
1432 /* Be nice to the mid range */
1433 if ((newitr > 300) && (newitr < 1200))
1434 newitr = (newitr / 3);
1436 newitr = (newitr / 2);
1438 newitr &= 0x7FFC; /* Mask invalid bits */
1439 if (adapter->hw.mac.type == e1000_82575)
1440 newitr |= newitr << 16;
1442 newitr |= E1000_EITR_CNT_IGNR;
1444 /* save for next interrupt */
1445 que->eitr_setting = newitr;
1454 /* Schedule a clean task if needed*/
1455 if (more_tx || more_rx)
1456 taskqueue_enqueue(que->tq, &que->que_task);
1458 /* Reenable this interrupt */
1459 E1000_WRITE_REG(&adapter->hw, E1000_EIMS, que->eims);
1464 /*********************************************************************
1466 * MSIX Link Interrupt Service routine
1468 **********************************************************************/
1471 igb_msix_link(void *arg)
1473 struct adapter *adapter = arg;
1476 ++adapter->link_irq;
1477 icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1478 if (!(icr & E1000_ICR_LSC))
1480 igb_handle_link(adapter, 0);
1484 E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC);
1485 E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask);
1490 /*********************************************************************
1492 * Media Ioctl callback
1494 * This routine is called whenever the user queries the status of
1495 * the interface using ifconfig.
1497 **********************************************************************/
1499 igb_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
1501 struct adapter *adapter = ifp->if_softc;
1502 u_char fiber_type = IFM_1000_SX;
1504 INIT_DEBUGOUT("igb_media_status: begin");
1506 IGB_CORE_LOCK(adapter);
1507 igb_update_link_status(adapter);
1509 ifmr->ifm_status = IFM_AVALID;
1510 ifmr->ifm_active = IFM_ETHER;
1512 if (!adapter->link_active) {
1513 IGB_CORE_UNLOCK(adapter);
1517 ifmr->ifm_status |= IFM_ACTIVE;
1519 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
1520 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes))
1521 ifmr->ifm_active |= fiber_type | IFM_FDX;
1523 switch (adapter->link_speed) {
1525 ifmr->ifm_active |= IFM_10_T;
1528 ifmr->ifm_active |= IFM_100_TX;
1531 ifmr->ifm_active |= IFM_1000_T;
1534 if (adapter->link_duplex == FULL_DUPLEX)
1535 ifmr->ifm_active |= IFM_FDX;
1537 ifmr->ifm_active |= IFM_HDX;
1539 IGB_CORE_UNLOCK(adapter);
1542 /*********************************************************************
1544 * Media Ioctl callback
1546 * This routine is called when the user changes speed/duplex using
1547 * media/mediopt option with ifconfig.
1549 **********************************************************************/
1551 igb_media_change(struct ifnet *ifp)
1553 struct adapter *adapter = ifp->if_softc;
1554 struct ifmedia *ifm = &adapter->media;
1556 INIT_DEBUGOUT("igb_media_change: begin");
1558 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1561 IGB_CORE_LOCK(adapter);
1562 switch (IFM_SUBTYPE(ifm->ifm_media)) {
1564 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1565 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
1570 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1571 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
1574 adapter->hw.mac.autoneg = FALSE;
1575 adapter->hw.phy.autoneg_advertised = 0;
1576 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1577 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
1579 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
1582 adapter->hw.mac.autoneg = FALSE;
1583 adapter->hw.phy.autoneg_advertised = 0;
1584 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1585 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
1587 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
1590 device_printf(adapter->dev, "Unsupported media type\n");
1593 /* As the speed/duplex settings my have changed we need to
1596 adapter->hw.phy.reset_disable = FALSE;
1598 igb_init_locked(adapter);
1599 IGB_CORE_UNLOCK(adapter);
1605 /*********************************************************************
1607 * This routine maps the mbufs to Advanced TX descriptors.
1608 * used by the 82575 adapter.
1610 **********************************************************************/
1613 igb_xmit(struct tx_ring *txr, struct mbuf **m_headp)
1615 struct adapter *adapter = txr->adapter;
1616 bus_dma_segment_t segs[IGB_MAX_SCATTER];
1618 struct igb_tx_buffer *tx_buffer, *tx_buffer_mapped;
1619 union e1000_adv_tx_desc *txd = NULL;
1620 struct mbuf *m_head;
1621 u32 olinfo_status = 0, cmd_type_len = 0;
1622 int nsegs, i, j, error, first, last = 0;
1628 /* Set basic descriptor constants */
1629 cmd_type_len |= E1000_ADVTXD_DTYP_DATA;
1630 cmd_type_len |= E1000_ADVTXD_DCMD_IFCS | E1000_ADVTXD_DCMD_DEXT;
1631 if (m_head->m_flags & M_VLANTAG)
1632 cmd_type_len |= E1000_ADVTXD_DCMD_VLE;
1635 * Force a cleanup if number of TX descriptors
1636 * available hits the threshold
1638 if (txr->tx_avail <= IGB_TX_CLEANUP_THRESHOLD) {
1640 /* Now do we at least have a minimal? */
1641 if (txr->tx_avail <= IGB_TX_OP_THRESHOLD) {
1642 txr->no_desc_avail++;
1648 * Map the packet for DMA.
1650 * Capture the first descriptor index,
1651 * this descriptor will have the index
1652 * of the EOP which is the only one that
1653 * now gets a DONE bit writeback.
1655 first = txr->next_avail_desc;
1656 tx_buffer = &txr->tx_buffers[first];
1657 tx_buffer_mapped = tx_buffer;
1658 map = tx_buffer->map;
1660 error = bus_dmamap_load_mbuf_sg(txr->txtag, map,
1661 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
1663 if (error == EFBIG) {
1666 m = m_defrag(*m_headp, M_DONTWAIT);
1668 adapter->mbuf_defrag_failed++;
1676 error = bus_dmamap_load_mbuf_sg(txr->txtag, map,
1677 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
1679 if (error == ENOMEM) {
1680 adapter->no_tx_dma_setup++;
1682 } else if (error != 0) {
1683 adapter->no_tx_dma_setup++;
1688 } else if (error == ENOMEM) {
1689 adapter->no_tx_dma_setup++;
1691 } else if (error != 0) {
1692 adapter->no_tx_dma_setup++;
1698 /* Check again to be sure we have enough descriptors */
1699 if (nsegs > (txr->tx_avail - 2)) {
1700 txr->no_desc_avail++;
1701 bus_dmamap_unload(txr->txtag, map);
1707 * Set up the context descriptor:
1708 * used when any hardware offload is done.
1709 * This includes CSUM, VLAN, and TSO. It
1710 * will use the first descriptor.
1712 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
1713 if (igb_tso_setup(txr, m_head, &hdrlen)) {
1714 cmd_type_len |= E1000_ADVTXD_DCMD_TSE;
1715 olinfo_status |= E1000_TXD_POPTS_IXSM << 8;
1716 olinfo_status |= E1000_TXD_POPTS_TXSM << 8;
1719 } else if (igb_tx_ctx_setup(txr, m_head))
1720 olinfo_status |= E1000_TXD_POPTS_TXSM << 8;
1722 /* Calculate payload length */
1723 olinfo_status |= ((m_head->m_pkthdr.len - hdrlen)
1724 << E1000_ADVTXD_PAYLEN_SHIFT);
1726 /* 82575 needs the queue index added */
1727 if (adapter->hw.mac.type == e1000_82575)
1728 olinfo_status |= txr->me << 4;
1730 /* Set up our transmit descriptors */
1731 i = txr->next_avail_desc;
1732 for (j = 0; j < nsegs; j++) {
1734 bus_addr_t seg_addr;
1736 tx_buffer = &txr->tx_buffers[i];
1737 txd = (union e1000_adv_tx_desc *)&txr->tx_base[i];
1738 seg_addr = segs[j].ds_addr;
1739 seg_len = segs[j].ds_len;
1741 txd->read.buffer_addr = htole64(seg_addr);
1742 txd->read.cmd_type_len = htole32(cmd_type_len | seg_len);
1743 txd->read.olinfo_status = htole32(olinfo_status);
1745 if (++i == adapter->num_tx_desc)
1747 tx_buffer->m_head = NULL;
1748 tx_buffer->next_eop = -1;
1751 txr->next_avail_desc = i;
1752 txr->tx_avail -= nsegs;
1754 tx_buffer->m_head = m_head;
1755 tx_buffer_mapped->map = tx_buffer->map;
1756 tx_buffer->map = map;
1757 bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE);
1760 * Last Descriptor of Packet
1761 * needs End Of Packet (EOP)
1762 * and Report Status (RS)
1764 txd->read.cmd_type_len |=
1765 htole32(E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_RS);
1767 * Keep track in the first buffer which
1768 * descriptor will be written back
1770 tx_buffer = &txr->tx_buffers[first];
1771 tx_buffer->next_eop = last;
1772 txr->watchdog_time = ticks;
1775 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000
1776 * that this frame is available to transmit.
1778 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
1779 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
1780 E1000_WRITE_REG(&adapter->hw, E1000_TDT(txr->me), i);
1788 igb_set_promisc(struct adapter *adapter)
1790 struct ifnet *ifp = adapter->ifp;
1793 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
1795 if (ifp->if_flags & IFF_PROMISC) {
1796 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1797 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
1798 } else if (ifp->if_flags & IFF_ALLMULTI) {
1799 reg_rctl |= E1000_RCTL_MPE;
1800 reg_rctl &= ~E1000_RCTL_UPE;
1801 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
1806 igb_disable_promisc(struct adapter *adapter)
1810 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
1812 reg_rctl &= (~E1000_RCTL_UPE);
1813 reg_rctl &= (~E1000_RCTL_MPE);
1814 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
1818 /*********************************************************************
1821 * This routine is called whenever multicast address list is updated.
1823 **********************************************************************/
1826 igb_set_multi(struct adapter *adapter)
1828 struct ifnet *ifp = adapter->ifp;
1829 struct ifmultiaddr *ifma;
1831 u8 mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_ADDR_LEN];
1835 IOCTL_DEBUGOUT("igb_set_multi: begin");
1837 #if __FreeBSD_version < 800000
1840 if_maddr_rlock(ifp);
1842 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1843 if (ifma->ifma_addr->sa_family != AF_LINK)
1846 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
1849 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
1850 &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN);
1853 #if __FreeBSD_version < 800000
1854 IF_ADDR_UNLOCK(ifp);
1856 if_maddr_runlock(ifp);
1859 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
1860 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
1861 reg_rctl |= E1000_RCTL_MPE;
1862 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
1864 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt);
1868 /*********************************************************************
1870 * This routine checks for link status,
1871 * updates statistics, and does the watchdog.
1873 **********************************************************************/
1876 igb_local_timer(void *arg)
1878 struct adapter *adapter = arg;
1879 device_t dev = adapter->dev;
1880 struct tx_ring *txr = adapter->tx_rings;
1883 IGB_CORE_LOCK_ASSERT(adapter);
1885 igb_update_link_status(adapter);
1886 igb_update_stats_counters(adapter);
1889 ** Watchdog: check for time since any descriptor was cleaned
1891 for (int i = 0; i < adapter->num_queues; i++, txr++) {
1892 if (txr->watchdog_check == FALSE)
1894 if ((ticks - txr->watchdog_time) > IGB_WATCHDOG)
1898 callout_reset(&adapter->timer, hz, igb_local_timer, adapter);
1902 device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
1903 device_printf(dev,"Queue(%d) tdh = %d, hw tdt = %d\n", txr->me,
1904 E1000_READ_REG(&adapter->hw, E1000_TDH(txr->me)),
1905 E1000_READ_REG(&adapter->hw, E1000_TDT(txr->me)));
1906 device_printf(dev,"TX(%d) desc avail = %d,"
1907 "Next TX to Clean = %d\n",
1908 txr->me, txr->tx_avail, txr->next_to_clean);
1909 adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
1910 adapter->watchdog_events++;
1911 igb_init_locked(adapter);
1915 igb_update_link_status(struct adapter *adapter)
1917 struct e1000_hw *hw = &adapter->hw;
1918 struct ifnet *ifp = adapter->ifp;
1919 device_t dev = adapter->dev;
1920 struct tx_ring *txr = adapter->tx_rings;
1923 /* Get the cached link value or read for real */
1924 switch (hw->phy.media_type) {
1925 case e1000_media_type_copper:
1926 if (hw->mac.get_link_status) {
1927 /* Do the work to read phy */
1928 e1000_check_for_link(hw);
1929 link_check = !hw->mac.get_link_status;
1933 case e1000_media_type_fiber:
1934 e1000_check_for_link(hw);
1935 link_check = (E1000_READ_REG(hw, E1000_STATUS) &
1938 case e1000_media_type_internal_serdes:
1939 e1000_check_for_link(hw);
1940 link_check = adapter->hw.mac.serdes_has_link;
1943 case e1000_media_type_unknown:
1947 /* Now we check if a transition has happened */
1948 if (link_check && (adapter->link_active == 0)) {
1949 e1000_get_speed_and_duplex(&adapter->hw,
1950 &adapter->link_speed, &adapter->link_duplex);
1952 device_printf(dev, "Link is up %d Mbps %s\n",
1953 adapter->link_speed,
1954 ((adapter->link_duplex == FULL_DUPLEX) ?
1955 "Full Duplex" : "Half Duplex"));
1956 adapter->link_active = 1;
1957 ifp->if_baudrate = adapter->link_speed * 1000000;
1958 /* This can sleep */
1959 if_link_state_change(ifp, LINK_STATE_UP);
1960 } else if (!link_check && (adapter->link_active == 1)) {
1961 ifp->if_baudrate = adapter->link_speed = 0;
1962 adapter->link_duplex = 0;
1964 device_printf(dev, "Link is Down\n");
1965 adapter->link_active = 0;
1966 /* This can sleep */
1967 if_link_state_change(ifp, LINK_STATE_DOWN);
1968 /* Turn off watchdogs */
1969 for (int i = 0; i < adapter->num_queues; i++, txr++)
1970 txr->watchdog_check = FALSE;
1974 /*********************************************************************
1976 * This routine disables all traffic on the adapter by issuing a
1977 * global reset on the MAC and deallocates TX/RX buffers.
1979 **********************************************************************/
1984 struct adapter *adapter = arg;
1985 struct ifnet *ifp = adapter->ifp;
1986 struct tx_ring *txr = adapter->tx_rings;
1988 IGB_CORE_LOCK_ASSERT(adapter);
1990 INIT_DEBUGOUT("igb_stop: begin");
1992 igb_disable_intr(adapter);
1994 callout_stop(&adapter->timer);
1996 /* Tell the stack that the interface is no longer active */
1997 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
1999 /* Unarm watchdog timer. */
2000 for (int i = 0; i < adapter->num_queues; i++, txr++) {
2002 txr->watchdog_check = FALSE;
2006 e1000_reset_hw(&adapter->hw);
2007 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0);
2009 e1000_led_off(&adapter->hw);
2010 e1000_cleanup_led(&adapter->hw);
2014 /*********************************************************************
2016 * Determine hardware revision.
2018 **********************************************************************/
2020 igb_identify_hardware(struct adapter *adapter)
2022 device_t dev = adapter->dev;
2024 /* Make sure our PCI config space has the necessary stuff set */
2025 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
2026 if (!((adapter->hw.bus.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
2027 (adapter->hw.bus.pci_cmd_word & PCIM_CMD_MEMEN))) {
2028 device_printf(dev, "Memory Access and/or Bus Master bits "
2030 adapter->hw.bus.pci_cmd_word |=
2031 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
2032 pci_write_config(dev, PCIR_COMMAND,
2033 adapter->hw.bus.pci_cmd_word, 2);
2036 /* Save off the information about this board */
2037 adapter->hw.vendor_id = pci_get_vendor(dev);
2038 adapter->hw.device_id = pci_get_device(dev);
2039 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
2040 adapter->hw.subsystem_vendor_id =
2041 pci_read_config(dev, PCIR_SUBVEND_0, 2);
2042 adapter->hw.subsystem_device_id =
2043 pci_read_config(dev, PCIR_SUBDEV_0, 2);
2045 /* Do Shared Code Init and Setup */
2046 if (e1000_set_mac_type(&adapter->hw)) {
2047 device_printf(dev, "Setup init failure\n");
2053 igb_allocate_pci_resources(struct adapter *adapter)
2055 device_t dev = adapter->dev;
2059 adapter->pci_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
2061 if (adapter->pci_mem == NULL) {
2062 device_printf(dev, "Unable to allocate bus resource: memory\n");
2065 adapter->osdep.mem_bus_space_tag =
2066 rman_get_bustag(adapter->pci_mem);
2067 adapter->osdep.mem_bus_space_handle =
2068 rman_get_bushandle(adapter->pci_mem);
2069 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
2071 adapter->num_queues = 1; /* Defaults for Legacy or MSI */
2073 /* This will setup either MSI/X or MSI */
2074 adapter->msix = igb_setup_msix(adapter);
2075 adapter->hw.back = &adapter->osdep;
2080 /*********************************************************************
2082 * Setup the Legacy or MSI Interrupt handler
2084 **********************************************************************/
2086 igb_allocate_legacy(struct adapter *adapter)
2088 device_t dev = adapter->dev;
2089 struct igb_queue *que = adapter->queues;
2092 /* Turn off all interrupts */
2093 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2096 if (adapter->msix == 1)
2099 /* We allocate a single interrupt resource */
2100 adapter->res = bus_alloc_resource_any(dev,
2101 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2102 if (adapter->res == NULL) {
2103 device_printf(dev, "Unable to allocate bus resource: "
2109 * Try allocating a fast interrupt and the associated deferred
2110 * processing contexts.
2112 TASK_INIT(&que->que_task, 0, igb_handle_que, que);
2113 /* Make tasklet for deferred link handling */
2114 TASK_INIT(&adapter->link_task, 0, igb_handle_link, adapter);
2115 que->tq = taskqueue_create_fast("igb_taskq", M_NOWAIT,
2116 taskqueue_thread_enqueue, &que->tq);
2117 taskqueue_start_threads(&que->tq, 1, PI_NET, "%s taskq",
2118 device_get_nameunit(adapter->dev));
2119 if ((error = bus_setup_intr(dev, adapter->res,
2120 INTR_TYPE_NET | INTR_MPSAFE, igb_irq_fast, NULL,
2121 adapter, &adapter->tag)) != 0) {
2122 device_printf(dev, "Failed to register fast interrupt "
2123 "handler: %d\n", error);
2124 taskqueue_free(que->tq);
2133 /*********************************************************************
2135 * Setup the MSIX Queue Interrupt handlers:
2137 **********************************************************************/
2139 igb_allocate_msix(struct adapter *adapter)
2141 device_t dev = adapter->dev;
2142 struct igb_queue *que = adapter->queues;
2143 int error, rid, vector = 0;
2146 for (int i = 0; i < adapter->num_queues; i++, vector++, que++) {
2148 que->res = bus_alloc_resource_any(dev,
2149 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2150 if (que->res == NULL) {
2152 "Unable to allocate bus resource: "
2153 "MSIX Queue Interrupt\n");
2156 error = bus_setup_intr(dev, que->res,
2157 INTR_TYPE_NET | INTR_MPSAFE, NULL,
2158 igb_msix_que, que, &que->tag);
2161 device_printf(dev, "Failed to register Queue handler");
2164 #if __FreeBSD_version >= 800504
2165 bus_describe_intr(dev, que->res, que->tag, "que %d", i);
2168 if (adapter->hw.mac.type == e1000_82575)
2169 que->eims = E1000_EICR_TX_QUEUE0 << i;
2171 que->eims = 1 << vector;
2173 ** Bind the msix vector, and thus the
2174 ** rings to the corresponding cpu.
2176 if (adapter->num_queues > 1)
2177 bus_bind_intr(dev, que->res, i);
2178 /* Make tasklet for deferred handling */
2179 TASK_INIT(&que->que_task, 0, igb_handle_que, que);
2180 que->tq = taskqueue_create_fast("igb_que", M_NOWAIT,
2181 taskqueue_thread_enqueue, &que->tq);
2182 taskqueue_start_threads(&que->tq, 1, PI_NET, "%s que",
2183 device_get_nameunit(adapter->dev));
2188 adapter->res = bus_alloc_resource_any(dev,
2189 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2190 if (adapter->res == NULL) {
2192 "Unable to allocate bus resource: "
2193 "MSIX Link Interrupt\n");
2196 if ((error = bus_setup_intr(dev, adapter->res,
2197 INTR_TYPE_NET | INTR_MPSAFE, NULL,
2198 igb_msix_link, adapter, &adapter->tag)) != 0) {
2199 device_printf(dev, "Failed to register Link handler");
2202 #if __FreeBSD_version >= 800504
2203 bus_describe_intr(dev, adapter->res, adapter->tag, "link");
2205 adapter->linkvec = vector;
2212 igb_configure_queues(struct adapter *adapter)
2214 struct e1000_hw *hw = &adapter->hw;
2215 struct igb_queue *que;
2217 u32 newitr = IGB_DEFAULT_ITR;
2219 /* First turn on RSS capability */
2220 if (adapter->hw.mac.type > e1000_82575)
2221 E1000_WRITE_REG(hw, E1000_GPIE,
2222 E1000_GPIE_MSIX_MODE | E1000_GPIE_EIAME |
2223 E1000_GPIE_PBA | E1000_GPIE_NSICR);
2226 switch (adapter->hw.mac.type) {
2229 for (int i = 0; i < adapter->num_queues; i++) {
2231 ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
2232 que = &adapter->queues[i];
2235 ivar |= (que->msix | E1000_IVAR_VALID) << 16;
2238 ivar |= que->msix | E1000_IVAR_VALID;
2240 E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
2243 for (int i = 0; i < adapter->num_queues; i++) {
2245 ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
2246 que = &adapter->queues[i];
2249 ivar |= (que->msix | E1000_IVAR_VALID) << 24;
2252 ivar |= (que->msix | E1000_IVAR_VALID) << 8;
2254 E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
2255 adapter->eims_mask |= que->eims;
2258 /* And for the link interrupt */
2259 ivar = (adapter->linkvec | E1000_IVAR_VALID) << 8;
2260 adapter->link_mask = 1 << adapter->linkvec;
2261 adapter->eims_mask |= adapter->link_mask;
2262 E1000_WRITE_REG(hw, E1000_IVAR_MISC, ivar);
2266 for (int i = 0; i < adapter->num_queues; i++) {
2267 u32 index = i & 0x7; /* Each IVAR has two entries */
2268 ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
2269 que = &adapter->queues[i];
2272 ivar |= que->msix | E1000_IVAR_VALID;
2275 ivar |= (que->msix | E1000_IVAR_VALID) << 16;
2277 E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
2278 adapter->eims_mask |= que->eims;
2281 for (int i = 0; i < adapter->num_queues; i++) {
2282 u32 index = i & 0x7; /* Each IVAR has two entries */
2283 ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
2284 que = &adapter->queues[i];
2287 ivar |= (que->msix | E1000_IVAR_VALID) << 8;
2290 ivar |= (que->msix | E1000_IVAR_VALID) << 24;
2292 E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
2293 adapter->eims_mask |= que->eims;
2296 /* And for the link interrupt */
2297 ivar = (adapter->linkvec | E1000_IVAR_VALID) << 8;
2298 adapter->link_mask = 1 << adapter->linkvec;
2299 adapter->eims_mask |= adapter->link_mask;
2300 E1000_WRITE_REG(hw, E1000_IVAR_MISC, ivar);
2304 /* enable MSI-X support*/
2305 tmp = E1000_READ_REG(hw, E1000_CTRL_EXT);
2306 tmp |= E1000_CTRL_EXT_PBA_CLR;
2307 /* Auto-Mask interrupts upon ICR read. */
2308 tmp |= E1000_CTRL_EXT_EIAME;
2309 tmp |= E1000_CTRL_EXT_IRCA;
2310 E1000_WRITE_REG(hw, E1000_CTRL_EXT, tmp);
2313 for (int i = 0; i < adapter->num_queues; i++) {
2314 que = &adapter->queues[i];
2315 tmp = E1000_EICR_RX_QUEUE0 << i;
2316 tmp |= E1000_EICR_TX_QUEUE0 << i;
2318 E1000_WRITE_REG_ARRAY(hw, E1000_MSIXBM(0),
2320 adapter->eims_mask |= que->eims;
2324 E1000_WRITE_REG(hw, E1000_MSIXBM(adapter->linkvec),
2326 adapter->link_mask |= E1000_EIMS_OTHER;
2327 adapter->eims_mask |= adapter->link_mask;
2332 /* Set the starting interrupt rate */
2333 if (hw->mac.type == e1000_82575)
2334 newitr |= newitr << 16;
2336 newitr |= E1000_EITR_CNT_IGNR;
2338 for (int i = 0; i < adapter->num_queues; i++) {
2339 que = &adapter->queues[i];
2340 E1000_WRITE_REG(hw, E1000_EITR(que->msix), newitr);
2348 igb_free_pci_resources(struct adapter *adapter)
2350 struct igb_queue *que = adapter->queues;
2351 device_t dev = adapter->dev;
2355 ** There is a slight possibility of a failure mode
2356 ** in attach that will result in entering this function
2357 ** before interrupt resources have been initialized, and
2358 ** in that case we do not want to execute the loops below
2359 ** We can detect this reliably by the state of the adapter
2362 if (adapter->res == NULL)
2366 * First release all the interrupt resources:
2368 for (int i = 0; i < adapter->num_queues; i++, que++) {
2369 rid = que->msix + 1;
2370 if (que->tag != NULL) {
2371 bus_teardown_intr(dev, que->res, que->tag);
2374 if (que->res != NULL)
2375 bus_release_resource(dev,
2376 SYS_RES_IRQ, rid, que->res);
2379 /* Clean the Legacy or Link interrupt last */
2380 if (adapter->linkvec) /* we are doing MSIX */
2381 rid = adapter->linkvec + 1;
2383 (adapter->msix != 0) ? (rid = 1):(rid = 0);
2385 if (adapter->tag != NULL) {
2386 bus_teardown_intr(dev, adapter->res, adapter->tag);
2387 adapter->tag = NULL;
2389 if (adapter->res != NULL)
2390 bus_release_resource(dev, SYS_RES_IRQ, rid, adapter->res);
2394 pci_release_msi(dev);
2396 if (adapter->msix_mem != NULL)
2397 bus_release_resource(dev, SYS_RES_MEMORY,
2398 PCIR_BAR(IGB_MSIX_BAR), adapter->msix_mem);
2400 if (adapter->pci_mem != NULL)
2401 bus_release_resource(dev, SYS_RES_MEMORY,
2402 PCIR_BAR(0), adapter->pci_mem);
2407 * Setup Either MSI/X or MSI
2410 igb_setup_msix(struct adapter *adapter)
2412 device_t dev = adapter->dev;
2413 int rid, want, queues, msgs;
2415 /* tuneable override */
2416 if (igb_enable_msix == 0)
2419 /* First try MSI/X */
2420 rid = PCIR_BAR(IGB_MSIX_BAR);
2421 adapter->msix_mem = bus_alloc_resource_any(dev,
2422 SYS_RES_MEMORY, &rid, RF_ACTIVE);
2423 if (!adapter->msix_mem) {
2424 /* May not be enabled */
2425 device_printf(adapter->dev,
2426 "Unable to map MSIX table \n");
2430 msgs = pci_msix_count(dev);
2431 if (msgs == 0) { /* system has msix disabled */
2432 bus_release_resource(dev, SYS_RES_MEMORY,
2433 PCIR_BAR(IGB_MSIX_BAR), adapter->msix_mem);
2434 adapter->msix_mem = NULL;
2438 /* Figure out a reasonable auto config value */
2439 queues = (mp_ncpus > (msgs-1)) ? (msgs-1) : mp_ncpus;
2441 /* Manual override */
2442 if (igb_num_queues != 0)
2443 queues = igb_num_queues;
2445 /* Can have max of 4 queues on 82575 */
2446 if ((adapter->hw.mac.type == e1000_82575) && (queues > 4))
2450 ** One vector (RX/TX pair) per queue
2451 ** plus an additional for Link interrupt
2457 device_printf(adapter->dev,
2458 "MSIX Configuration Problem, "
2459 "%d vectors configured, but %d queues wanted!\n",
2463 if ((msgs) && pci_alloc_msix(dev, &msgs) == 0) {
2464 device_printf(adapter->dev,
2465 "Using MSIX interrupts with %d vectors\n", msgs);
2466 adapter->num_queues = queues;
2470 msgs = pci_msi_count(dev);
2471 if (msgs == 1 && pci_alloc_msi(dev, &msgs) == 0)
2472 device_printf(adapter->dev,"Using MSI interrupt\n");
2476 /*********************************************************************
2478 * Set up an fresh starting state
2480 **********************************************************************/
2482 igb_reset(struct adapter *adapter)
2484 device_t dev = adapter->dev;
2485 struct e1000_hw *hw = &adapter->hw;
2486 struct e1000_fc_info *fc = &hw->fc;
2487 struct ifnet *ifp = adapter->ifp;
2491 INIT_DEBUGOUT("igb_reset: begin");
2493 /* Let the firmware know the OS is in control */
2494 igb_get_hw_control(adapter);
2497 * Packet Buffer Allocation (PBA)
2498 * Writing PBA sets the receive portion of the buffer
2499 * the remainder is used for the transmit buffer.
2501 switch (hw->mac.type) {
2503 pba = E1000_PBA_32K;
2506 pba = E1000_PBA_64K;
2509 pba = E1000_PBA_35K;
2514 /* Special needs in case of Jumbo frames */
2515 if ((hw->mac.type == e1000_82575) && (ifp->if_mtu > ETHERMTU)) {
2516 u32 tx_space, min_tx, min_rx;
2517 pba = E1000_READ_REG(hw, E1000_PBA);
2518 tx_space = pba >> 16;
2520 min_tx = (adapter->max_frame_size +
2521 sizeof(struct e1000_tx_desc) - ETHERNET_FCS_SIZE) * 2;
2522 min_tx = roundup2(min_tx, 1024);
2524 min_rx = adapter->max_frame_size;
2525 min_rx = roundup2(min_rx, 1024);
2527 if (tx_space < min_tx &&
2528 ((min_tx - tx_space) < pba)) {
2529 pba = pba - (min_tx - tx_space);
2531 * if short on rx space, rx wins
2532 * and must trump tx adjustment
2537 E1000_WRITE_REG(hw, E1000_PBA, pba);
2540 INIT_DEBUGOUT1("igb_init: pba=%dK",pba);
2543 * These parameters control the automatic generation (Tx) and
2544 * response (Rx) to Ethernet PAUSE frames.
2545 * - High water mark should allow for at least two frames to be
2546 * received after sending an XOFF.
2547 * - Low water mark works best when it is very near the high water mark.
2548 * This allows the receiver to restart by sending XON when it has
2551 hwm = min(((pba << 10) * 9 / 10),
2552 ((pba << 10) - 2 * adapter->max_frame_size));
2554 if (hw->mac.type < e1000_82576) {
2555 fc->high_water = hwm & 0xFFF8; /* 8-byte granularity */
2556 fc->low_water = fc->high_water - 8;
2558 fc->high_water = hwm & 0xFFF0; /* 16-byte granularity */
2559 fc->low_water = fc->high_water - 16;
2562 fc->pause_time = IGB_FC_PAUSE_TIME;
2563 fc->send_xon = TRUE;
2565 /* Set Flow control, use the tunable location if sane */
2566 if ((igb_fc_setting >= 0) || (igb_fc_setting < 4))
2567 fc->requested_mode = igb_fc_setting;
2569 fc->requested_mode = e1000_fc_none;
2571 fc->current_mode = fc->requested_mode;
2573 /* Issue a global reset */
2575 E1000_WRITE_REG(hw, E1000_WUC, 0);
2577 if (e1000_init_hw(hw) < 0)
2578 device_printf(dev, "Hardware Initialization Failed\n");
2580 if (hw->mac.type == e1000_82580) {
2583 hwm = (pba << 10) - (2 * adapter->max_frame_size);
2585 * 0x80000000 - enable DMA COAL
2586 * 0x10000000 - use L0s as low power
2587 * 0x20000000 - use L1 as low power
2588 * X << 16 - exit dma coal when rx data exceeds X kB
2589 * Y - upper limit to stay in dma coal in units of 32usecs
2591 E1000_WRITE_REG(hw, E1000_DMACR,
2592 0xA0000006 | ((hwm << 6) & 0x00FF0000));
2594 /* set hwm to PBA - 2 * max frame size */
2595 E1000_WRITE_REG(hw, E1000_FCRTC, hwm);
2597 * This sets the time to wait before requesting transition to
2598 * low power state to number of usecs needed to receive 1 512
2599 * byte frame at gigabit line rate
2601 E1000_WRITE_REG(hw, E1000_DMCTLX, 4);
2603 /* free space in tx packet buffer to wake from DMA coal */
2604 E1000_WRITE_REG(hw, E1000_DMCTXTH,
2605 (20480 - (2 * adapter->max_frame_size)) >> 6);
2607 /* make low power state decision controlled by DMA coal */
2608 reg = E1000_READ_REG(hw, E1000_PCIEMISC);
2609 E1000_WRITE_REG(hw, E1000_PCIEMISC,
2610 reg | E1000_PCIEMISC_LX_DECISION);
2613 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
2614 e1000_get_phy_info(hw);
2615 e1000_check_for_link(hw);
2619 /*********************************************************************
2621 * Setup networking device structure and register an interface.
2623 **********************************************************************/
2625 igb_setup_interface(device_t dev, struct adapter *adapter)
2629 INIT_DEBUGOUT("igb_setup_interface: begin");
2631 ifp = adapter->ifp = if_alloc(IFT_ETHER);
2633 panic("%s: can not if_alloc()", device_get_nameunit(dev));
2634 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
2635 ifp->if_mtu = ETHERMTU;
2636 ifp->if_init = igb_init;
2637 ifp->if_softc = adapter;
2638 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
2639 ifp->if_ioctl = igb_ioctl;
2640 ifp->if_start = igb_start;
2641 #if __FreeBSD_version >= 800000
2642 ifp->if_transmit = igb_mq_start;
2643 ifp->if_qflush = igb_qflush;
2645 IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1);
2646 ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1;
2647 IFQ_SET_READY(&ifp->if_snd);
2649 ether_ifattach(ifp, adapter->hw.mac.addr);
2651 ifp->if_capabilities = ifp->if_capenable = 0;
2653 ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_MTU;
2654 ifp->if_capabilities |= IFCAP_TSO4;
2655 ifp->if_capabilities |= IFCAP_JUMBO_MTU;
2656 if (igb_header_split)
2657 ifp->if_capabilities |= IFCAP_LRO;
2659 ifp->if_capenable = ifp->if_capabilities;
2660 #ifdef DEVICE_POLLING
2661 ifp->if_capabilities |= IFCAP_POLLING;
2665 * Tell the upper layer(s) we
2666 * support full VLAN capability.
2668 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
2669 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
2670 ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
2673 ** Dont turn this on by default, if vlans are
2674 ** created on another pseudo device (eg. lagg)
2675 ** then vlan events are not passed thru, breaking
2676 ** operation, but with HW FILTER off it works. If
2677 ** using vlans directly on the em driver you can
2678 ** enable this and get full hardware tag filtering.
2680 ifp->if_capabilities |= IFCAP_VLAN_HWFILTER;
2683 * Specify the media types supported by this adapter and register
2684 * callbacks to update media and link information
2686 ifmedia_init(&adapter->media, IFM_IMASK,
2687 igb_media_change, igb_media_status);
2688 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
2689 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
2690 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX | IFM_FDX,
2692 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX, 0, NULL);
2694 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
2695 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
2697 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
2699 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
2701 if (adapter->hw.phy.type != e1000_phy_ife) {
2702 ifmedia_add(&adapter->media,
2703 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
2704 ifmedia_add(&adapter->media,
2705 IFM_ETHER | IFM_1000_T, 0, NULL);
2708 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
2709 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
2714 * Manage DMA'able memory.
2717 igb_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
2721 *(bus_addr_t *) arg = segs[0].ds_addr;
2725 igb_dma_malloc(struct adapter *adapter, bus_size_t size,
2726 struct igb_dma_alloc *dma, int mapflags)
2730 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */
2731 IGB_DBA_ALIGN, 0, /* alignment, bounds */
2732 BUS_SPACE_MAXADDR, /* lowaddr */
2733 BUS_SPACE_MAXADDR, /* highaddr */
2734 NULL, NULL, /* filter, filterarg */
2737 size, /* maxsegsize */
2739 NULL, /* lockfunc */
2743 device_printf(adapter->dev,
2744 "%s: bus_dma_tag_create failed: %d\n",
2749 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
2750 BUS_DMA_NOWAIT, &dma->dma_map);
2752 device_printf(adapter->dev,
2753 "%s: bus_dmamem_alloc(%ju) failed: %d\n",
2754 __func__, (uintmax_t)size, error);
2759 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
2760 size, igb_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT);
2761 if (error || dma->dma_paddr == 0) {
2762 device_printf(adapter->dev,
2763 "%s: bus_dmamap_load failed: %d\n",
2771 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
2773 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
2774 bus_dma_tag_destroy(dma->dma_tag);
2776 dma->dma_map = NULL;
2777 dma->dma_tag = NULL;
2783 igb_dma_free(struct adapter *adapter, struct igb_dma_alloc *dma)
2785 if (dma->dma_tag == NULL)
2787 if (dma->dma_map != NULL) {
2788 bus_dmamap_sync(dma->dma_tag, dma->dma_map,
2789 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
2790 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
2791 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
2792 dma->dma_map = NULL;
2794 bus_dma_tag_destroy(dma->dma_tag);
2795 dma->dma_tag = NULL;
2799 /*********************************************************************
2801 * Allocate memory for the transmit and receive rings, and then
2802 * the descriptors associated with each, called only once at attach.
2804 **********************************************************************/
2806 igb_allocate_queues(struct adapter *adapter)
2808 device_t dev = adapter->dev;
2809 struct igb_queue *que = NULL;
2810 struct tx_ring *txr = NULL;
2811 struct rx_ring *rxr = NULL;
2812 int rsize, tsize, error = E1000_SUCCESS;
2813 int txconf = 0, rxconf = 0;
2815 /* First allocate the top level queue structs */
2816 if (!(adapter->queues =
2817 (struct igb_queue *) malloc(sizeof(struct igb_queue) *
2818 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
2819 device_printf(dev, "Unable to allocate queue memory\n");
2824 /* Next allocate the TX ring struct memory */
2825 if (!(adapter->tx_rings =
2826 (struct tx_ring *) malloc(sizeof(struct tx_ring) *
2827 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
2828 device_printf(dev, "Unable to allocate TX ring memory\n");
2833 /* Now allocate the RX */
2834 if (!(adapter->rx_rings =
2835 (struct rx_ring *) malloc(sizeof(struct rx_ring) *
2836 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
2837 device_printf(dev, "Unable to allocate RX ring memory\n");
2842 tsize = roundup2(adapter->num_tx_desc *
2843 sizeof(union e1000_adv_tx_desc), IGB_DBA_ALIGN);
2845 * Now set up the TX queues, txconf is needed to handle the
2846 * possibility that things fail midcourse and we need to
2847 * undo memory gracefully
2849 for (int i = 0; i < adapter->num_queues; i++, txconf++) {
2850 /* Set up some basics */
2851 txr = &adapter->tx_rings[i];
2852 txr->adapter = adapter;
2855 /* Initialize the TX lock */
2856 snprintf(txr->mtx_name, sizeof(txr->mtx_name), "%s:tx(%d)",
2857 device_get_nameunit(dev), txr->me);
2858 mtx_init(&txr->tx_mtx, txr->mtx_name, NULL, MTX_DEF);
2860 if (igb_dma_malloc(adapter, tsize,
2861 &txr->txdma, BUS_DMA_NOWAIT)) {
2863 "Unable to allocate TX Descriptor memory\n");
2867 txr->tx_base = (struct e1000_tx_desc *)txr->txdma.dma_vaddr;
2868 bzero((void *)txr->tx_base, tsize);
2870 /* Now allocate transmit buffers for the ring */
2871 if (igb_allocate_transmit_buffers(txr)) {
2873 "Critical Failure setting up transmit buffers\n");
2877 #if __FreeBSD_version >= 800000
2878 /* Allocate a buf ring */
2879 txr->br = buf_ring_alloc(IGB_BR_SIZE, M_DEVBUF,
2880 M_WAITOK, &txr->tx_mtx);
2885 * Next the RX queues...
2887 rsize = roundup2(adapter->num_rx_desc *
2888 sizeof(union e1000_adv_rx_desc), IGB_DBA_ALIGN);
2889 for (int i = 0; i < adapter->num_queues; i++, rxconf++) {
2890 rxr = &adapter->rx_rings[i];
2891 rxr->adapter = adapter;
2894 /* Initialize the RX lock */
2895 snprintf(rxr->mtx_name, sizeof(rxr->mtx_name), "%s:rx(%d)",
2896 device_get_nameunit(dev), txr->me);
2897 mtx_init(&rxr->rx_mtx, rxr->mtx_name, NULL, MTX_DEF);
2899 if (igb_dma_malloc(adapter, rsize,
2900 &rxr->rxdma, BUS_DMA_NOWAIT)) {
2902 "Unable to allocate RxDescriptor memory\n");
2906 rxr->rx_base = (union e1000_adv_rx_desc *)rxr->rxdma.dma_vaddr;
2907 bzero((void *)rxr->rx_base, rsize);
2909 /* Allocate receive buffers for the ring*/
2910 if (igb_allocate_receive_buffers(rxr)) {
2912 "Critical Failure setting up receive buffers\n");
2919 ** Finally set up the queue holding structs
2921 for (int i = 0; i < adapter->num_queues; i++) {
2922 que = &adapter->queues[i];
2923 que->adapter = adapter;
2924 que->txr = &adapter->tx_rings[i];
2925 que->rxr = &adapter->rx_rings[i];
2931 for (rxr = adapter->rx_rings; rxconf > 0; rxr++, rxconf--)
2932 igb_dma_free(adapter, &rxr->rxdma);
2934 for (txr = adapter->tx_rings; txconf > 0; txr++, txconf--)
2935 igb_dma_free(adapter, &txr->txdma);
2936 free(adapter->rx_rings, M_DEVBUF);
2938 #if __FreeBSD_version >= 800000
2939 buf_ring_free(txr->br, M_DEVBUF);
2941 free(adapter->tx_rings, M_DEVBUF);
2943 free(adapter->queues, M_DEVBUF);
2948 /*********************************************************************
2950 * Allocate memory for tx_buffer structures. The tx_buffer stores all
2951 * the information needed to transmit a packet on the wire. This is
2952 * called only once at attach, setup is done every reset.
2954 **********************************************************************/
2956 igb_allocate_transmit_buffers(struct tx_ring *txr)
2958 struct adapter *adapter = txr->adapter;
2959 device_t dev = adapter->dev;
2960 struct igb_tx_buffer *txbuf;
2964 * Setup DMA descriptor areas.
2966 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev),
2967 1, 0, /* alignment, bounds */
2968 BUS_SPACE_MAXADDR, /* lowaddr */
2969 BUS_SPACE_MAXADDR, /* highaddr */
2970 NULL, NULL, /* filter, filterarg */
2971 IGB_TSO_SIZE, /* maxsize */
2972 IGB_MAX_SCATTER, /* nsegments */
2973 PAGE_SIZE, /* maxsegsize */
2975 NULL, /* lockfunc */
2976 NULL, /* lockfuncarg */
2978 device_printf(dev,"Unable to allocate TX DMA tag\n");
2982 if (!(txr->tx_buffers =
2983 (struct igb_tx_buffer *) malloc(sizeof(struct igb_tx_buffer) *
2984 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO))) {
2985 device_printf(dev, "Unable to allocate tx_buffer memory\n");
2990 /* Create the descriptor buffer dma maps */
2991 txbuf = txr->tx_buffers;
2992 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
2993 error = bus_dmamap_create(txr->txtag, 0, &txbuf->map);
2995 device_printf(dev, "Unable to create TX DMA map\n");
3002 /* We free all, it handles case where we are in the middle */
3003 igb_free_transmit_structures(adapter);
3007 /*********************************************************************
3009 * Initialize a transmit ring.
3011 **********************************************************************/
3013 igb_setup_transmit_ring(struct tx_ring *txr)
3015 struct adapter *adapter = txr->adapter;
3016 struct igb_tx_buffer *txbuf;
3019 /* Clear the old descriptor contents */
3021 bzero((void *)txr->tx_base,
3022 (sizeof(union e1000_adv_tx_desc)) * adapter->num_tx_desc);
3024 txr->next_avail_desc = 0;
3025 txr->next_to_clean = 0;
3027 /* Free any existing tx buffers. */
3028 txbuf = txr->tx_buffers;
3029 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
3030 if (txbuf->m_head != NULL) {
3031 bus_dmamap_sync(txr->txtag, txbuf->map,
3032 BUS_DMASYNC_POSTWRITE);
3033 bus_dmamap_unload(txr->txtag, txbuf->map);
3034 m_freem(txbuf->m_head);
3035 txbuf->m_head = NULL;
3037 /* clear the watch index */
3038 txbuf->next_eop = -1;
3041 /* Set number of descriptors available */
3042 txr->tx_avail = adapter->num_tx_desc;
3044 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3045 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3049 /*********************************************************************
3051 * Initialize all transmit rings.
3053 **********************************************************************/
3055 igb_setup_transmit_structures(struct adapter *adapter)
3057 struct tx_ring *txr = adapter->tx_rings;
3059 for (int i = 0; i < adapter->num_queues; i++, txr++)
3060 igb_setup_transmit_ring(txr);
3065 /*********************************************************************
3067 * Enable transmit unit.
3069 **********************************************************************/
3071 igb_initialize_transmit_units(struct adapter *adapter)
3073 struct tx_ring *txr = adapter->tx_rings;
3074 struct e1000_hw *hw = &adapter->hw;
3077 INIT_DEBUGOUT("igb_initialize_transmit_units: begin");
3079 /* Setup the Tx Descriptor Rings */
3080 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3081 u64 bus_addr = txr->txdma.dma_paddr;
3083 E1000_WRITE_REG(hw, E1000_TDLEN(i),
3084 adapter->num_tx_desc * sizeof(struct e1000_tx_desc));
3085 E1000_WRITE_REG(hw, E1000_TDBAH(i),
3086 (uint32_t)(bus_addr >> 32));
3087 E1000_WRITE_REG(hw, E1000_TDBAL(i),
3088 (uint32_t)bus_addr);
3090 /* Setup the HW Tx Head and Tail descriptor pointers */
3091 E1000_WRITE_REG(hw, E1000_TDT(i), 0);
3092 E1000_WRITE_REG(hw, E1000_TDH(i), 0);
3094 HW_DEBUGOUT2("Base = %x, Length = %x\n",
3095 E1000_READ_REG(hw, E1000_TDBAL(i)),
3096 E1000_READ_REG(hw, E1000_TDLEN(i)));
3098 txr->watchdog_check = FALSE;
3100 txdctl = E1000_READ_REG(hw, E1000_TXDCTL(i));
3101 txdctl |= IGB_TX_PTHRESH;
3102 txdctl |= IGB_TX_HTHRESH << 8;
3103 txdctl |= IGB_TX_WTHRESH << 16;
3104 txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
3105 E1000_WRITE_REG(hw, E1000_TXDCTL(i), txdctl);
3108 /* Program the Transmit Control Register */
3109 tctl = E1000_READ_REG(hw, E1000_TCTL);
3110 tctl &= ~E1000_TCTL_CT;
3111 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN |
3112 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT));
3114 e1000_config_collision_dist(hw);
3116 /* This write will effectively turn on the transmit unit. */
3117 E1000_WRITE_REG(hw, E1000_TCTL, tctl);
3120 /*********************************************************************
3122 * Free all transmit rings.
3124 **********************************************************************/
3126 igb_free_transmit_structures(struct adapter *adapter)
3128 struct tx_ring *txr = adapter->tx_rings;
3130 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3132 igb_free_transmit_buffers(txr);
3133 igb_dma_free(adapter, &txr->txdma);
3135 IGB_TX_LOCK_DESTROY(txr);
3137 free(adapter->tx_rings, M_DEVBUF);
3140 /*********************************************************************
3142 * Free transmit ring related data structures.
3144 **********************************************************************/
3146 igb_free_transmit_buffers(struct tx_ring *txr)
3148 struct adapter *adapter = txr->adapter;
3149 struct igb_tx_buffer *tx_buffer;
3152 INIT_DEBUGOUT("free_transmit_ring: begin");
3154 if (txr->tx_buffers == NULL)
3157 tx_buffer = txr->tx_buffers;
3158 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
3159 if (tx_buffer->m_head != NULL) {
3160 bus_dmamap_sync(txr->txtag, tx_buffer->map,
3161 BUS_DMASYNC_POSTWRITE);
3162 bus_dmamap_unload(txr->txtag,
3164 m_freem(tx_buffer->m_head);
3165 tx_buffer->m_head = NULL;
3166 if (tx_buffer->map != NULL) {
3167 bus_dmamap_destroy(txr->txtag,
3169 tx_buffer->map = NULL;
3171 } else if (tx_buffer->map != NULL) {
3172 bus_dmamap_unload(txr->txtag,
3174 bus_dmamap_destroy(txr->txtag,
3176 tx_buffer->map = NULL;
3179 #if __FreeBSD_version >= 800000
3180 if (txr->br != NULL)
3181 buf_ring_free(txr->br, M_DEVBUF);
3183 if (txr->tx_buffers != NULL) {
3184 free(txr->tx_buffers, M_DEVBUF);
3185 txr->tx_buffers = NULL;
3187 if (txr->txtag != NULL) {
3188 bus_dma_tag_destroy(txr->txtag);
3194 /**********************************************************************
3196 * Setup work for hardware segmentation offload (TSO)
3198 **********************************************************************/
3200 igb_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *hdrlen)
3202 struct adapter *adapter = txr->adapter;
3203 struct e1000_adv_tx_context_desc *TXD;
3204 struct igb_tx_buffer *tx_buffer;
3205 u32 vlan_macip_lens = 0, type_tucmd_mlhl = 0;
3206 u32 mss_l4len_idx = 0;
3208 int ctxd, ehdrlen, ip_hlen, tcp_hlen;
3209 struct ether_vlan_header *eh;
3215 * Determine where frame payload starts.
3216 * Jump over vlan headers if already present
3218 eh = mtod(mp, struct ether_vlan_header *);
3219 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN))
3220 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3222 ehdrlen = ETHER_HDR_LEN;
3224 /* Ensure we have at least the IP+TCP header in the first mbuf. */
3225 if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
3228 /* Only supports IPV4 for now */
3229 ctxd = txr->next_avail_desc;
3230 tx_buffer = &txr->tx_buffers[ctxd];
3231 TXD = (struct e1000_adv_tx_context_desc *) &txr->tx_base[ctxd];
3233 ip = (struct ip *)(mp->m_data + ehdrlen);
3234 if (ip->ip_p != IPPROTO_TCP)
3235 return FALSE; /* 0 */
3237 ip_hlen = ip->ip_hl << 2;
3238 th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
3239 th->th_sum = in_pseudo(ip->ip_src.s_addr,
3240 ip->ip_dst.s_addr, htons(IPPROTO_TCP));
3241 tcp_hlen = th->th_off << 2;
3243 * Calculate header length, this is used
3244 * in the transmit desc in igb_xmit
3246 *hdrlen = ehdrlen + ip_hlen + tcp_hlen;
3248 /* VLAN MACLEN IPLEN */
3249 if (mp->m_flags & M_VLANTAG) {
3250 vtag = htole16(mp->m_pkthdr.ether_vtag);
3251 vlan_macip_lens |= (vtag << E1000_ADVTXD_VLAN_SHIFT);
3254 vlan_macip_lens |= (ehdrlen << E1000_ADVTXD_MACLEN_SHIFT);
3255 vlan_macip_lens |= ip_hlen;
3256 TXD->vlan_macip_lens |= htole32(vlan_macip_lens);
3258 /* ADV DTYPE TUCMD */
3259 type_tucmd_mlhl |= E1000_ADVTXD_DCMD_DEXT | E1000_ADVTXD_DTYP_CTXT;
3260 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_TCP;
3261 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV4;
3262 TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
3265 mss_l4len_idx |= (mp->m_pkthdr.tso_segsz << E1000_ADVTXD_MSS_SHIFT);
3266 mss_l4len_idx |= (tcp_hlen << E1000_ADVTXD_L4LEN_SHIFT);
3267 /* 82575 needs the queue index added */
3268 if (adapter->hw.mac.type == e1000_82575)
3269 mss_l4len_idx |= txr->me << 4;
3270 TXD->mss_l4len_idx = htole32(mss_l4len_idx);
3272 TXD->seqnum_seed = htole32(0);
3273 tx_buffer->m_head = NULL;
3274 tx_buffer->next_eop = -1;
3276 if (++ctxd == adapter->num_tx_desc)
3280 txr->next_avail_desc = ctxd;
3285 /*********************************************************************
3287 * Context Descriptor setup for VLAN or CSUM
3289 **********************************************************************/
3292 igb_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
3294 struct adapter *adapter = txr->adapter;
3295 struct e1000_adv_tx_context_desc *TXD;
3296 struct igb_tx_buffer *tx_buffer;
3297 u32 vlan_macip_lens, type_tucmd_mlhl, mss_l4len_idx;
3298 struct ether_vlan_header *eh;
3299 struct ip *ip = NULL;
3300 struct ip6_hdr *ip6;
3301 int ehdrlen, ctxd, ip_hlen = 0;
3302 u16 etype, vtag = 0;
3304 bool offload = TRUE;
3306 if ((mp->m_pkthdr.csum_flags & CSUM_OFFLOAD) == 0)
3309 vlan_macip_lens = type_tucmd_mlhl = mss_l4len_idx = 0;
3310 ctxd = txr->next_avail_desc;
3311 tx_buffer = &txr->tx_buffers[ctxd];
3312 TXD = (struct e1000_adv_tx_context_desc *) &txr->tx_base[ctxd];
3315 ** In advanced descriptors the vlan tag must
3316 ** be placed into the context descriptor, thus
3317 ** we need to be here just for that setup.
3319 if (mp->m_flags & M_VLANTAG) {
3320 vtag = htole16(mp->m_pkthdr.ether_vtag);
3321 vlan_macip_lens |= (vtag << E1000_ADVTXD_VLAN_SHIFT);
3322 } else if (offload == FALSE)
3326 * Determine where frame payload starts.
3327 * Jump over vlan headers if already present,
3328 * helpful for QinQ too.
3330 eh = mtod(mp, struct ether_vlan_header *);
3331 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
3332 etype = ntohs(eh->evl_proto);
3333 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
3335 etype = ntohs(eh->evl_encap_proto);
3336 ehdrlen = ETHER_HDR_LEN;
3339 /* Set the ether header length */
3340 vlan_macip_lens |= ehdrlen << E1000_ADVTXD_MACLEN_SHIFT;
3344 ip = (struct ip *)(mp->m_data + ehdrlen);
3345 ip_hlen = ip->ip_hl << 2;
3346 if (mp->m_len < ehdrlen + ip_hlen) {
3351 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV4;
3353 case ETHERTYPE_IPV6:
3354 ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
3355 ip_hlen = sizeof(struct ip6_hdr);
3356 if (mp->m_len < ehdrlen + ip_hlen)
3358 ipproto = ip6->ip6_nxt;
3359 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV6;
3366 vlan_macip_lens |= ip_hlen;
3367 type_tucmd_mlhl |= E1000_ADVTXD_DCMD_DEXT | E1000_ADVTXD_DTYP_CTXT;
3371 if (mp->m_pkthdr.csum_flags & CSUM_TCP)
3372 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_TCP;
3375 if (mp->m_pkthdr.csum_flags & CSUM_UDP)
3376 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_UDP;
3378 #if __FreeBSD_version >= 800000
3380 if (mp->m_pkthdr.csum_flags & CSUM_SCTP)
3381 type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_SCTP;
3389 /* 82575 needs the queue index added */
3390 if (adapter->hw.mac.type == e1000_82575)
3391 mss_l4len_idx = txr->me << 4;
3393 /* Now copy bits into descriptor */
3394 TXD->vlan_macip_lens |= htole32(vlan_macip_lens);
3395 TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
3396 TXD->seqnum_seed = htole32(0);
3397 TXD->mss_l4len_idx = htole32(mss_l4len_idx);
3399 tx_buffer->m_head = NULL;
3400 tx_buffer->next_eop = -1;
3402 /* We've consumed the first desc, adjust counters */
3403 if (++ctxd == adapter->num_tx_desc)
3405 txr->next_avail_desc = ctxd;
3412 /**********************************************************************
3414 * Examine each tx_buffer in the used queue. If the hardware is done
3415 * processing the packet then free associated resources. The
3416 * tx_buffer is put back on the free queue.
3418 * TRUE return means there's work in the ring to clean, FALSE its empty.
3419 **********************************************************************/
3421 igb_txeof(struct tx_ring *txr)
3423 struct adapter *adapter = txr->adapter;
3424 int first, last, done;
3425 struct igb_tx_buffer *tx_buffer;
3426 struct e1000_tx_desc *tx_desc, *eop_desc;
3427 struct ifnet *ifp = adapter->ifp;
3429 IGB_TX_LOCK_ASSERT(txr);
3431 if (txr->tx_avail == adapter->num_tx_desc)
3434 first = txr->next_to_clean;
3435 tx_desc = &txr->tx_base[first];
3436 tx_buffer = &txr->tx_buffers[first];
3437 last = tx_buffer->next_eop;
3438 eop_desc = &txr->tx_base[last];
3441 * What this does is get the index of the
3442 * first descriptor AFTER the EOP of the
3443 * first packet, that way we can do the
3444 * simple comparison on the inner while loop.
3446 if (++last == adapter->num_tx_desc)
3450 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3451 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
3453 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
3454 /* We clean the range of the packet */
3455 while (first != done) {
3456 tx_desc->upper.data = 0;
3457 tx_desc->lower.data = 0;
3458 tx_desc->buffer_addr = 0;
3461 if (tx_buffer->m_head) {
3463 tx_buffer->m_head->m_pkthdr.len;
3464 bus_dmamap_sync(txr->txtag,
3466 BUS_DMASYNC_POSTWRITE);
3467 bus_dmamap_unload(txr->txtag,
3470 m_freem(tx_buffer->m_head);
3471 tx_buffer->m_head = NULL;
3473 tx_buffer->next_eop = -1;
3474 txr->watchdog_time = ticks;
3476 if (++first == adapter->num_tx_desc)
3479 tx_buffer = &txr->tx_buffers[first];
3480 tx_desc = &txr->tx_base[first];
3484 /* See if we can continue to the next packet */
3485 last = tx_buffer->next_eop;
3487 eop_desc = &txr->tx_base[last];
3488 /* Get new done point */
3489 if (++last == adapter->num_tx_desc) last = 0;
3494 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3495 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3497 txr->next_to_clean = first;
3500 * If we have enough room, clear IFF_DRV_OACTIVE
3501 * to tell the stack that it is OK to send packets.
3503 if (txr->tx_avail > IGB_TX_CLEANUP_THRESHOLD) {
3504 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
3505 /* All clean, turn off the watchdog */
3506 if (txr->tx_avail == adapter->num_tx_desc) {
3507 txr->watchdog_check = FALSE;
3516 /*********************************************************************
3518 * Refresh mbuf buffers for RX descriptor rings
3519 * - now keeps its own state so discards due to resource
3520 * exhaustion are unnecessary, if an mbuf cannot be obtained
3521 * it just returns, keeping its placeholder, thus it can simply
3522 * be recalled to try again.
3524 **********************************************************************/
3526 igb_refresh_mbufs(struct rx_ring *rxr, int limit)
3528 struct adapter *adapter = rxr->adapter;
3529 bus_dma_segment_t hseg[1];
3530 bus_dma_segment_t pseg[1];
3531 struct igb_rx_buf *rxbuf;
3532 struct mbuf *mh, *mp;
3533 int i, nsegs, error, cleaned;
3535 i = rxr->next_to_refresh;
3536 cleaned = -1; /* Signify no completions */
3537 while (i != limit) {
3538 rxbuf = &rxr->rx_buffers[i];
3539 if ((rxbuf->m_head == NULL) && (rxr->hdr_split)) {
3540 mh = m_gethdr(M_DONTWAIT, MT_DATA);
3543 mh->m_pkthdr.len = mh->m_len = MHLEN;
3545 mh->m_flags |= M_PKTHDR;
3546 m_adj(mh, ETHER_ALIGN);
3547 /* Get the memory mapping */
3548 error = bus_dmamap_load_mbuf_sg(rxr->htag,
3549 rxbuf->hmap, mh, hseg, &nsegs, BUS_DMA_NOWAIT);
3551 printf("GET BUF: dmamap load"
3552 " failure - %d\n", error);
3557 bus_dmamap_sync(rxr->htag, rxbuf->hmap,
3558 BUS_DMASYNC_PREREAD);
3559 rxr->rx_base[i].read.hdr_addr =
3560 htole64(hseg[0].ds_addr);
3563 if (rxbuf->m_pack == NULL) {
3564 mp = m_getjcl(M_DONTWAIT, MT_DATA,
3565 M_PKTHDR, adapter->rx_mbuf_sz);
3568 mp->m_pkthdr.len = mp->m_len = adapter->rx_mbuf_sz;
3569 /* Get the memory mapping */
3570 error = bus_dmamap_load_mbuf_sg(rxr->ptag,
3571 rxbuf->pmap, mp, pseg, &nsegs, BUS_DMA_NOWAIT);
3573 printf("GET BUF: dmamap load"
3574 " failure - %d\n", error);
3579 bus_dmamap_sync(rxr->ptag, rxbuf->pmap,
3580 BUS_DMASYNC_PREREAD);
3581 rxr->rx_base[i].read.pkt_addr =
3582 htole64(pseg[0].ds_addr);
3586 /* Calculate next index */
3587 if (++i == adapter->num_rx_desc)
3589 /* This is the work marker for refresh */
3590 rxr->next_to_refresh = i;
3593 if (cleaned != -1) /* If we refreshed some, bump tail */
3594 E1000_WRITE_REG(&adapter->hw,
3595 E1000_RDT(rxr->me), cleaned);
3600 /*********************************************************************
3602 * Allocate memory for rx_buffer structures. Since we use one
3603 * rx_buffer per received packet, the maximum number of rx_buffer's
3604 * that we'll need is equal to the number of receive descriptors
3605 * that we've allocated.
3607 **********************************************************************/
3609 igb_allocate_receive_buffers(struct rx_ring *rxr)
3611 struct adapter *adapter = rxr->adapter;
3612 device_t dev = adapter->dev;
3613 struct igb_rx_buf *rxbuf;
3614 int i, bsize, error;
3616 bsize = sizeof(struct igb_rx_buf) * adapter->num_rx_desc;
3617 if (!(rxr->rx_buffers =
3618 (struct igb_rx_buf *) malloc(bsize,
3619 M_DEVBUF, M_NOWAIT | M_ZERO))) {
3620 device_printf(dev, "Unable to allocate rx_buffer memory\n");
3625 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev),
3626 1, 0, /* alignment, bounds */
3627 BUS_SPACE_MAXADDR, /* lowaddr */
3628 BUS_SPACE_MAXADDR, /* highaddr */
3629 NULL, NULL, /* filter, filterarg */
3630 MSIZE, /* maxsize */
3632 MSIZE, /* maxsegsize */
3634 NULL, /* lockfunc */
3635 NULL, /* lockfuncarg */
3637 device_printf(dev, "Unable to create RX DMA tag\n");
3641 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev),
3642 1, 0, /* alignment, bounds */
3643 BUS_SPACE_MAXADDR, /* lowaddr */
3644 BUS_SPACE_MAXADDR, /* highaddr */
3645 NULL, NULL, /* filter, filterarg */
3646 MJUMPAGESIZE, /* maxsize */
3648 MJUMPAGESIZE, /* maxsegsize */
3650 NULL, /* lockfunc */
3651 NULL, /* lockfuncarg */
3653 device_printf(dev, "Unable to create RX payload DMA tag\n");
3657 for (i = 0; i < adapter->num_rx_desc; i++) {
3658 rxbuf = &rxr->rx_buffers[i];
3659 error = bus_dmamap_create(rxr->htag,
3660 BUS_DMA_NOWAIT, &rxbuf->hmap);
3663 "Unable to create RX head DMA maps\n");
3666 error = bus_dmamap_create(rxr->ptag,
3667 BUS_DMA_NOWAIT, &rxbuf->pmap);
3670 "Unable to create RX packet DMA maps\n");
3678 /* Frees all, but can handle partial completion */
3679 igb_free_receive_structures(adapter);
3685 igb_free_receive_ring(struct rx_ring *rxr)
3687 struct adapter *adapter;
3688 struct igb_rx_buf *rxbuf;
3691 adapter = rxr->adapter;
3692 for (i = 0; i < adapter->num_rx_desc; i++) {
3693 rxbuf = &rxr->rx_buffers[i];
3694 if (rxbuf->m_head != NULL) {
3695 bus_dmamap_sync(rxr->htag, rxbuf->hmap,
3696 BUS_DMASYNC_POSTREAD);
3697 bus_dmamap_unload(rxr->htag, rxbuf->hmap);
3698 rxbuf->m_head->m_flags |= M_PKTHDR;
3699 m_freem(rxbuf->m_head);
3701 if (rxbuf->m_pack != NULL) {
3702 bus_dmamap_sync(rxr->ptag, rxbuf->pmap,
3703 BUS_DMASYNC_POSTREAD);
3704 bus_dmamap_unload(rxr->ptag, rxbuf->pmap);
3705 rxbuf->m_pack->m_flags |= M_PKTHDR;
3706 m_freem(rxbuf->m_pack);
3708 rxbuf->m_head = NULL;
3709 rxbuf->m_pack = NULL;
3714 /*********************************************************************
3716 * Initialize a receive ring and its buffers.
3718 **********************************************************************/
3720 igb_setup_receive_ring(struct rx_ring *rxr)
3722 struct adapter *adapter;
3725 struct igb_rx_buf *rxbuf;
3726 bus_dma_segment_t pseg[1], hseg[1];
3727 struct lro_ctrl *lro = &rxr->lro;
3728 int rsize, nsegs, error = 0;
3730 adapter = rxr->adapter;
3734 /* Clear the ring contents */
3736 rsize = roundup2(adapter->num_rx_desc *
3737 sizeof(union e1000_adv_rx_desc), IGB_DBA_ALIGN);
3738 bzero((void *)rxr->rx_base, rsize);
3741 ** Free current RX buffer structures and their mbufs
3743 igb_free_receive_ring(rxr);
3745 /* Configure for header split? */
3746 if (igb_header_split)
3747 rxr->hdr_split = TRUE;
3749 /* Now replenish the ring mbufs */
3750 for (int j = 0; j != adapter->num_rx_desc; ++j) {
3751 struct mbuf *mh, *mp;
3753 rxbuf = &rxr->rx_buffers[j];
3754 if (rxr->hdr_split == FALSE)
3757 /* First the header */
3758 rxbuf->m_head = m_gethdr(M_DONTWAIT, MT_DATA);
3759 if (rxbuf->m_head == NULL) {
3763 m_adj(rxbuf->m_head, ETHER_ALIGN);
3765 mh->m_len = mh->m_pkthdr.len = MHLEN;
3766 mh->m_flags |= M_PKTHDR;
3767 /* Get the memory mapping */
3768 error = bus_dmamap_load_mbuf_sg(rxr->htag,
3769 rxbuf->hmap, rxbuf->m_head, hseg,
3770 &nsegs, BUS_DMA_NOWAIT);
3771 if (error != 0) /* Nothing elegant to do here */
3773 bus_dmamap_sync(rxr->htag,
3774 rxbuf->hmap, BUS_DMASYNC_PREREAD);
3775 /* Update descriptor */
3776 rxr->rx_base[j].read.hdr_addr = htole64(hseg[0].ds_addr);
3779 /* Now the payload cluster */
3780 rxbuf->m_pack = m_getjcl(M_DONTWAIT, MT_DATA,
3781 M_PKTHDR, adapter->rx_mbuf_sz);
3782 if (rxbuf->m_pack == NULL) {
3787 mp->m_pkthdr.len = mp->m_len = adapter->rx_mbuf_sz;
3788 /* Get the memory mapping */
3789 error = bus_dmamap_load_mbuf_sg(rxr->ptag,
3790 rxbuf->pmap, mp, pseg,
3791 &nsegs, BUS_DMA_NOWAIT);
3794 bus_dmamap_sync(rxr->ptag,
3795 rxbuf->pmap, BUS_DMASYNC_PREREAD);
3796 /* Update descriptor */
3797 rxr->rx_base[j].read.pkt_addr = htole64(pseg[0].ds_addr);
3800 /* Setup our descriptor indices */
3801 rxr->next_to_check = 0;
3802 rxr->next_to_refresh = 0;
3803 rxr->lro_enabled = FALSE;
3804 rxr->rx_split_packets = 0;
3809 rxr->discard = FALSE;
3811 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
3812 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3815 ** Now set up the LRO interface, we
3816 ** also only do head split when LRO
3817 ** is enabled, since so often they
3818 ** are undesireable in similar setups.
3820 if (ifp->if_capenable & IFCAP_LRO) {
3821 int err = tcp_lro_init(lro);
3823 device_printf(dev, "LRO Initialization failed!\n");
3826 INIT_DEBUGOUT("RX LRO Initialized\n");
3827 rxr->lro_enabled = TRUE;
3828 lro->ifp = adapter->ifp;
3835 igb_free_receive_ring(rxr);
3840 /*********************************************************************
3842 * Initialize all receive rings.
3844 **********************************************************************/
3846 igb_setup_receive_structures(struct adapter *adapter)
3848 struct rx_ring *rxr = adapter->rx_rings;
3851 for (i = 0; i < adapter->num_queues; i++, rxr++)
3852 if (igb_setup_receive_ring(rxr))
3858 * Free RX buffers allocated so far, we will only handle
3859 * the rings that completed, the failing case will have
3860 * cleaned up for itself. 'i' is the endpoint.
3862 for (int j = 0; j > i; ++j) {
3863 rxr = &adapter->rx_rings[i];
3864 igb_free_receive_ring(rxr);
3870 /*********************************************************************
3872 * Enable receive unit.
3874 **********************************************************************/
3876 igb_initialize_receive_units(struct adapter *adapter)
3878 struct rx_ring *rxr = adapter->rx_rings;
3879 struct ifnet *ifp = adapter->ifp;
3880 struct e1000_hw *hw = &adapter->hw;
3881 u32 rctl, rxcsum, psize, srrctl = 0;
3883 INIT_DEBUGOUT("igb_initialize_receive_unit: begin");
3886 * Make sure receives are disabled while setting
3887 * up the descriptor ring
3889 rctl = E1000_READ_REG(hw, E1000_RCTL);
3890 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
3893 ** Set up for header split
3895 if (rxr->hdr_split) {
3896 /* Use a standard mbuf for the header */
3897 srrctl |= IGB_HDR_BUF << E1000_SRRCTL_BSIZEHDRSIZE_SHIFT;
3898 srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS;
3900 srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF;
3903 ** Set up for jumbo frames
3905 if (ifp->if_mtu > ETHERMTU) {
3906 rctl |= E1000_RCTL_LPE;
3907 srrctl |= 4096 >> E1000_SRRCTL_BSIZEPKT_SHIFT;
3908 rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX;
3910 /* Set maximum packet len */
3911 psize = adapter->max_frame_size;
3912 /* are we on a vlan? */
3913 if (adapter->ifp->if_vlantrunk != NULL)
3914 psize += VLAN_TAG_SIZE;
3915 E1000_WRITE_REG(&adapter->hw, E1000_RLPML, psize);
3917 rctl &= ~E1000_RCTL_LPE;
3918 srrctl |= 2048 >> E1000_SRRCTL_BSIZEPKT_SHIFT;
3919 rctl |= E1000_RCTL_SZ_2048;
3922 /* Setup the Base and Length of the Rx Descriptor Rings */
3923 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
3924 u64 bus_addr = rxr->rxdma.dma_paddr;
3927 E1000_WRITE_REG(hw, E1000_RDLEN(i),
3928 adapter->num_rx_desc * sizeof(struct e1000_rx_desc));
3929 E1000_WRITE_REG(hw, E1000_RDBAH(i),
3930 (uint32_t)(bus_addr >> 32));
3931 E1000_WRITE_REG(hw, E1000_RDBAL(i),
3932 (uint32_t)bus_addr);
3933 E1000_WRITE_REG(hw, E1000_SRRCTL(i), srrctl);
3934 /* Enable this Queue */
3935 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(i));
3936 rxdctl |= E1000_RXDCTL_QUEUE_ENABLE;
3937 rxdctl &= 0xFFF00000;
3938 rxdctl |= IGB_RX_PTHRESH;
3939 rxdctl |= IGB_RX_HTHRESH << 8;
3940 rxdctl |= IGB_RX_WTHRESH << 16;
3941 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl);
3945 ** Setup for RX MultiQueue
3947 rxcsum = E1000_READ_REG(hw, E1000_RXCSUM);
3948 if (adapter->num_queues >1) {
3949 u32 random[10], mrqc, shift = 0;
3955 arc4rand(&random, sizeof(random), 0);
3956 if (adapter->hw.mac.type == e1000_82575)
3958 /* Warning FM follows */
3959 for (int i = 0; i < 128; i++) {
3961 (i % adapter->num_queues) << shift;
3964 E1000_RETA(i >> 2), reta.dword);
3966 /* Now fill in hash table */
3967 mrqc = E1000_MRQC_ENABLE_RSS_4Q;
3968 for (int i = 0; i < 10; i++)
3969 E1000_WRITE_REG_ARRAY(hw,
3970 E1000_RSSRK(0), i, random[i]);
3972 mrqc |= (E1000_MRQC_RSS_FIELD_IPV4 |
3973 E1000_MRQC_RSS_FIELD_IPV4_TCP);
3974 mrqc |= (E1000_MRQC_RSS_FIELD_IPV6 |
3975 E1000_MRQC_RSS_FIELD_IPV6_TCP);
3976 mrqc |=( E1000_MRQC_RSS_FIELD_IPV4_UDP |
3977 E1000_MRQC_RSS_FIELD_IPV6_UDP);
3978 mrqc |=( E1000_MRQC_RSS_FIELD_IPV6_UDP_EX |
3979 E1000_MRQC_RSS_FIELD_IPV6_TCP_EX);
3981 E1000_WRITE_REG(hw, E1000_MRQC, mrqc);
3984 ** NOTE: Receive Full-Packet Checksum Offload
3985 ** is mutually exclusive with Multiqueue. However
3986 ** this is not the same as TCP/IP checksums which
3989 rxcsum |= E1000_RXCSUM_PCSD;
3990 #if __FreeBSD_version >= 800000
3991 /* For SCTP Offload */
3992 if ((hw->mac.type == e1000_82576)
3993 && (ifp->if_capenable & IFCAP_RXCSUM))
3994 rxcsum |= E1000_RXCSUM_CRCOFL;
3998 if (ifp->if_capenable & IFCAP_RXCSUM) {
3999 rxcsum |= E1000_RXCSUM_IPPCSE;
4000 #if __FreeBSD_version >= 800000
4001 if (adapter->hw.mac.type == e1000_82576)
4002 rxcsum |= E1000_RXCSUM_CRCOFL;
4005 rxcsum &= ~E1000_RXCSUM_TUOFL;
4007 E1000_WRITE_REG(hw, E1000_RXCSUM, rxcsum);
4009 /* Setup the Receive Control Register */
4010 rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
4011 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
4012 E1000_RCTL_RDMTS_HALF |
4013 (hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
4014 /* Strip CRC bytes. */
4015 rctl |= E1000_RCTL_SECRC;
4016 /* Make sure VLAN Filters are off */
4017 rctl &= ~E1000_RCTL_VFE;
4018 /* Don't store bad packets */
4019 rctl &= ~E1000_RCTL_SBP;
4021 /* Enable Receives */
4022 E1000_WRITE_REG(hw, E1000_RCTL, rctl);
4025 * Setup the HW Rx Head and Tail Descriptor Pointers
4026 * - needs to be after enable
4028 for (int i = 0; i < adapter->num_queues; i++) {
4029 E1000_WRITE_REG(hw, E1000_RDH(i), 0);
4030 E1000_WRITE_REG(hw, E1000_RDT(i),
4031 adapter->num_rx_desc - 1);
4036 /*********************************************************************
4038 * Free receive rings.
4040 **********************************************************************/
4042 igb_free_receive_structures(struct adapter *adapter)
4044 struct rx_ring *rxr = adapter->rx_rings;
4046 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4047 struct lro_ctrl *lro = &rxr->lro;
4048 igb_free_receive_buffers(rxr);
4050 igb_dma_free(adapter, &rxr->rxdma);
4053 free(adapter->rx_rings, M_DEVBUF);
4056 /*********************************************************************
4058 * Free receive ring data structures.
4060 **********************************************************************/
4062 igb_free_receive_buffers(struct rx_ring *rxr)
4064 struct adapter *adapter = rxr->adapter;
4065 struct igb_rx_buf *rxbuf;
4068 INIT_DEBUGOUT("free_receive_structures: begin");
4070 /* Cleanup any existing buffers */
4071 if (rxr->rx_buffers != NULL) {
4072 for (i = 0; i < adapter->num_rx_desc; i++) {
4073 rxbuf = &rxr->rx_buffers[i];
4074 if (rxbuf->m_head != NULL) {
4075 bus_dmamap_sync(rxr->htag, rxbuf->hmap,
4076 BUS_DMASYNC_POSTREAD);
4077 bus_dmamap_unload(rxr->htag, rxbuf->hmap);
4078 rxbuf->m_head->m_flags |= M_PKTHDR;
4079 m_freem(rxbuf->m_head);
4081 if (rxbuf->m_pack != NULL) {
4082 bus_dmamap_sync(rxr->ptag, rxbuf->pmap,
4083 BUS_DMASYNC_POSTREAD);
4084 bus_dmamap_unload(rxr->ptag, rxbuf->pmap);
4085 rxbuf->m_pack->m_flags |= M_PKTHDR;
4086 m_freem(rxbuf->m_pack);
4088 rxbuf->m_head = NULL;
4089 rxbuf->m_pack = NULL;
4090 if (rxbuf->hmap != NULL) {
4091 bus_dmamap_destroy(rxr->htag, rxbuf->hmap);
4094 if (rxbuf->pmap != NULL) {
4095 bus_dmamap_destroy(rxr->ptag, rxbuf->pmap);
4099 if (rxr->rx_buffers != NULL) {
4100 free(rxr->rx_buffers, M_DEVBUF);
4101 rxr->rx_buffers = NULL;
4105 if (rxr->htag != NULL) {
4106 bus_dma_tag_destroy(rxr->htag);
4109 if (rxr->ptag != NULL) {
4110 bus_dma_tag_destroy(rxr->ptag);
4115 static __inline void
4116 igb_rx_discard(struct rx_ring *rxr, int i)
4118 struct adapter *adapter = rxr->adapter;
4119 struct igb_rx_buf *rbuf;
4120 struct mbuf *mh, *mp;
4122 rbuf = &rxr->rx_buffers[i];
4123 if (rxr->fmp != NULL) {
4124 rxr->fmp->m_flags |= M_PKTHDR;
4133 /* Reuse loaded DMA map and just update mbuf chain */
4135 mh->m_flags |= M_PKTHDR;
4138 mp->m_len = mp->m_pkthdr.len = adapter->rx_mbuf_sz;
4139 mp->m_data = mp->m_ext.ext_buf;
4144 static __inline void
4145 igb_rx_input(struct rx_ring *rxr, struct ifnet *ifp, struct mbuf *m, u32 ptype)
4149 * ATM LRO is only for IPv4/TCP packets and TCP checksum of the packet
4150 * should be computed by hardware. Also it should not have VLAN tag in
4153 if (rxr->lro_enabled &&
4154 (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 &&
4155 (ptype & E1000_RXDADV_PKTTYPE_ETQF) == 0 &&
4156 (ptype & (E1000_RXDADV_PKTTYPE_IPV4 | E1000_RXDADV_PKTTYPE_TCP)) ==
4157 (E1000_RXDADV_PKTTYPE_IPV4 | E1000_RXDADV_PKTTYPE_TCP) &&
4158 (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) ==
4159 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
4161 * Send to the stack if:
4162 ** - LRO not enabled, or
4163 ** - no LRO resources, or
4164 ** - lro enqueue fails
4166 if (rxr->lro.lro_cnt != 0)
4167 if (tcp_lro_rx(&rxr->lro, m, 0) == 0)
4171 (*ifp->if_input)(ifp, m);
4175 /*********************************************************************
4177 * This routine executes in interrupt context. It replenishes
4178 * the mbufs in the descriptor and sends data which has been
4179 * dma'ed into host memory to upper layer.
4181 * We loop at most count times if count is > 0, or until done if
4184 * Return TRUE if more to clean, FALSE otherwise
4185 *********************************************************************/
4187 igb_rxeof(struct igb_queue *que, int count, int *done)
4189 struct adapter *adapter = que->adapter;
4190 struct rx_ring *rxr = que->rxr;
4191 struct ifnet *ifp = adapter->ifp;
4192 struct lro_ctrl *lro = &rxr->lro;
4193 struct lro_entry *queued;
4194 int i, processed = 0, rxdone = 0;
4195 u32 ptype, staterr = 0;
4196 union e1000_adv_rx_desc *cur;
4199 /* Sync the ring. */
4200 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4201 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
4203 /* Main clean loop */
4204 for (i = rxr->next_to_check; count != 0;) {
4205 struct mbuf *sendmp, *mh, *mp;
4206 struct igb_rx_buf *rxbuf;
4207 u16 hlen, plen, hdr, vtag;
4210 cur = &rxr->rx_base[i];
4211 staterr = le32toh(cur->wb.upper.status_error);
4212 if ((staterr & E1000_RXD_STAT_DD) == 0)
4214 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
4217 sendmp = mh = mp = NULL;
4218 cur->wb.upper.status_error = 0;
4219 rxbuf = &rxr->rx_buffers[i];
4220 plen = le16toh(cur->wb.upper.length);
4221 ptype = le32toh(cur->wb.lower.lo_dword.data) & IGB_PKTTYPE_MASK;
4222 vtag = le16toh(cur->wb.upper.vlan);
4223 hdr = le16toh(cur->wb.lower.lo_dword.hs_rss.hdr_info);
4224 eop = ((staterr & E1000_RXD_STAT_EOP) == E1000_RXD_STAT_EOP);
4226 /* Make sure all segments of a bad packet are discarded */
4227 if (((staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) != 0) ||
4230 ++rxr->rx_discarded;
4231 if (!eop) /* Catch subsequent segs */
4232 rxr->discard = TRUE;
4234 rxr->discard = FALSE;
4235 igb_rx_discard(rxr, i);
4240 ** The way the hardware is configured to
4241 ** split, it will ONLY use the header buffer
4242 ** when header split is enabled, otherwise we
4243 ** get normal behavior, ie, both header and
4244 ** payload are DMA'd into the payload buffer.
4246 ** The fmp test is to catch the case where a
4247 ** packet spans multiple descriptors, in that
4248 ** case only the first header is valid.
4250 if (rxr->hdr_split && rxr->fmp == NULL) {
4251 hlen = (hdr & E1000_RXDADV_HDRBUFLEN_MASK) >>
4252 E1000_RXDADV_HDRBUFLEN_SHIFT;
4253 if (hlen > IGB_HDR_BUF)
4255 /* Handle the header mbuf */
4256 mh = rxr->rx_buffers[i].m_head;
4258 /* clear buf info for refresh */
4259 rxbuf->m_head = NULL;
4261 ** Get the payload length, this
4262 ** could be zero if its a small
4266 mp = rxr->rx_buffers[i].m_pack;
4269 /* clear buf info for refresh */
4270 rxbuf->m_pack = NULL;
4271 rxr->rx_split_packets++;
4275 ** Either no header split, or a
4276 ** secondary piece of a fragmented
4279 mh = rxr->rx_buffers[i].m_pack;
4281 /* clear buf info for refresh */
4282 rxbuf->m_pack = NULL;
4285 ++processed; /* So we know when to refresh */
4287 /* Initial frame - setup */
4288 if (rxr->fmp == NULL) {
4289 mh->m_pkthdr.len = mh->m_len;
4290 /* Store the first mbuf */
4294 /* Add payload if split */
4295 mh->m_pkthdr.len += mp->m_len;
4296 rxr->lmp = mh->m_next;
4299 /* Chain mbuf's together */
4300 rxr->lmp->m_next = mh;
4301 rxr->lmp = rxr->lmp->m_next;
4302 rxr->fmp->m_pkthdr.len += mh->m_len;
4306 rxr->fmp->m_pkthdr.rcvif = ifp;
4309 /* capture data for AIM */
4311 rxr->bytes += rxr->fmp->m_pkthdr.len;
4312 rxr->rx_bytes += rxr->fmp->m_pkthdr.len;
4314 if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
4315 igb_rx_checksum(staterr, rxr->fmp, ptype);
4317 if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 &&
4318 (staterr & E1000_RXD_STAT_VP) != 0) {
4319 rxr->fmp->m_pkthdr.ether_vtag = vtag;
4320 rxr->fmp->m_flags |= M_VLANTAG;
4322 #if __FreeBSD_version >= 800000
4323 rxr->fmp->m_pkthdr.flowid = que->msix;
4324 rxr->fmp->m_flags |= M_FLOWID;
4327 /* Make sure to set M_PKTHDR. */
4328 sendmp->m_flags |= M_PKTHDR;
4334 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4335 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4337 /* Advance our pointers to the next descriptor. */
4338 if (++i == adapter->num_rx_desc)
4341 ** Send to the stack or LRO
4343 if (sendmp != NULL) {
4344 rxr->next_to_check = i;
4345 igb_rx_input(rxr, ifp, sendmp, ptype);
4346 i = rxr->next_to_check;
4350 /* Every 8 descriptors we go to refresh mbufs */
4351 if (processed == 8) {
4352 igb_refresh_mbufs(rxr, i);
4357 /* Catch any remainders */
4358 if (processed != 0) {
4359 igb_refresh_mbufs(rxr, i);
4363 rxr->next_to_check = i;
4366 * Flush any outstanding LRO work
4368 while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
4369 SLIST_REMOVE_HEAD(&lro->lro_active, next);
4370 tcp_lro_flush(lro, queued);
4379 ** We still have cleaning to do?
4380 ** Schedule another interrupt if so.
4382 if ((staterr & E1000_RXD_STAT_DD) != 0)
4388 /*********************************************************************
4390 * Verify that the hardware indicated that the checksum is valid.
4391 * Inform the stack about the status of checksum so that stack
4392 * doesn't spend time verifying the checksum.
4394 *********************************************************************/
4396 igb_rx_checksum(u32 staterr, struct mbuf *mp, u32 ptype)
4398 u16 status = (u16)staterr;
4399 u8 errors = (u8) (staterr >> 24);
4402 /* Ignore Checksum bit is set */
4403 if (status & E1000_RXD_STAT_IXSM) {
4404 mp->m_pkthdr.csum_flags = 0;
4408 if ((ptype & E1000_RXDADV_PKTTYPE_ETQF) == 0 &&
4409 (ptype & E1000_RXDADV_PKTTYPE_SCTP) != 0)
4413 if (status & E1000_RXD_STAT_IPCS) {
4415 if (!(errors & E1000_RXD_ERR_IPE)) {
4416 /* IP Checksum Good */
4417 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
4418 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
4420 mp->m_pkthdr.csum_flags = 0;
4423 if (status & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS)) {
4424 u16 type = (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
4425 #if __FreeBSD_version >= 800000
4426 if (sctp) /* reassign */
4427 type = CSUM_SCTP_VALID;
4430 if (!(errors & E1000_RXD_ERR_TCPE)) {
4431 mp->m_pkthdr.csum_flags |= type;
4433 mp->m_pkthdr.csum_data = htons(0xffff);
4440 * This routine is run via an vlan
4444 igb_register_vlan(void *arg, struct ifnet *ifp, u16 vtag)
4446 struct adapter *adapter = ifp->if_softc;
4449 if (ifp->if_softc != arg) /* Not our event */
4452 if ((vtag == 0) || (vtag > 4095)) /* Invalid */
4455 index = (vtag >> 5) & 0x7F;
4457 igb_shadow_vfta[index] |= (1 << bit);
4458 ++adapter->num_vlans;
4459 /* Re-init to load the changes */
4464 * This routine is run via an vlan
4468 igb_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag)
4470 struct adapter *adapter = ifp->if_softc;
4473 if (ifp->if_softc != arg)
4476 if ((vtag == 0) || (vtag > 4095)) /* Invalid */
4479 index = (vtag >> 5) & 0x7F;
4481 igb_shadow_vfta[index] &= ~(1 << bit);
4482 --adapter->num_vlans;
4483 /* Re-init to load the changes */
4488 igb_setup_vlan_hw_support(struct adapter *adapter)
4490 struct e1000_hw *hw = &adapter->hw;
4494 ** We get here thru init_locked, meaning
4495 ** a soft reset, this has already cleared
4496 ** the VFTA and other state, so if there
4497 ** have been no vlan's registered do nothing.
4499 if (adapter->num_vlans == 0)
4503 ** A soft reset zero's out the VFTA, so
4504 ** we need to repopulate it now.
4506 for (int i = 0; i < IGB_VFTA_SIZE; i++)
4507 if (igb_shadow_vfta[i] != 0)
4508 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA,
4509 i, igb_shadow_vfta[i]);
4511 reg = E1000_READ_REG(hw, E1000_CTRL);
4512 reg |= E1000_CTRL_VME;
4513 E1000_WRITE_REG(hw, E1000_CTRL, reg);
4515 /* Enable the Filter Table */
4516 reg = E1000_READ_REG(hw, E1000_RCTL);
4517 reg &= ~E1000_RCTL_CFIEN;
4518 reg |= E1000_RCTL_VFE;
4519 E1000_WRITE_REG(hw, E1000_RCTL, reg);
4521 /* Update the frame size */
4522 E1000_WRITE_REG(&adapter->hw, E1000_RLPML,
4523 adapter->max_frame_size + VLAN_TAG_SIZE);
4527 igb_enable_intr(struct adapter *adapter)
4529 /* With RSS set up what to auto clear */
4530 if (adapter->msix_mem) {
4531 E1000_WRITE_REG(&adapter->hw, E1000_EIAC,
4532 adapter->eims_mask);
4533 E1000_WRITE_REG(&adapter->hw, E1000_EIAM,
4534 adapter->eims_mask);
4535 E1000_WRITE_REG(&adapter->hw, E1000_EIMS,
4536 adapter->eims_mask);
4537 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
4540 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
4543 E1000_WRITE_FLUSH(&adapter->hw);
4549 igb_disable_intr(struct adapter *adapter)
4551 if (adapter->msix_mem) {
4552 E1000_WRITE_REG(&adapter->hw, E1000_EIMC, ~0);
4553 E1000_WRITE_REG(&adapter->hw, E1000_EIAC, 0);
4555 E1000_WRITE_REG(&adapter->hw, E1000_IMC, ~0);
4556 E1000_WRITE_FLUSH(&adapter->hw);
4561 * Bit of a misnomer, what this really means is
4562 * to enable OS management of the system... aka
4563 * to disable special hardware management features
4566 igb_init_manageability(struct adapter *adapter)
4568 if (adapter->has_manage) {
4569 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H);
4570 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4572 /* disable hardware interception of ARP */
4573 manc &= ~(E1000_MANC_ARP_EN);
4575 /* enable receiving management packets to the host */
4576 manc |= E1000_MANC_EN_MNG2HOST;
4577 manc2h |= 1 << 5; /* Mng Port 623 */
4578 manc2h |= 1 << 6; /* Mng Port 664 */
4579 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h);
4580 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4585 * Give control back to hardware management
4586 * controller if there is one.
4589 igb_release_manageability(struct adapter *adapter)
4591 if (adapter->has_manage) {
4592 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4594 /* re-enable hardware interception of ARP */
4595 manc |= E1000_MANC_ARP_EN;
4596 manc &= ~E1000_MANC_EN_MNG2HOST;
4598 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4603 * igb_get_hw_control sets CTRL_EXT:DRV_LOAD bit.
4604 * For ASF and Pass Through versions of f/w this means that
4605 * the driver is loaded.
4609 igb_get_hw_control(struct adapter *adapter)
4613 /* Let firmware know the driver has taken over */
4614 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4615 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4616 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
4620 * igb_release_hw_control resets CTRL_EXT:DRV_LOAD bit.
4621 * For ASF and Pass Through versions of f/w this means that the
4622 * driver is no longer loaded.
4626 igb_release_hw_control(struct adapter *adapter)
4630 /* Let firmware taken over control of h/w */
4631 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
4632 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
4633 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
4637 igb_is_valid_ether_addr(uint8_t *addr)
4639 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
4641 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
4650 * Enable PCI Wake On Lan capability
4653 igb_enable_wakeup(device_t dev)
4658 /* First find the capabilities pointer*/
4659 cap = pci_read_config(dev, PCIR_CAP_PTR, 2);
4660 /* Read the PM Capabilities */
4661 id = pci_read_config(dev, cap, 1);
4662 if (id != PCIY_PMG) /* Something wrong */
4664 /* OK, we have the power capabilities, so
4665 now get the status register */
4666 cap += PCIR_POWER_STATUS;
4667 status = pci_read_config(dev, cap, 2);
4668 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
4669 pci_write_config(dev, cap, status, 2);
4674 igb_led_func(void *arg, int onoff)
4676 struct adapter *adapter = arg;
4678 IGB_CORE_LOCK(adapter);
4680 e1000_setup_led(&adapter->hw);
4681 e1000_led_on(&adapter->hw);
4683 e1000_led_off(&adapter->hw);
4684 e1000_cleanup_led(&adapter->hw);
4686 IGB_CORE_UNLOCK(adapter);
4689 /**********************************************************************
4691 * Update the board statistics counters.
4693 **********************************************************************/
4695 igb_update_stats_counters(struct adapter *adapter)
4699 if (adapter->hw.phy.media_type == e1000_media_type_copper ||
4700 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
4701 adapter->stats.symerrs +=
4702 E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
4703 adapter->stats.sec +=
4704 E1000_READ_REG(&adapter->hw, E1000_SEC);
4706 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
4707 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);
4708 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC);
4709 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL);
4711 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC);
4712 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL);
4713 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC);
4714 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC);
4715 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC);
4716 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC);
4717 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC);
4718 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC);
4719 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC);
4720 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC);
4721 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64);
4722 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127);
4723 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255);
4724 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511);
4725 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023);
4726 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522);
4727 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC);
4728 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC);
4729 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC);
4730 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC);
4732 /* For the 64-bit byte counters the low dword must be read first. */
4733 /* Both registers clear on the read of the high dword */
4735 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) +
4736 ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32);
4737 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) +
4738 ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32) ;
4740 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
4741 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
4742 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC);
4743 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC);
4744 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC);
4746 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH);
4747 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH);
4749 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR);
4750 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT);
4751 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64);
4752 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127);
4753 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255);
4754 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511);
4755 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023);
4756 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522);
4757 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
4758 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
4760 /* Interrupt Counts */
4762 adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC);
4763 adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC);
4764 adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC);
4765 adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC);
4766 adapter->stats.ictxatc += E1000_READ_REG(&adapter->hw, E1000_ICTXATC);
4767 adapter->stats.ictxqec += E1000_READ_REG(&adapter->hw, E1000_ICTXQEC);
4768 adapter->stats.ictxqmtc += E1000_READ_REG(&adapter->hw, E1000_ICTXQMTC);
4769 adapter->stats.icrxdmtc += E1000_READ_REG(&adapter->hw, E1000_ICRXDMTC);
4770 adapter->stats.icrxoc += E1000_READ_REG(&adapter->hw, E1000_ICRXOC);
4772 /* Host to Card Statistics */
4774 adapter->stats.cbtmpc += E1000_READ_REG(&adapter->hw, E1000_CBTMPC);
4775 adapter->stats.htdpmc += E1000_READ_REG(&adapter->hw, E1000_HTDPMC);
4776 adapter->stats.cbrdpc += E1000_READ_REG(&adapter->hw, E1000_CBRDPC);
4777 adapter->stats.cbrmpc += E1000_READ_REG(&adapter->hw, E1000_CBRMPC);
4778 adapter->stats.rpthc += E1000_READ_REG(&adapter->hw, E1000_RPTHC);
4779 adapter->stats.hgptc += E1000_READ_REG(&adapter->hw, E1000_HGPTC);
4780 adapter->stats.htcbdpc += E1000_READ_REG(&adapter->hw, E1000_HTCBDPC);
4781 adapter->stats.hgorc += (E1000_READ_REG(&adapter->hw, E1000_HGORCL) +
4782 ((u64)E1000_READ_REG(&adapter->hw,
4783 E1000_HGORCH) << 32));
4785 adapter->stats.hgotc += (E1000_READ_REG(&adapter->hw, E1000_HGOTCL) +
4786 ((u64)E1000_READ_REG(&adapter->hw,
4787 E1000_HGOTCH) << 32));
4788 adapter->stats.lenerrs += E1000_READ_REG(&adapter->hw, E1000_LENERRS);
4789 adapter->stats.scvpc += E1000_READ_REG(&adapter->hw, E1000_SCVPC);
4790 adapter->stats.hrmpc += E1000_READ_REG(&adapter->hw, E1000_HRMPC);
4792 adapter->stats.algnerrc +=
4793 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC);
4794 adapter->stats.rxerrc +=
4795 E1000_READ_REG(&adapter->hw, E1000_RXERRC);
4796 adapter->stats.tncrs +=
4797 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
4798 adapter->stats.cexterr +=
4799 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
4800 adapter->stats.tsctc +=
4801 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
4802 adapter->stats.tsctfc +=
4803 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
4806 ifp->if_collisions = adapter->stats.colc;
4809 ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc +
4810 adapter->stats.crcerrs + adapter->stats.algnerrc +
4811 adapter->stats.ruc + adapter->stats.roc +
4812 adapter->stats.mpc + adapter->stats.cexterr;
4815 ifp->if_oerrors = adapter->stats.ecol +
4816 adapter->stats.latecol + adapter->watchdog_events;
4820 /** igb_sysctl_tdh_handler - Handler function
4821 * Retrieves the TDH value from the hardware
4824 igb_sysctl_tdh_handler(SYSCTL_HANDLER_ARGS)
4828 struct tx_ring *txr = ((struct tx_ring *)oidp->oid_arg1);
4831 unsigned val = E1000_READ_REG(&txr->adapter->hw, E1000_TDH(txr->me));
4832 error = sysctl_handle_int(oidp, &val, 0, req);
4833 if (error || !req->newptr)
4838 /** igb_sysctl_tdt_handler - Handler function
4839 * Retrieves the TDT value from the hardware
4842 igb_sysctl_tdt_handler(SYSCTL_HANDLER_ARGS)
4846 struct tx_ring *txr = ((struct tx_ring *)oidp->oid_arg1);
4849 unsigned val = E1000_READ_REG(&txr->adapter->hw, E1000_TDT(txr->me));
4850 error = sysctl_handle_int(oidp, &val, 0, req);
4851 if (error || !req->newptr)
4856 /** igb_sysctl_rdh_handler - Handler function
4857 * Retrieves the RDH value from the hardware
4860 igb_sysctl_rdh_handler(SYSCTL_HANDLER_ARGS)
4864 struct rx_ring *rxr = ((struct rx_ring *)oidp->oid_arg1);
4867 unsigned val = E1000_READ_REG(&rxr->adapter->hw, E1000_RDH(rxr->me));
4868 error = sysctl_handle_int(oidp, &val, 0, req);
4869 if (error || !req->newptr)
4874 /** igb_sysctl_rdt_handler - Handler function
4875 * Retrieves the RDT value from the hardware
4878 igb_sysctl_rdt_handler(SYSCTL_HANDLER_ARGS)
4882 struct rx_ring *rxr = ((struct rx_ring *)oidp->oid_arg1);
4885 unsigned val = E1000_READ_REG(&rxr->adapter->hw, E1000_RDT(rxr->me));
4886 error = sysctl_handle_int(oidp, &val, 0, req);
4887 if (error || !req->newptr)
4893 * Add sysctl variables, one per statistic, to the system.
4896 igb_add_hw_stats(struct adapter *adapter)
4899 device_t dev = adapter->dev;
4901 struct tx_ring *txr = adapter->tx_rings;
4902 struct rx_ring *rxr = adapter->rx_rings;
4904 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
4905 struct sysctl_oid *tree = device_get_sysctl_tree(dev);
4906 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
4907 struct e1000_hw_stats *stats = &adapter->stats;
4909 struct sysctl_oid *stat_node, *queue_node, *int_node, *host_node;
4910 struct sysctl_oid_list *stat_list, *queue_list, *int_list, *host_list;
4912 #define QUEUE_NAME_LEN 32
4913 char namebuf[QUEUE_NAME_LEN];
4915 /* Driver Statistics */
4916 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "link_irq",
4917 CTLFLAG_RD, &adapter->link_irq, 0,
4918 "Link MSIX IRQ Handled");
4919 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped",
4920 CTLFLAG_RD, &adapter->dropped_pkts,
4921 "Driver dropped packets");
4922 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail",
4923 CTLFLAG_RD, &adapter->no_tx_dma_setup,
4924 "Driver tx dma failure in xmit");
4926 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "device_control",
4927 CTLFLAG_RD, &adapter->device_control,
4928 "Device Control Register");
4929 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "rx_control",
4930 CTLFLAG_RD, &adapter->rx_control,
4931 "Receiver Control Register");
4932 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "interrupt_mask",
4933 CTLFLAG_RD, &adapter->int_mask,
4935 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "extended_int_mask",
4936 CTLFLAG_RD, &adapter->eint_mask,
4937 "Extended Interrupt Mask");
4938 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_buf_alloc",
4939 CTLFLAG_RD, &adapter->packet_buf_alloc_tx,
4940 "Transmit Buffer Packet Allocation");
4941 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "rx_buf_alloc",
4942 CTLFLAG_RD, &adapter->packet_buf_alloc_rx,
4943 "Receive Buffer Packet Allocation");
4944 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_high_water",
4945 CTLFLAG_RD, &adapter->hw.fc.high_water, 0,
4946 "Flow Control High Watermark");
4947 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_low_water",
4948 CTLFLAG_RD, &adapter->hw.fc.low_water, 0,
4949 "Flow Control Low Watermark");
4951 for (int i = 0; i < adapter->num_queues; i++, txr++) {
4952 snprintf(namebuf, QUEUE_NAME_LEN, "queue%d", i);
4953 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
4954 CTLFLAG_RD, NULL, "Queue Name");
4955 queue_list = SYSCTL_CHILDREN(queue_node);
4957 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_head",
4958 CTLFLAG_RD, txr, sizeof(txr),
4959 igb_sysctl_tdh_handler, "IU",
4960 "Transmit Descriptor Head");
4961 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_tail",
4962 CTLFLAG_RD, txr, sizeof(txr),
4963 igb_sysctl_tdt_handler, "IU",
4964 "Transmit Descriptor Tail");
4965 SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "no_desc_avail",
4966 CTLFLAG_RD, &txr->no_desc_avail,
4967 "Queue No Descriptor Available");
4968 SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "tx_packets",
4969 CTLFLAG_RD, &txr->tx_packets,
4970 "Queue Packets Transmitted");
4973 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4974 struct lro_ctrl *lro = &rxr->lro;
4976 snprintf(namebuf, QUEUE_NAME_LEN, "queue%d", i);
4977 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
4978 CTLFLAG_RD, NULL, "Queue Name");
4979 queue_list = SYSCTL_CHILDREN(queue_node);
4981 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_head",
4982 CTLFLAG_RD, rxr, sizeof(rxr),
4983 igb_sysctl_rdh_handler, "IU",
4984 "Receive Descriptor Head");
4985 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_tail",
4986 CTLFLAG_RD, rxr, sizeof(rxr),
4987 igb_sysctl_rdt_handler, "IU",
4988 "Receive Descriptor Tail");
4989 SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "rx_packets",
4990 CTLFLAG_RD, &rxr->rx_packets,
4991 "Queue Packets Received");
4992 SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "rx_bytes",
4993 CTLFLAG_RD, &rxr->rx_bytes,
4994 "Queue Bytes Received");
4995 SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "lro_queued",
4996 CTLFLAG_RD, &lro->lro_queued, 0,
4998 SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "lro_flushed",
4999 CTLFLAG_RD, &lro->lro_flushed, 0,
5003 /* MAC stats get the own sub node */
5005 stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats",
5006 CTLFLAG_RD, NULL, "MAC Statistics");
5007 stat_list = SYSCTL_CHILDREN(stat_node);
5009 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "excess_coll",
5010 CTLFLAG_RD, &stats->ecol,
5011 "Excessive collisions");
5012 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "single_coll",
5013 CTLFLAG_RD, &stats->scc,
5014 "Single collisions");
5015 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "multiple_coll",
5016 CTLFLAG_RD, &stats->mcc,
5017 "Multiple collisions");
5018 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "late_coll",
5019 CTLFLAG_RD, &stats->latecol,
5021 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "collision_count",
5022 CTLFLAG_RD, &stats->colc,
5024 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "symbol_errors",
5025 CTLFLAG_RD, &adapter->stats.symerrs,
5027 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "sequence_errors",
5028 CTLFLAG_RD, &adapter->stats.sec,
5030 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "defer_count",
5031 CTLFLAG_RD, &adapter->stats.dc,
5033 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "missed_packets",
5034 CTLFLAG_RD, &adapter->stats.mpc,
5036 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_no_buff",
5037 CTLFLAG_RD, &adapter->stats.rnbc,
5038 "Receive No Buffers");
5039 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_undersize",
5040 CTLFLAG_RD, &adapter->stats.ruc,
5041 "Receive Undersize");
5042 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_fragmented",
5043 CTLFLAG_RD, &adapter->stats.rfc,
5044 "Fragmented Packets Received ");
5045 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_oversize",
5046 CTLFLAG_RD, &adapter->stats.roc,
5047 "Oversized Packets Received");
5048 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_jabber",
5049 CTLFLAG_RD, &adapter->stats.rjc,
5052 /* RLEC is inaccurate on some hardware, calculate our own. */
5053 /* SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_len_errs", */
5054 /* CTLFLAG_RD, adapter->stats.roc + adapter->stats.ruc, */
5055 /* "Receive Length Errors"); */
5057 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "recv_errs",
5058 CTLFLAG_RD, &adapter->stats.rxerrc,
5060 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "crc_errs",
5061 CTLFLAG_RD, &adapter->stats.crcerrs,
5063 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "alignment_errs",
5064 CTLFLAG_RD, &adapter->stats.algnerrc,
5065 "Alignment Errors");
5066 /* On 82575 these are collision counts */
5067 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "coll_ext_errs",
5068 CTLFLAG_RD, &adapter->stats.cexterr,
5069 "Collision/Carrier extension errors");
5070 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_overruns",
5071 CTLFLAG_RD, &adapter->rx_overruns,
5073 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "watchdog_timeouts",
5074 CTLFLAG_RD, &adapter->watchdog_events,
5075 "Watchdog timeouts");
5076 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "xon_recvd",
5077 CTLFLAG_RD, &adapter->stats.xonrxc,
5079 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "xon_txd",
5080 CTLFLAG_RD, &adapter->stats.xontxc,
5082 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "xoff_recvd",
5083 CTLFLAG_RD, &adapter->stats.xoffrxc,
5085 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "xoff_txd",
5086 CTLFLAG_RD, &adapter->stats.xofftxc,
5087 "XOFF Transmitted");
5088 /* Packet Reception Stats */
5089 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_pkts_recvd",
5090 CTLFLAG_RD, &adapter->stats.tpr,
5091 "Total Packets Received ");
5092 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_pkts_recvd",
5093 CTLFLAG_RD, &adapter->stats.gprc,
5094 "Good Packets Received");
5095 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_recvd",
5096 CTLFLAG_RD, &adapter->stats.bprc,
5097 "Broadcast Packets Received");
5098 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_recvd",
5099 CTLFLAG_RD, &adapter->stats.mprc,
5100 "Multicast Packets Received");
5101 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_64",
5102 CTLFLAG_RD, &adapter->stats.prc64,
5103 "64 byte frames received ");
5104 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_65_127",
5105 CTLFLAG_RD, &adapter->stats.prc127,
5106 "65-127 byte frames received");
5107 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_128_255",
5108 CTLFLAG_RD, &adapter->stats.prc255,
5109 "128-255 byte frames received");
5110 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_256_511",
5111 CTLFLAG_RD, &adapter->stats.prc511,
5112 "256-511 byte frames received");
5113 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_512_1023",
5114 CTLFLAG_RD, &adapter->stats.prc1023,
5115 "512-1023 byte frames received");
5116 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "rx_frames_1024_1522",
5117 CTLFLAG_RD, &adapter->stats.prc1522,
5118 "1023-1522 byte frames received");
5119 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_octets_recvd",
5120 CTLFLAG_RD, &adapter->stats.gorc,
5121 "Good Octets Received");
5123 /* Packet Transmission Stats */
5124 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_octest_txd",
5125 CTLFLAG_RD, &adapter->stats.gotc,
5126 "Good Octest Transmitted");
5127 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_pkts_txd",
5128 CTLFLAG_RD, &adapter->stats.tpt,
5129 "Total Packets Transmitted");
5130 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd",
5131 CTLFLAG_RD, &adapter->stats.gptc,
5132 "Good Packets Transmitted");
5133 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_txd",
5134 CTLFLAG_RD, &adapter->stats.bptc,
5135 "Broadcast Packets Transmitted");
5136 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_txd",
5137 CTLFLAG_RD, &adapter->stats.mptc,
5138 "Multicast Packets Transmitted");
5139 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_64",
5140 CTLFLAG_RD, &adapter->stats.ptc64,
5141 "64 byte frames transmitted ");
5142 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_65_127",
5143 CTLFLAG_RD, &adapter->stats.ptc127,
5144 "65-127 byte frames transmitted");
5145 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_128_255",
5146 CTLFLAG_RD, &adapter->stats.ptc255,
5147 "128-255 byte frames transmitted");
5148 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_256_511",
5149 CTLFLAG_RD, &adapter->stats.ptc511,
5150 "256-511 byte frames transmitted");
5151 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_512_1023",
5152 CTLFLAG_RD, &adapter->stats.ptc1023,
5153 "512-1023 byte frames transmitted");
5154 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tx_frames_1024_1522",
5155 CTLFLAG_RD, &adapter->stats.ptc1522,
5156 "1024-1522 byte frames transmitted");
5157 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tso_txd",
5158 CTLFLAG_RD, &adapter->stats.tsctc,
5159 "TSO Contexts Transmitted");
5160 SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "tso_ctx_fail",
5161 CTLFLAG_RD, &adapter->stats.tsctfc,
5162 "TSO Contexts Failed");
5165 /* Interrupt Stats */
5167 int_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "interrupts",
5168 CTLFLAG_RD, NULL, "Interrupt Statistics");
5169 int_list = SYSCTL_CHILDREN(int_node);
5171 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "asserts",
5172 CTLFLAG_RD, &adapter->stats.iac,
5173 "Interrupt Assertion Count");
5175 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "rx_pkt_timer",
5176 CTLFLAG_RD, &adapter->stats.icrxptc,
5177 "Interrupt Cause Rx Pkt Timer Expire Count");
5179 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "rx_abs_timer",
5180 CTLFLAG_RD, &adapter->stats.icrxatc,
5181 "Interrupt Cause Rx Abs Timer Expire Count");
5183 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "tx_pkt_timer",
5184 CTLFLAG_RD, &adapter->stats.ictxptc,
5185 "Interrupt Cause Tx Pkt Timer Expire Count");
5187 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "tx_abs_timer",
5188 CTLFLAG_RD, &adapter->stats.ictxatc,
5189 "Interrupt Cause Tx Abs Timer Expire Count");
5191 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "tx_queue_empty",
5192 CTLFLAG_RD, &adapter->stats.ictxqec,
5193 "Interrupt Cause Tx Queue Empty Count");
5195 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "tx_queue_min_thresh",
5196 CTLFLAG_RD, &adapter->stats.ictxqmtc,
5197 "Interrupt Cause Tx Queue Min Thresh Count");
5199 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "rx_desc_min_thresh",
5200 CTLFLAG_RD, &adapter->stats.icrxdmtc,
5201 "Interrupt Cause Rx Desc Min Thresh Count");
5203 SYSCTL_ADD_QUAD(ctx, int_list, OID_AUTO, "rx_overrun",
5204 CTLFLAG_RD, &adapter->stats.icrxoc,
5205 "Interrupt Cause Receiver Overrun Count");
5207 /* Host to Card Stats */
5209 host_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "host",
5211 "Host to Card Statistics");
5213 host_list = SYSCTL_CHILDREN(host_node);
5215 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "breaker_tx_pkt",
5216 CTLFLAG_RD, &adapter->stats.cbtmpc,
5217 "Circuit Breaker Tx Packet Count");
5219 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "host_tx_pkt_discard",
5220 CTLFLAG_RD, &adapter->stats.htdpmc,
5221 "Host Transmit Discarded Packets");
5223 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "rx_pkt",
5224 CTLFLAG_RD, &adapter->stats.rpthc,
5225 "Rx Packets To Host");
5227 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "breaker_rx_pkts",
5228 CTLFLAG_RD, &adapter->stats.cbrmpc,
5229 "Circuit Breaker Rx Packet Count");
5231 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "breaker_rx_pkt_drop",
5232 CTLFLAG_RD, &adapter->stats.cbrdpc,
5233 "Circuit Breaker Rx Dropped Count");
5235 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "tx_good_pkt",
5236 CTLFLAG_RD, &adapter->stats.hgptc,
5237 "Host Good Packets Tx Count");
5239 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "breaker_tx_pkt_drop",
5240 CTLFLAG_RD, &adapter->stats.htcbdpc,
5241 "Host Tx Circuit Breaker Dropped Count");
5243 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "rx_good_bytes",
5244 CTLFLAG_RD, &adapter->stats.hgorc,
5245 "Host Good Octets Received Count");
5247 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "tx_good_bytes",
5248 CTLFLAG_RD, &adapter->stats.hgotc,
5249 "Host Good Octets Transmit Count");
5251 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "length_errors",
5252 CTLFLAG_RD, &adapter->stats.lenerrs,
5255 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "serdes_violation_pkt",
5256 CTLFLAG_RD, &adapter->stats.scvpc,
5257 "SerDes/SGMII Code Violation Pkt Count");
5259 SYSCTL_ADD_QUAD(ctx, host_list, OID_AUTO, "header_redir_missed",
5260 CTLFLAG_RD, &adapter->stats.hrmpc,
5261 "Header Redirection Missed Packet Count");
5265 /**********************************************************************
5267 * This routine provides a way to dump out the adapter eeprom,
5268 * often a useful debug/service tool. This only dumps the first
5269 * 32 words, stuff that matters is in that extent.
5271 **********************************************************************/
5273 igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS)
5275 struct adapter *adapter;
5280 error = sysctl_handle_int(oidp, &result, 0, req);
5282 if (error || !req->newptr)
5286 * This value will cause a hex dump of the
5287 * first 32 16-bit words of the EEPROM to
5291 adapter = (struct adapter *)arg1;
5292 igb_print_nvm_info(adapter);
5299 igb_print_nvm_info(struct adapter *adapter)
5304 /* Its a bit crude, but it gets the job done */
5305 printf("\nInterface EEPROM Dump:\n");
5306 printf("Offset\n0x0000 ");
5307 for (i = 0, j = 0; i < 32; i++, j++) {
5308 if (j == 8) { /* Make the offset block */
5310 printf("\n0x00%x0 ",row);
5312 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data);
5313 printf("%04x ", eeprom_data);
5319 igb_add_rx_process_limit(struct adapter *adapter, const char *name,
5320 const char *description, int *limit, int value)
5323 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
5324 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5325 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);