Home | History | Annotate | Line # | Download | only in ixgbe
ixgbe.c revision 1.1.2.3
      1 /******************************************************************************
      2 
      3   Copyright (c) 2001-2011, Intel Corporation
      4   All rights reserved.
      5 
      6   Redistribution and use in source and binary forms, with or without
      7   modification, are permitted provided that the following conditions are met:
      8 
      9    1. Redistributions of source code must retain the above copyright notice,
     10       this list of conditions and the following disclaimer.
     11 
     12    2. Redistributions in binary form must reproduce the above copyright
     13       notice, this list of conditions and the following disclaimer in the
     14       documentation and/or other materials provided with the distribution.
     15 
     16    3. Neither the name of the Intel Corporation nor the names of its
     17       contributors may be used to endorse or promote products derived from
     18       this software without specific prior written permission.
     19 
     20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     30   POSSIBILITY OF SUCH DAMAGE.
     31 
     32 ******************************************************************************/
     33 /*
     34  * Copyright (c) 2011 The NetBSD Foundation, Inc.
     35  * All rights reserved.
     36  *
     37  * This code is derived from software contributed to The NetBSD Foundation
     38  * by Coyote Point Systems, Inc.
     39  *
     40  * Redistribution and use in source and binary forms, with or without
     41  * modification, are permitted provided that the following conditions
     42  * are met:
     43  * 1. Redistributions of source code must retain the above copyright
     44  *    notice, this list of conditions and the following disclaimer.
     45  * 2. Redistributions in binary form must reproduce the above copyright
     46  *    notice, this list of conditions and the following disclaimer in the
     47  *    documentation and/or other materials provided with the distribution.
     48  *
     49  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     50  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     51  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     52  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     53  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     54  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     55  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     56  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     57  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     58  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     59  * POSSIBILITY OF SUCH DAMAGE.
     60  */
     61 /*$FreeBSD: src/sys/dev/ixgbe/ixgbe.c,v 1.51 2011/04/25 23:34:21 jfv Exp $*/
     62 /*$NetBSD: ixgbe.c,v 1.1.2.3 2014/05/22 11:40:34 yamt Exp $*/
     63 
     64 #include "opt_inet.h"
     65 
     66 #include "ixgbe.h"
     67 
     68 /*********************************************************************
     69  *  Set this to one to display debug statistics
     70  *********************************************************************/
     71 int             ixgbe_display_debug_stats = 0;
     72 
     73 /*********************************************************************
     74  *  Driver version
     75  *********************************************************************/
     76 char ixgbe_driver_version[] = "2.3.10";
     77 
     78 /*********************************************************************
     79  *  PCI Device ID Table
     80  *
     81  *  Used by probe to select devices to load on
     82  *  Last field stores an index into ixgbe_strings
     83  *  Last entry must be all 0s
     84  *
     85  *  { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
     86  *********************************************************************/
     87 
     88 static ixgbe_vendor_info_t ixgbe_vendor_info_array[] =
     89 {
     90 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AF_DUAL_PORT, 0, 0, 0},
     91 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AF_SINGLE_PORT, 0, 0, 0},
     92 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_CX4, 0, 0, 0},
     93 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AT, 0, 0, 0},
     94 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AT2, 0, 0, 0},
     95 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598, 0, 0, 0},
     96 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_DA_DUAL_PORT, 0, 0, 0},
     97 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_CX4_DUAL_PORT, 0, 0, 0},
     98 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_XF_LR, 0, 0, 0},
     99 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM, 0, 0, 0},
    100 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_SFP_LOM, 0, 0, 0},
    101 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_KX4, 0, 0, 0},
    102 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_KX4_MEZZ, 0, 0, 0},
    103 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP, 0, 0, 0},
    104 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_XAUI_LOM, 0, 0, 0},
    105 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_CX4, 0, 0, 0},
    106 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_T3_LOM, 0, 0, 0},
    107 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_COMBO_BACKPLANE, 0, 0, 0},
    108 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_BACKPLANE_FCOE, 0, 0, 0},
    109 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_FCOE, 0, 0, 0},
    110 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_DELL, 0, 0, 0},
    111 	/* required last entry */
    112 	{0, 0, 0, 0, 0}
    113 };
    114 
    115 /*********************************************************************
    116  *  Table of branding strings
    117  *********************************************************************/
    118 
    119 static const char    *ixgbe_strings[] = {
    120 	"Intel(R) PRO/10GbE PCI-Express Network Driver"
    121 };
    122 
    123 /*********************************************************************
    124  *  Function prototypes
    125  *********************************************************************/
    126 static int      ixgbe_probe(device_t, cfdata_t, void *);
    127 static void     ixgbe_attach(device_t, device_t, void *);
    128 static int      ixgbe_detach(device_t, int);
    129 #if 0
    130 static int      ixgbe_shutdown(device_t);
    131 #endif
    132 static void     ixgbe_start(struct ifnet *);
    133 static void     ixgbe_start_locked(struct tx_ring *, struct ifnet *);
    134 #if __FreeBSD_version >= 800000
    135 static int	ixgbe_mq_start(struct ifnet *, struct mbuf *);
    136 static int	ixgbe_mq_start_locked(struct ifnet *,
    137                     struct tx_ring *, struct mbuf *);
    138 static void	ixgbe_qflush(struct ifnet *);
    139 #endif
    140 static int      ixgbe_ioctl(struct ifnet *, u_long, void *);
    141 static void	ixgbe_ifstop(struct ifnet *, int);
    142 static int	ixgbe_init(struct ifnet *);
    143 static void	ixgbe_init_locked(struct adapter *);
    144 static void     ixgbe_stop(void *);
    145 static void     ixgbe_media_status(struct ifnet *, struct ifmediareq *);
    146 static int      ixgbe_media_change(struct ifnet *);
    147 static void     ixgbe_identify_hardware(struct adapter *);
    148 static int      ixgbe_allocate_pci_resources(struct adapter *,
    149 		    const struct pci_attach_args *);
    150 static int      ixgbe_allocate_msix(struct adapter *,
    151 		    const struct pci_attach_args *);
    152 static int      ixgbe_allocate_legacy(struct adapter *,
    153 		    const struct pci_attach_args *);
    154 static int	ixgbe_allocate_queues(struct adapter *);
    155 static int	ixgbe_setup_msix(struct adapter *);
    156 static void	ixgbe_free_pci_resources(struct adapter *);
    157 static void	ixgbe_local_timer(void *);
    158 static int	ixgbe_setup_interface(device_t, struct adapter *);
    159 static void	ixgbe_config_link(struct adapter *);
    160 
    161 static int      ixgbe_allocate_transmit_buffers(struct tx_ring *);
    162 static int	ixgbe_setup_transmit_structures(struct adapter *);
    163 static void	ixgbe_setup_transmit_ring(struct tx_ring *);
    164 static void     ixgbe_initialize_transmit_units(struct adapter *);
    165 static void     ixgbe_free_transmit_structures(struct adapter *);
    166 static void     ixgbe_free_transmit_buffers(struct tx_ring *);
    167 
    168 static int      ixgbe_allocate_receive_buffers(struct rx_ring *);
    169 static int      ixgbe_setup_receive_structures(struct adapter *);
    170 static int	ixgbe_setup_receive_ring(struct rx_ring *);
    171 static void     ixgbe_initialize_receive_units(struct adapter *);
    172 static void     ixgbe_free_receive_structures(struct adapter *);
    173 static void     ixgbe_free_receive_buffers(struct rx_ring *);
    174 static void	ixgbe_setup_hw_rsc(struct rx_ring *);
    175 
    176 static void     ixgbe_enable_intr(struct adapter *);
    177 static void     ixgbe_disable_intr(struct adapter *);
    178 static void     ixgbe_update_stats_counters(struct adapter *);
    179 static bool	ixgbe_txeof(struct tx_ring *);
    180 static bool	ixgbe_rxeof(struct ix_queue *, int);
    181 static void	ixgbe_rx_checksum(u32, struct mbuf *, u32,
    182 		    struct ixgbe_hw_stats *);
    183 static void     ixgbe_set_promisc(struct adapter *);
    184 static void     ixgbe_set_multi(struct adapter *);
    185 static void     ixgbe_update_link_status(struct adapter *);
    186 static void	ixgbe_refresh_mbufs(struct rx_ring *, int);
    187 static int      ixgbe_xmit(struct tx_ring *, struct mbuf *);
    188 static int	ixgbe_set_flowcntl(SYSCTLFN_PROTO);
    189 static int	ixgbe_set_advertise(SYSCTLFN_PROTO);
    190 static int	ixgbe_dma_malloc(struct adapter *, bus_size_t,
    191 		    struct ixgbe_dma_alloc *, int);
    192 static void     ixgbe_dma_free(struct adapter *, struct ixgbe_dma_alloc *);
    193 static void	ixgbe_add_rx_process_limit(struct adapter *, const char *,
    194 		    const char *, int *, int);
    195 static u32	ixgbe_tx_ctx_setup(struct tx_ring *, struct mbuf *);
    196 static bool	ixgbe_tso_setup(struct tx_ring *, struct mbuf *, u32 *);
    197 static void	ixgbe_set_ivar(struct adapter *, u8, u8, s8);
    198 static void	ixgbe_configure_ivars(struct adapter *);
    199 static u8 *	ixgbe_mc_array_itr(struct ixgbe_hw *, u8 **, u32 *);
    200 
    201 static void	ixgbe_setup_vlan_hw_support(struct adapter *);
    202 #if 0
    203 static void	ixgbe_register_vlan(void *, struct ifnet *, u16);
    204 static void	ixgbe_unregister_vlan(void *, struct ifnet *, u16);
    205 #endif
    206 
    207 static void     ixgbe_add_hw_stats(struct adapter *adapter);
    208 
    209 static __inline void ixgbe_rx_discard(struct rx_ring *, int);
    210 static __inline void ixgbe_rx_input(struct rx_ring *, struct ifnet *,
    211 		    struct mbuf *, u32);
    212 
    213 /* Support for pluggable optic modules */
    214 static bool	ixgbe_sfp_probe(struct adapter *);
    215 static void	ixgbe_setup_optics(struct adapter *);
    216 
    217 /* Legacy (single vector interrupt handler */
    218 static int	ixgbe_legacy_irq(void *);
    219 
    220 #if defined(NETBSD_MSI_OR_MSIX)
    221 /* The MSI/X Interrupt handlers */
    222 static void	ixgbe_msix_que(void *);
    223 static void	ixgbe_msix_link(void *);
    224 #endif
    225 
    226 /* Software interrupts for deferred work */
    227 static void	ixgbe_handle_que(void *);
    228 static void	ixgbe_handle_link(void *);
    229 static void	ixgbe_handle_msf(void *);
    230 static void	ixgbe_handle_mod(void *);
    231 
    232 const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);
    233 static ixgbe_vendor_info_t *ixgbe_lookup(const struct pci_attach_args *);
    234 
    235 #ifdef IXGBE_FDIR
    236 static void	ixgbe_atr(struct tx_ring *, struct mbuf *);
    237 static void	ixgbe_reinit_fdir(void *, int);
    238 #endif
    239 
    240 /*********************************************************************
    241  *  FreeBSD Device Interface Entry Points
    242  *********************************************************************/
    243 
    244 CFATTACH_DECL3_NEW(ixg, sizeof(struct adapter),
    245     ixgbe_probe, ixgbe_attach, ixgbe_detach, NULL, NULL, NULL,
    246     DVF_DETACH_SHUTDOWN);
    247 
    248 #if 0
    249 devclass_t ixgbe_devclass;
    250 DRIVER_MODULE(ixgbe, pci, ixgbe_driver, ixgbe_devclass, 0, 0);
    251 
    252 MODULE_DEPEND(ixgbe, pci, 1, 1, 1);
    253 MODULE_DEPEND(ixgbe, ether, 1, 1, 1);
    254 #endif
    255 
    256 /*
    257 ** TUNEABLE PARAMETERS:
    258 */
    259 
    260 /*
    261 ** AIM: Adaptive Interrupt Moderation
    262 ** which means that the interrupt rate
    263 ** is varied over time based on the
    264 ** traffic for that interrupt vector
    265 */
    266 static int ixgbe_enable_aim = TRUE;
    267 #define TUNABLE_INT(__x, __y)
    268 TUNABLE_INT("hw.ixgbe.enable_aim", &ixgbe_enable_aim);
    269 
    270 static int ixgbe_max_interrupt_rate = (8000000 / IXGBE_LOW_LATENCY);
    271 TUNABLE_INT("hw.ixgbe.max_interrupt_rate", &ixgbe_max_interrupt_rate);
    272 
    273 /* How many packets rxeof tries to clean at a time */
    274 static int ixgbe_rx_process_limit = 256;
    275 TUNABLE_INT("hw.ixgbe.rx_process_limit", &ixgbe_rx_process_limit);
    276 
    277 /* Flow control setting, default to full */
    278 static int ixgbe_flow_control = ixgbe_fc_full;
    279 TUNABLE_INT("hw.ixgbe.flow_control", &ixgbe_flow_control);
    280 
    281 /*
    282 ** Smart speed setting, default to on
    283 ** this only works as a compile option
    284 ** right now as its during attach, set
    285 ** this to 'ixgbe_smart_speed_off' to
    286 ** disable.
    287 */
    288 static int ixgbe_smart_speed = ixgbe_smart_speed_on;
    289 
    290 /*
    291  * MSIX should be the default for best performance,
    292  * but this allows it to be forced off for testing.
    293  */
    294 static int ixgbe_enable_msix = 1;
    295 TUNABLE_INT("hw.ixgbe.enable_msix", &ixgbe_enable_msix);
    296 
    297 /*
    298  * Header split: this causes the hardware to DMA
    299  * the header into a separate mbuf from the payload,
    300  * it can be a performance win in some workloads, but
    301  * in others it actually hurts, its off by default.
    302  */
    303 static bool ixgbe_header_split = FALSE;
    304 TUNABLE_INT("hw.ixgbe.hdr_split", &ixgbe_header_split);
    305 
    306 #if defined(NETBSD_MSI_OR_MSIX)
    307 /*
    308  * Number of Queues, can be set to 0,
    309  * it then autoconfigures based on the
    310  * number of cpus with a max of 8. This
    311  * can be overriden manually here.
    312  */
    313 static int ixgbe_num_queues = 0;
    314 TUNABLE_INT("hw.ixgbe.num_queues", &ixgbe_num_queues);
    315 #endif
    316 
    317 /*
    318 ** Number of TX descriptors per ring,
    319 ** setting higher than RX as this seems
    320 ** the better performing choice.
    321 */
    322 static int ixgbe_txd = PERFORM_TXD;
    323 TUNABLE_INT("hw.ixgbe.txd", &ixgbe_txd);
    324 
    325 /* Number of RX descriptors per ring */
    326 static int ixgbe_rxd = PERFORM_RXD;
    327 TUNABLE_INT("hw.ixgbe.rxd", &ixgbe_rxd);
    328 
    329 /* Keep running tab on them for sanity check */
    330 static int ixgbe_total_ports;
    331 
    332 #ifdef IXGBE_FDIR
    333 /*
    334 ** For Flow Director: this is the
    335 ** number of TX packets we sample
    336 ** for the filter pool, this means
    337 ** every 20th packet will be probed.
    338 **
    339 ** This feature can be disabled by
    340 ** setting this to 0.
    341 */
    342 static int atr_sample_rate = 20;
    343 /*
    344 ** Flow Director actually 'steals'
    345 ** part of the packet buffer as its
    346 ** filter pool, this variable controls
    347 ** how much it uses:
    348 **  0 = 64K, 1 = 128K, 2 = 256K
    349 */
    350 static int fdir_pballoc = 1;
    351 #endif
    352 
    353 /*********************************************************************
    354  *  Device identification routine
    355  *
    356  *  ixgbe_probe determines if the driver should be loaded on
    357  *  adapter based on PCI vendor/device id of the adapter.
    358  *
    359  *  return 1 on success, 0 on failure
    360  *********************************************************************/
    361 
    362 static int
    363 ixgbe_probe(device_t dev, cfdata_t cf, void *aux)
    364 {
    365 	const struct pci_attach_args *pa = aux;
    366 
    367 	return (ixgbe_lookup(pa) != NULL) ? 1 : 0;
    368 }
    369 
    370 static ixgbe_vendor_info_t *
    371 ixgbe_lookup(const struct pci_attach_args *pa)
    372 {
    373 	pcireg_t subid;
    374 	ixgbe_vendor_info_t *ent;
    375 
    376 	INIT_DEBUGOUT("ixgbe_probe: begin");
    377 
    378 	if (PCI_VENDOR(pa->pa_id) != IXGBE_INTEL_VENDOR_ID)
    379 		return NULL;
    380 
    381 	subid = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_SUBSYS_ID_REG);
    382 
    383 	for (ent = ixgbe_vendor_info_array; ent->vendor_id != 0; ent++) {
    384 		if (PCI_VENDOR(pa->pa_id) == ent->vendor_id &&
    385 		    PCI_PRODUCT(pa->pa_id) == ent->device_id &&
    386 
    387 		    (PCI_SUBSYS_VENDOR(subid) == ent->subvendor_id ||
    388 		     ent->subvendor_id == 0) &&
    389 
    390 		    (PCI_SUBSYS_ID(subid) == ent->subdevice_id ||
    391 		     ent->subdevice_id == 0)) {
    392 			++ixgbe_total_ports;
    393 			return ent;
    394 		}
    395 	}
    396 	return NULL;
    397 }
    398 
    399 
    400 static void
    401 ixgbe_sysctl_attach(struct adapter *adapter)
    402 {
    403 	struct sysctllog **log;
    404 	const struct sysctlnode *rnode, *cnode;
    405 	device_t dev;
    406 
    407 	dev = adapter->dev;
    408 	log = &adapter->sysctllog;
    409 
    410 	if ((rnode = ixgbe_sysctl_instance(adapter)) == NULL) {
    411 		aprint_error_dev(dev, "could not create sysctl root\n");
    412 		return;
    413 	}
    414 
    415 	if (sysctl_createv(log, 0, &rnode, &cnode,
    416 	    CTLFLAG_READONLY, CTLTYPE_INT,
    417 	    "num_rx_desc", SYSCTL_DESCR("Number of rx descriptors"),
    418 	    NULL, 0, &adapter->num_rx_desc, 0, CTL_CREATE, CTL_EOL) != 0)
    419 		aprint_error_dev(dev, "could not create sysctl\n");
    420 
    421 	if (sysctl_createv(log, 0, &rnode, &cnode,
    422 	    CTLFLAG_READONLY, CTLTYPE_INT,
    423 	    "num_queues", SYSCTL_DESCR("Number of queues"),
    424 	    NULL, 0, &adapter->num_queues, 0, CTL_CREATE, CTL_EOL) != 0)
    425 		aprint_error_dev(dev, "could not create sysctl\n");
    426 
    427 	if (sysctl_createv(log, 0, &rnode, &cnode,
    428 	    CTLFLAG_READWRITE, CTLTYPE_INT,
    429 	    "flow_control", SYSCTL_DESCR("Flow Control"),
    430 	    ixgbe_set_flowcntl, 0, (void *)adapter, 0, CTL_CREATE, CTL_EOL) != 0)
    431 		aprint_error_dev(dev, "could not create sysctl\n");
    432 
    433 	if (sysctl_createv(log, 0, &rnode, &cnode,
    434 	    CTLFLAG_READWRITE, CTLTYPE_INT,
    435 	    "advertise_gig", SYSCTL_DESCR("1G Link"),
    436 	    ixgbe_set_advertise, 0, (void *)adapter, 0, CTL_CREATE, CTL_EOL) != 0)
    437 		aprint_error_dev(dev, "could not create sysctl\n");
    438 
    439 	/* XXX This is an *instance* sysctl controlling a *global* variable.
    440 	 * XXX It's that way in the FreeBSD driver that this derives from.
    441 	 */
    442 	if (sysctl_createv(log, 0, &rnode, &cnode,
    443 	    CTLFLAG_READWRITE, CTLTYPE_INT,
    444 	    "enable_aim", SYSCTL_DESCR("Interrupt Moderation"),
    445 	    NULL, 0, &ixgbe_enable_aim, 0, CTL_CREATE, CTL_EOL) != 0)
    446 		aprint_error_dev(dev, "could not create sysctl\n");
    447 }
    448 
    449 /*********************************************************************
    450  *  Device initialization routine
    451  *
    452  *  The attach entry point is called when the driver is being loaded.
    453  *  This routine identifies the type of hardware, allocates all resources
    454  *  and initializes the hardware.
    455  *
    456  *  return 0 on success, positive on failure
    457  *********************************************************************/
    458 
    459 static void
    460 ixgbe_attach(device_t parent, device_t dev, void *aux)
    461 {
    462 	struct adapter *adapter;
    463 	struct ixgbe_hw *hw;
    464 	int             error = 0;
    465 	u16		csum;
    466 	u32		ctrl_ext;
    467 	ixgbe_vendor_info_t *ent;
    468 	const struct pci_attach_args *pa = aux;
    469 
    470 	INIT_DEBUGOUT("ixgbe_attach: begin");
    471 
    472 	/* Allocate, clear, and link in our adapter structure */
    473 	adapter = device_private(dev);
    474 	adapter->dev = adapter->osdep.dev = dev;
    475 	hw = &adapter->hw;
    476 	adapter->osdep.pc = pa->pa_pc;
    477 	adapter->osdep.tag = pa->pa_tag;
    478 	adapter->osdep.dmat = pa->pa_dmat;
    479 
    480 	ent = ixgbe_lookup(pa);
    481 
    482 	KASSERT(ent != NULL);
    483 
    484 	aprint_normal(": %s, Version - %s\n",
    485 	    ixgbe_strings[ent->index], ixgbe_driver_version);
    486 
    487 	/* Core Lock Init*/
    488 	IXGBE_CORE_LOCK_INIT(adapter, device_xname(dev));
    489 
    490 	/* SYSCTL APIs */
    491 
    492 	ixgbe_sysctl_attach(adapter);
    493 
    494 	/* Set up the timer callout */
    495 	callout_init(&adapter->timer, 0);
    496 
    497 	/* Determine hardware revision */
    498 	ixgbe_identify_hardware(adapter);
    499 
    500 	/* Do base PCI setup - map BAR0 */
    501 	if (ixgbe_allocate_pci_resources(adapter, pa)) {
    502 		aprint_error_dev(dev, "Allocation of PCI resources failed\n");
    503 		error = ENXIO;
    504 		goto err_out;
    505 	}
    506 
    507 	/* Do descriptor calc and sanity checks */
    508 	if (((ixgbe_txd * sizeof(union ixgbe_adv_tx_desc)) % DBA_ALIGN) != 0 ||
    509 	    ixgbe_txd < MIN_TXD || ixgbe_txd > MAX_TXD) {
    510 		aprint_error_dev(dev, "TXD config issue, using default!\n");
    511 		adapter->num_tx_desc = DEFAULT_TXD;
    512 	} else
    513 		adapter->num_tx_desc = ixgbe_txd;
    514 
    515 	/*
    516 	** With many RX rings it is easy to exceed the
    517 	** system mbuf allocation. Tuning nmbclusters
    518 	** can alleviate this.
    519 	*/
    520 	if (nmbclusters > 0 ) {
    521 		int s;
    522 		s = (ixgbe_rxd * adapter->num_queues) * ixgbe_total_ports;
    523 		if (s > nmbclusters) {
    524 			aprint_error_dev(dev, "RX Descriptors exceed "
    525 			    "system mbuf max, using default instead!\n");
    526 			ixgbe_rxd = DEFAULT_RXD;
    527 		}
    528 	}
    529 
    530 	if (((ixgbe_rxd * sizeof(union ixgbe_adv_rx_desc)) % DBA_ALIGN) != 0 ||
    531 	    ixgbe_rxd < MIN_TXD || ixgbe_rxd > MAX_TXD) {
    532 		aprint_error_dev(dev, "RXD config issue, using default!\n");
    533 		adapter->num_rx_desc = DEFAULT_RXD;
    534 	} else
    535 		adapter->num_rx_desc = ixgbe_rxd;
    536 
    537 	/* Allocate our TX/RX Queues */
    538 	if (ixgbe_allocate_queues(adapter)) {
    539 		error = ENOMEM;
    540 		goto err_out;
    541 	}
    542 
    543 	/* Allocate multicast array memory. */
    544 	adapter->mta = malloc(sizeof(u8) * IXGBE_ETH_LENGTH_OF_ADDRESS *
    545 	    MAX_NUM_MULTICAST_ADDRESSES, M_DEVBUF, M_NOWAIT);
    546 	if (adapter->mta == NULL) {
    547 		aprint_error_dev(dev, "Cannot allocate multicast setup array\n");
    548 		error = ENOMEM;
    549 		goto err_late;
    550 	}
    551 
    552 	/* Initialize the shared code */
    553 	error = ixgbe_init_shared_code(hw);
    554 	if (error == IXGBE_ERR_SFP_NOT_PRESENT) {
    555 		/*
    556 		** No optics in this port, set up
    557 		** so the timer routine will probe
    558 		** for later insertion.
    559 		*/
    560 		adapter->sfp_probe = TRUE;
    561 		error = 0;
    562 	} else if (error == IXGBE_ERR_SFP_NOT_SUPPORTED) {
    563 		aprint_error_dev(dev,"Unsupported SFP+ module detected!\n");
    564 		error = EIO;
    565 		goto err_late;
    566 	} else if (error) {
    567 		aprint_error_dev(dev,"Unable to initialize the shared code\n");
    568 		error = EIO;
    569 		goto err_late;
    570 	}
    571 
    572 	/* Make sure we have a good EEPROM before we read from it */
    573 	if (ixgbe_validate_eeprom_checksum(&adapter->hw, &csum) < 0) {
    574 		aprint_error_dev(dev,"The EEPROM Checksum Is Not Valid\n");
    575 		error = EIO;
    576 		goto err_late;
    577 	}
    578 
    579 	/* Get Hardware Flow Control setting */
    580 	hw->fc.requested_mode = ixgbe_fc_full;
    581 	hw->fc.pause_time = IXGBE_FC_PAUSE;
    582 	hw->fc.low_water = IXGBE_FC_LO;
    583 	hw->fc.high_water = IXGBE_FC_HI;
    584 	hw->fc.send_xon = TRUE;
    585 
    586 	error = ixgbe_init_hw(hw);
    587 	if (error == IXGBE_ERR_EEPROM_VERSION) {
    588 		aprint_error_dev(dev, "This device is a pre-production adapter/"
    589 		    "LOM.  Please be aware there may be issues associated "
    590 		    "with your hardware.\n If you are experiencing problems "
    591 		    "please contact your Intel or hardware representative "
    592 		    "who provided you with this hardware.\n");
    593 	} else if (error == IXGBE_ERR_SFP_NOT_SUPPORTED)
    594 		aprint_error_dev(dev,"Unsupported SFP+ Module\n");
    595 
    596 	if (error) {
    597 		error = EIO;
    598 		aprint_error_dev(dev,"Hardware Initialization Failure\n");
    599 		goto err_late;
    600 	}
    601 
    602 	/* Detect and set physical type */
    603 	ixgbe_setup_optics(adapter);
    604 
    605 	if ((adapter->msix > 1) && (ixgbe_enable_msix))
    606 		error = ixgbe_allocate_msix(adapter, pa);
    607 	else
    608 		error = ixgbe_allocate_legacy(adapter, pa);
    609 	if (error)
    610 		goto err_late;
    611 
    612 	/* Setup OS specific network interface */
    613 	if (ixgbe_setup_interface(dev, adapter) != 0)
    614 		goto err_late;
    615 
    616 	/* Sysctl for limiting the amount of work done in software interrupts */
    617 	ixgbe_add_rx_process_limit(adapter, "rx_processing_limit",
    618 	    "max number of rx packets to process", &adapter->rx_process_limit,
    619 	    ixgbe_rx_process_limit);
    620 
    621 	/* Initialize statistics */
    622 	ixgbe_update_stats_counters(adapter);
    623 
    624         /* Print PCIE bus type/speed/width info */
    625 	ixgbe_get_bus_info(hw);
    626 	aprint_normal_dev(dev,"PCI Express Bus: Speed %s %s\n",
    627 	    ((hw->bus.speed == ixgbe_bus_speed_5000) ? "5.0Gb/s":
    628 	    (hw->bus.speed == ixgbe_bus_speed_2500) ? "2.5Gb/s":"Unknown"),
    629 	    (hw->bus.width == ixgbe_bus_width_pcie_x8) ? "Width x8" :
    630 	    (hw->bus.width == ixgbe_bus_width_pcie_x4) ? "Width x4" :
    631 	    (hw->bus.width == ixgbe_bus_width_pcie_x1) ? "Width x1" :
    632 	    ("Unknown"));
    633 
    634 	if ((hw->bus.width <= ixgbe_bus_width_pcie_x4) &&
    635 	    (hw->bus.speed == ixgbe_bus_speed_2500)) {
    636 		aprint_error_dev(dev, "PCI-Express bandwidth available"
    637 		    " for this card\n     is not sufficient for"
    638 		    " optimal performance.\n");
    639 		aprint_error_dev(dev, "For optimal performance a x8 "
    640 		    "PCIE, or x4 PCIE 2 slot is required.\n");
    641         }
    642 
    643 	/* let hardware know driver is loaded */
    644 	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
    645 	ctrl_ext |= IXGBE_CTRL_EXT_DRV_LOAD;
    646 	IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
    647 
    648 	ixgbe_add_hw_stats(adapter);
    649 
    650 	INIT_DEBUGOUT("ixgbe_attach: end");
    651 	return;
    652 err_late:
    653 	ixgbe_free_transmit_structures(adapter);
    654 	ixgbe_free_receive_structures(adapter);
    655 err_out:
    656 	if (adapter->ifp != NULL)
    657 		if_free(adapter->ifp);
    658 	ixgbe_free_pci_resources(adapter);
    659 	if (adapter->mta != NULL)
    660 		free(adapter->mta, M_DEVBUF);
    661 	return;
    662 
    663 }
    664 
    665 /*********************************************************************
    666  *  Device removal routine
    667  *
    668  *  The detach entry point is called when the driver is being removed.
    669  *  This routine stops the adapter and deallocates all the resources
    670  *  that were allocated for driver operation.
    671  *
    672  *  return 0 on success, positive on failure
    673  *********************************************************************/
    674 
    675 static int
    676 ixgbe_detach(device_t dev, int flags)
    677 {
    678 	struct adapter *adapter = device_private(dev);
    679 	struct tx_ring *txr = adapter->tx_rings;
    680 	struct rx_ring *rxr = adapter->rx_rings;
    681 	struct ixgbe_hw_stats *stats = &adapter->stats;
    682 	struct ix_queue *que = adapter->queues;
    683 	u32	ctrl_ext;
    684 
    685 	INIT_DEBUGOUT("ixgbe_detach: begin");
    686 
    687 	/* Make sure VLANs are not using driver */
    688 	if (!VLAN_ATTACHED(&adapter->osdep.ec))
    689 		;	/* nothing to do: no VLANs */
    690 	else if ((flags & (DETACH_SHUTDOWN|DETACH_FORCE)) != 0)
    691 		vlan_ifdetach(adapter->ifp);
    692 	else {
    693 		aprint_error_dev(dev, "VLANs in use\n");
    694 		return EBUSY;
    695 	}
    696 
    697 	IXGBE_CORE_LOCK(adapter);
    698 	ixgbe_stop(adapter);
    699 	IXGBE_CORE_UNLOCK(adapter);
    700 
    701 	for (int i = 0; i < adapter->num_queues; i++, que++) {
    702 		softint_disestablish(que->que_si);
    703 	}
    704 
    705 	/* Drain the Link queue */
    706 	softint_disestablish(adapter->link_si);
    707 	softint_disestablish(adapter->mod_si);
    708 	softint_disestablish(adapter->msf_si);
    709 #ifdef IXGBE_FDIR
    710 	softint_disestablish(adapter->fdir_si);
    711 #endif
    712 
    713 	/* let hardware know driver is unloading */
    714 	ctrl_ext = IXGBE_READ_REG(&adapter->hw, IXGBE_CTRL_EXT);
    715 	ctrl_ext &= ~IXGBE_CTRL_EXT_DRV_LOAD;
    716 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_CTRL_EXT, ctrl_ext);
    717 
    718 	ether_ifdetach(adapter->ifp);
    719 	callout_halt(&adapter->timer, NULL);
    720 	ixgbe_free_pci_resources(adapter);
    721 #if 0	/* XXX the NetBSD port is probably missing something here */
    722 	bus_generic_detach(dev);
    723 #endif
    724 	if_detach(adapter->ifp);
    725 
    726 	sysctl_teardown(&adapter->sysctllog);
    727 	evcnt_detach(&adapter->handleq);
    728 	evcnt_detach(&adapter->req);
    729 	evcnt_detach(&adapter->morerx);
    730 	evcnt_detach(&adapter->moretx);
    731 	evcnt_detach(&adapter->txloops);
    732 	evcnt_detach(&adapter->efbig_tx_dma_setup);
    733 	evcnt_detach(&adapter->m_defrag_failed);
    734 	evcnt_detach(&adapter->efbig2_tx_dma_setup);
    735 	evcnt_detach(&adapter->einval_tx_dma_setup);
    736 	evcnt_detach(&adapter->other_tx_dma_setup);
    737 	evcnt_detach(&adapter->eagain_tx_dma_setup);
    738 	evcnt_detach(&adapter->enomem_tx_dma_setup);
    739 	evcnt_detach(&adapter->watchdog_events);
    740 	evcnt_detach(&adapter->tso_err);
    741 	evcnt_detach(&adapter->tso_tx);
    742 	evcnt_detach(&adapter->link_irq);
    743 	for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
    744 		evcnt_detach(&txr->no_desc_avail);
    745 		evcnt_detach(&txr->total_packets);
    746 
    747 		if (i < __arraycount(adapter->stats.mpc)) {
    748 			evcnt_detach(&adapter->stats.mpc[i]);
    749 		}
    750 		if (i < __arraycount(adapter->stats.pxontxc)) {
    751 			evcnt_detach(&adapter->stats.pxontxc[i]);
    752 			evcnt_detach(&adapter->stats.pxonrxc[i]);
    753 			evcnt_detach(&adapter->stats.pxofftxc[i]);
    754 			evcnt_detach(&adapter->stats.pxoffrxc[i]);
    755 			evcnt_detach(&adapter->stats.pxon2offc[i]);
    756 		}
    757 		if (i < __arraycount(adapter->stats.qprc)) {
    758 			evcnt_detach(&adapter->stats.qprc[i]);
    759 			evcnt_detach(&adapter->stats.qptc[i]);
    760 			evcnt_detach(&adapter->stats.qbrc[i]);
    761 			evcnt_detach(&adapter->stats.qbtc[i]);
    762 			evcnt_detach(&adapter->stats.qprdc[i]);
    763 		}
    764 
    765 		evcnt_detach(&rxr->rx_packets);
    766 		evcnt_detach(&rxr->rx_bytes);
    767 		evcnt_detach(&rxr->no_jmbuf);
    768 		evcnt_detach(&rxr->rx_discarded);
    769 		evcnt_detach(&rxr->rx_split_packets);
    770 		evcnt_detach(&rxr->rx_irq);
    771 	}
    772 	evcnt_detach(&stats->ipcs);
    773 	evcnt_detach(&stats->l4cs);
    774 	evcnt_detach(&stats->ipcs_bad);
    775 	evcnt_detach(&stats->l4cs_bad);
    776 	evcnt_detach(&stats->intzero);
    777 	evcnt_detach(&stats->legint);
    778 	evcnt_detach(&stats->crcerrs);
    779 	evcnt_detach(&stats->illerrc);
    780 	evcnt_detach(&stats->errbc);
    781 	evcnt_detach(&stats->mspdc);
    782 	evcnt_detach(&stats->mlfc);
    783 	evcnt_detach(&stats->mrfc);
    784 	evcnt_detach(&stats->rlec);
    785 	evcnt_detach(&stats->lxontxc);
    786 	evcnt_detach(&stats->lxonrxc);
    787 	evcnt_detach(&stats->lxofftxc);
    788 	evcnt_detach(&stats->lxoffrxc);
    789 
    790 	/* Packet Reception Stats */
    791 	evcnt_detach(&stats->tor);
    792 	evcnt_detach(&stats->gorc);
    793 	evcnt_detach(&stats->tpr);
    794 	evcnt_detach(&stats->gprc);
    795 	evcnt_detach(&stats->mprc);
    796 	evcnt_detach(&stats->bprc);
    797 	evcnt_detach(&stats->prc64);
    798 	evcnt_detach(&stats->prc127);
    799 	evcnt_detach(&stats->prc255);
    800 	evcnt_detach(&stats->prc511);
    801 	evcnt_detach(&stats->prc1023);
    802 	evcnt_detach(&stats->prc1522);
    803 	evcnt_detach(&stats->ruc);
    804 	evcnt_detach(&stats->rfc);
    805 	evcnt_detach(&stats->roc);
    806 	evcnt_detach(&stats->rjc);
    807 	evcnt_detach(&stats->mngprc);
    808 	evcnt_detach(&stats->xec);
    809 
    810 	/* Packet Transmission Stats */
    811 	evcnt_detach(&stats->gotc);
    812 	evcnt_detach(&stats->tpt);
    813 	evcnt_detach(&stats->gptc);
    814 	evcnt_detach(&stats->bptc);
    815 	evcnt_detach(&stats->mptc);
    816 	evcnt_detach(&stats->mngptc);
    817 	evcnt_detach(&stats->ptc64);
    818 	evcnt_detach(&stats->ptc127);
    819 	evcnt_detach(&stats->ptc255);
    820 	evcnt_detach(&stats->ptc511);
    821 	evcnt_detach(&stats->ptc1023);
    822 	evcnt_detach(&stats->ptc1522);
    823 
    824 	/* FC Stats */
    825 	evcnt_detach(&stats->fccrc);
    826 	evcnt_detach(&stats->fclast);
    827 	if (adapter->hw.mac.type != ixgbe_mac_82598EB) {
    828 		evcnt_detach(&stats->fcoerpdc);
    829 		evcnt_detach(&stats->fcoeprc);
    830 		evcnt_detach(&stats->fcoeptc);
    831 		evcnt_detach(&stats->fcoedwrc);
    832 		evcnt_detach(&stats->fcoedwtc);
    833 	}
    834 
    835 	ixgbe_free_transmit_structures(adapter);
    836 	ixgbe_free_receive_structures(adapter);
    837 	free(adapter->mta, M_DEVBUF);
    838 
    839 	IXGBE_CORE_LOCK_DESTROY(adapter);
    840 	return (0);
    841 }
    842 
    843 /*********************************************************************
    844  *
    845  *  Shutdown entry point
    846  *
    847  **********************************************************************/
    848 
    849 #if 0 /* XXX NetBSD ought to register something like this through pmf(9) */
    850 static int
    851 ixgbe_shutdown(device_t dev)
    852 {
    853 	struct adapter *adapter = device_private(dev);
    854 	IXGBE_CORE_LOCK(adapter);
    855 	ixgbe_stop(adapter);
    856 	IXGBE_CORE_UNLOCK(adapter);
    857 	return (0);
    858 }
    859 #endif
    860 
    861 
    862 /*********************************************************************
    863  *  Transmit entry point
    864  *
    865  *  ixgbe_start is called by the stack to initiate a transmit.
    866  *  The driver will remain in this routine as long as there are
    867  *  packets to transmit and transmit resources are available.
    868  *  In case resources are not available stack is notified and
    869  *  the packet is requeued.
    870  **********************************************************************/
    871 
    872 static void
    873 ixgbe_start_locked(struct tx_ring *txr, struct ifnet * ifp)
    874 {
    875 	int rc;
    876 	struct mbuf    *m_head;
    877 	struct adapter *adapter = txr->adapter;
    878 
    879 	IXGBE_TX_LOCK_ASSERT(txr);
    880 
    881 	if ((ifp->if_flags & (IFF_RUNNING|IFF_OACTIVE)) !=
    882 	    IFF_RUNNING)
    883 		return;
    884 	if (!adapter->link_active)
    885 		return;
    886 
    887 	while (!IFQ_IS_EMPTY(&ifp->if_snd)) {
    888 
    889 		IFQ_POLL(&ifp->if_snd, m_head);
    890 		if (m_head == NULL)
    891 			break;
    892 
    893 		if ((rc = ixgbe_xmit(txr, m_head)) == EAGAIN) {
    894 			ifp->if_flags |= IFF_OACTIVE;
    895 			break;
    896 		}
    897 		IFQ_DEQUEUE(&ifp->if_snd, m_head);
    898 		if (rc == EFBIG) {
    899 			struct mbuf *mtmp;
    900 
    901 			if ((mtmp = m_defrag(m_head, M_DONTWAIT)) != NULL) {
    902 				m_head = mtmp;
    903 				rc = ixgbe_xmit(txr, m_head);
    904 				if (rc != 0)
    905 					adapter->efbig2_tx_dma_setup.ev_count++;
    906 			} else
    907 				adapter->m_defrag_failed.ev_count++;
    908 		}
    909 		if (rc != 0) {
    910 			m_freem(m_head);
    911 			continue;
    912 		}
    913 
    914 		/* Send a copy of the frame to the BPF listener */
    915 		bpf_mtap(ifp, m_head);
    916 
    917 		/* Set watchdog on */
    918 		getmicrotime(&txr->watchdog_time);
    919 		txr->queue_status = IXGBE_QUEUE_WORKING;
    920 
    921 	}
    922 	return;
    923 }
    924 
    925 /*
    926  * Legacy TX start - called by the stack, this
    927  * always uses the first tx ring, and should
    928  * not be used with multiqueue tx enabled.
    929  */
    930 static void
    931 ixgbe_start(struct ifnet *ifp)
    932 {
    933 	struct adapter *adapter = ifp->if_softc;
    934 	struct tx_ring	*txr = adapter->tx_rings;
    935 
    936 	if (ifp->if_flags & IFF_RUNNING) {
    937 		IXGBE_TX_LOCK(txr);
    938 		ixgbe_start_locked(txr, ifp);
    939 		IXGBE_TX_UNLOCK(txr);
    940 	}
    941 	return;
    942 }
    943 
    944 #if __FreeBSD_version >= 800000
    945 /*
    946 ** Multiqueue Transmit driver
    947 **
    948 */
    949 static int
    950 ixgbe_mq_start(struct ifnet *ifp, struct mbuf *m)
    951 {
    952 	struct adapter	*adapter = ifp->if_softc;
    953 	struct ix_queue	*que;
    954 	struct tx_ring	*txr;
    955 	int 		i = 0, err = 0;
    956 
    957 	/* Which queue to use */
    958 	if ((m->m_flags & M_FLOWID) != 0)
    959 		i = m->m_pkthdr.flowid % adapter->num_queues;
    960 
    961 	txr = &adapter->tx_rings[i];
    962 	que = &adapter->queues[i];
    963 
    964 	if (IXGBE_TX_TRYLOCK(txr)) {
    965 		err = ixgbe_mq_start_locked(ifp, txr, m);
    966 		IXGBE_TX_UNLOCK(txr);
    967 	} else {
    968 		err = drbr_enqueue(ifp, txr->br, m);
    969 		softint_schedule(que->que_si);
    970 	}
    971 
    972 	return (err);
    973 }
    974 
    975 static int
    976 ixgbe_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m)
    977 {
    978 	struct adapter  *adapter = txr->adapter;
    979         struct mbuf     *next;
    980         int             enqueued, err = 0;
    981 
    982 	if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) !=
    983 	    IFF_RUNNING || adapter->link_active == 0) {
    984 		if (m != NULL)
    985 			err = drbr_enqueue(ifp, txr->br, m);
    986 		return (err);
    987 	}
    988 
    989 	enqueued = 0;
    990 	if (m == NULL) {
    991 		next = drbr_dequeue(ifp, txr->br);
    992 	} else if (drbr_needs_enqueue(ifp, txr->br)) {
    993 		if ((err = drbr_enqueue(ifp, txr->br, m)) != 0)
    994 			return (err);
    995 		next = drbr_dequeue(ifp, txr->br);
    996 	} else
    997 		next = m;
    998 
    999 	/* Process the queue */
   1000 	while (next != NULL) {
   1001 		if ((err = ixgbe_xmit(txr, &next)) != 0) {
   1002 			if (next != NULL)
   1003 				err = drbr_enqueue(ifp, txr->br, next);
   1004 			break;
   1005 		}
   1006 		enqueued++;
   1007 		drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
   1008 		/* Send a copy of the frame to the BPF listener */
   1009 		bpf_mtap(ifp, next);
   1010 		if ((ifp->if_flags & IFF_RUNNING) == 0)
   1011 			break;
   1012 		if (txr->tx_avail < IXGBE_TX_OP_THRESHOLD)
   1013 			ixgbe_txeof(txr);
   1014 		if (txr->tx_avail < IXGBE_TX_OP_THRESHOLD) {
   1015 			ifp->if_flags |= IFF_OACTIVE;
   1016 			break;
   1017 		}
   1018 		next = drbr_dequeue(ifp, txr->br);
   1019 	}
   1020 
   1021 	if (enqueued > 0) {
   1022 		/* Set watchdog on */
   1023 		txr->queue_status = IXGBE_QUEUE_WORKING;
   1024 		getmicrotime(&txr->watchdog_time);
   1025 	}
   1026 
   1027 	return (err);
   1028 }
   1029 
   1030 /*
   1031 ** Flush all ring buffers
   1032 */
   1033 static void
   1034 ixgbe_qflush(struct ifnet *ifp)
   1035 {
   1036 	struct adapter	*adapter = ifp->if_softc;
   1037 	struct tx_ring	*txr = adapter->tx_rings;
   1038 	struct mbuf	*m;
   1039 
   1040 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
   1041 		IXGBE_TX_LOCK(txr);
   1042 		while ((m = buf_ring_dequeue_sc(txr->br)) != NULL)
   1043 			m_freem(m);
   1044 		IXGBE_TX_UNLOCK(txr);
   1045 	}
   1046 	if_qflush(ifp);
   1047 }
   1048 #endif /* __FreeBSD_version >= 800000 */
   1049 
   1050 static int
   1051 ixgbe_ifflags_cb(struct ethercom *ec)
   1052 {
   1053 	struct ifnet *ifp = &ec->ec_if;
   1054 	struct adapter *adapter = ifp->if_softc;
   1055 	int change = ifp->if_flags ^ adapter->if_flags, rc = 0;
   1056 
   1057 	IXGBE_CORE_LOCK(adapter);
   1058 
   1059 	if (change != 0)
   1060 		adapter->if_flags = ifp->if_flags;
   1061 
   1062 	if ((change & ~(IFF_CANTCHANGE|IFF_DEBUG)) != 0)
   1063 		rc = ENETRESET;
   1064 	else if ((change & (IFF_PROMISC | IFF_ALLMULTI)) != 0)
   1065 		ixgbe_set_promisc(adapter);
   1066 
   1067 	IXGBE_CORE_UNLOCK(adapter);
   1068 
   1069 	return rc;
   1070 }
   1071 
   1072 /*********************************************************************
   1073  *  Ioctl entry point
   1074  *
   1075  *  ixgbe_ioctl is called when the user wants to configure the
   1076  *  interface.
   1077  *
   1078  *  return 0 on success, positive on failure
   1079  **********************************************************************/
   1080 
   1081 static int
   1082 ixgbe_ioctl(struct ifnet * ifp, u_long command, void *data)
   1083 {
   1084 	struct adapter	*adapter = ifp->if_softc;
   1085 	struct ifcapreq *ifcr = data;
   1086 	struct ifreq	*ifr = data;
   1087 	int             error = 0;
   1088 	int l4csum_en;
   1089 	const int l4csum = IFCAP_CSUM_TCPv4_Rx|IFCAP_CSUM_UDPv4_Rx|
   1090 	     IFCAP_CSUM_TCPv6_Rx|IFCAP_CSUM_UDPv6_Rx;
   1091 
   1092 	switch (command) {
   1093 	case SIOCSIFFLAGS:
   1094 		IOCTL_DEBUGOUT("ioctl: SIOCSIFFLAGS (Set Interface Flags)");
   1095 		break;
   1096 	case SIOCADDMULTI:
   1097 	case SIOCDELMULTI:
   1098 		IOCTL_DEBUGOUT("ioctl: SIOC(ADD|DEL)MULTI");
   1099 		break;
   1100 	case SIOCSIFMEDIA:
   1101 	case SIOCGIFMEDIA:
   1102 		IOCTL_DEBUGOUT("ioctl: SIOCxIFMEDIA (Get/Set Interface Media)");
   1103 		break;
   1104 	case SIOCSIFCAP:
   1105 		IOCTL_DEBUGOUT("ioctl: SIOCSIFCAP (Set Capabilities)");
   1106 		break;
   1107 	case SIOCSIFMTU:
   1108 		IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
   1109 		break;
   1110 	default:
   1111 		IOCTL_DEBUGOUT1("ioctl: UNKNOWN (0x%X)\n", (int)command);
   1112 		break;
   1113 	}
   1114 
   1115 	switch (command) {
   1116 	case SIOCSIFMEDIA:
   1117 	case SIOCGIFMEDIA:
   1118 		return ifmedia_ioctl(ifp, ifr, &adapter->media, command);
   1119 	case SIOCSIFCAP:
   1120 		/* Layer-4 Rx checksum offload has to be turned on and
   1121 		 * off as a unit.
   1122 		 */
   1123 		l4csum_en = ifcr->ifcr_capenable & l4csum;
   1124 		if (l4csum_en != l4csum && l4csum_en != 0)
   1125 			return EINVAL;
   1126 		/*FALLTHROUGH*/
   1127 	case SIOCADDMULTI:
   1128 	case SIOCDELMULTI:
   1129 	case SIOCSIFFLAGS:
   1130 	case SIOCSIFMTU:
   1131 	default:
   1132 		if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
   1133 			return error;
   1134 		if ((ifp->if_flags & IFF_RUNNING) == 0)
   1135 			;
   1136 		else if (command == SIOCSIFCAP || command == SIOCSIFMTU) {
   1137 			IXGBE_CORE_LOCK(adapter);
   1138 			ixgbe_init_locked(adapter);
   1139 			IXGBE_CORE_UNLOCK(adapter);
   1140 		} else if (command == SIOCADDMULTI || command == SIOCDELMULTI) {
   1141 			/*
   1142 			 * Multicast list has changed; set the hardware filter
   1143 			 * accordingly.
   1144 			 */
   1145 			IXGBE_CORE_LOCK(adapter);
   1146 			ixgbe_disable_intr(adapter);
   1147 			ixgbe_set_multi(adapter);
   1148 			ixgbe_enable_intr(adapter);
   1149 			IXGBE_CORE_UNLOCK(adapter);
   1150 		}
   1151 		return 0;
   1152 	}
   1153 }
   1154 
   1155 /*********************************************************************
   1156  *  Init entry point
   1157  *
   1158  *  This routine is used in two ways. It is used by the stack as
   1159  *  init entry point in network interface structure. It is also used
   1160  *  by the driver as a hw/sw initialization routine to get to a
   1161  *  consistent state.
   1162  *
   1163  *  return 0 on success, positive on failure
   1164  **********************************************************************/
   1165 #define IXGBE_MHADD_MFS_SHIFT 16
   1166 
   1167 static void
   1168 ixgbe_init_locked(struct adapter *adapter)
   1169 {
   1170 	struct ifnet   *ifp = adapter->ifp;
   1171 	device_t 	dev = adapter->dev;
   1172 	struct ixgbe_hw *hw = &adapter->hw;
   1173 	u32		k, txdctl, mhadd, gpie;
   1174 	u32		rxdctl, rxctrl;
   1175 
   1176 	/* XXX check IFF_UP and IFF_RUNNING, power-saving state! */
   1177 
   1178 	KASSERT(mutex_owned(&adapter->core_mtx));
   1179 	INIT_DEBUGOUT("ixgbe_init: begin");
   1180 	hw->adapter_stopped = FALSE;
   1181 	ixgbe_stop_adapter(hw);
   1182         callout_stop(&adapter->timer);
   1183 
   1184 	/* XXX I moved this here from the SIOCSIFMTU case in ixgbe_ioctl(). */
   1185 	adapter->max_frame_size =
   1186 		ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
   1187 
   1188         /* reprogram the RAR[0] in case user changed it. */
   1189         ixgbe_set_rar(hw, 0, adapter->hw.mac.addr, 0, IXGBE_RAH_AV);
   1190 
   1191 	/* Get the latest mac address, User can use a LAA */
   1192 	memcpy(hw->mac.addr, CLLADDR(adapter->ifp->if_sadl),
   1193 	    IXGBE_ETH_LENGTH_OF_ADDRESS);
   1194 	ixgbe_set_rar(hw, 0, hw->mac.addr, 0, 1);
   1195 	hw->addr_ctrl.rar_used_count = 1;
   1196 
   1197 	/* Prepare transmit descriptors and buffers */
   1198 	if (ixgbe_setup_transmit_structures(adapter)) {
   1199 		device_printf(dev,"Could not setup transmit structures\n");
   1200 		ixgbe_stop(adapter);
   1201 		return;
   1202 	}
   1203 
   1204 	ixgbe_init_hw(hw);
   1205 	ixgbe_initialize_transmit_units(adapter);
   1206 
   1207 	/* Setup Multicast table */
   1208 	ixgbe_set_multi(adapter);
   1209 
   1210 	/*
   1211 	** Determine the correct mbuf pool
   1212 	** for doing jumbo/headersplit
   1213 	*/
   1214 	if (adapter->max_frame_size <= 2048)
   1215 		adapter->rx_mbuf_sz = MCLBYTES;
   1216 	else if (adapter->max_frame_size <= 4096)
   1217 		adapter->rx_mbuf_sz = MJUMPAGESIZE;
   1218 	else if (adapter->max_frame_size <= 9216)
   1219 		adapter->rx_mbuf_sz = MJUM9BYTES;
   1220 	else
   1221 		adapter->rx_mbuf_sz = MJUM16BYTES;
   1222 
   1223 	/* Prepare receive descriptors and buffers */
   1224 	if (ixgbe_setup_receive_structures(adapter)) {
   1225 		device_printf(dev,"Could not setup receive structures\n");
   1226 		ixgbe_stop(adapter);
   1227 		return;
   1228 	}
   1229 
   1230 	/* Configure RX settings */
   1231 	ixgbe_initialize_receive_units(adapter);
   1232 
   1233 	gpie = IXGBE_READ_REG(&adapter->hw, IXGBE_GPIE);
   1234 
   1235 	/* Enable Fan Failure Interrupt */
   1236 	gpie |= IXGBE_SDP1_GPIEN;
   1237 
   1238 	/* Add for Thermal detection */
   1239 	if (hw->mac.type == ixgbe_mac_82599EB)
   1240 		gpie |= IXGBE_SDP2_GPIEN;
   1241 
   1242 	if (adapter->msix > 1) {
   1243 		/* Enable Enhanced MSIX mode */
   1244 		gpie |= IXGBE_GPIE_MSIX_MODE;
   1245 		gpie |= IXGBE_GPIE_EIAME | IXGBE_GPIE_PBA_SUPPORT |
   1246 		    IXGBE_GPIE_OCD;
   1247 	}
   1248 	IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie);
   1249 
   1250 	/* Set MTU size */
   1251 	if (ifp->if_mtu > ETHERMTU) {
   1252 		mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD);
   1253 		mhadd &= ~IXGBE_MHADD_MFS_MASK;
   1254 		mhadd |= adapter->max_frame_size << IXGBE_MHADD_MFS_SHIFT;
   1255 		IXGBE_WRITE_REG(hw, IXGBE_MHADD, mhadd);
   1256 	}
   1257 
   1258 	/* Now enable all the queues */
   1259 
   1260 	for (int i = 0; i < adapter->num_queues; i++) {
   1261 		txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(i));
   1262 		txdctl |= IXGBE_TXDCTL_ENABLE;
   1263 		/* Set WTHRESH to 8, burst writeback */
   1264 		txdctl |= (8 << 16);
   1265 		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), txdctl);
   1266 	}
   1267 
   1268 	for (int i = 0; i < adapter->num_queues; i++) {
   1269 		rxdctl = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
   1270 		if (hw->mac.type == ixgbe_mac_82598EB) {
   1271 			/*
   1272 			** PTHRESH = 21
   1273 			** HTHRESH = 4
   1274 			** WTHRESH = 8
   1275 			*/
   1276 			rxdctl &= ~0x3FFFFF;
   1277 			rxdctl |= 0x080420;
   1278 		}
   1279 		rxdctl |= IXGBE_RXDCTL_ENABLE;
   1280 		IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), rxdctl);
   1281 		/* XXX I don't trust this loop, and I don't trust the
   1282 		 * XXX memory barrier.  What is this meant to do? --dyoung
   1283 		 */
   1284 		for (k = 0; k < 10; k++) {
   1285 			if (IXGBE_READ_REG(hw, IXGBE_RXDCTL(i)) &
   1286 			    IXGBE_RXDCTL_ENABLE)
   1287 				break;
   1288 			else
   1289 				msec_delay(1);
   1290 		}
   1291 		wmb();
   1292 		IXGBE_WRITE_REG(hw, IXGBE_RDT(i), adapter->num_rx_desc - 1);
   1293 	}
   1294 
   1295 	/* Set up VLAN support and filter */
   1296 	ixgbe_setup_vlan_hw_support(adapter);
   1297 
   1298 	/* Enable Receive engine */
   1299 	rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
   1300 	if (hw->mac.type == ixgbe_mac_82598EB)
   1301 		rxctrl |= IXGBE_RXCTRL_DMBYPS;
   1302 	rxctrl |= IXGBE_RXCTRL_RXEN;
   1303 	ixgbe_enable_rx_dma(hw, rxctrl);
   1304 
   1305 	callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter);
   1306 
   1307 	/* Set up MSI/X routing */
   1308 	if (ixgbe_enable_msix)  {
   1309 		ixgbe_configure_ivars(adapter);
   1310 		/* Set up auto-mask */
   1311 		if (hw->mac.type == ixgbe_mac_82598EB)
   1312 			IXGBE_WRITE_REG(hw, IXGBE_EIAM, IXGBE_EICS_RTX_QUEUE);
   1313 		else {
   1314 			IXGBE_WRITE_REG(hw, IXGBE_EIAM_EX(0), 0xFFFFFFFF);
   1315 			IXGBE_WRITE_REG(hw, IXGBE_EIAM_EX(1), 0xFFFFFFFF);
   1316 		}
   1317 	} else {  /* Simple settings for Legacy/MSI */
   1318                 ixgbe_set_ivar(adapter, 0, 0, 0);
   1319                 ixgbe_set_ivar(adapter, 0, 0, 1);
   1320 		IXGBE_WRITE_REG(hw, IXGBE_EIAM, IXGBE_EICS_RTX_QUEUE);
   1321 	}
   1322 
   1323 #ifdef IXGBE_FDIR
   1324 	/* Init Flow director */
   1325 	if (hw->mac.type != ixgbe_mac_82598EB)
   1326 		ixgbe_init_fdir_signature_82599(&adapter->hw, fdir_pballoc);
   1327 #endif
   1328 
   1329 	/*
   1330 	** Check on any SFP devices that
   1331 	** need to be kick-started
   1332 	*/
   1333 	if (hw->phy.type == ixgbe_phy_none) {
   1334 		int err = hw->phy.ops.identify(hw);
   1335 		if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
   1336                 	device_printf(dev,
   1337 			    "Unsupported SFP+ module type was detected.\n");
   1338 			return;
   1339         	}
   1340 	}
   1341 
   1342 	/* Set moderation on the Link interrupt */
   1343 	IXGBE_WRITE_REG(hw, IXGBE_EITR(adapter->linkvec), IXGBE_LINK_ITR);
   1344 
   1345 	/* Config/Enable Link */
   1346 	ixgbe_config_link(adapter);
   1347 
   1348 	/* And now turn on interrupts */
   1349 	ixgbe_enable_intr(adapter);
   1350 
   1351 	/* Now inform the stack we're ready */
   1352 	ifp->if_flags |= IFF_RUNNING;
   1353 	ifp->if_flags &= ~IFF_OACTIVE;
   1354 
   1355 	return;
   1356 }
   1357 
   1358 static int
   1359 ixgbe_init(struct ifnet *ifp)
   1360 {
   1361 	struct adapter *adapter = ifp->if_softc;
   1362 
   1363 	IXGBE_CORE_LOCK(adapter);
   1364 	ixgbe_init_locked(adapter);
   1365 	IXGBE_CORE_UNLOCK(adapter);
   1366 	return 0;	/* XXX ixgbe_init_locked cannot fail?  really? */
   1367 }
   1368 
   1369 
   1370 /*
   1371 **
   1372 ** MSIX Interrupt Handlers and Tasklets
   1373 **
   1374 */
   1375 
   1376 static inline void
   1377 ixgbe_enable_queue(struct adapter *adapter, u32 vector)
   1378 {
   1379 	struct ixgbe_hw *hw = &adapter->hw;
   1380 	u64	queue = (u64)(1ULL << vector);
   1381 	u32	mask;
   1382 
   1383 	if (hw->mac.type == ixgbe_mac_82598EB) {
   1384                 mask = (IXGBE_EIMS_RTX_QUEUE & queue);
   1385                 IXGBE_WRITE_REG(hw, IXGBE_EIMS, mask);
   1386 	} else {
   1387                 mask = (queue & 0xFFFFFFFF);
   1388                 if (mask)
   1389                         IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(0), mask);
   1390                 mask = (queue >> 32);
   1391                 if (mask)
   1392                         IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(1), mask);
   1393 	}
   1394 }
   1395 
   1396 __unused static inline void
   1397 ixgbe_disable_queue(struct adapter *adapter, u32 vector)
   1398 {
   1399 	struct ixgbe_hw *hw = &adapter->hw;
   1400 	u64	queue = (u64)(1ULL << vector);
   1401 	u32	mask;
   1402 
   1403 	if (hw->mac.type == ixgbe_mac_82598EB) {
   1404                 mask = (IXGBE_EIMS_RTX_QUEUE & queue);
   1405                 IXGBE_WRITE_REG(hw, IXGBE_EIMC, mask);
   1406 	} else {
   1407                 mask = (queue & 0xFFFFFFFF);
   1408                 if (mask)
   1409                         IXGBE_WRITE_REG(hw, IXGBE_EIMC_EX(0), mask);
   1410                 mask = (queue >> 32);
   1411                 if (mask)
   1412                         IXGBE_WRITE_REG(hw, IXGBE_EIMC_EX(1), mask);
   1413 	}
   1414 }
   1415 
   1416 static inline void
   1417 ixgbe_rearm_queues(struct adapter *adapter, u64 queues)
   1418 {
   1419 	u32 mask;
   1420 
   1421 	if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
   1422 		mask = (IXGBE_EIMS_RTX_QUEUE & queues);
   1423 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS, mask);
   1424 	} else {
   1425 		mask = (queues & 0xFFFFFFFF);
   1426 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(0), mask);
   1427 		mask = (queues >> 32);
   1428 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(1), mask);
   1429 	}
   1430 }
   1431 
   1432 
   1433 static void
   1434 ixgbe_handle_que(void *context)
   1435 {
   1436 	struct ix_queue *que = context;
   1437 	struct adapter  *adapter = que->adapter;
   1438 	struct tx_ring  *txr = que->txr;
   1439 	struct ifnet    *ifp = adapter->ifp;
   1440 	bool		more;
   1441 
   1442 	adapter->handleq.ev_count++;
   1443 
   1444 	if (ifp->if_flags & IFF_RUNNING) {
   1445 		more = ixgbe_rxeof(que, adapter->rx_process_limit);
   1446 		IXGBE_TX_LOCK(txr);
   1447 		ixgbe_txeof(txr);
   1448 #if __FreeBSD_version >= 800000
   1449 		if (!drbr_empty(ifp, txr->br))
   1450 			ixgbe_mq_start_locked(ifp, txr, NULL);
   1451 #else
   1452 		if (!IFQ_IS_EMPTY(&ifp->if_snd))
   1453 			ixgbe_start_locked(txr, ifp);
   1454 #endif
   1455 		IXGBE_TX_UNLOCK(txr);
   1456 		if (more) {
   1457 			adapter->req.ev_count++;
   1458 			softint_schedule(que->que_si);
   1459 			return;
   1460 		}
   1461 	}
   1462 
   1463 	/* Reenable this interrupt */
   1464 	ixgbe_enable_queue(adapter, que->msix);
   1465 
   1466 	return;
   1467 }
   1468 
   1469 
   1470 /*********************************************************************
   1471  *
   1472  *  Legacy Interrupt Service routine
   1473  *
   1474  **********************************************************************/
   1475 
   1476 static int
   1477 ixgbe_legacy_irq(void *arg)
   1478 {
   1479 	struct ix_queue *que = arg;
   1480 	struct adapter	*adapter = que->adapter;
   1481 	struct ixgbe_hw	*hw = &adapter->hw;
   1482 	struct 		tx_ring *txr = adapter->tx_rings;
   1483 	bool		more_tx, more_rx;
   1484 	u32       	reg_eicr, loop = MAX_LOOP;
   1485 
   1486 
   1487 	reg_eicr = IXGBE_READ_REG(hw, IXGBE_EICR);
   1488 
   1489 	adapter->stats.legint.ev_count++;
   1490 	++que->irqs;
   1491 	if (reg_eicr == 0) {
   1492 		adapter->stats.intzero.ev_count++;
   1493 		ixgbe_enable_intr(adapter);
   1494 		return 0;
   1495 	}
   1496 
   1497 	more_rx = ixgbe_rxeof(que, adapter->rx_process_limit);
   1498 
   1499 	IXGBE_TX_LOCK(txr);
   1500 	do {
   1501 		adapter->txloops.ev_count++;
   1502 		more_tx = ixgbe_txeof(txr);
   1503 	} while (loop-- && more_tx);
   1504 	IXGBE_TX_UNLOCK(txr);
   1505 
   1506 	if (more_rx || more_tx) {
   1507 		if (more_rx)
   1508 			adapter->morerx.ev_count++;
   1509 		if (more_tx)
   1510 			adapter->moretx.ev_count++;
   1511 		softint_schedule(que->que_si);
   1512 	}
   1513 
   1514 	/* Check for fan failure */
   1515 	if ((hw->phy.media_type == ixgbe_media_type_copper) &&
   1516 	    (reg_eicr & IXGBE_EICR_GPI_SDP1)) {
   1517                 device_printf(adapter->dev, "\nCRITICAL: FAN FAILURE!! "
   1518 		    "REPLACE IMMEDIATELY!!\n");
   1519 		IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EICR_GPI_SDP1);
   1520 	}
   1521 
   1522 	/* Link status change */
   1523 	if (reg_eicr & IXGBE_EICR_LSC)
   1524 		softint_schedule(adapter->link_si);
   1525 
   1526 	ixgbe_enable_intr(adapter);
   1527 	return 1;
   1528 }
   1529 
   1530 
   1531 #if defined(NETBSD_MSI_OR_MSIX)
   1532 /*********************************************************************
   1533  *
   1534  *  MSI Queue Interrupt Service routine
   1535  *
   1536  **********************************************************************/
   1537 void
   1538 ixgbe_msix_que(void *arg)
   1539 {
   1540 	struct ix_queue	*que = arg;
   1541 	struct adapter  *adapter = que->adapter;
   1542 	struct tx_ring	*txr = que->txr;
   1543 	struct rx_ring	*rxr = que->rxr;
   1544 	bool		more_tx, more_rx;
   1545 	u32		newitr = 0;
   1546 
   1547 	++que->irqs;
   1548 
   1549 	more_rx = ixgbe_rxeof(que, adapter->rx_process_limit);
   1550 
   1551 	IXGBE_TX_LOCK(txr);
   1552 	more_tx = ixgbe_txeof(txr);
   1553 	IXGBE_TX_UNLOCK(txr);
   1554 
   1555 	/* Do AIM now? */
   1556 
   1557 	if (ixgbe_enable_aim == FALSE)
   1558 		goto no_calc;
   1559 	/*
   1560 	** Do Adaptive Interrupt Moderation:
   1561         **  - Write out last calculated setting
   1562 	**  - Calculate based on average size over
   1563 	**    the last interval.
   1564 	*/
   1565         if (que->eitr_setting)
   1566                 IXGBE_WRITE_REG(&adapter->hw,
   1567                     IXGBE_EITR(que->msix), que->eitr_setting);
   1568 
   1569         que->eitr_setting = 0;
   1570 
   1571         /* Idle, do nothing */
   1572         if ((txr->bytes == 0) && (rxr->bytes == 0))
   1573                 goto no_calc;
   1574 
   1575 	if ((txr->bytes) && (txr->packets))
   1576                	newitr = txr->bytes/txr->packets;
   1577 	if ((rxr->bytes) && (rxr->packets))
   1578 		newitr = max(newitr,
   1579 		    (rxr->bytes / rxr->packets));
   1580 	newitr += 24; /* account for hardware frame, crc */
   1581 
   1582 	/* set an upper boundary */
   1583 	newitr = min(newitr, 3000);
   1584 
   1585 	/* Be nice to the mid range */
   1586 	if ((newitr > 300) && (newitr < 1200))
   1587 		newitr = (newitr / 3);
   1588 	else
   1589 		newitr = (newitr / 2);
   1590 
   1591         if (adapter->hw.mac.type == ixgbe_mac_82598EB)
   1592                 newitr |= newitr << 16;
   1593         else
   1594                 newitr |= IXGBE_EITR_CNT_WDIS;
   1595 
   1596         /* save for next interrupt */
   1597         que->eitr_setting = newitr;
   1598 
   1599         /* Reset state */
   1600         txr->bytes = 0;
   1601         txr->packets = 0;
   1602         rxr->bytes = 0;
   1603         rxr->packets = 0;
   1604 
   1605 no_calc:
   1606 	if (more_tx || more_rx)
   1607 		softint_schedule(que->que_si);
   1608 	else /* Reenable this interrupt */
   1609 		ixgbe_enable_queue(adapter, que->msix);
   1610 	return;
   1611 }
   1612 
   1613 
   1614 static void
   1615 ixgbe_msix_link(void *arg)
   1616 {
   1617 	struct adapter	*adapter = arg;
   1618 	struct ixgbe_hw *hw = &adapter->hw;
   1619 	u32		reg_eicr;
   1620 
   1621 	++adapter->link_irq.ev_count;
   1622 
   1623 	/* First get the cause */
   1624 	reg_eicr = IXGBE_READ_REG(hw, IXGBE_EICS);
   1625 	/* Clear interrupt with write */
   1626 	IXGBE_WRITE_REG(hw, IXGBE_EICR, reg_eicr);
   1627 
   1628 	/* Link status change */
   1629 	if (reg_eicr & IXGBE_EICR_LSC)
   1630 		softint_schedule(adapter->link_si);
   1631 
   1632 	if (adapter->hw.mac.type != ixgbe_mac_82598EB) {
   1633 #ifdef IXGBE_FDIR
   1634 		if (reg_eicr & IXGBE_EICR_FLOW_DIR) {
   1635 			/* This is probably overkill :) */
   1636 			if (!atomic_cmpset_int(&adapter->fdir_reinit, 0, 1))
   1637 				return;
   1638                 	/* Clear the interrupt */
   1639 			IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_FLOW_DIR);
   1640 			/* Turn off the interface */
   1641 			adapter->ifp->if_flags &= ~IFF_RUNNING;
   1642 			softint_schedule(adapter->fdir_si);
   1643 		} else
   1644 #endif
   1645 		if (reg_eicr & IXGBE_EICR_ECC) {
   1646                 	device_printf(adapter->dev, "\nCRITICAL: ECC ERROR!! "
   1647 			    "Please Reboot!!\n");
   1648 			IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC);
   1649 		} else
   1650 
   1651 		if (reg_eicr & IXGBE_EICR_GPI_SDP1) {
   1652                 	/* Clear the interrupt */
   1653                 	IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP1);
   1654 			softint_schedule(adapter->msf_si);
   1655         	} else if (reg_eicr & IXGBE_EICR_GPI_SDP2) {
   1656                 	/* Clear the interrupt */
   1657                 	IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP2);
   1658 			softint_schedule(adapter->mod_si);
   1659 		}
   1660         }
   1661 
   1662 	/* Check for fan failure */
   1663 	if ((hw->device_id == IXGBE_DEV_ID_82598AT) &&
   1664 	    (reg_eicr & IXGBE_EICR_GPI_SDP1)) {
   1665                 device_printf(adapter->dev, "\nCRITICAL: FAN FAILURE!! "
   1666 		    "REPLACE IMMEDIATELY!!\n");
   1667 		IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP1);
   1668 	}
   1669 
   1670 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMS, IXGBE_EIMS_OTHER);
   1671 	return;
   1672 }
   1673 #endif
   1674 
   1675 /*********************************************************************
   1676  *
   1677  *  Media Ioctl callback
   1678  *
   1679  *  This routine is called whenever the user queries the status of
   1680  *  the interface using ifconfig.
   1681  *
   1682  **********************************************************************/
   1683 static void
   1684 ixgbe_media_status(struct ifnet * ifp, struct ifmediareq * ifmr)
   1685 {
   1686 	struct adapter *adapter = ifp->if_softc;
   1687 
   1688 	INIT_DEBUGOUT("ixgbe_media_status: begin");
   1689 	IXGBE_CORE_LOCK(adapter);
   1690 	ixgbe_update_link_status(adapter);
   1691 
   1692 	ifmr->ifm_status = IFM_AVALID;
   1693 	ifmr->ifm_active = IFM_ETHER;
   1694 
   1695 	if (!adapter->link_active) {
   1696 		IXGBE_CORE_UNLOCK(adapter);
   1697 		return;
   1698 	}
   1699 
   1700 	ifmr->ifm_status |= IFM_ACTIVE;
   1701 
   1702 	switch (adapter->link_speed) {
   1703 		case IXGBE_LINK_SPEED_1GB_FULL:
   1704 			ifmr->ifm_active |= IFM_1000_T | IFM_FDX;
   1705 			break;
   1706 		case IXGBE_LINK_SPEED_10GB_FULL:
   1707 			ifmr->ifm_active |= adapter->optics | IFM_FDX;
   1708 			break;
   1709 	}
   1710 
   1711 	IXGBE_CORE_UNLOCK(adapter);
   1712 
   1713 	return;
   1714 }
   1715 
   1716 /*********************************************************************
   1717  *
   1718  *  Media Ioctl callback
   1719  *
   1720  *  This routine is called when the user changes speed/duplex using
   1721  *  media/mediopt option with ifconfig.
   1722  *
   1723  **********************************************************************/
   1724 static int
   1725 ixgbe_media_change(struct ifnet * ifp)
   1726 {
   1727 	struct adapter *adapter = ifp->if_softc;
   1728 	struct ifmedia *ifm = &adapter->media;
   1729 
   1730 	INIT_DEBUGOUT("ixgbe_media_change: begin");
   1731 
   1732 	if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
   1733 		return (EINVAL);
   1734 
   1735         switch (IFM_SUBTYPE(ifm->ifm_media)) {
   1736         case IFM_AUTO:
   1737                 adapter->hw.phy.autoneg_advertised =
   1738 		    IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_10GB_FULL;
   1739                 break;
   1740         default:
   1741                 device_printf(adapter->dev, "Only auto media type\n");
   1742 		return (EINVAL);
   1743         }
   1744 
   1745 	return (0);
   1746 }
   1747 
   1748 /*********************************************************************
   1749  *
   1750  *  This routine maps the mbufs to tx descriptors, allowing the
   1751  *  TX engine to transmit the packets.
   1752  *  	- return 0 on success, positive on failure
   1753  *
   1754  **********************************************************************/
   1755 
   1756 static int
   1757 ixgbe_xmit(struct tx_ring *txr, struct mbuf *m_head)
   1758 {
   1759 	struct m_tag *mtag;
   1760 	struct adapter  *adapter = txr->adapter;
   1761 	struct ethercom *ec = &adapter->osdep.ec;
   1762 	u32		olinfo_status = 0, cmd_type_len;
   1763 	u32		paylen = 0;
   1764 	int             i, j, error;
   1765 	int		first, last = 0;
   1766 	bus_dmamap_t	map;
   1767 	struct ixgbe_tx_buf *txbuf;
   1768 	union ixgbe_adv_tx_desc *txd = NULL;
   1769 
   1770 	/* Basic descriptor defines */
   1771         cmd_type_len = (IXGBE_ADVTXD_DTYP_DATA |
   1772 	    IXGBE_ADVTXD_DCMD_IFCS | IXGBE_ADVTXD_DCMD_DEXT);
   1773 
   1774 	if ((mtag = VLAN_OUTPUT_TAG(ec, m_head)) != NULL)
   1775         	cmd_type_len |= IXGBE_ADVTXD_DCMD_VLE;
   1776 
   1777         /*
   1778          * Important to capture the first descriptor
   1779          * used because it will contain the index of
   1780          * the one we tell the hardware to report back
   1781          */
   1782         first = txr->next_avail_desc;
   1783 	txbuf = &txr->tx_buffers[first];
   1784 	map = txbuf->map;
   1785 
   1786 	/*
   1787 	 * Map the packet for DMA.
   1788 	 */
   1789 	error = bus_dmamap_load_mbuf(txr->txtag->dt_dmat, map,
   1790 	    m_head, BUS_DMA_NOWAIT);
   1791 
   1792 	switch (error) {
   1793 	case EAGAIN:
   1794 		adapter->eagain_tx_dma_setup.ev_count++;
   1795 		return EAGAIN;
   1796 	case ENOMEM:
   1797 		adapter->enomem_tx_dma_setup.ev_count++;
   1798 		return EAGAIN;
   1799 	case EFBIG:
   1800 		adapter->efbig_tx_dma_setup.ev_count++;
   1801 		return error;
   1802 	case EINVAL:
   1803 		adapter->einval_tx_dma_setup.ev_count++;
   1804 		return error;
   1805 	default:
   1806 		adapter->other_tx_dma_setup.ev_count++;
   1807 		return error;
   1808 	case 0:
   1809 		break;
   1810 	}
   1811 
   1812 	/* Make certain there are enough descriptors */
   1813 	if (map->dm_nsegs > txr->tx_avail - 2) {
   1814 		txr->no_desc_avail.ev_count++;
   1815 		ixgbe_dmamap_unload(txr->txtag, txbuf->map);
   1816 		return EAGAIN;
   1817 	}
   1818 
   1819 	/*
   1820 	** Set up the appropriate offload context
   1821 	** this becomes the first descriptor of
   1822 	** a packet.
   1823 	*/
   1824 	if (m_head->m_pkthdr.csum_flags & (M_CSUM_TSOv4|M_CSUM_TSOv6)) {
   1825 		if (ixgbe_tso_setup(txr, m_head, &paylen)) {
   1826 			cmd_type_len |= IXGBE_ADVTXD_DCMD_TSE;
   1827 			olinfo_status |= IXGBE_TXD_POPTS_IXSM << 8;
   1828 			olinfo_status |= IXGBE_TXD_POPTS_TXSM << 8;
   1829 			olinfo_status |= paylen << IXGBE_ADVTXD_PAYLEN_SHIFT;
   1830 			++adapter->tso_tx.ev_count;
   1831 		} else {
   1832 			++adapter->tso_err.ev_count;
   1833 			/* XXX unload DMA map! --dyoung */
   1834 			return ENXIO;
   1835 		}
   1836 	} else
   1837 		olinfo_status |= ixgbe_tx_ctx_setup(txr, m_head);
   1838 
   1839 #ifdef IXGBE_IEEE1588
   1840         /* This is changing soon to an mtag detection */
   1841         if (we detect this mbuf has a TSTAMP mtag)
   1842                 cmd_type_len |= IXGBE_ADVTXD_MAC_TSTAMP;
   1843 #endif
   1844 
   1845 #ifdef IXGBE_FDIR
   1846 	/* Do the flow director magic */
   1847 	if ((txr->atr_sample) && (!adapter->fdir_reinit)) {
   1848 		++txr->atr_count;
   1849 		if (txr->atr_count >= atr_sample_rate) {
   1850 			ixgbe_atr(txr, m_head);
   1851 			txr->atr_count = 0;
   1852 		}
   1853 	}
   1854 #endif
   1855         /* Record payload length */
   1856 	if (paylen == 0)
   1857         	olinfo_status |= m_head->m_pkthdr.len <<
   1858 		    IXGBE_ADVTXD_PAYLEN_SHIFT;
   1859 
   1860 	i = txr->next_avail_desc;
   1861 	for (j = 0; j < map->dm_nsegs; j++) {
   1862 		bus_size_t seglen;
   1863 		bus_addr_t segaddr;
   1864 
   1865 		txbuf = &txr->tx_buffers[i];
   1866 		txd = &txr->tx_base[i];
   1867 		seglen = map->dm_segs[j].ds_len;
   1868 		segaddr = htole64(map->dm_segs[j].ds_addr);
   1869 
   1870 		txd->read.buffer_addr = segaddr;
   1871 		txd->read.cmd_type_len = htole32(txr->txd_cmd |
   1872 		    cmd_type_len |seglen);
   1873 		txd->read.olinfo_status = htole32(olinfo_status);
   1874 		last = i; /* descriptor that will get completion IRQ */
   1875 
   1876 		if (++i == adapter->num_tx_desc)
   1877 			i = 0;
   1878 
   1879 		txbuf->m_head = NULL;
   1880 		txbuf->eop_index = -1;
   1881 	}
   1882 
   1883 	txd->read.cmd_type_len |=
   1884 	    htole32(IXGBE_TXD_CMD_EOP | IXGBE_TXD_CMD_RS);
   1885 	txr->tx_avail -= map->dm_nsegs;
   1886 	txr->next_avail_desc = i;
   1887 
   1888 	txbuf->m_head = m_head;
   1889 	/* We exchange the maps instead of copying because otherwise
   1890 	 * we end up with many pointers to the same map and we free
   1891 	 * one map twice in ixgbe_free_transmit_structures().  Who
   1892 	 * knows what other problems this caused.  --dyoung
   1893 	 */
   1894 	txr->tx_buffers[first].map = txbuf->map;
   1895 	txbuf->map = map;
   1896 	bus_dmamap_sync(txr->txtag->dt_dmat, map, 0, m_head->m_pkthdr.len,
   1897 	    BUS_DMASYNC_PREWRITE);
   1898 
   1899         /* Set the index of the descriptor that will be marked done */
   1900         txbuf = &txr->tx_buffers[first];
   1901 	txbuf->eop_index = last;
   1902 
   1903         ixgbe_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
   1904 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
   1905 	/*
   1906 	 * Advance the Transmit Descriptor Tail (Tdt), this tells the
   1907 	 * hardware that this frame is available to transmit.
   1908 	 */
   1909 	++txr->total_packets.ev_count;
   1910 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_TDT(txr->me), i);
   1911 
   1912 	return 0;
   1913 }
   1914 
   1915 static void
   1916 ixgbe_set_promisc(struct adapter *adapter)
   1917 {
   1918 	u_int32_t       reg_rctl;
   1919 	struct ifnet   *ifp = adapter->ifp;
   1920 
   1921 	reg_rctl = IXGBE_READ_REG(&adapter->hw, IXGBE_FCTRL);
   1922 	reg_rctl &= (~IXGBE_FCTRL_UPE);
   1923 	reg_rctl &= (~IXGBE_FCTRL_MPE);
   1924 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, reg_rctl);
   1925 
   1926 	if (ifp->if_flags & IFF_PROMISC) {
   1927 		reg_rctl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
   1928 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, reg_rctl);
   1929 	} else if (ifp->if_flags & IFF_ALLMULTI) {
   1930 		reg_rctl |= IXGBE_FCTRL_MPE;
   1931 		reg_rctl &= ~IXGBE_FCTRL_UPE;
   1932 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, reg_rctl);
   1933 	}
   1934 	return;
   1935 }
   1936 
   1937 
   1938 /*********************************************************************
   1939  *  Multicast Update
   1940  *
   1941  *  This routine is called whenever multicast address list is updated.
   1942  *
   1943  **********************************************************************/
   1944 #define IXGBE_RAR_ENTRIES 16
   1945 
   1946 static void
   1947 ixgbe_set_multi(struct adapter *adapter)
   1948 {
   1949 	struct ether_multi *enm;
   1950 	struct ether_multistep step;
   1951 	u32	fctrl;
   1952 	u8	*mta;
   1953 	u8	*update_ptr;
   1954 	int	mcnt = 0;
   1955 	struct ethercom *ec = &adapter->osdep.ec;
   1956 	struct ifnet   *ifp = adapter->ifp;
   1957 
   1958 	IOCTL_DEBUGOUT("ixgbe_set_multi: begin");
   1959 
   1960 	mta = adapter->mta;
   1961 	bzero(mta, sizeof(u8) * IXGBE_ETH_LENGTH_OF_ADDRESS *
   1962 	    MAX_NUM_MULTICAST_ADDRESSES);
   1963 
   1964 	fctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_FCTRL);
   1965 	fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
   1966 	if (ifp->if_flags & IFF_PROMISC)
   1967 		fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
   1968 	else if (ifp->if_flags & IFF_ALLMULTI) {
   1969 		fctrl |= IXGBE_FCTRL_MPE;
   1970 		fctrl &= ~IXGBE_FCTRL_UPE;
   1971 	} else
   1972 		fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
   1973 
   1974 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, fctrl);
   1975 
   1976 	ETHER_FIRST_MULTI(step, ec, enm);
   1977 	while (enm != NULL) {
   1978 		if (memcmp(enm->enm_addrlo, enm->enm_addrhi,
   1979 		           ETHER_ADDR_LEN) != 0) {
   1980 			fctrl |= IXGBE_FCTRL_MPE;
   1981 			IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, fctrl);
   1982 			break;
   1983 		}
   1984 		bcopy(enm->enm_addrlo,
   1985 		    &mta[mcnt * IXGBE_ETH_LENGTH_OF_ADDRESS],
   1986 		    IXGBE_ETH_LENGTH_OF_ADDRESS);
   1987 		mcnt++;
   1988 		ETHER_NEXT_MULTI(step, enm);
   1989 	}
   1990 
   1991 	update_ptr = mta;
   1992 	ixgbe_update_mc_addr_list(&adapter->hw,
   1993 	    update_ptr, mcnt, ixgbe_mc_array_itr);
   1994 
   1995 	return;
   1996 }
   1997 
   1998 /*
   1999  * This is an iterator function now needed by the multicast
   2000  * shared code. It simply feeds the shared code routine the
   2001  * addresses in the array of ixgbe_set_multi() one by one.
   2002  */
   2003 static u8 *
   2004 ixgbe_mc_array_itr(struct ixgbe_hw *hw, u8 **update_ptr, u32 *vmdq)
   2005 {
   2006 	u8 *addr = *update_ptr;
   2007 	u8 *newptr;
   2008 	*vmdq = 0;
   2009 
   2010 	newptr = addr + IXGBE_ETH_LENGTH_OF_ADDRESS;
   2011 	*update_ptr = newptr;
   2012 	return addr;
   2013 }
   2014 
   2015 
   2016 /*********************************************************************
   2017  *  Timer routine
   2018  *
   2019  *  This routine checks for link status,updates statistics,
   2020  *  and runs the watchdog check.
   2021  *
   2022  **********************************************************************/
   2023 
   2024 static void
   2025 ixgbe_local_timer1(void *arg)
   2026 {
   2027 	struct adapter *adapter = arg;
   2028 	device_t	dev = adapter->dev;
   2029 	struct tx_ring *txr = adapter->tx_rings;
   2030 
   2031 	KASSERT(mutex_owned(&adapter->core_mtx));
   2032 
   2033 	/* Check for pluggable optics */
   2034 	if (adapter->sfp_probe)
   2035 		if (!ixgbe_sfp_probe(adapter))
   2036 			goto out; /* Nothing to do */
   2037 
   2038 	ixgbe_update_link_status(adapter);
   2039 	ixgbe_update_stats_counters(adapter);
   2040 
   2041 	/*
   2042 	 * If the interface has been paused
   2043 	 * then don't do the watchdog check
   2044 	 */
   2045 	if (IXGBE_READ_REG(&adapter->hw, IXGBE_TFCS) & IXGBE_TFCS_TXOFF)
   2046 		goto out;
   2047 
   2048 	/*
   2049 	** Check status on the TX queues for a hang
   2050 	*/
   2051         for (int i = 0; i < adapter->num_queues; i++, txr++)
   2052 		if (txr->queue_status == IXGBE_QUEUE_HUNG)
   2053 			goto hung;
   2054 
   2055 out:
   2056 	ixgbe_rearm_queues(adapter, adapter->que_mask);
   2057 	callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter);
   2058 	return;
   2059 
   2060 hung:
   2061 	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
   2062 	device_printf(dev,"Queue(%d) tdh = %d, hw tdt = %d\n", txr->me,
   2063 	    IXGBE_READ_REG(&adapter->hw, IXGBE_TDH(txr->me)),
   2064 	    IXGBE_READ_REG(&adapter->hw, IXGBE_TDT(txr->me)));
   2065 	device_printf(dev,"TX(%d) desc avail = %d,"
   2066 	    "Next TX to Clean = %d\n",
   2067 	    txr->me, txr->tx_avail, txr->next_to_clean);
   2068 	adapter->ifp->if_flags &= ~IFF_RUNNING;
   2069 	adapter->watchdog_events.ev_count++;
   2070 	ixgbe_init_locked(adapter);
   2071 }
   2072 
   2073 static void
   2074 ixgbe_local_timer(void *arg)
   2075 {
   2076 	struct adapter *adapter = arg;
   2077 
   2078 	IXGBE_CORE_LOCK(adapter);
   2079 	ixgbe_local_timer1(adapter);
   2080 	IXGBE_CORE_UNLOCK(adapter);
   2081 }
   2082 
   2083 /*
   2084 ** Note: this routine updates the OS on the link state
   2085 **	the real check of the hardware only happens with
   2086 **	a link interrupt.
   2087 */
   2088 static void
   2089 ixgbe_update_link_status(struct adapter *adapter)
   2090 {
   2091 	struct ifnet	*ifp = adapter->ifp;
   2092 	struct tx_ring *txr = adapter->tx_rings;
   2093 	device_t dev = adapter->dev;
   2094 
   2095 
   2096 	if (adapter->link_up){
   2097 		if (adapter->link_active == FALSE) {
   2098 			if (bootverbose)
   2099 				device_printf(dev,"Link is up %d Gbps %s \n",
   2100 				    ((adapter->link_speed == 128)? 10:1),
   2101 				    "Full Duplex");
   2102 			adapter->link_active = TRUE;
   2103 			if_link_state_change(ifp, LINK_STATE_UP);
   2104 		}
   2105 	} else { /* Link down */
   2106 		if (adapter->link_active == TRUE) {
   2107 			if (bootverbose)
   2108 				device_printf(dev,"Link is Down\n");
   2109 			if_link_state_change(ifp, LINK_STATE_DOWN);
   2110 			adapter->link_active = FALSE;
   2111 			for (int i = 0; i < adapter->num_queues;
   2112 			    i++, txr++)
   2113 				txr->queue_status = IXGBE_QUEUE_IDLE;
   2114 		}
   2115 	}
   2116 
   2117 	return;
   2118 }
   2119 
   2120 
   2121 static void
   2122 ixgbe_ifstop(struct ifnet *ifp, int disable)
   2123 {
   2124 	struct adapter *adapter = ifp->if_softc;
   2125 
   2126 	IXGBE_CORE_LOCK(adapter);
   2127 	ixgbe_stop(adapter);
   2128 	IXGBE_CORE_UNLOCK(adapter);
   2129 }
   2130 
   2131 /*********************************************************************
   2132  *
   2133  *  This routine disables all traffic on the adapter by issuing a
   2134  *  global reset on the MAC and deallocates TX/RX buffers.
   2135  *
   2136  **********************************************************************/
   2137 
   2138 static void
   2139 ixgbe_stop(void *arg)
   2140 {
   2141 	struct ifnet   *ifp;
   2142 	struct adapter *adapter = arg;
   2143 	struct ixgbe_hw *hw = &adapter->hw;
   2144 	ifp = adapter->ifp;
   2145 
   2146 	KASSERT(mutex_owned(&adapter->core_mtx));
   2147 
   2148 	INIT_DEBUGOUT("ixgbe_stop: begin\n");
   2149 	ixgbe_disable_intr(adapter);
   2150 
   2151 	/* Tell the stack that the interface is no longer active */
   2152 	ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
   2153 
   2154 	ixgbe_reset_hw(hw);
   2155 	hw->adapter_stopped = FALSE;
   2156 	ixgbe_stop_adapter(hw);
   2157 	/* Turn off the laser */
   2158 	if (hw->phy.multispeed_fiber)
   2159 		ixgbe_disable_tx_laser(hw);
   2160 	callout_stop(&adapter->timer);
   2161 
   2162 	/* reprogram the RAR[0] in case user changed it. */
   2163 	ixgbe_set_rar(&adapter->hw, 0, adapter->hw.mac.addr, 0, IXGBE_RAH_AV);
   2164 
   2165 	return;
   2166 }
   2167 
   2168 
   2169 /*********************************************************************
   2170  *
   2171  *  Determine hardware revision.
   2172  *
   2173  **********************************************************************/
   2174 static void
   2175 ixgbe_identify_hardware(struct adapter *adapter)
   2176 {
   2177 	pcitag_t tag;
   2178 	pci_chipset_tag_t pc;
   2179 	pcireg_t subid, id;
   2180 	struct ixgbe_hw *hw = &adapter->hw;
   2181 
   2182 	pc = adapter->osdep.pc;
   2183 	tag = adapter->osdep.tag;
   2184 
   2185 	id = pci_conf_read(pc, tag, PCI_ID_REG);
   2186 	subid = pci_conf_read(pc, tag, PCI_SUBSYS_ID_REG);
   2187 
   2188 	/* Save off the information about this board */
   2189 	hw->vendor_id = PCI_VENDOR(id);
   2190 	hw->device_id = PCI_PRODUCT(id);
   2191 	hw->revision_id =
   2192 	    PCI_REVISION(pci_conf_read(pc, tag, PCI_CLASS_REG));
   2193 	hw->subsystem_vendor_id = PCI_SUBSYS_VENDOR(subid);
   2194 	hw->subsystem_device_id = PCI_SUBSYS_ID(subid);
   2195 
   2196 	/* We need this here to set the num_segs below */
   2197 	ixgbe_set_mac_type(hw);
   2198 
   2199 	/* Pick up the 82599 and VF settings */
   2200 	if (hw->mac.type != ixgbe_mac_82598EB) {
   2201 		hw->phy.smart_speed = ixgbe_smart_speed;
   2202 		adapter->num_segs = IXGBE_82599_SCATTER;
   2203 	} else
   2204 		adapter->num_segs = IXGBE_82598_SCATTER;
   2205 
   2206 	return;
   2207 }
   2208 
   2209 /*********************************************************************
   2210  *
   2211  *  Determine optic type
   2212  *
   2213  **********************************************************************/
   2214 static void
   2215 ixgbe_setup_optics(struct adapter *adapter)
   2216 {
   2217 	struct ixgbe_hw *hw = &adapter->hw;
   2218 	int		layer;
   2219 
   2220 	layer = ixgbe_get_supported_physical_layer(hw);
   2221 	switch (layer) {
   2222 		case IXGBE_PHYSICAL_LAYER_10GBASE_T:
   2223 			adapter->optics = IFM_10G_T;
   2224 			break;
   2225 		case IXGBE_PHYSICAL_LAYER_1000BASE_T:
   2226 			adapter->optics = IFM_1000_T;
   2227 			break;
   2228 		case IXGBE_PHYSICAL_LAYER_10GBASE_LR:
   2229 		case IXGBE_PHYSICAL_LAYER_10GBASE_LRM:
   2230 			adapter->optics = IFM_10G_LR;
   2231 			break;
   2232 		case IXGBE_PHYSICAL_LAYER_10GBASE_SR:
   2233 			adapter->optics = IFM_10G_SR;
   2234 			break;
   2235 		case IXGBE_PHYSICAL_LAYER_10GBASE_KX4:
   2236 		case IXGBE_PHYSICAL_LAYER_10GBASE_CX4:
   2237 			adapter->optics = IFM_10G_CX4;
   2238 			break;
   2239 		case IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU:
   2240 			adapter->optics = IFM_10G_TWINAX;
   2241 			break;
   2242 		case IXGBE_PHYSICAL_LAYER_1000BASE_KX:
   2243 		case IXGBE_PHYSICAL_LAYER_10GBASE_KR:
   2244 		case IXGBE_PHYSICAL_LAYER_10GBASE_XAUI:
   2245 		case IXGBE_PHYSICAL_LAYER_UNKNOWN:
   2246 		default:
   2247 			adapter->optics = IFM_ETHER | IFM_AUTO;
   2248 			break;
   2249 	}
   2250 	return;
   2251 }
   2252 
   2253 /*********************************************************************
   2254  *
   2255  *  Setup the Legacy or MSI Interrupt handler
   2256  *
   2257  **********************************************************************/
   2258 static int
   2259 ixgbe_allocate_legacy(struct adapter *adapter, const struct pci_attach_args *pa)
   2260 {
   2261 	device_t dev = adapter->dev;
   2262 	struct		ix_queue *que = adapter->queues;
   2263 	char intrbuf[PCI_INTRSTR_LEN];
   2264 #if 0
   2265 	int rid = 0;
   2266 
   2267 	/* MSI RID at 1 */
   2268 	if (adapter->msix == 1)
   2269 		rid = 1;
   2270 #endif
   2271 
   2272 	/* We allocate a single interrupt resource */
   2273  	if (pci_intr_map(pa, &adapter->osdep.ih) != 0) {
   2274 		aprint_error_dev(dev, "unable to map interrupt\n");
   2275 		return ENXIO;
   2276 	} else {
   2277 		aprint_normal_dev(dev, "interrupting at %s\n",
   2278 		    pci_intr_string(adapter->osdep.pc, adapter->osdep.ih,
   2279 			intrbuf, sizeof(intrbuf)));
   2280 	}
   2281 
   2282 	/*
   2283 	 * Try allocating a fast interrupt and the associated deferred
   2284 	 * processing contexts.
   2285 	 */
   2286 	que->que_si = softint_establish(SOFTINT_NET, ixgbe_handle_que, que);
   2287 
   2288 	/* Tasklets for Link, SFP and Multispeed Fiber */
   2289 	adapter->link_si =
   2290 	    softint_establish(SOFTINT_NET, ixgbe_handle_link, adapter);
   2291 	adapter->mod_si =
   2292 	    softint_establish(SOFTINT_NET, ixgbe_handle_mod, adapter);
   2293 	adapter->msf_si =
   2294 	    softint_establish(SOFTINT_NET, ixgbe_handle_msf, adapter);
   2295 
   2296 #ifdef IXGBE_FDIR
   2297 	adapter->fdir_si =
   2298 	    softint_establish(SOFTINT_NET, ixgbe_reinit_fdir, adapter);
   2299 #endif
   2300 	if (que->que_si == NULL ||
   2301 	    adapter->link_si == NULL ||
   2302 	    adapter->mod_si == NULL ||
   2303 #ifdef IXGBE_FDIR
   2304 	    adapter->fdir_si == NULL ||
   2305 #endif
   2306 	    adapter->msf_si == NULL) {
   2307 		aprint_error_dev(dev,
   2308 		    "could not establish software interrupts\n");
   2309 		return ENXIO;
   2310 	}
   2311 
   2312 	adapter->osdep.intr = pci_intr_establish(adapter->osdep.pc,
   2313 	    adapter->osdep.ih, IPL_NET, ixgbe_legacy_irq, que);
   2314 	if (adapter->osdep.intr == NULL) {
   2315 		aprint_error_dev(dev, "failed to register interrupt handler\n");
   2316 		softint_disestablish(que->que_si);
   2317 		softint_disestablish(adapter->link_si);
   2318 		softint_disestablish(adapter->mod_si);
   2319 		softint_disestablish(adapter->msf_si);
   2320 #ifdef IXGBE_FDIR
   2321 		softint_disestablish(adapter->fdir_si);
   2322 #endif
   2323 		return ENXIO;
   2324 	}
   2325 	/* For simplicity in the handlers */
   2326 	adapter->que_mask = IXGBE_EIMS_ENABLE_MASK;
   2327 
   2328 	return (0);
   2329 }
   2330 
   2331 
   2332 /*********************************************************************
   2333  *
   2334  *  Setup MSIX Interrupt resources and handlers
   2335  *
   2336  **********************************************************************/
   2337 static int
   2338 ixgbe_allocate_msix(struct adapter *adapter, const struct pci_attach_args *pa)
   2339 {
   2340 #if !defined(NETBSD_MSI_OR_MSIX)
   2341 	return 0;
   2342 #else
   2343 	device_t        dev = adapter->dev;
   2344 	struct 		ix_queue *que = adapter->queues;
   2345 	int 		error, rid, vector = 0;
   2346 
   2347 	for (int i = 0; i < adapter->num_queues; i++, vector++, que++) {
   2348 		rid = vector + 1;
   2349 		que->res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
   2350 		    RF_SHAREABLE | RF_ACTIVE);
   2351 		if (que->res == NULL) {
   2352 			aprint_error_dev(dev,"Unable to allocate"
   2353 		    	    " bus resource: que interrupt [%d]\n", vector);
   2354 			return (ENXIO);
   2355 		}
   2356 		/* Set the handler function */
   2357 		error = bus_setup_intr(dev, que->res,
   2358 		    INTR_TYPE_NET | INTR_MPSAFE, NULL,
   2359 		    ixgbe_msix_que, que, &que->tag);
   2360 		if (error) {
   2361 			que->res = NULL;
   2362 			aprint_error_dev(dev,
   2363 			    "Failed to register QUE handler\n");
   2364 			return error;
   2365 		}
   2366 #if __FreeBSD_version >= 800504
   2367 		bus_describe_intr(dev, que->res, que->tag, "que %d", i);
   2368 #endif
   2369 		que->msix = vector;
   2370         	adapter->que_mask |= (u64)(1 << que->msix);
   2371 		/*
   2372 		** Bind the msix vector, and thus the
   2373 		** ring to the corresponding cpu.
   2374 		*/
   2375 		if (adapter->num_queues > 1)
   2376 			bus_bind_intr(dev, que->res, i);
   2377 
   2378 		que->que_si = softint_establish(ixgbe_handle_que, que);
   2379 		if (que->que_si == NULL) {
   2380 			aprint_error_dev(dev,
   2381 			    "could not establish software interrupt\n");
   2382 		}
   2383 	}
   2384 
   2385 	/* and Link */
   2386 	rid = vector + 1;
   2387 	adapter->res = bus_alloc_resource_any(dev,
   2388     	    SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
   2389 	if (!adapter->res) {
   2390 		aprint_error_dev(dev,"Unable to allocate bus resource: "
   2391 		    "Link interrupt [%d]\n", rid);
   2392 		return (ENXIO);
   2393 	}
   2394 	/* Set the link handler function */
   2395 	error = bus_setup_intr(dev, adapter->res,
   2396 	    INTR_TYPE_NET | INTR_MPSAFE, NULL,
   2397 	    ixgbe_msix_link, adapter, &adapter->tag);
   2398 	if (error) {
   2399 		adapter->res = NULL;
   2400 		aprint_error_dev(dev, "Failed to register LINK handler\n");
   2401 		return (error);
   2402 	}
   2403 #if __FreeBSD_version >= 800504
   2404 	bus_describe_intr(dev, adapter->res, adapter->tag, "link");
   2405 #endif
   2406 	adapter->linkvec = vector;
   2407 	/* Tasklets for Link, SFP and Multispeed Fiber */
   2408 	adapter->link_si =
   2409 	    softint_establish(SOFTINT_NET, ixgbe_handle_link, adapter);
   2410 	adapter->mod_si =
   2411 	    softint_establish(SOFTINT_NET, ixgbe_handle_mod, adapter);
   2412 	adapter->msf_si =
   2413 	    softint_establish(SOFTINT_NET, ixgbe_handle_msf, adapter);
   2414 #ifdef IXGBE_FDIR
   2415 	adapter->fdir_si =
   2416 	    softint_establish(SOFTINT_NET, ixgbe_reinit_fdir, adapter);
   2417 #endif
   2418 
   2419 	return (0);
   2420 #endif
   2421 }
   2422 
   2423 /*
   2424  * Setup Either MSI/X or MSI
   2425  */
   2426 static int
   2427 ixgbe_setup_msix(struct adapter *adapter)
   2428 {
   2429 #if !defined(NETBSD_MSI_OR_MSIX)
   2430 	return 0;
   2431 #else
   2432 	device_t dev = adapter->dev;
   2433 	int rid, want, queues, msgs;
   2434 
   2435 	/* Override by tuneable */
   2436 	if (ixgbe_enable_msix == 0)
   2437 		goto msi;
   2438 
   2439 	/* First try MSI/X */
   2440 	rid = PCI_BAR(MSIX_82598_BAR);
   2441 	adapter->msix_mem = bus_alloc_resource_any(dev,
   2442 	    SYS_RES_MEMORY, &rid, RF_ACTIVE);
   2443        	if (!adapter->msix_mem) {
   2444 		rid += 4;	/* 82599 maps in higher BAR */
   2445 		adapter->msix_mem = bus_alloc_resource_any(dev,
   2446 		    SYS_RES_MEMORY, &rid, RF_ACTIVE);
   2447 	}
   2448        	if (!adapter->msix_mem) {
   2449 		/* May not be enabled */
   2450 		device_printf(adapter->dev,
   2451 		    "Unable to map MSIX table \n");
   2452 		goto msi;
   2453 	}
   2454 
   2455 	msgs = pci_msix_count(dev);
   2456 	if (msgs == 0) { /* system has msix disabled */
   2457 		bus_release_resource(dev, SYS_RES_MEMORY,
   2458 		    rid, adapter->msix_mem);
   2459 		adapter->msix_mem = NULL;
   2460 		goto msi;
   2461 	}
   2462 
   2463 	/* Figure out a reasonable auto config value */
   2464 	queues = (mp_ncpus > (msgs-1)) ? (msgs-1) : mp_ncpus;
   2465 
   2466 	if (ixgbe_num_queues != 0)
   2467 		queues = ixgbe_num_queues;
   2468 	/* Set max queues to 8 when autoconfiguring */
   2469 	else if ((ixgbe_num_queues == 0) && (queues > 8))
   2470 		queues = 8;
   2471 
   2472 	/*
   2473 	** Want one vector (RX/TX pair) per queue
   2474 	** plus an additional for Link.
   2475 	*/
   2476 	want = queues + 1;
   2477 	if (msgs >= want)
   2478 		msgs = want;
   2479 	else {
   2480                	device_printf(adapter->dev,
   2481 		    "MSIX Configuration Problem, "
   2482 		    "%d vectors but %d queues wanted!\n",
   2483 		    msgs, want);
   2484 		return (0); /* Will go to Legacy setup */
   2485 	}
   2486 	if ((msgs) && pci_alloc_msix(dev, &msgs) == 0) {
   2487                	device_printf(adapter->dev,
   2488 		    "Using MSIX interrupts with %d vectors\n", msgs);
   2489 		adapter->num_queues = queues;
   2490 		return (msgs);
   2491 	}
   2492 msi:
   2493        	msgs = pci_msi_count(dev);
   2494        	if (msgs == 1 && pci_alloc_msi(dev, &msgs) == 0)
   2495                	device_printf(adapter->dev,"Using MSI interrupt\n");
   2496 	return (msgs);
   2497 #endif
   2498 }
   2499 
   2500 
   2501 static int
   2502 ixgbe_allocate_pci_resources(struct adapter *adapter, const struct pci_attach_args *pa)
   2503 {
   2504 	pcireg_t	memtype;
   2505 	device_t        dev = adapter->dev;
   2506 	bus_addr_t addr;
   2507 	int flags;
   2508 
   2509 	memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, PCI_BAR(0));
   2510 	switch (memtype) {
   2511 	case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT:
   2512 	case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_64BIT:
   2513 		adapter->osdep.mem_bus_space_tag = pa->pa_memt;
   2514 		if (pci_mapreg_info(pa->pa_pc, pa->pa_tag, PCI_BAR(0),
   2515 	              memtype, &addr, &adapter->osdep.mem_size, &flags) != 0)
   2516 			goto map_err;
   2517 		if ((flags & BUS_SPACE_MAP_PREFETCHABLE) != 0) {
   2518 			aprint_normal_dev(dev, "clearing prefetchable bit\n");
   2519 			flags &= ~BUS_SPACE_MAP_PREFETCHABLE;
   2520 		}
   2521 		if (bus_space_map(adapter->osdep.mem_bus_space_tag, addr,
   2522 		     adapter->osdep.mem_size, flags,
   2523 		     &adapter->osdep.mem_bus_space_handle) != 0) {
   2524 map_err:
   2525 			adapter->osdep.mem_size = 0;
   2526 			aprint_error_dev(dev, "unable to map BAR0\n");
   2527 			return ENXIO;
   2528 		}
   2529 		break;
   2530 	default:
   2531 		aprint_error_dev(dev, "unexpected type on BAR0\n");
   2532 		return ENXIO;
   2533 	}
   2534 
   2535 	/* Legacy defaults */
   2536 	adapter->num_queues = 1;
   2537 	adapter->hw.back = &adapter->osdep;
   2538 
   2539 	/*
   2540 	** Now setup MSI or MSI/X, should
   2541 	** return us the number of supported
   2542 	** vectors. (Will be 1 for MSI)
   2543 	*/
   2544 	adapter->msix = ixgbe_setup_msix(adapter);
   2545 	return (0);
   2546 }
   2547 
   2548 static void
   2549 ixgbe_free_pci_resources(struct adapter * adapter)
   2550 {
   2551 #if defined(NETBSD_MSI_OR_MSIX)
   2552 	struct 		ix_queue *que = adapter->queues;
   2553 	device_t	dev = adapter->dev;
   2554 #endif
   2555 	int		rid;
   2556 
   2557 #if defined(NETBSD_MSI_OR_MSIX)
   2558 	int		 memrid;
   2559 	if (adapter->hw.mac.type == ixgbe_mac_82598EB)
   2560 		memrid = PCI_BAR(MSIX_82598_BAR);
   2561 	else
   2562 		memrid = PCI_BAR(MSIX_82599_BAR);
   2563 
   2564 	/*
   2565 	** There is a slight possibility of a failure mode
   2566 	** in attach that will result in entering this function
   2567 	** before interrupt resources have been initialized, and
   2568 	** in that case we do not want to execute the loops below
   2569 	** We can detect this reliably by the state of the adapter
   2570 	** res pointer.
   2571 	*/
   2572 	if (adapter->res == NULL)
   2573 		goto mem;
   2574 
   2575 	/*
   2576 	**  Release all msix queue resources:
   2577 	*/
   2578 	for (int i = 0; i < adapter->num_queues; i++, que++) {
   2579 		rid = que->msix + 1;
   2580 		if (que->tag != NULL) {
   2581 			bus_teardown_intr(dev, que->res, que->tag);
   2582 			que->tag = NULL;
   2583 		}
   2584 		if (que->res != NULL)
   2585 			bus_release_resource(dev, SYS_RES_IRQ, rid, que->res);
   2586 	}
   2587 #endif
   2588 
   2589 	/* Clean the Legacy or Link interrupt last */
   2590 	if (adapter->linkvec) /* we are doing MSIX */
   2591 		rid = adapter->linkvec + 1;
   2592 	else
   2593 		(adapter->msix != 0) ? (rid = 1):(rid = 0);
   2594 
   2595 	pci_intr_disestablish(adapter->osdep.pc, adapter->osdep.intr);
   2596 	adapter->osdep.intr = NULL;
   2597 
   2598 #if defined(NETBSD_MSI_OR_MSIX)
   2599 mem:
   2600 	if (adapter->msix)
   2601 		pci_release_msi(dev);
   2602 
   2603 	if (adapter->msix_mem != NULL)
   2604 		bus_release_resource(dev, SYS_RES_MEMORY,
   2605 		    memrid, adapter->msix_mem);
   2606 #endif
   2607 
   2608 	if (adapter->osdep.mem_size != 0) {
   2609 		bus_space_unmap(adapter->osdep.mem_bus_space_tag,
   2610 		    adapter->osdep.mem_bus_space_handle,
   2611 		    adapter->osdep.mem_size);
   2612 	}
   2613 
   2614 	return;
   2615 }
   2616 
   2617 /*********************************************************************
   2618  *
   2619  *  Setup networking device structure and register an interface.
   2620  *
   2621  **********************************************************************/
   2622 static int
   2623 ixgbe_setup_interface(device_t dev, struct adapter *adapter)
   2624 {
   2625 	struct ethercom *ec = &adapter->osdep.ec;
   2626 	struct ixgbe_hw *hw = &adapter->hw;
   2627 	struct ifnet   *ifp;
   2628 
   2629 	INIT_DEBUGOUT("ixgbe_setup_interface: begin");
   2630 
   2631 	ifp = adapter->ifp = &ec->ec_if;
   2632 	strlcpy(ifp->if_xname, device_xname(dev), IFNAMSIZ);
   2633 	ifp->if_mtu = ETHERMTU;
   2634 	ifp->if_baudrate = 1000000000;
   2635 	ifp->if_init = ixgbe_init;
   2636 	ifp->if_stop = ixgbe_ifstop;
   2637 	ifp->if_softc = adapter;
   2638 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
   2639 	ifp->if_ioctl = ixgbe_ioctl;
   2640 	ifp->if_start = ixgbe_start;
   2641 #if __FreeBSD_version >= 800000
   2642 	ifp->if_transmit = ixgbe_mq_start;
   2643 	ifp->if_qflush = ixgbe_qflush;
   2644 #endif
   2645 	ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 2;
   2646 
   2647 	if_attach(ifp);
   2648 	ether_ifattach(ifp, adapter->hw.mac.addr);
   2649 	ether_set_ifflags_cb(ec, ixgbe_ifflags_cb);
   2650 
   2651 	adapter->max_frame_size =
   2652 	    ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
   2653 
   2654 	/*
   2655 	 * Tell the upper layer(s) we support long frames.
   2656 	 */
   2657 	ifp->if_hdrlen = sizeof(struct ether_vlan_header);
   2658 
   2659 	ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSOv4;
   2660 	ifp->if_capenable = 0;
   2661 
   2662 	ec->ec_capabilities |= ETHERCAP_VLAN_HWCSUM;
   2663 	ec->ec_capabilities |= ETHERCAP_VLAN_HWTAGGING | ETHERCAP_VLAN_MTU;
   2664 	ec->ec_capabilities |= ETHERCAP_JUMBO_MTU;
   2665 	ec->ec_capenable = ec->ec_capabilities;
   2666 
   2667 	/* Don't enable LRO by default */
   2668 	ifp->if_capabilities |= IFCAP_LRO;
   2669 
   2670 	/*
   2671 	** Dont turn this on by default, if vlans are
   2672 	** created on another pseudo device (eg. lagg)
   2673 	** then vlan events are not passed thru, breaking
   2674 	** operation, but with HW FILTER off it works. If
   2675 	** using vlans directly on the em driver you can
   2676 	** enable this and get full hardware tag filtering.
   2677 	*/
   2678 	ec->ec_capabilities |= ETHERCAP_VLAN_HWFILTER;
   2679 
   2680 	/*
   2681 	 * Specify the media types supported by this adapter and register
   2682 	 * callbacks to update media and link information
   2683 	 */
   2684 	ifmedia_init(&adapter->media, IFM_IMASK, ixgbe_media_change,
   2685 		     ixgbe_media_status);
   2686 	ifmedia_add(&adapter->media, IFM_ETHER | adapter->optics, 0, NULL);
   2687 	ifmedia_set(&adapter->media, IFM_ETHER | adapter->optics);
   2688 	if (hw->device_id == IXGBE_DEV_ID_82598AT) {
   2689 		ifmedia_add(&adapter->media,
   2690 		    IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
   2691 		ifmedia_add(&adapter->media,
   2692 		    IFM_ETHER | IFM_1000_T, 0, NULL);
   2693 	}
   2694 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
   2695 	ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
   2696 
   2697 	return (0);
   2698 }
   2699 
   2700 static void
   2701 ixgbe_config_link(struct adapter *adapter)
   2702 {
   2703 	struct ixgbe_hw *hw = &adapter->hw;
   2704 	u32	autoneg, err = 0;
   2705 	bool	sfp, negotiate;
   2706 
   2707 	sfp = ixgbe_is_sfp(hw);
   2708 
   2709 	if (sfp) {
   2710 		if (hw->phy.multispeed_fiber) {
   2711 			hw->mac.ops.setup_sfp(hw);
   2712 			ixgbe_enable_tx_laser(hw);
   2713 			softint_schedule(adapter->msf_si);
   2714 		} else {
   2715 			softint_schedule(adapter->mod_si);
   2716 		}
   2717 	} else {
   2718 		if (hw->mac.ops.check_link)
   2719 			err = ixgbe_check_link(hw, &autoneg,
   2720 			    &adapter->link_up, FALSE);
   2721 		if (err)
   2722 			goto out;
   2723 		autoneg = hw->phy.autoneg_advertised;
   2724 		if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
   2725                 	err  = hw->mac.ops.get_link_capabilities(hw,
   2726 			    &autoneg, &negotiate);
   2727 		else
   2728 			negotiate = 0;
   2729 		if (err)
   2730 			goto out;
   2731 		if (hw->mac.ops.setup_link)
   2732                 	err = hw->mac.ops.setup_link(hw, autoneg,
   2733 			    negotiate, adapter->link_up);
   2734 	}
   2735 out:
   2736 	return;
   2737 }
   2738 
   2739 /********************************************************************
   2740  * Manage DMA'able memory.
   2741  *******************************************************************/
   2742 
   2743 static int
   2744 ixgbe_dma_malloc(struct adapter *adapter, const bus_size_t size,
   2745 		struct ixgbe_dma_alloc *dma, const int mapflags)
   2746 {
   2747 	device_t dev = adapter->dev;
   2748 	int             r, rsegs;
   2749 
   2750 	r = ixgbe_dma_tag_create(adapter->osdep.dmat,	/* parent */
   2751 			       DBA_ALIGN, 0,	/* alignment, bounds */
   2752 			       size,	/* maxsize */
   2753 			       1,	/* nsegments */
   2754 			       size,	/* maxsegsize */
   2755 			       BUS_DMA_ALLOCNOW,	/* flags */
   2756 			       &dma->dma_tag);
   2757 	if (r != 0) {
   2758 		aprint_error_dev(dev,
   2759 		    "%s: ixgbe_dma_tag_create failed; error %d\n", __func__, r);
   2760 		goto fail_0;
   2761 	}
   2762 
   2763 	r = bus_dmamem_alloc(dma->dma_tag->dt_dmat,
   2764 		size,
   2765 		dma->dma_tag->dt_alignment,
   2766 		dma->dma_tag->dt_boundary,
   2767 		&dma->dma_seg, 1, &rsegs, BUS_DMA_NOWAIT);
   2768 	if (r != 0) {
   2769 		aprint_error_dev(dev,
   2770 		    "%s: bus_dmamem_alloc failed; error %d\n", __func__, r);
   2771 		goto fail_1;
   2772 	}
   2773 
   2774 	r = bus_dmamem_map(dma->dma_tag->dt_dmat, &dma->dma_seg, rsegs,
   2775 	    size, &dma->dma_vaddr, BUS_DMA_NOWAIT);
   2776 	if (r != 0) {
   2777 		aprint_error_dev(dev, "%s: bus_dmamem_map failed; error %d\n",
   2778 		    __func__, r);
   2779 		goto fail_2;
   2780 	}
   2781 
   2782 	r = ixgbe_dmamap_create(dma->dma_tag, 0, &dma->dma_map);
   2783 	if (r != 0) {
   2784 		aprint_error_dev(dev, "%s: bus_dmamem_map failed; error %d\n",
   2785 		    __func__, r);
   2786 		goto fail_3;
   2787 	}
   2788 
   2789 	r = bus_dmamap_load(dma->dma_tag->dt_dmat, dma->dma_map, dma->dma_vaddr,
   2790 			    size,
   2791 			    NULL,
   2792 			    mapflags | BUS_DMA_NOWAIT);
   2793 	if (r != 0) {
   2794 		aprint_error_dev(dev, "%s: bus_dmamap_load failed; error %d\n",
   2795 		    __func__, r);
   2796 		goto fail_4;
   2797 	}
   2798 	dma->dma_paddr = dma->dma_map->dm_segs[0].ds_addr;
   2799 	dma->dma_size = size;
   2800 	return 0;
   2801 fail_4:
   2802 	ixgbe_dmamap_destroy(dma->dma_tag, dma->dma_map);
   2803 fail_3:
   2804 	bus_dmamem_unmap(dma->dma_tag->dt_dmat, dma->dma_vaddr, size);
   2805 fail_2:
   2806 	bus_dmamem_free(dma->dma_tag->dt_dmat, &dma->dma_seg, rsegs);
   2807 fail_1:
   2808 	ixgbe_dma_tag_destroy(dma->dma_tag);
   2809 fail_0:
   2810 	return r;
   2811 }
   2812 
   2813 static void
   2814 ixgbe_dma_free(struct adapter *adapter, struct ixgbe_dma_alloc *dma)
   2815 {
   2816 	bus_dmamap_sync(dma->dma_tag->dt_dmat, dma->dma_map, 0, dma->dma_size,
   2817 	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
   2818 	ixgbe_dmamap_unload(dma->dma_tag, dma->dma_map);
   2819 	bus_dmamem_free(dma->dma_tag->dt_dmat, &dma->dma_seg, 1);
   2820 	ixgbe_dma_tag_destroy(dma->dma_tag);
   2821 }
   2822 
   2823 
   2824 /*********************************************************************
   2825  *
   2826  *  Allocate memory for the transmit and receive rings, and then
   2827  *  the descriptors associated with each, called only once at attach.
   2828  *
   2829  **********************************************************************/
   2830 static int
   2831 ixgbe_allocate_queues(struct adapter *adapter)
   2832 {
   2833 	device_t	dev = adapter->dev;
   2834 	struct ix_queue	*que;
   2835 	struct tx_ring	*txr;
   2836 	struct rx_ring	*rxr;
   2837 	int rsize, tsize, error = IXGBE_SUCCESS;
   2838 	int txconf = 0, rxconf = 0;
   2839 
   2840         /* First allocate the top level queue structs */
   2841         if (!(adapter->queues =
   2842             (struct ix_queue *) malloc(sizeof(struct ix_queue) *
   2843             adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
   2844                 aprint_error_dev(dev, "Unable to allocate queue memory\n");
   2845                 error = ENOMEM;
   2846                 goto fail;
   2847         }
   2848 
   2849 	/* First allocate the TX ring struct memory */
   2850 	if (!(adapter->tx_rings =
   2851 	    (struct tx_ring *) malloc(sizeof(struct tx_ring) *
   2852 	    adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
   2853 		aprint_error_dev(dev, "Unable to allocate TX ring memory\n");
   2854 		error = ENOMEM;
   2855 		goto tx_fail;
   2856 	}
   2857 
   2858 	/* Next allocate the RX */
   2859 	if (!(adapter->rx_rings =
   2860 	    (struct rx_ring *) malloc(sizeof(struct rx_ring) *
   2861 	    adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
   2862 		aprint_error_dev(dev, "Unable to allocate RX ring memory\n");
   2863 		error = ENOMEM;
   2864 		goto rx_fail;
   2865 	}
   2866 
   2867 	/* For the ring itself */
   2868 	tsize = roundup2(adapter->num_tx_desc *
   2869 	    sizeof(union ixgbe_adv_tx_desc), DBA_ALIGN);
   2870 
   2871 	/*
   2872 	 * Now set up the TX queues, txconf is needed to handle the
   2873 	 * possibility that things fail midcourse and we need to
   2874 	 * undo memory gracefully
   2875 	 */
   2876 	for (int i = 0; i < adapter->num_queues; i++, txconf++) {
   2877 		/* Set up some basics */
   2878 		txr = &adapter->tx_rings[i];
   2879 		txr->adapter = adapter;
   2880 		txr->me = i;
   2881 
   2882 		/* Initialize the TX side lock */
   2883 		snprintf(txr->mtx_name, sizeof(txr->mtx_name), "%s:tx(%d)",
   2884 		    device_xname(dev), txr->me);
   2885 		mutex_init(&txr->tx_mtx, MUTEX_DEFAULT, IPL_NET);
   2886 
   2887 		if (ixgbe_dma_malloc(adapter, tsize,
   2888 			&txr->txdma, BUS_DMA_NOWAIT)) {
   2889 			aprint_error_dev(dev,
   2890 			    "Unable to allocate TX Descriptor memory\n");
   2891 			error = ENOMEM;
   2892 			goto err_tx_desc;
   2893 		}
   2894 		txr->tx_base = (union ixgbe_adv_tx_desc *)txr->txdma.dma_vaddr;
   2895 		bzero((void *)txr->tx_base, tsize);
   2896 
   2897         	/* Now allocate transmit buffers for the ring */
   2898         	if (ixgbe_allocate_transmit_buffers(txr)) {
   2899 			aprint_error_dev(dev,
   2900 			    "Critical Failure setting up transmit buffers\n");
   2901 			error = ENOMEM;
   2902 			goto err_tx_desc;
   2903         	}
   2904 #if __FreeBSD_version >= 800000
   2905 		/* Allocate a buf ring */
   2906 		txr->br = buf_ring_alloc(IXGBE_BR_SIZE, M_DEVBUF,
   2907 		    M_WAITOK, &txr->tx_mtx);
   2908 		if (txr->br == NULL) {
   2909 			aprint_error_dev(dev,
   2910 			    "Critical Failure setting up buf ring\n");
   2911 			error = ENOMEM;
   2912 			goto err_tx_desc;
   2913         	}
   2914 #endif
   2915 	}
   2916 
   2917 	/*
   2918 	 * Next the RX queues...
   2919 	 */
   2920 	rsize = roundup2(adapter->num_rx_desc *
   2921 	    sizeof(union ixgbe_adv_rx_desc), DBA_ALIGN);
   2922 	for (int i = 0; i < adapter->num_queues; i++, rxconf++) {
   2923 		rxr = &adapter->rx_rings[i];
   2924 		/* Set up some basics */
   2925 		rxr->adapter = adapter;
   2926 		rxr->me = i;
   2927 
   2928 		/* Initialize the RX side lock */
   2929 		snprintf(rxr->mtx_name, sizeof(rxr->mtx_name), "%s:rx(%d)",
   2930 		    device_xname(dev), rxr->me);
   2931 		mutex_init(&rxr->rx_mtx, MUTEX_DEFAULT, IPL_NET);
   2932 
   2933 		if (ixgbe_dma_malloc(adapter, rsize,
   2934 			&rxr->rxdma, BUS_DMA_NOWAIT)) {
   2935 			aprint_error_dev(dev,
   2936 			    "Unable to allocate RxDescriptor memory\n");
   2937 			error = ENOMEM;
   2938 			goto err_rx_desc;
   2939 		}
   2940 		rxr->rx_base = (union ixgbe_adv_rx_desc *)rxr->rxdma.dma_vaddr;
   2941 		bzero((void *)rxr->rx_base, rsize);
   2942 
   2943         	/* Allocate receive buffers for the ring*/
   2944 		if (ixgbe_allocate_receive_buffers(rxr)) {
   2945 			aprint_error_dev(dev,
   2946 			    "Critical Failure setting up receive buffers\n");
   2947 			error = ENOMEM;
   2948 			goto err_rx_desc;
   2949 		}
   2950 	}
   2951 
   2952 	/*
   2953 	** Finally set up the queue holding structs
   2954 	*/
   2955 	for (int i = 0; i < adapter->num_queues; i++) {
   2956 		que = &adapter->queues[i];
   2957 		que->adapter = adapter;
   2958 		que->txr = &adapter->tx_rings[i];
   2959 		que->rxr = &adapter->rx_rings[i];
   2960 	}
   2961 
   2962 	return (0);
   2963 
   2964 err_rx_desc:
   2965 	for (rxr = adapter->rx_rings; rxconf > 0; rxr++, rxconf--)
   2966 		ixgbe_dma_free(adapter, &rxr->rxdma);
   2967 err_tx_desc:
   2968 	for (txr = adapter->tx_rings; txconf > 0; txr++, txconf--)
   2969 		ixgbe_dma_free(adapter, &txr->txdma);
   2970 	free(adapter->rx_rings, M_DEVBUF);
   2971 rx_fail:
   2972 	free(adapter->tx_rings, M_DEVBUF);
   2973 tx_fail:
   2974 	free(adapter->queues, M_DEVBUF);
   2975 fail:
   2976 	return (error);
   2977 }
   2978 
   2979 /*********************************************************************
   2980  *
   2981  *  Allocate memory for tx_buffer structures. The tx_buffer stores all
   2982  *  the information needed to transmit a packet on the wire. This is
   2983  *  called only once at attach, setup is done every reset.
   2984  *
   2985  **********************************************************************/
   2986 static int
   2987 ixgbe_allocate_transmit_buffers(struct tx_ring *txr)
   2988 {
   2989 	struct adapter *adapter = txr->adapter;
   2990 	device_t dev = adapter->dev;
   2991 	struct ixgbe_tx_buf *txbuf;
   2992 	int error, i;
   2993 
   2994 	/*
   2995 	 * Setup DMA descriptor areas.
   2996 	 */
   2997 	if ((error = ixgbe_dma_tag_create(adapter->osdep.dmat,	/* parent */
   2998 			       1, 0,		/* alignment, bounds */
   2999 			       IXGBE_TSO_SIZE,		/* maxsize */
   3000 			       adapter->num_segs,	/* nsegments */
   3001 			       PAGE_SIZE,		/* maxsegsize */
   3002 			       0,			/* flags */
   3003 			       &txr->txtag))) {
   3004 		aprint_error_dev(dev,"Unable to allocate TX DMA tag\n");
   3005 		goto fail;
   3006 	}
   3007 
   3008 	if (!(txr->tx_buffers =
   3009 	    (struct ixgbe_tx_buf *) malloc(sizeof(struct ixgbe_tx_buf) *
   3010 	    adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO))) {
   3011 		aprint_error_dev(dev, "Unable to allocate tx_buffer memory\n");
   3012 		error = ENOMEM;
   3013 		goto fail;
   3014 	}
   3015 
   3016         /* Create the descriptor buffer dma maps */
   3017 	txbuf = txr->tx_buffers;
   3018 	for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
   3019 		error = ixgbe_dmamap_create(txr->txtag, 0, &txbuf->map);
   3020 		if (error != 0) {
   3021 			aprint_error_dev(dev, "Unable to create TX DMA map\n");
   3022 			goto fail;
   3023 		}
   3024 	}
   3025 
   3026 	return 0;
   3027 fail:
   3028 	/* We free all, it handles case where we are in the middle */
   3029 	ixgbe_free_transmit_structures(adapter);
   3030 	return (error);
   3031 }
   3032 
   3033 /*********************************************************************
   3034  *
   3035  *  Initialize a transmit ring.
   3036  *
   3037  **********************************************************************/
   3038 static void
   3039 ixgbe_setup_transmit_ring(struct tx_ring *txr)
   3040 {
   3041 	struct adapter *adapter = txr->adapter;
   3042 	struct ixgbe_tx_buf *txbuf;
   3043 	int i;
   3044 
   3045 	/* Clear the old ring contents */
   3046 	IXGBE_TX_LOCK(txr);
   3047 	bzero((void *)txr->tx_base,
   3048 	      (sizeof(union ixgbe_adv_tx_desc)) * adapter->num_tx_desc);
   3049 	/* Reset indices */
   3050 	txr->next_avail_desc = 0;
   3051 	txr->next_to_clean = 0;
   3052 
   3053 	/* Free any existing tx buffers. */
   3054         txbuf = txr->tx_buffers;
   3055 	for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
   3056 		if (txbuf->m_head != NULL) {
   3057 			bus_dmamap_sync(txr->txtag->dt_dmat, txbuf->map,
   3058 			    0, txbuf->m_head->m_pkthdr.len,
   3059 			    BUS_DMASYNC_POSTWRITE);
   3060 			ixgbe_dmamap_unload(txr->txtag, txbuf->map);
   3061 			m_freem(txbuf->m_head);
   3062 			txbuf->m_head = NULL;
   3063 		}
   3064 		/* Clear the EOP index */
   3065 		txbuf->eop_index = -1;
   3066         }
   3067 
   3068 #ifdef IXGBE_FDIR
   3069 	/* Set the rate at which we sample packets */
   3070 	if (adapter->hw.mac.type != ixgbe_mac_82598EB)
   3071 		txr->atr_sample = atr_sample_rate;
   3072 #endif
   3073 
   3074 	/* Set number of descriptors available */
   3075 	txr->tx_avail = adapter->num_tx_desc;
   3076 
   3077 	ixgbe_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
   3078 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
   3079 	IXGBE_TX_UNLOCK(txr);
   3080 }
   3081 
   3082 /*********************************************************************
   3083  *
   3084  *  Initialize all transmit rings.
   3085  *
   3086  **********************************************************************/
   3087 static int
   3088 ixgbe_setup_transmit_structures(struct adapter *adapter)
   3089 {
   3090 	struct tx_ring *txr = adapter->tx_rings;
   3091 
   3092 	for (int i = 0; i < adapter->num_queues; i++, txr++)
   3093 		ixgbe_setup_transmit_ring(txr);
   3094 
   3095 	return (0);
   3096 }
   3097 
   3098 /*********************************************************************
   3099  *
   3100  *  Enable transmit unit.
   3101  *
   3102  **********************************************************************/
   3103 static void
   3104 ixgbe_initialize_transmit_units(struct adapter *adapter)
   3105 {
   3106 	struct tx_ring	*txr = adapter->tx_rings;
   3107 	struct ixgbe_hw	*hw = &adapter->hw;
   3108 
   3109 	/* Setup the Base and Length of the Tx Descriptor Ring */
   3110 
   3111 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
   3112 		u64	tdba = txr->txdma.dma_paddr;
   3113 		u32	txctrl;
   3114 
   3115 		IXGBE_WRITE_REG(hw, IXGBE_TDBAL(i),
   3116 		       (tdba & 0x00000000ffffffffULL));
   3117 		IXGBE_WRITE_REG(hw, IXGBE_TDBAH(i), (tdba >> 32));
   3118 		IXGBE_WRITE_REG(hw, IXGBE_TDLEN(i),
   3119 		    adapter->num_tx_desc * sizeof(struct ixgbe_legacy_tx_desc));
   3120 
   3121 		/* Setup the HW Tx Head and Tail descriptor pointers */
   3122 		IXGBE_WRITE_REG(hw, IXGBE_TDH(i), 0);
   3123 		IXGBE_WRITE_REG(hw, IXGBE_TDT(i), 0);
   3124 
   3125 		/* Setup Transmit Descriptor Cmd Settings */
   3126 		txr->txd_cmd = IXGBE_TXD_CMD_IFCS;
   3127 		txr->queue_status = IXGBE_QUEUE_IDLE;
   3128 
   3129 		/* Disable Head Writeback */
   3130 		switch (hw->mac.type) {
   3131 		case ixgbe_mac_82598EB:
   3132 			txctrl = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
   3133 			break;
   3134 		case ixgbe_mac_82599EB:
   3135 		default:
   3136 			txctrl = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
   3137 			break;
   3138                 }
   3139 		txctrl &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
   3140 		switch (hw->mac.type) {
   3141 		case ixgbe_mac_82598EB:
   3142 			IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), txctrl);
   3143 			break;
   3144 		case ixgbe_mac_82599EB:
   3145 		default:
   3146 			IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), txctrl);
   3147 			break;
   3148 		}
   3149 
   3150 	}
   3151 
   3152 	if (hw->mac.type != ixgbe_mac_82598EB) {
   3153 		u32 dmatxctl, rttdcs;
   3154 		dmatxctl = IXGBE_READ_REG(hw, IXGBE_DMATXCTL);
   3155 		dmatxctl |= IXGBE_DMATXCTL_TE;
   3156 		IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl);
   3157 		/* Disable arbiter to set MTQC */
   3158 		rttdcs = IXGBE_READ_REG(hw, IXGBE_RTTDCS);
   3159 		rttdcs |= IXGBE_RTTDCS_ARBDIS;
   3160 		IXGBE_WRITE_REG(hw, IXGBE_RTTDCS, rttdcs);
   3161 		IXGBE_WRITE_REG(hw, IXGBE_MTQC, IXGBE_MTQC_64Q_1PB);
   3162 		rttdcs &= ~IXGBE_RTTDCS_ARBDIS;
   3163 		IXGBE_WRITE_REG(hw, IXGBE_RTTDCS, rttdcs);
   3164 	}
   3165 
   3166 	return;
   3167 }
   3168 
   3169 /*********************************************************************
   3170  *
   3171  *  Free all transmit rings.
   3172  *
   3173  **********************************************************************/
   3174 static void
   3175 ixgbe_free_transmit_structures(struct adapter *adapter)
   3176 {
   3177 	struct tx_ring *txr = adapter->tx_rings;
   3178 
   3179 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
   3180 		IXGBE_TX_LOCK(txr);
   3181 		ixgbe_free_transmit_buffers(txr);
   3182 		ixgbe_dma_free(adapter, &txr->txdma);
   3183 		IXGBE_TX_UNLOCK(txr);
   3184 		IXGBE_TX_LOCK_DESTROY(txr);
   3185 	}
   3186 	free(adapter->tx_rings, M_DEVBUF);
   3187 }
   3188 
   3189 /*********************************************************************
   3190  *
   3191  *  Free transmit ring related data structures.
   3192  *
   3193  **********************************************************************/
   3194 static void
   3195 ixgbe_free_transmit_buffers(struct tx_ring *txr)
   3196 {
   3197 	struct adapter *adapter = txr->adapter;
   3198 	struct ixgbe_tx_buf *tx_buffer;
   3199 	int             i;
   3200 
   3201 	INIT_DEBUGOUT("free_transmit_ring: begin");
   3202 
   3203 	if (txr->tx_buffers == NULL)
   3204 		return;
   3205 
   3206 	tx_buffer = txr->tx_buffers;
   3207 	for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
   3208 		if (tx_buffer->m_head != NULL) {
   3209 			bus_dmamap_sync(txr->txtag->dt_dmat, tx_buffer->map,
   3210 			    0, tx_buffer->m_head->m_pkthdr.len,
   3211 			    BUS_DMASYNC_POSTWRITE);
   3212 			ixgbe_dmamap_unload(txr->txtag, tx_buffer->map);
   3213 			m_freem(tx_buffer->m_head);
   3214 			tx_buffer->m_head = NULL;
   3215 			if (tx_buffer->map != NULL) {
   3216 				ixgbe_dmamap_destroy(txr->txtag,
   3217 				    tx_buffer->map);
   3218 				tx_buffer->map = NULL;
   3219 			}
   3220 		} else if (tx_buffer->map != NULL) {
   3221 			ixgbe_dmamap_unload(txr->txtag, tx_buffer->map);
   3222 			ixgbe_dmamap_destroy(txr->txtag, tx_buffer->map);
   3223 			tx_buffer->map = NULL;
   3224 		}
   3225 	}
   3226 #if __FreeBSD_version >= 800000
   3227 	if (txr->br != NULL)
   3228 		buf_ring_free(txr->br, M_DEVBUF);
   3229 #endif
   3230 	if (txr->tx_buffers != NULL) {
   3231 		free(txr->tx_buffers, M_DEVBUF);
   3232 		txr->tx_buffers = NULL;
   3233 	}
   3234 	if (txr->txtag != NULL) {
   3235 		ixgbe_dma_tag_destroy(txr->txtag);
   3236 		txr->txtag = NULL;
   3237 	}
   3238 	return;
   3239 }
   3240 
   3241 /*********************************************************************
   3242  *
   3243  *  Advanced Context Descriptor setup for VLAN or L4 CSUM
   3244  *
   3245  **********************************************************************/
   3246 
   3247 static u32
   3248 ixgbe_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
   3249 {
   3250 	struct m_tag *mtag;
   3251 	struct adapter *adapter = txr->adapter;
   3252 	struct ethercom *ec = &adapter->osdep.ec;
   3253 	struct ixgbe_adv_tx_context_desc *TXD;
   3254 	struct ixgbe_tx_buf        *tx_buffer;
   3255 	u32 olinfo = 0, vlan_macip_lens = 0, type_tucmd_mlhl = 0;
   3256 	struct ether_vlan_header *eh;
   3257 	struct ip ip;
   3258 	struct ip6_hdr ip6;
   3259 	int  ehdrlen, ip_hlen = 0;
   3260 	u16	etype;
   3261 	u8	ipproto __diagused = 0;
   3262 	bool	offload;
   3263 	int ctxd = txr->next_avail_desc;
   3264 	u16 vtag = 0;
   3265 
   3266 	offload = ((mp->m_pkthdr.csum_flags & M_CSUM_OFFLOAD) != 0);
   3267 
   3268 	tx_buffer = &txr->tx_buffers[ctxd];
   3269 	TXD = (struct ixgbe_adv_tx_context_desc *) &txr->tx_base[ctxd];
   3270 
   3271 	/*
   3272 	** In advanced descriptors the vlan tag must
   3273 	** be placed into the descriptor itself.
   3274 	*/
   3275 	if ((mtag = VLAN_OUTPUT_TAG(ec, mp)) != NULL) {
   3276 		vtag = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
   3277 		vlan_macip_lens |= (vtag << IXGBE_ADVTXD_VLAN_SHIFT);
   3278 	} else if (!offload)
   3279 		return 0;
   3280 
   3281 	/*
   3282 	 * Determine where frame payload starts.
   3283 	 * Jump over vlan headers if already present,
   3284 	 * helpful for QinQ too.
   3285 	 */
   3286 	KASSERT(mp->m_len >= offsetof(struct ether_vlan_header, evl_tag));
   3287 	eh = mtod(mp, struct ether_vlan_header *);
   3288 	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
   3289 		KASSERT(mp->m_len >= sizeof(struct ether_vlan_header));
   3290 		etype = ntohs(eh->evl_proto);
   3291 		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
   3292 	} else {
   3293 		etype = ntohs(eh->evl_encap_proto);
   3294 		ehdrlen = ETHER_HDR_LEN;
   3295 	}
   3296 
   3297 	/* Set the ether header length */
   3298 	vlan_macip_lens |= ehdrlen << IXGBE_ADVTXD_MACLEN_SHIFT;
   3299 
   3300 	switch (etype) {
   3301 	case ETHERTYPE_IP:
   3302 		m_copydata(mp, ehdrlen, sizeof(ip), &ip);
   3303 		ip_hlen = ip.ip_hl << 2;
   3304 		ipproto = ip.ip_p;
   3305 #if 0
   3306 		ip.ip_sum = 0;
   3307 		m_copyback(mp, ehdrlen, sizeof(ip), &ip);
   3308 #else
   3309 		KASSERT((mp->m_pkthdr.csum_flags & M_CSUM_IPv4) == 0 ||
   3310 		    ip.ip_sum == 0);
   3311 #endif
   3312 		type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4;
   3313 		break;
   3314 	case ETHERTYPE_IPV6:
   3315 		m_copydata(mp, ehdrlen, sizeof(ip6), &ip6);
   3316 		ip_hlen = sizeof(ip6);
   3317 		ipproto = ip6.ip6_nxt;
   3318 		type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV6;
   3319 		break;
   3320 	default:
   3321 		break;
   3322 	}
   3323 
   3324 	if ((mp->m_pkthdr.csum_flags & M_CSUM_IPv4) != 0)
   3325 		olinfo |= IXGBE_TXD_POPTS_IXSM << 8;
   3326 
   3327 	vlan_macip_lens |= ip_hlen;
   3328 	type_tucmd_mlhl |= IXGBE_ADVTXD_DCMD_DEXT | IXGBE_ADVTXD_DTYP_CTXT;
   3329 
   3330 	if (mp->m_pkthdr.csum_flags & (M_CSUM_TCPv4|M_CSUM_TCPv6)) {
   3331 		type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_L4T_TCP;
   3332 		olinfo |= IXGBE_TXD_POPTS_TXSM << 8;
   3333 		KASSERT(ipproto == IPPROTO_TCP);
   3334 	} else if (mp->m_pkthdr.csum_flags & (M_CSUM_UDPv4|M_CSUM_UDPv6)) {
   3335 		type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_L4T_UDP;
   3336 		olinfo |= IXGBE_TXD_POPTS_TXSM << 8;
   3337 		KASSERT(ipproto == IPPROTO_UDP);
   3338 	}
   3339 
   3340 	/* Now copy bits into descriptor */
   3341 	TXD->vlan_macip_lens |= htole32(vlan_macip_lens);
   3342 	TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
   3343 	TXD->seqnum_seed = htole32(0);
   3344 	TXD->mss_l4len_idx = htole32(0);
   3345 
   3346 	tx_buffer->m_head = NULL;
   3347 	tx_buffer->eop_index = -1;
   3348 
   3349 	/* We've consumed the first desc, adjust counters */
   3350 	if (++ctxd == adapter->num_tx_desc)
   3351 		ctxd = 0;
   3352 	txr->next_avail_desc = ctxd;
   3353 	--txr->tx_avail;
   3354 
   3355         return olinfo;
   3356 }
   3357 
   3358 /**********************************************************************
   3359  *
   3360  *  Setup work for hardware segmentation offload (TSO) on
   3361  *  adapters using advanced tx descriptors
   3362  *
   3363  **********************************************************************/
   3364 static bool
   3365 ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
   3366 {
   3367 	struct m_tag *mtag;
   3368 	struct adapter *adapter = txr->adapter;
   3369 	struct ethercom *ec = &adapter->osdep.ec;
   3370 	struct ixgbe_adv_tx_context_desc *TXD;
   3371 	struct ixgbe_tx_buf        *tx_buffer;
   3372 	u32 vlan_macip_lens = 0, type_tucmd_mlhl = 0;
   3373 	u32 mss_l4len_idx = 0;
   3374 	u16 vtag = 0;
   3375 	int ctxd, ehdrlen,  hdrlen, ip_hlen, tcp_hlen;
   3376 	struct ether_vlan_header *eh;
   3377 	struct ip *ip;
   3378 	struct tcphdr *th;
   3379 
   3380 
   3381 	/*
   3382 	 * Determine where frame payload starts.
   3383 	 * Jump over vlan headers if already present
   3384 	 */
   3385 	eh = mtod(mp, struct ether_vlan_header *);
   3386 	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN))
   3387 		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
   3388 	else
   3389 		ehdrlen = ETHER_HDR_LEN;
   3390 
   3391         /* Ensure we have at least the IP+TCP header in the first mbuf. */
   3392         if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
   3393 		return FALSE;
   3394 
   3395 	ctxd = txr->next_avail_desc;
   3396 	tx_buffer = &txr->tx_buffers[ctxd];
   3397 	TXD = (struct ixgbe_adv_tx_context_desc *) &txr->tx_base[ctxd];
   3398 
   3399 	ip = (struct ip *)(mp->m_data + ehdrlen);
   3400 	if (ip->ip_p != IPPROTO_TCP)
   3401 		return FALSE;   /* 0 */
   3402 	ip->ip_sum = 0;
   3403 	ip_hlen = ip->ip_hl << 2;
   3404 	th = (struct tcphdr *)((char *)ip + ip_hlen);
   3405 	/* XXX Educated guess: FreeBSD's in_pseudo == NetBSD's in_cksum_phdr */
   3406 	th->th_sum = in_cksum_phdr(ip->ip_src.s_addr,
   3407 	    ip->ip_dst.s_addr, htons(IPPROTO_TCP));
   3408 	tcp_hlen = th->th_off << 2;
   3409 	hdrlen = ehdrlen + ip_hlen + tcp_hlen;
   3410 
   3411 	/* This is used in the transmit desc in encap */
   3412 	*paylen = mp->m_pkthdr.len - hdrlen;
   3413 
   3414 	/* VLAN MACLEN IPLEN */
   3415 	if ((mtag = VLAN_OUTPUT_TAG(ec, mp)) != NULL) {
   3416 		vtag = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
   3417                 vlan_macip_lens |= (vtag << IXGBE_ADVTXD_VLAN_SHIFT);
   3418 	}
   3419 
   3420 	vlan_macip_lens |= ehdrlen << IXGBE_ADVTXD_MACLEN_SHIFT;
   3421 	vlan_macip_lens |= ip_hlen;
   3422 	TXD->vlan_macip_lens |= htole32(vlan_macip_lens);
   3423 
   3424 	/* ADV DTYPE TUCMD */
   3425 	type_tucmd_mlhl |= IXGBE_ADVTXD_DCMD_DEXT | IXGBE_ADVTXD_DTYP_CTXT;
   3426 	type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_L4T_TCP;
   3427 	type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4;
   3428 	TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
   3429 
   3430 
   3431 	/* MSS L4LEN IDX */
   3432 	mss_l4len_idx |= (mp->m_pkthdr.segsz << IXGBE_ADVTXD_MSS_SHIFT);
   3433 	mss_l4len_idx |= (tcp_hlen << IXGBE_ADVTXD_L4LEN_SHIFT);
   3434 	TXD->mss_l4len_idx = htole32(mss_l4len_idx);
   3435 
   3436 	TXD->seqnum_seed = htole32(0);
   3437 	tx_buffer->m_head = NULL;
   3438 	tx_buffer->eop_index = -1;
   3439 
   3440 	if (++ctxd == adapter->num_tx_desc)
   3441 		ctxd = 0;
   3442 
   3443 	txr->tx_avail--;
   3444 	txr->next_avail_desc = ctxd;
   3445 	return TRUE;
   3446 }
   3447 
   3448 #ifdef IXGBE_FDIR
   3449 /*
   3450 ** This routine parses packet headers so that Flow
   3451 ** Director can make a hashed filter table entry
   3452 ** allowing traffic flows to be identified and kept
   3453 ** on the same cpu.  This would be a performance
   3454 ** hit, but we only do it at IXGBE_FDIR_RATE of
   3455 ** packets.
   3456 */
   3457 static void
   3458 ixgbe_atr(struct tx_ring *txr, struct mbuf *mp)
   3459 {
   3460 	struct adapter			*adapter = txr->adapter;
   3461 	struct ix_queue			*que;
   3462 	struct ip			*ip;
   3463 	struct tcphdr			*th;
   3464 	struct udphdr			*uh;
   3465 	struct ether_vlan_header	*eh;
   3466 	union ixgbe_atr_hash_dword	input = {.dword = 0};
   3467 	union ixgbe_atr_hash_dword	common = {.dword = 0};
   3468 	int  				ehdrlen, ip_hlen;
   3469 	u16				etype;
   3470 
   3471 	eh = mtod(mp, struct ether_vlan_header *);
   3472 	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
   3473 		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
   3474 		etype = eh->evl_proto;
   3475 	} else {
   3476 		ehdrlen = ETHER_HDR_LEN;
   3477 		etype = eh->evl_encap_proto;
   3478 	}
   3479 
   3480 	/* Only handling IPv4 */
   3481 	if (etype != htons(ETHERTYPE_IP))
   3482 		return;
   3483 
   3484 	ip = (struct ip *)(mp->m_data + ehdrlen);
   3485 	ip_hlen = ip->ip_hl << 2;
   3486 
   3487 	/* check if we're UDP or TCP */
   3488 	switch (ip->ip_p) {
   3489 	case IPPROTO_TCP:
   3490 		th = (struct tcphdr *)((char *)ip + ip_hlen);
   3491 		/* src and dst are inverted */
   3492 		common.port.dst ^= th->th_sport;
   3493 		common.port.src ^= th->th_dport;
   3494 		input.formatted.flow_type ^= IXGBE_ATR_FLOW_TYPE_TCPV4;
   3495 		break;
   3496 	case IPPROTO_UDP:
   3497 		uh = (struct udphdr *)((char *)ip + ip_hlen);
   3498 		/* src and dst are inverted */
   3499 		common.port.dst ^= uh->uh_sport;
   3500 		common.port.src ^= uh->uh_dport;
   3501 		input.formatted.flow_type ^= IXGBE_ATR_FLOW_TYPE_UDPV4;
   3502 		break;
   3503 	default:
   3504 		return;
   3505 	}
   3506 
   3507 	input.formatted.vlan_id = htobe16(mp->m_pkthdr.ether_vtag);
   3508 	if (mp->m_pkthdr.ether_vtag)
   3509 		common.flex_bytes ^= htons(ETHERTYPE_VLAN);
   3510 	else
   3511 		common.flex_bytes ^= etype;
   3512 	common.ip ^= ip->ip_src.s_addr ^ ip->ip_dst.s_addr;
   3513 
   3514 	que = &adapter->queues[txr->me];
   3515 	/*
   3516 	** This assumes the Rx queue and Tx
   3517 	** queue are bound to the same CPU
   3518 	*/
   3519 	ixgbe_fdir_add_signature_filter_82599(&adapter->hw,
   3520 	    input, common, que->msix);
   3521 }
   3522 #endif /* IXGBE_FDIR */
   3523 
   3524 /**********************************************************************
   3525  *
   3526  *  Examine each tx_buffer in the used queue. If the hardware is done
   3527  *  processing the packet then free associated resources. The
   3528  *  tx_buffer is put back on the free queue.
   3529  *
   3530  **********************************************************************/
   3531 static bool
   3532 ixgbe_txeof(struct tx_ring *txr)
   3533 {
   3534 	struct adapter	*adapter = txr->adapter;
   3535 	struct ifnet	*ifp = adapter->ifp;
   3536 	u32	first, last, done, processed;
   3537 	struct ixgbe_tx_buf *tx_buffer;
   3538 	struct ixgbe_legacy_tx_desc *tx_desc, *eop_desc;
   3539 	struct timeval now, elapsed;
   3540 
   3541 	KASSERT(mutex_owned(&txr->tx_mtx));
   3542 
   3543 	if (txr->tx_avail == adapter->num_tx_desc) {
   3544 		txr->queue_status = IXGBE_QUEUE_IDLE;
   3545 		return false;
   3546 	}
   3547 
   3548 	processed = 0;
   3549 	first = txr->next_to_clean;
   3550 	tx_buffer = &txr->tx_buffers[first];
   3551 	/* For cleanup we just use legacy struct */
   3552 	tx_desc = (struct ixgbe_legacy_tx_desc *)&txr->tx_base[first];
   3553 	last = tx_buffer->eop_index;
   3554 	if (last == -1)
   3555 		return false;
   3556 	eop_desc = (struct ixgbe_legacy_tx_desc *)&txr->tx_base[last];
   3557 
   3558 	/*
   3559 	** Get the index of the first descriptor
   3560 	** BEYOND the EOP and call that 'done'.
   3561 	** I do this so the comparison in the
   3562 	** inner while loop below can be simple
   3563 	*/
   3564 	if (++last == adapter->num_tx_desc) last = 0;
   3565 	done = last;
   3566 
   3567         ixgbe_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
   3568 	    BUS_DMASYNC_POSTREAD);
   3569 	/*
   3570 	** Only the EOP descriptor of a packet now has the DD
   3571 	** bit set, this is what we look for...
   3572 	*/
   3573 	while (eop_desc->upper.fields.status & IXGBE_TXD_STAT_DD) {
   3574 		/* We clean the range of the packet */
   3575 		while (first != done) {
   3576 			tx_desc->upper.data = 0;
   3577 			tx_desc->lower.data = 0;
   3578 			tx_desc->buffer_addr = 0;
   3579 			++txr->tx_avail;
   3580 			++processed;
   3581 
   3582 			if (tx_buffer->m_head) {
   3583 				txr->bytes +=
   3584 				    tx_buffer->m_head->m_pkthdr.len;
   3585 				bus_dmamap_sync(txr->txtag->dt_dmat,
   3586 				    tx_buffer->map,
   3587 				    0, tx_buffer->m_head->m_pkthdr.len,
   3588 				    BUS_DMASYNC_POSTWRITE);
   3589 				ixgbe_dmamap_unload(txr->txtag, tx_buffer->map);
   3590 				m_freem(tx_buffer->m_head);
   3591 				tx_buffer->m_head = NULL;
   3592 			}
   3593 			tx_buffer->eop_index = -1;
   3594 			getmicrotime(&txr->watchdog_time);
   3595 
   3596 			if (++first == adapter->num_tx_desc)
   3597 				first = 0;
   3598 
   3599 			tx_buffer = &txr->tx_buffers[first];
   3600 			tx_desc =
   3601 			    (struct ixgbe_legacy_tx_desc *)&txr->tx_base[first];
   3602 		}
   3603 		++txr->packets;
   3604 		++ifp->if_opackets;
   3605 		/* See if there is more work now */
   3606 		last = tx_buffer->eop_index;
   3607 		if (last != -1) {
   3608 			eop_desc =
   3609 			    (struct ixgbe_legacy_tx_desc *)&txr->tx_base[last];
   3610 			/* Get next done point */
   3611 			if (++last == adapter->num_tx_desc) last = 0;
   3612 			done = last;
   3613 		} else
   3614 			break;
   3615 	}
   3616 	ixgbe_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
   3617 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
   3618 
   3619 	txr->next_to_clean = first;
   3620 
   3621 	/*
   3622 	** Watchdog calculation, we know there's
   3623 	** work outstanding or the first return
   3624 	** would have been taken, so none processed
   3625 	** for too long indicates a hang.
   3626 	*/
   3627 	getmicrotime(&now);
   3628 	timersub(&now, &txr->watchdog_time, &elapsed);
   3629 	if (!processed && tvtohz(&elapsed) > IXGBE_WATCHDOG)
   3630 		txr->queue_status = IXGBE_QUEUE_HUNG;
   3631 
   3632 	/*
   3633 	 * If we have enough room, clear IFF_OACTIVE to tell the stack that
   3634 	 * it is OK to send packets. If there are no pending descriptors,
   3635 	 * clear the timeout. Otherwise, if some descriptors have been freed,
   3636 	 * restart the timeout.
   3637 	 */
   3638 	if (txr->tx_avail > IXGBE_TX_CLEANUP_THRESHOLD) {
   3639 		ifp->if_flags &= ~IFF_OACTIVE;
   3640 		if (txr->tx_avail == adapter->num_tx_desc) {
   3641 			txr->queue_status = IXGBE_QUEUE_IDLE;
   3642 			return false;
   3643 		}
   3644 	}
   3645 
   3646 	return true;
   3647 }
   3648 
   3649 /*********************************************************************
   3650  *
   3651  *  Refresh mbuf buffers for RX descriptor rings
   3652  *   - now keeps its own state so discards due to resource
   3653  *     exhaustion are unnecessary, if an mbuf cannot be obtained
   3654  *     it just returns, keeping its placeholder, thus it can simply
   3655  *     be recalled to try again.
   3656  *
   3657  **********************************************************************/
   3658 static void
   3659 ixgbe_refresh_mbufs(struct rx_ring *rxr, int limit)
   3660 {
   3661 	struct adapter		*adapter = rxr->adapter;
   3662 	struct ixgbe_rx_buf	*rxbuf;
   3663 	struct mbuf		*mh, *mp;
   3664 	int			i, j, error;
   3665 	bool			refreshed = false;
   3666 
   3667 	i = j = rxr->next_to_refresh;
   3668 	/* Control the loop with one beyond */
   3669 	if (++j == adapter->num_rx_desc)
   3670 		j = 0;
   3671 
   3672 	while (j != limit) {
   3673 		rxbuf = &rxr->rx_buffers[i];
   3674 		if (rxr->hdr_split == FALSE)
   3675 			goto no_split;
   3676 
   3677 		if (rxbuf->m_head == NULL) {
   3678 			mh = m_gethdr(M_DONTWAIT, MT_DATA);
   3679 			if (mh == NULL)
   3680 				goto update;
   3681 		} else
   3682 			mh = rxbuf->m_head;
   3683 
   3684 		mh->m_pkthdr.len = mh->m_len = MHLEN;
   3685 		mh->m_len = MHLEN;
   3686 		mh->m_flags |= M_PKTHDR;
   3687 		/* Get the memory mapping */
   3688 		error = bus_dmamap_load_mbuf(rxr->htag->dt_dmat,
   3689 		    rxbuf->hmap, mh, BUS_DMA_NOWAIT);
   3690 		if (error != 0) {
   3691 			printf("Refresh mbufs: hdr dmamap load"
   3692 			    " failure - %d\n", error);
   3693 			m_free(mh);
   3694 			rxbuf->m_head = NULL;
   3695 			goto update;
   3696 		}
   3697 		rxbuf->m_head = mh;
   3698 		ixgbe_dmamap_sync(rxr->htag, rxbuf->hmap, BUS_DMASYNC_PREREAD);
   3699 		rxr->rx_base[i].read.hdr_addr =
   3700 		    htole64(rxbuf->hmap->dm_segs[0].ds_addr);
   3701 
   3702 no_split:
   3703 		if (rxbuf->m_pack == NULL) {
   3704 			mp = ixgbe_getjcl(&adapter->jcl_head, M_DONTWAIT,
   3705 			    MT_DATA, M_PKTHDR, adapter->rx_mbuf_sz);
   3706 			if (mp == NULL) {
   3707 				rxr->no_jmbuf.ev_count++;
   3708 				goto update;
   3709 			}
   3710 		} else
   3711 			mp = rxbuf->m_pack;
   3712 
   3713 		mp->m_pkthdr.len = mp->m_len = adapter->rx_mbuf_sz;
   3714 		/* Get the memory mapping */
   3715 		error = bus_dmamap_load_mbuf(rxr->ptag->dt_dmat,
   3716 		    rxbuf->pmap, mp, BUS_DMA_NOWAIT);
   3717 		if (error != 0) {
   3718 			printf("Refresh mbufs: payload dmamap load"
   3719 			    " failure - %d\n", error);
   3720 			m_free(mp);
   3721 			rxbuf->m_pack = NULL;
   3722 			goto update;
   3723 		}
   3724 		rxbuf->m_pack = mp;
   3725 		bus_dmamap_sync(rxr->ptag->dt_dmat, rxbuf->pmap,
   3726 		    0, mp->m_pkthdr.len, BUS_DMASYNC_PREREAD);
   3727 		rxr->rx_base[i].read.pkt_addr =
   3728 		    htole64(rxbuf->pmap->dm_segs[0].ds_addr);
   3729 
   3730 		refreshed = true;
   3731 		/* Next is precalculated */
   3732 		i = j;
   3733 		rxr->next_to_refresh = i;
   3734 		if (++j == adapter->num_rx_desc)
   3735 			j = 0;
   3736 	}
   3737 update:
   3738 	if (refreshed) /* Update hardware tail index */
   3739 		IXGBE_WRITE_REG(&adapter->hw,
   3740 		    IXGBE_RDT(rxr->me), rxr->next_to_refresh);
   3741 	return;
   3742 }
   3743 
   3744 /*********************************************************************
   3745  *
   3746  *  Allocate memory for rx_buffer structures. Since we use one
   3747  *  rx_buffer per received packet, the maximum number of rx_buffer's
   3748  *  that we'll need is equal to the number of receive descriptors
   3749  *  that we've allocated.
   3750  *
   3751  **********************************************************************/
   3752 static int
   3753 ixgbe_allocate_receive_buffers(struct rx_ring *rxr)
   3754 {
   3755 	struct	adapter 	*adapter = rxr->adapter;
   3756 	device_t 		dev = adapter->dev;
   3757 	struct ixgbe_rx_buf 	*rxbuf;
   3758 	int             	i, bsize, error;
   3759 
   3760 	bsize = sizeof(struct ixgbe_rx_buf) * adapter->num_rx_desc;
   3761 	if (!(rxr->rx_buffers =
   3762 	    (struct ixgbe_rx_buf *) malloc(bsize,
   3763 	    M_DEVBUF, M_NOWAIT | M_ZERO))) {
   3764 		aprint_error_dev(dev, "Unable to allocate rx_buffer memory\n");
   3765 		error = ENOMEM;
   3766 		goto fail;
   3767 	}
   3768 
   3769 	if ((error = ixgbe_dma_tag_create(adapter->osdep.dmat,	/* parent */
   3770 				   1, 0,	/* alignment, bounds */
   3771 				   MSIZE,		/* maxsize */
   3772 				   1,			/* nsegments */
   3773 				   MSIZE,		/* maxsegsize */
   3774 				   0,			/* flags */
   3775 				   &rxr->htag))) {
   3776 		aprint_error_dev(dev, "Unable to create RX DMA tag\n");
   3777 		goto fail;
   3778 	}
   3779 
   3780 	if ((error = ixgbe_dma_tag_create(adapter->osdep.dmat,	/* parent */
   3781 				   1, 0,	/* alignment, bounds */
   3782 				   MJUM16BYTES,		/* maxsize */
   3783 				   1,			/* nsegments */
   3784 				   MJUM16BYTES,		/* maxsegsize */
   3785 				   0,			/* flags */
   3786 				   &rxr->ptag))) {
   3787 		aprint_error_dev(dev, "Unable to create RX DMA tag\n");
   3788 		goto fail;
   3789 	}
   3790 
   3791 	for (i = 0; i < adapter->num_rx_desc; i++, rxbuf++) {
   3792 		rxbuf = &rxr->rx_buffers[i];
   3793 		error = ixgbe_dmamap_create(rxr->htag,
   3794 		    BUS_DMA_NOWAIT, &rxbuf->hmap);
   3795 		if (error) {
   3796 			aprint_error_dev(dev, "Unable to create RX head map\n");
   3797 			goto fail;
   3798 		}
   3799 		error = ixgbe_dmamap_create(rxr->ptag,
   3800 		    BUS_DMA_NOWAIT, &rxbuf->pmap);
   3801 		if (error) {
   3802 			aprint_error_dev(dev, "Unable to create RX pkt map\n");
   3803 			goto fail;
   3804 		}
   3805 	}
   3806 
   3807 	return (0);
   3808 
   3809 fail:
   3810 	/* Frees all, but can handle partial completion */
   3811 	ixgbe_free_receive_structures(adapter);
   3812 	return (error);
   3813 }
   3814 
   3815 /*
   3816 ** Used to detect a descriptor that has
   3817 ** been merged by Hardware RSC.
   3818 */
   3819 static inline u32
   3820 ixgbe_rsc_count(union ixgbe_adv_rx_desc *rx)
   3821 {
   3822 	return (le32toh(rx->wb.lower.lo_dword.data) &
   3823 	    IXGBE_RXDADV_RSCCNT_MASK) >> IXGBE_RXDADV_RSCCNT_SHIFT;
   3824 }
   3825 
   3826 /*********************************************************************
   3827  *
   3828  *  Initialize Hardware RSC (LRO) feature on 82599
   3829  *  for an RX ring, this is toggled by the LRO capability
   3830  *  even though it is transparent to the stack.
   3831  *
   3832  **********************************************************************/
   3833 static void
   3834 ixgbe_setup_hw_rsc(struct rx_ring *rxr)
   3835 {
   3836 	struct	adapter 	*adapter = rxr->adapter;
   3837 	struct	ixgbe_hw	*hw = &adapter->hw;
   3838 	u32			rscctrl, rdrxctl;
   3839 
   3840 	rdrxctl = IXGBE_READ_REG(hw, IXGBE_RDRXCTL);
   3841 	rdrxctl &= ~IXGBE_RDRXCTL_RSCFRSTSIZE;
   3842 	rdrxctl |= IXGBE_RDRXCTL_CRCSTRIP;
   3843 	rdrxctl |= IXGBE_RDRXCTL_RSCACKC;
   3844 	IXGBE_WRITE_REG(hw, IXGBE_RDRXCTL, rdrxctl);
   3845 
   3846 	rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(rxr->me));
   3847 	rscctrl |= IXGBE_RSCCTL_RSCEN;
   3848 	/*
   3849 	** Limit the total number of descriptors that
   3850 	** can be combined, so it does not exceed 64K
   3851 	*/
   3852 	if (adapter->rx_mbuf_sz == MCLBYTES)
   3853 		rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
   3854 	else if (adapter->rx_mbuf_sz == MJUMPAGESIZE)
   3855 		rscctrl |= IXGBE_RSCCTL_MAXDESC_8;
   3856 	else if (adapter->rx_mbuf_sz == MJUM9BYTES)
   3857 		rscctrl |= IXGBE_RSCCTL_MAXDESC_4;
   3858 	else  /* Using 16K cluster */
   3859 		rscctrl |= IXGBE_RSCCTL_MAXDESC_1;
   3860 
   3861 	IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(rxr->me), rscctrl);
   3862 
   3863 	/* Enable TCP header recognition */
   3864 	IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(0),
   3865 	    (IXGBE_READ_REG(hw, IXGBE_PSRTYPE(0)) |
   3866 	    IXGBE_PSRTYPE_TCPHDR));
   3867 
   3868 	/* Disable RSC for ACK packets */
   3869 	IXGBE_WRITE_REG(hw, IXGBE_RSCDBU,
   3870 	    (IXGBE_RSCDBU_RSCACKDIS | IXGBE_READ_REG(hw, IXGBE_RSCDBU)));
   3871 
   3872 	rxr->hw_rsc = TRUE;
   3873 }
   3874 
   3875 
   3876 static void
   3877 ixgbe_free_receive_ring(struct rx_ring *rxr)
   3878 {
   3879 	struct  adapter         *adapter;
   3880 	struct ixgbe_rx_buf       *rxbuf;
   3881 	int i;
   3882 
   3883 	adapter = rxr->adapter;
   3884 	for (i = 0; i < adapter->num_rx_desc; i++) {
   3885 		rxbuf = &rxr->rx_buffers[i];
   3886 		if (rxbuf->m_head != NULL) {
   3887 			ixgbe_dmamap_sync(rxr->htag, rxbuf->hmap,
   3888 			    BUS_DMASYNC_POSTREAD);
   3889 			ixgbe_dmamap_unload(rxr->htag, rxbuf->hmap);
   3890 			rxbuf->m_head->m_flags |= M_PKTHDR;
   3891 			m_freem(rxbuf->m_head);
   3892 		}
   3893 		if (rxbuf->m_pack != NULL) {
   3894 			bus_dmamap_sync(rxr->ptag->dt_dmat, rxbuf->pmap,
   3895 			    0, rxbuf->m_pack->m_pkthdr.len,
   3896 			    BUS_DMASYNC_POSTREAD);
   3897 			ixgbe_dmamap_unload(rxr->ptag, rxbuf->pmap);
   3898 			rxbuf->m_pack->m_flags |= M_PKTHDR;
   3899 			m_freem(rxbuf->m_pack);
   3900 		}
   3901 		rxbuf->m_head = NULL;
   3902 		rxbuf->m_pack = NULL;
   3903 	}
   3904 }
   3905 
   3906 
   3907 /*********************************************************************
   3908  *
   3909  *  Initialize a receive ring and its buffers.
   3910  *
   3911  **********************************************************************/
   3912 static int
   3913 ixgbe_setup_receive_ring(struct rx_ring *rxr)
   3914 {
   3915 	struct	adapter 	*adapter;
   3916 	struct ifnet		*ifp;
   3917 	struct ixgbe_rx_buf	*rxbuf;
   3918 #ifdef LRO
   3919 	struct lro_ctrl		*lro = &rxr->lro;
   3920 #endif /* LRO */
   3921 	int			rsize, error = 0;
   3922 
   3923 	adapter = rxr->adapter;
   3924 	ifp = adapter->ifp;
   3925 
   3926 	/* Clear the ring contents */
   3927 	IXGBE_RX_LOCK(rxr);
   3928 	rsize = roundup2(adapter->num_rx_desc *
   3929 	    sizeof(union ixgbe_adv_rx_desc), DBA_ALIGN);
   3930 	bzero((void *)rxr->rx_base, rsize);
   3931 
   3932 	/* Free current RX buffer structs and their mbufs */
   3933 	ixgbe_free_receive_ring(rxr);
   3934 
   3935 	/* Now reinitialize our supply of jumbo mbufs.  The number
   3936 	 * or size of jumbo mbufs may have changed.
   3937 	 */
   3938 	ixgbe_jcl_reinit(&adapter->jcl_head, rxr->ptag->dt_dmat,
   3939 	    2 * adapter->num_rx_desc, adapter->rx_mbuf_sz);
   3940 
   3941 	/* Configure header split? */
   3942 	if (ixgbe_header_split)
   3943 		rxr->hdr_split = TRUE;
   3944 
   3945 	/* Now replenish the mbufs */
   3946 	for (int j = 0; j != adapter->num_rx_desc; ++j) {
   3947 		struct mbuf	*mh, *mp;
   3948 
   3949 		rxbuf = &rxr->rx_buffers[j];
   3950 		/*
   3951 		** Don't allocate mbufs if not
   3952 		** doing header split, its wasteful
   3953 		*/
   3954 		if (rxr->hdr_split == FALSE)
   3955 			goto skip_head;
   3956 
   3957 		/* First the header */
   3958 		rxbuf->m_head = m_gethdr(M_DONTWAIT, MT_DATA);
   3959 		if (rxbuf->m_head == NULL) {
   3960 			error = ENOBUFS;
   3961 			goto fail;
   3962 		}
   3963 		m_adj(rxbuf->m_head, ETHER_ALIGN);
   3964 		mh = rxbuf->m_head;
   3965 		mh->m_len = mh->m_pkthdr.len = MHLEN;
   3966 		mh->m_flags |= M_PKTHDR;
   3967 		/* Get the memory mapping */
   3968 		error = bus_dmamap_load_mbuf(rxr->htag->dt_dmat,
   3969 		    rxbuf->hmap, rxbuf->m_head, BUS_DMA_NOWAIT);
   3970 		if (error != 0) /* Nothing elegant to do here */
   3971 			goto fail;
   3972 		bus_dmamap_sync(rxr->htag->dt_dmat, rxbuf->hmap,
   3973 		    0, mh->m_pkthdr.len, BUS_DMASYNC_PREREAD);
   3974 		/* Update descriptor */
   3975 		rxr->rx_base[j].read.hdr_addr =
   3976 		    htole64(rxbuf->hmap->dm_segs[0].ds_addr);
   3977 
   3978 skip_head:
   3979 		/* Now the payload cluster */
   3980 		rxbuf->m_pack = ixgbe_getjcl(&adapter->jcl_head, M_DONTWAIT,
   3981 		    MT_DATA, M_PKTHDR, adapter->rx_mbuf_sz);
   3982 		if (rxbuf->m_pack == NULL) {
   3983 			error = ENOBUFS;
   3984                         goto fail;
   3985 		}
   3986 		mp = rxbuf->m_pack;
   3987 		mp->m_pkthdr.len = mp->m_len = adapter->rx_mbuf_sz;
   3988 		/* Get the memory mapping */
   3989 		error = bus_dmamap_load_mbuf(rxr->ptag->dt_dmat,
   3990 		    rxbuf->pmap, mp, BUS_DMA_NOWAIT);
   3991 		if (error != 0)
   3992                         goto fail;
   3993 		bus_dmamap_sync(rxr->ptag->dt_dmat, rxbuf->pmap,
   3994 		    0, adapter->rx_mbuf_sz, BUS_DMASYNC_PREREAD);
   3995 		/* Update descriptor */
   3996 		rxr->rx_base[j].read.pkt_addr =
   3997 		    htole64(rxbuf->pmap->dm_segs[0].ds_addr);
   3998 	}
   3999 
   4000 
   4001 	/* Setup our descriptor indices */
   4002 	rxr->next_to_check = 0;
   4003 	rxr->next_to_refresh = 0;
   4004 	rxr->lro_enabled = FALSE;
   4005 	rxr->rx_split_packets.ev_count = 0;
   4006 	rxr->rx_bytes.ev_count = 0;
   4007 	rxr->discard = FALSE;
   4008 
   4009 	ixgbe_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
   4010 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
   4011 
   4012 	/*
   4013 	** Now set up the LRO interface:
   4014 	** 82598 uses software LRO, the
   4015 	** 82599 uses a hardware assist.
   4016 	*/
   4017 	if ((adapter->hw.mac.type != ixgbe_mac_82598EB) &&
   4018 	    (ifp->if_capenable & IFCAP_RXCSUM) &&
   4019 	    (ifp->if_capenable & IFCAP_LRO))
   4020 		ixgbe_setup_hw_rsc(rxr);
   4021 #ifdef LRO
   4022 	else if (ifp->if_capenable & IFCAP_LRO) {
   4023 		device_t dev = adapter->dev;
   4024 		int err = tcp_lro_init(lro);
   4025 		if (err) {
   4026 			device_printf(dev, "LRO Initialization failed!\n");
   4027 			goto fail;
   4028 		}
   4029 		INIT_DEBUGOUT("RX Soft LRO Initialized\n");
   4030 		rxr->lro_enabled = TRUE;
   4031 		lro->ifp = adapter->ifp;
   4032 	}
   4033 #endif /* LRO */
   4034 
   4035 	IXGBE_RX_UNLOCK(rxr);
   4036 	return (0);
   4037 
   4038 fail:
   4039 	ixgbe_free_receive_ring(rxr);
   4040 	IXGBE_RX_UNLOCK(rxr);
   4041 	return (error);
   4042 }
   4043 
   4044 /*********************************************************************
   4045  *
   4046  *  Initialize all receive rings.
   4047  *
   4048  **********************************************************************/
   4049 static int
   4050 ixgbe_setup_receive_structures(struct adapter *adapter)
   4051 {
   4052 	struct rx_ring *rxr = adapter->rx_rings;
   4053 	int j;
   4054 
   4055 	for (j = 0; j < adapter->num_queues; j++, rxr++)
   4056 		if (ixgbe_setup_receive_ring(rxr))
   4057 			goto fail;
   4058 
   4059 	return (0);
   4060 fail:
   4061 	/*
   4062 	 * Free RX buffers allocated so far, we will only handle
   4063 	 * the rings that completed, the failing case will have
   4064 	 * cleaned up for itself. 'j' failed, so its the terminus.
   4065 	 */
   4066 	for (int i = 0; i < j; ++i) {
   4067 		rxr = &adapter->rx_rings[i];
   4068 		ixgbe_free_receive_ring(rxr);
   4069 	}
   4070 
   4071 	return (ENOBUFS);
   4072 }
   4073 
   4074 /*********************************************************************
   4075  *
   4076  *  Setup receive registers and features.
   4077  *
   4078  **********************************************************************/
   4079 #define IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT 2
   4080 
   4081 static void
   4082 ixgbe_initialize_receive_units(struct adapter *adapter)
   4083 {
   4084 	int i;
   4085 	struct	rx_ring	*rxr = adapter->rx_rings;
   4086 	struct ixgbe_hw	*hw = &adapter->hw;
   4087 	struct ifnet   *ifp = adapter->ifp;
   4088 	u32		bufsz, rxctrl, fctrl, srrctl, rxcsum;
   4089 	u32		reta, mrqc = 0, hlreg, r[10];
   4090 
   4091 
   4092 	/*
   4093 	 * Make sure receives are disabled while
   4094 	 * setting up the descriptor ring
   4095 	 */
   4096 	rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
   4097 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL,
   4098 	    rxctrl & ~IXGBE_RXCTRL_RXEN);
   4099 
   4100 	/* Enable broadcasts */
   4101 	fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
   4102 	fctrl |= IXGBE_FCTRL_BAM;
   4103 	fctrl |= IXGBE_FCTRL_DPF;
   4104 	fctrl |= IXGBE_FCTRL_PMCF;
   4105 	IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
   4106 
   4107 	/* Set for Jumbo Frames? */
   4108 	hlreg = IXGBE_READ_REG(hw, IXGBE_HLREG0);
   4109 	if (ifp->if_mtu > ETHERMTU)
   4110 		hlreg |= IXGBE_HLREG0_JUMBOEN;
   4111 	else
   4112 		hlreg &= ~IXGBE_HLREG0_JUMBOEN;
   4113 	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg);
   4114 
   4115 	bufsz = adapter->rx_mbuf_sz  >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
   4116 
   4117 	for (i = 0; i < adapter->num_queues; i++, rxr++) {
   4118 		u64 rdba = rxr->rxdma.dma_paddr;
   4119 
   4120 		/* Setup the Base and Length of the Rx Descriptor Ring */
   4121 		IXGBE_WRITE_REG(hw, IXGBE_RDBAL(i),
   4122 			       (rdba & 0x00000000ffffffffULL));
   4123 		IXGBE_WRITE_REG(hw, IXGBE_RDBAH(i), (rdba >> 32));
   4124 		IXGBE_WRITE_REG(hw, IXGBE_RDLEN(i),
   4125 		    adapter->num_rx_desc * sizeof(union ixgbe_adv_rx_desc));
   4126 
   4127 		/* Set up the SRRCTL register */
   4128 		srrctl = IXGBE_READ_REG(hw, IXGBE_SRRCTL(i));
   4129 		srrctl &= ~IXGBE_SRRCTL_BSIZEHDR_MASK;
   4130 		srrctl &= ~IXGBE_SRRCTL_BSIZEPKT_MASK;
   4131 		srrctl |= bufsz;
   4132 		if (rxr->hdr_split) {
   4133 			/* Use a standard mbuf for the header */
   4134 			srrctl |= ((IXGBE_RX_HDR <<
   4135 			    IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT)
   4136 			    & IXGBE_SRRCTL_BSIZEHDR_MASK);
   4137 			srrctl |= IXGBE_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS;
   4138 		} else
   4139 			srrctl |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
   4140 		IXGBE_WRITE_REG(hw, IXGBE_SRRCTL(i), srrctl);
   4141 
   4142 		/* Setup the HW Rx Head and Tail Descriptor Pointers */
   4143 		IXGBE_WRITE_REG(hw, IXGBE_RDH(i), 0);
   4144 		IXGBE_WRITE_REG(hw, IXGBE_RDT(i), 0);
   4145 	}
   4146 
   4147 	if (adapter->hw.mac.type != ixgbe_mac_82598EB) {
   4148 		u32 psrtype = IXGBE_PSRTYPE_TCPHDR |
   4149 			      IXGBE_PSRTYPE_UDPHDR |
   4150 			      IXGBE_PSRTYPE_IPV4HDR |
   4151 			      IXGBE_PSRTYPE_IPV6HDR;
   4152 		IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(0), psrtype);
   4153 	}
   4154 
   4155 	rxcsum = IXGBE_READ_REG(hw, IXGBE_RXCSUM);
   4156 
   4157 	/* Setup RSS */
   4158 	if (adapter->num_queues > 1) {
   4159 		int j;
   4160 		reta = 0;
   4161 
   4162 		/* set up random bits */
   4163 		cprng_fast(&r, sizeof(r));
   4164 
   4165 		/* Set up the redirection table */
   4166 		for (i = 0, j = 0; i < 128; i++, j++) {
   4167 			if (j == adapter->num_queues) j = 0;
   4168 			reta = (reta << 8) | (j * 0x11);
   4169 			if ((i & 3) == 3)
   4170 				IXGBE_WRITE_REG(hw, IXGBE_RETA(i >> 2), reta);
   4171 		}
   4172 
   4173 		/* Now fill our hash function seeds */
   4174 		for (i = 0; i < 10; i++)
   4175 			IXGBE_WRITE_REG(hw, IXGBE_RSSRK(i), r[i]);
   4176 
   4177 		/* Perform hash on these packet types */
   4178 		mrqc = IXGBE_MRQC_RSSEN
   4179 		     | IXGBE_MRQC_RSS_FIELD_IPV4
   4180 		     | IXGBE_MRQC_RSS_FIELD_IPV4_TCP
   4181 		     | IXGBE_MRQC_RSS_FIELD_IPV4_UDP
   4182 		     | IXGBE_MRQC_RSS_FIELD_IPV6_EX_TCP
   4183 		     | IXGBE_MRQC_RSS_FIELD_IPV6_EX
   4184 		     | IXGBE_MRQC_RSS_FIELD_IPV6
   4185 		     | IXGBE_MRQC_RSS_FIELD_IPV6_TCP
   4186 		     | IXGBE_MRQC_RSS_FIELD_IPV6_UDP
   4187 		     | IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP;
   4188 		IXGBE_WRITE_REG(hw, IXGBE_MRQC, mrqc);
   4189 
   4190 		/* RSS and RX IPP Checksum are mutually exclusive */
   4191 		rxcsum |= IXGBE_RXCSUM_PCSD;
   4192 	}
   4193 
   4194 	if (ifp->if_capenable & IFCAP_RXCSUM)
   4195 		rxcsum |= IXGBE_RXCSUM_PCSD;
   4196 
   4197 	if (!(rxcsum & IXGBE_RXCSUM_PCSD))
   4198 		rxcsum |= IXGBE_RXCSUM_IPPCSE;
   4199 
   4200 	IXGBE_WRITE_REG(hw, IXGBE_RXCSUM, rxcsum);
   4201 
   4202 	return;
   4203 }
   4204 
   4205 /*********************************************************************
   4206  *
   4207  *  Free all receive rings.
   4208  *
   4209  **********************************************************************/
   4210 static void
   4211 ixgbe_free_receive_structures(struct adapter *adapter)
   4212 {
   4213 	struct rx_ring *rxr = adapter->rx_rings;
   4214 
   4215 	for (int i = 0; i < adapter->num_queues; i++, rxr++) {
   4216 #ifdef LRO
   4217 		struct lro_ctrl		*lro = &rxr->lro;
   4218 #endif /* LRO */
   4219 		ixgbe_free_receive_buffers(rxr);
   4220 #ifdef LRO
   4221 		/* Free LRO memory */
   4222 		tcp_lro_free(lro);
   4223 #endif /* LRO */
   4224 		/* Free the ring memory as well */
   4225 		ixgbe_dma_free(adapter, &rxr->rxdma);
   4226 	}
   4227 
   4228 	free(adapter->rx_rings, M_DEVBUF);
   4229 }
   4230 
   4231 
   4232 /*********************************************************************
   4233  *
   4234  *  Free receive ring data structures
   4235  *
   4236  **********************************************************************/
   4237 static void
   4238 ixgbe_free_receive_buffers(struct rx_ring *rxr)
   4239 {
   4240 	struct adapter		*adapter = rxr->adapter;
   4241 	struct ixgbe_rx_buf	*rxbuf;
   4242 
   4243 	INIT_DEBUGOUT("free_receive_structures: begin");
   4244 
   4245 	/* Cleanup any existing buffers */
   4246 	if (rxr->rx_buffers != NULL) {
   4247 		for (int i = 0; i < adapter->num_rx_desc; i++) {
   4248 			rxbuf = &rxr->rx_buffers[i];
   4249 			if (rxbuf->m_head != NULL) {
   4250 				ixgbe_dmamap_sync(rxr->htag, rxbuf->hmap,
   4251 				    BUS_DMASYNC_POSTREAD);
   4252 				ixgbe_dmamap_unload(rxr->htag, rxbuf->hmap);
   4253 				rxbuf->m_head->m_flags |= M_PKTHDR;
   4254 				m_freem(rxbuf->m_head);
   4255 			}
   4256 			if (rxbuf->m_pack != NULL) {
   4257 				bus_dmamap_sync(rxr->ptag->dt_dmat, rxbuf->pmap,
   4258 				    0, rxbuf->m_pack->m_pkthdr.len,
   4259 				    BUS_DMASYNC_POSTREAD);
   4260 				ixgbe_dmamap_unload(rxr->ptag, rxbuf->pmap);
   4261 				rxbuf->m_pack->m_flags |= M_PKTHDR;
   4262 				m_freem(rxbuf->m_pack);
   4263 			}
   4264 			rxbuf->m_head = NULL;
   4265 			rxbuf->m_pack = NULL;
   4266 			if (rxbuf->hmap != NULL) {
   4267 				ixgbe_dmamap_destroy(rxr->htag, rxbuf->hmap);
   4268 				rxbuf->hmap = NULL;
   4269 			}
   4270 			if (rxbuf->pmap != NULL) {
   4271 				ixgbe_dmamap_destroy(rxr->ptag, rxbuf->pmap);
   4272 				rxbuf->pmap = NULL;
   4273 			}
   4274 		}
   4275 		if (rxr->rx_buffers != NULL) {
   4276 			free(rxr->rx_buffers, M_DEVBUF);
   4277 			rxr->rx_buffers = NULL;
   4278 		}
   4279 	}
   4280 
   4281 	if (rxr->htag != NULL) {
   4282 		ixgbe_dma_tag_destroy(rxr->htag);
   4283 		rxr->htag = NULL;
   4284 	}
   4285 	if (rxr->ptag != NULL) {
   4286 		ixgbe_dma_tag_destroy(rxr->ptag);
   4287 		rxr->ptag = NULL;
   4288 	}
   4289 
   4290 	return;
   4291 }
   4292 
   4293 static __inline void
   4294 ixgbe_rx_input(struct rx_ring *rxr, struct ifnet *ifp, struct mbuf *m, u32 ptype)
   4295 {
   4296 	int s;
   4297 
   4298 #ifdef LRO
   4299 	struct adapter	*adapter = ifp->if_softc;
   4300 	struct ethercom *ec = &adapter->osdep.ec;
   4301 
   4302         /*
   4303          * ATM LRO is only for IPv4/TCP packets and TCP checksum of the packet
   4304          * should be computed by hardware. Also it should not have VLAN tag in
   4305          * ethernet header.
   4306          */
   4307         if (rxr->lro_enabled &&
   4308             (ec->ec_capenable & ETHERCAP_VLAN_HWTAGGING) != 0 &&
   4309             (ptype & IXGBE_RXDADV_PKTTYPE_ETQF) == 0 &&
   4310             (ptype & (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
   4311             (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP) &&
   4312             (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) ==
   4313             (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
   4314                 /*
   4315                  * Send to the stack if:
   4316                  **  - LRO not enabled, or
   4317                  **  - no LRO resources, or
   4318                  **  - lro enqueue fails
   4319                  */
   4320                 if (rxr->lro.lro_cnt != 0)
   4321                         if (tcp_lro_rx(&rxr->lro, m, 0) == 0)
   4322                                 return;
   4323         }
   4324 #endif /* LRO */
   4325 
   4326 	IXGBE_RX_UNLOCK(rxr);
   4327 
   4328 	s = splnet();
   4329 	/* Pass this up to any BPF listeners. */
   4330 	bpf_mtap(ifp, m);
   4331 	(*ifp->if_input)(ifp, m);
   4332 	splx(s);
   4333 
   4334 	IXGBE_RX_LOCK(rxr);
   4335 }
   4336 
   4337 static __inline void
   4338 ixgbe_rx_discard(struct rx_ring *rxr, int i)
   4339 {
   4340 	struct ixgbe_rx_buf	*rbuf;
   4341 
   4342 	rbuf = &rxr->rx_buffers[i];
   4343 
   4344         if (rbuf->fmp != NULL) {/* Partial chain ? */
   4345 		rbuf->fmp->m_flags |= M_PKTHDR;
   4346                 m_freem(rbuf->fmp);
   4347                 rbuf->fmp = NULL;
   4348 	}
   4349 
   4350 	/*
   4351 	** With advanced descriptors the writeback
   4352 	** clobbers the buffer addrs, so its easier
   4353 	** to just free the existing mbufs and take
   4354 	** the normal refresh path to get new buffers
   4355 	** and mapping.
   4356 	*/
   4357 	if (rbuf->m_head) {
   4358 		m_free(rbuf->m_head);
   4359 		rbuf->m_head = NULL;
   4360 	}
   4361 
   4362 	if (rbuf->m_pack) {
   4363 		m_free(rbuf->m_pack);
   4364 		rbuf->m_pack = NULL;
   4365 	}
   4366 
   4367 	return;
   4368 }
   4369 
   4370 
   4371 /*********************************************************************
   4372  *
   4373  *  This routine executes in interrupt context. It replenishes
   4374  *  the mbufs in the descriptor and sends data which has been
   4375  *  dma'ed into host memory to upper layer.
   4376  *
   4377  *  We loop at most count times if count is > 0, or until done if
   4378  *  count < 0.
   4379  *
   4380  *  Return TRUE for more work, FALSE for all clean.
   4381  *********************************************************************/
   4382 static bool
   4383 ixgbe_rxeof(struct ix_queue *que, int count)
   4384 {
   4385 	struct adapter		*adapter = que->adapter;
   4386 	struct rx_ring		*rxr = que->rxr;
   4387 	struct ifnet		*ifp = adapter->ifp;
   4388 #ifdef LRO
   4389 	struct lro_ctrl		*lro = &rxr->lro;
   4390 	struct lro_entry	*queued;
   4391 #endif /* LRO */
   4392 	int			i, nextp, processed = 0;
   4393 	u32			staterr = 0;
   4394 	union ixgbe_adv_rx_desc	*cur;
   4395 	struct ixgbe_rx_buf	*rbuf, *nbuf;
   4396 
   4397 	IXGBE_RX_LOCK(rxr);
   4398 
   4399 	for (i = rxr->next_to_check; count != 0;) {
   4400 		struct mbuf	*sendmp, *mh, *mp;
   4401 		u32		rsc, ptype;
   4402 		u16		hlen, plen, hdr, vtag;
   4403 		bool		eop;
   4404 
   4405 		/* Sync the ring. */
   4406 		ixgbe_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
   4407 		    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
   4408 
   4409 		cur = &rxr->rx_base[i];
   4410 		staterr = le32toh(cur->wb.upper.status_error);
   4411 
   4412 		if ((staterr & IXGBE_RXD_STAT_DD) == 0)
   4413 			break;
   4414 		if ((ifp->if_flags & IFF_RUNNING) == 0)
   4415 			break;
   4416 
   4417 		count--;
   4418 		sendmp = NULL;
   4419 		nbuf = NULL;
   4420 		rsc = 0;
   4421 		cur->wb.upper.status_error = 0;
   4422 		rbuf = &rxr->rx_buffers[i];
   4423 		mh = rbuf->m_head;
   4424 		mp = rbuf->m_pack;
   4425 
   4426 		plen = le16toh(cur->wb.upper.length);
   4427 		ptype = le32toh(cur->wb.lower.lo_dword.data) &
   4428 		    IXGBE_RXDADV_PKTTYPE_MASK;
   4429 		hdr = le16toh(cur->wb.lower.lo_dword.hs_rss.hdr_info);
   4430 		vtag = le16toh(cur->wb.upper.vlan);
   4431 		eop = ((staterr & IXGBE_RXD_STAT_EOP) != 0);
   4432 
   4433 		/* Make sure bad packets are discarded */
   4434 		if (((staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) ||
   4435 		    (rxr->discard)) {
   4436 			ifp->if_ierrors++;
   4437 			rxr->rx_discarded.ev_count++;
   4438 			if (eop)
   4439 				rxr->discard = FALSE;
   4440 			else
   4441 				rxr->discard = TRUE;
   4442 			ixgbe_rx_discard(rxr, i);
   4443 			goto next_desc;
   4444 		}
   4445 
   4446 		/*
   4447 		** On 82599 which supports a hardware
   4448 		** LRO (called HW RSC), packets need
   4449 		** not be fragmented across sequential
   4450 		** descriptors, rather the next descriptor
   4451 		** is indicated in bits of the descriptor.
   4452 		** This also means that we might proceses
   4453 		** more than one packet at a time, something
   4454 		** that has never been true before, it
   4455 		** required eliminating global chain pointers
   4456 		** in favor of what we are doing here.  -jfv
   4457 		*/
   4458 		if (!eop) {
   4459 			/*
   4460 			** Figure out the next descriptor
   4461 			** of this frame.
   4462 			*/
   4463 			if (rxr->hw_rsc == TRUE) {
   4464 				rsc = ixgbe_rsc_count(cur);
   4465 				rxr->rsc_num += (rsc - 1);
   4466 			}
   4467 			if (rsc) { /* Get hardware index */
   4468 				nextp = ((staterr &
   4469 				    IXGBE_RXDADV_NEXTP_MASK) >>
   4470 				    IXGBE_RXDADV_NEXTP_SHIFT);
   4471 			} else { /* Just sequential */
   4472 				nextp = i + 1;
   4473 				if (nextp == adapter->num_rx_desc)
   4474 					nextp = 0;
   4475 			}
   4476 			nbuf = &rxr->rx_buffers[nextp];
   4477 			prefetch(nbuf);
   4478 		}
   4479 		/*
   4480 		** The header mbuf is ONLY used when header
   4481 		** split is enabled, otherwise we get normal
   4482 		** behavior, ie, both header and payload
   4483 		** are DMA'd into the payload buffer.
   4484 		**
   4485 		** Rather than using the fmp/lmp global pointers
   4486 		** we now keep the head of a packet chain in the
   4487 		** buffer struct and pass this along from one
   4488 		** descriptor to the next, until we get EOP.
   4489 		*/
   4490 		if (rxr->hdr_split && (rbuf->fmp == NULL)) {
   4491 			/* This must be an initial descriptor */
   4492 			hlen = (hdr & IXGBE_RXDADV_HDRBUFLEN_MASK) >>
   4493 			    IXGBE_RXDADV_HDRBUFLEN_SHIFT;
   4494 			if (hlen > IXGBE_RX_HDR)
   4495 				hlen = IXGBE_RX_HDR;
   4496 			mh->m_len = hlen;
   4497 			mh->m_flags |= M_PKTHDR;
   4498 			mh->m_next = NULL;
   4499 			mh->m_pkthdr.len = mh->m_len;
   4500 			/* Null buf pointer so it is refreshed */
   4501 			rbuf->m_head = NULL;
   4502 			/*
   4503 			** Check the payload length, this
   4504 			** could be zero if its a small
   4505 			** packet.
   4506 			*/
   4507 			if (plen > 0) {
   4508 				mp->m_len = plen;
   4509 				mp->m_next = NULL;
   4510 				mp->m_flags &= ~M_PKTHDR;
   4511 				mh->m_next = mp;
   4512 				mh->m_pkthdr.len += mp->m_len;
   4513 				/* Null buf pointer so it is refreshed */
   4514 				rbuf->m_pack = NULL;
   4515 				rxr->rx_split_packets.ev_count++;
   4516 			}
   4517 			/*
   4518 			** Now create the forward
   4519 			** chain so when complete
   4520 			** we wont have to.
   4521 			*/
   4522                         if (eop == 0) {
   4523 				/* stash the chain head */
   4524                                 nbuf->fmp = mh;
   4525 				/* Make forward chain */
   4526                                 if (plen)
   4527                                         mp->m_next = nbuf->m_pack;
   4528                                 else
   4529                                         mh->m_next = nbuf->m_pack;
   4530                         } else {
   4531 				/* Singlet, prepare to send */
   4532                                 sendmp = mh;
   4533                                 if (VLAN_ATTACHED(&adapter->osdep.ec) &&
   4534 				  (staterr & IXGBE_RXD_STAT_VP)) {
   4535 					/* XXX Do something reasonable on
   4536 					 * error.
   4537 					 */
   4538 #if 0
   4539 					printf("%s.%d: VLAN_INPUT_TAG\n",
   4540 					    __func__, __LINE__);
   4541 					Debugger();
   4542 #endif
   4543 					VLAN_INPUT_TAG(ifp, sendmp, vtag,
   4544 					    printf("%s: could not apply VLAN "
   4545 					        "tag", __func__));
   4546                                 }
   4547                         }
   4548 		} else {
   4549 			/*
   4550 			** Either no header split, or a
   4551 			** secondary piece of a fragmented
   4552 			** split packet.
   4553 			*/
   4554 			mp->m_len = plen;
   4555 			/*
   4556 			** See if there is a stored head
   4557 			** that determines what we are
   4558 			*/
   4559 			sendmp = rbuf->fmp;
   4560 			rbuf->m_pack = rbuf->fmp = NULL;
   4561 
   4562 			if (sendmp != NULL) /* secondary frag */
   4563 				sendmp->m_pkthdr.len += mp->m_len;
   4564 			else {
   4565 				/* first desc of a non-ps chain */
   4566 				sendmp = mp;
   4567 				sendmp->m_flags |= M_PKTHDR;
   4568 				sendmp->m_pkthdr.len = mp->m_len;
   4569 				if (staterr & IXGBE_RXD_STAT_VP) {
   4570 					/* XXX Do something reasonable on
   4571 					 * error.
   4572 					 */
   4573 #if 0
   4574 					printf("%s.%d: VLAN_INPUT_TAG\n",
   4575 					    __func__, __LINE__);
   4576 					Debugger();
   4577 #endif
   4578 					VLAN_INPUT_TAG(ifp, sendmp, vtag,
   4579 					    printf("%s: could not apply VLAN "
   4580 					        "tag", __func__));
   4581 				}
   4582                         }
   4583 			/* Pass the head pointer on */
   4584 			if (eop == 0) {
   4585 				nbuf->fmp = sendmp;
   4586 				sendmp = NULL;
   4587 				mp->m_next = nbuf->m_pack;
   4588 			}
   4589 		}
   4590 		++processed;
   4591 		/* Sending this frame? */
   4592 		if (eop) {
   4593 			sendmp->m_pkthdr.rcvif = ifp;
   4594 			ifp->if_ipackets++;
   4595 			rxr->rx_packets.ev_count++;
   4596 			/* capture data for AIM */
   4597 			rxr->bytes += sendmp->m_pkthdr.len;
   4598 			rxr->rx_bytes.ev_count += sendmp->m_pkthdr.len;
   4599 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
   4600 				ixgbe_rx_checksum(staterr, sendmp, ptype,
   4601 				   &adapter->stats);
   4602 			}
   4603 #if __FreeBSD_version >= 800000
   4604 			sendmp->m_pkthdr.flowid = que->msix;
   4605 			sendmp->m_flags |= M_FLOWID;
   4606 #endif
   4607 		}
   4608 next_desc:
   4609 		ixgbe_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
   4610 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
   4611 
   4612 		/* Advance our pointers to the next descriptor. */
   4613 		if (++i == adapter->num_rx_desc)
   4614 			i = 0;
   4615 
   4616 		/* Now send to the stack or do LRO */
   4617 		if (sendmp != NULL) {
   4618 			rxr->next_to_check = i;
   4619 			ixgbe_rx_input(rxr, ifp, sendmp, ptype);
   4620 			i = rxr->next_to_check;
   4621 		}
   4622 
   4623                /* Every 8 descriptors we go to refresh mbufs */
   4624 		if (processed == 8) {
   4625 			ixgbe_refresh_mbufs(rxr, i);
   4626 			processed = 0;
   4627 		}
   4628 	}
   4629 
   4630 	/* Refresh any remaining buf structs */
   4631 	if (ixgbe_rx_unrefreshed(rxr))
   4632 		ixgbe_refresh_mbufs(rxr, i);
   4633 
   4634 	rxr->next_to_check = i;
   4635 
   4636 #ifdef LRO
   4637 	/*
   4638 	 * Flush any outstanding LRO work
   4639 	 */
   4640 	while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
   4641 		SLIST_REMOVE_HEAD(&lro->lro_active, next);
   4642 		tcp_lro_flush(lro, queued);
   4643 	}
   4644 #endif /* LRO */
   4645 
   4646 	IXGBE_RX_UNLOCK(rxr);
   4647 
   4648 	/*
   4649 	** We still have cleaning to do?
   4650 	** Schedule another interrupt if so.
   4651 	*/
   4652 	if ((staterr & IXGBE_RXD_STAT_DD) != 0) {
   4653 		ixgbe_rearm_queues(adapter, (u64)(1ULL << que->msix));
   4654 		return true;
   4655 	}
   4656 
   4657 	return false;
   4658 }
   4659 
   4660 
   4661 /*********************************************************************
   4662  *
   4663  *  Verify that the hardware indicated that the checksum is valid.
   4664  *  Inform the stack about the status of checksum so that stack
   4665  *  doesn't spend time verifying the checksum.
   4666  *
   4667  *********************************************************************/
   4668 static void
   4669 ixgbe_rx_checksum(u32 staterr, struct mbuf * mp, u32 ptype,
   4670     struct ixgbe_hw_stats *stats)
   4671 {
   4672 	u16	status = (u16) staterr;
   4673 	u8	errors = (u8) (staterr >> 24);
   4674 #if 0
   4675 	bool	sctp = FALSE;
   4676 
   4677 	if ((ptype & IXGBE_RXDADV_PKTTYPE_ETQF) == 0 &&
   4678 	    (ptype & IXGBE_RXDADV_PKTTYPE_SCTP) != 0)
   4679 		sctp = TRUE;
   4680 #endif
   4681 
   4682 	if (status & IXGBE_RXD_STAT_IPCS) {
   4683 		stats->ipcs.ev_count++;
   4684 		if (!(errors & IXGBE_RXD_ERR_IPE)) {
   4685 			/* IP Checksum Good */
   4686 			mp->m_pkthdr.csum_flags = M_CSUM_IPv4;
   4687 
   4688 		} else {
   4689 			stats->ipcs_bad.ev_count++;
   4690 			mp->m_pkthdr.csum_flags = M_CSUM_IPv4|M_CSUM_IPv4_BAD;
   4691 		}
   4692 	}
   4693 	if (status & IXGBE_RXD_STAT_L4CS) {
   4694 		stats->l4cs.ev_count++;
   4695 		u16 type = M_CSUM_TCPv4|M_CSUM_TCPv6|M_CSUM_UDPv4|M_CSUM_UDPv6;
   4696 		if (!(errors & IXGBE_RXD_ERR_TCPE)) {
   4697 			mp->m_pkthdr.csum_flags |= type;
   4698 		} else {
   4699 			stats->l4cs_bad.ev_count++;
   4700 			mp->m_pkthdr.csum_flags |= type | M_CSUM_TCP_UDP_BAD;
   4701 		}
   4702 	}
   4703 	return;
   4704 }
   4705 
   4706 
   4707 #if 0	/* XXX Badly need to overhaul vlan(4) on NetBSD. */
   4708 /*
   4709 ** This routine is run via an vlan config EVENT,
   4710 ** it enables us to use the HW Filter table since
   4711 ** we can get the vlan id. This just creates the
   4712 ** entry in the soft version of the VFTA, init will
   4713 ** repopulate the real table.
   4714 */
   4715 static void
   4716 ixgbe_register_vlan(void *arg, struct ifnet *ifp, u16 vtag)
   4717 {
   4718 	struct adapter	*adapter = ifp->if_softc;
   4719 	u16		index, bit;
   4720 
   4721 	if (ifp->if_softc !=  arg)   /* Not our event */
   4722 		return;
   4723 
   4724 	if ((vtag == 0) || (vtag > 4095))	/* Invalid */
   4725 		return;
   4726 
   4727 	IXGBE_CORE_LOCK(adapter);
   4728 	index = (vtag >> 5) & 0x7F;
   4729 	bit = vtag & 0x1F;
   4730 	adapter->shadow_vfta[index] |= (1 << bit);
   4731 	ixgbe_init_locked(adapter);
   4732 	IXGBE_CORE_UNLOCK(adapter);
   4733 }
   4734 
   4735 /*
   4736 ** This routine is run via an vlan
   4737 ** unconfig EVENT, remove our entry
   4738 ** in the soft vfta.
   4739 */
   4740 static void
   4741 ixgbe_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag)
   4742 {
   4743 	struct adapter	*adapter = ifp->if_softc;
   4744 	u16		index, bit;
   4745 
   4746 	if (ifp->if_softc !=  arg)
   4747 		return;
   4748 
   4749 	if ((vtag == 0) || (vtag > 4095))	/* Invalid */
   4750 		return;
   4751 
   4752 	IXGBE_CORE_LOCK(adapter);
   4753 	index = (vtag >> 5) & 0x7F;
   4754 	bit = vtag & 0x1F;
   4755 	adapter->shadow_vfta[index] &= ~(1 << bit);
   4756 	/* Re-init to load the changes */
   4757 	ixgbe_init_locked(adapter);
   4758 	IXGBE_CORE_UNLOCK(adapter);
   4759 }
   4760 #endif
   4761 
   4762 static void
   4763 ixgbe_setup_vlan_hw_support(struct adapter *adapter)
   4764 {
   4765 	struct ethercom *ec = &adapter->osdep.ec;
   4766 	struct ixgbe_hw *hw = &adapter->hw;
   4767 	u32		ctrl;
   4768 
   4769 	/*
   4770 	** We get here thru init_locked, meaning
   4771 	** a soft reset, this has already cleared
   4772 	** the VFTA and other state, so if there
   4773 	** have been no vlan's registered do nothing.
   4774 	*/
   4775 	if (!VLAN_ATTACHED(&adapter->osdep.ec)) {
   4776 		return;
   4777 	}
   4778 
   4779 	/*
   4780 	** A soft reset zero's out the VFTA, so
   4781 	** we need to repopulate it now.
   4782 	*/
   4783 	for (int i = 0; i < IXGBE_VFTA_SIZE; i++)
   4784 		if (adapter->shadow_vfta[i] != 0)
   4785 			IXGBE_WRITE_REG(hw, IXGBE_VFTA(i),
   4786 			    adapter->shadow_vfta[i]);
   4787 
   4788 	ctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL);
   4789 	/* Enable the Filter Table if enabled */
   4790 	if (ec->ec_capenable & ETHERCAP_VLAN_HWFILTER) {
   4791 		ctrl &= ~IXGBE_VLNCTRL_CFIEN;
   4792 		ctrl |= IXGBE_VLNCTRL_VFE;
   4793 	}
   4794 	if (hw->mac.type == ixgbe_mac_82598EB)
   4795 		ctrl |= IXGBE_VLNCTRL_VME;
   4796 	IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, ctrl);
   4797 
   4798 	/* On 82599 the VLAN enable is per/queue in RXDCTL */
   4799 	if (hw->mac.type != ixgbe_mac_82598EB)
   4800 		for (int i = 0; i < adapter->num_queues; i++) {
   4801 			ctrl = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
   4802 				ctrl |= IXGBE_RXDCTL_VME;
   4803 			IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), ctrl);
   4804 		}
   4805 }
   4806 
   4807 static void
   4808 ixgbe_enable_intr(struct adapter *adapter)
   4809 {
   4810 	struct ixgbe_hw *hw = &adapter->hw;
   4811 	struct ix_queue *que = adapter->queues;
   4812 	u32 mask = (IXGBE_EIMS_ENABLE_MASK & ~IXGBE_EIMS_RTX_QUEUE);
   4813 
   4814 
   4815 	/* Enable Fan Failure detection */
   4816 	if (hw->device_id == IXGBE_DEV_ID_82598AT)
   4817 		    mask |= IXGBE_EIMS_GPI_SDP1;
   4818 	else {
   4819 		    mask |= IXGBE_EIMS_ECC;
   4820 		    mask |= IXGBE_EIMS_GPI_SDP1;
   4821 		    mask |= IXGBE_EIMS_GPI_SDP2;
   4822 #ifdef IXGBE_FDIR
   4823 		    mask |= IXGBE_EIMS_FLOW_DIR;
   4824 #endif
   4825 	}
   4826 
   4827 	IXGBE_WRITE_REG(hw, IXGBE_EIMS, mask);
   4828 
   4829 	/* With RSS we use auto clear */
   4830 	if (adapter->msix_mem) {
   4831 		mask = IXGBE_EIMS_ENABLE_MASK;
   4832 		/* Don't autoclear Link */
   4833 		mask &= ~IXGBE_EIMS_OTHER;
   4834 		mask &= ~IXGBE_EIMS_LSC;
   4835 		IXGBE_WRITE_REG(hw, IXGBE_EIAC, mask);
   4836 	}
   4837 
   4838 	/*
   4839 	** Now enable all queues, this is done separately to
   4840 	** allow for handling the extended (beyond 32) MSIX
   4841 	** vectors that can be used by 82599
   4842 	*/
   4843         for (int i = 0; i < adapter->num_queues; i++, que++)
   4844                 ixgbe_enable_queue(adapter, que->msix);
   4845 
   4846 	IXGBE_WRITE_FLUSH(hw);
   4847 
   4848 	return;
   4849 }
   4850 
   4851 static void
   4852 ixgbe_disable_intr(struct adapter *adapter)
   4853 {
   4854 	if (adapter->msix_mem)
   4855 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIAC, 0);
   4856 	if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
   4857 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, ~0);
   4858 	} else {
   4859 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, 0xFFFF0000);
   4860 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC_EX(0), ~0);
   4861 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC_EX(1), ~0);
   4862 	}
   4863 	IXGBE_WRITE_FLUSH(&adapter->hw);
   4864 	return;
   4865 }
   4866 
   4867 u16
   4868 ixgbe_read_pci_cfg(struct ixgbe_hw *hw, u32 reg)
   4869 {
   4870 	switch (reg % 4) {
   4871 	case 0:
   4872 		return pci_conf_read(hw->back->pc, hw->back->tag, reg) &
   4873 		    __BITS(15, 0);
   4874 	case 2:
   4875 		return __SHIFTOUT(pci_conf_read(hw->back->pc, hw->back->tag,
   4876 		    reg - 2), __BITS(31, 16));
   4877 	default:
   4878 		panic("%s: invalid register (%" PRIx32, __func__, reg);
   4879 		break;
   4880 	}
   4881 }
   4882 
   4883 void
   4884 ixgbe_write_pci_cfg(struct ixgbe_hw *hw, u32 reg, u16 value)
   4885 {
   4886 	pcireg_t old;
   4887 
   4888 	switch (reg % 4) {
   4889 	case 0:
   4890 		old = pci_conf_read(hw->back->pc, hw->back->tag, reg) &
   4891 		    __BITS(31, 16);
   4892 		pci_conf_write(hw->back->pc, hw->back->tag, reg, value | old);
   4893 		break;
   4894 	case 2:
   4895 		old = pci_conf_read(hw->back->pc, hw->back->tag, reg - 2) &
   4896 		    __BITS(15, 0);
   4897 		pci_conf_write(hw->back->pc, hw->back->tag, reg - 2,
   4898 		    __SHIFTIN(value, __BITS(31, 16)) | old);
   4899 		break;
   4900 	default:
   4901 		panic("%s: invalid register (%" PRIx32, __func__, reg);
   4902 		break;
   4903 	}
   4904 
   4905 	return;
   4906 }
   4907 
   4908 /*
   4909 ** Setup the correct IVAR register for a particular MSIX interrupt
   4910 **   (yes this is all very magic and confusing :)
   4911 **  - entry is the register array entry
   4912 **  - vector is the MSIX vector for this queue
   4913 **  - type is RX/TX/MISC
   4914 */
   4915 static void
   4916 ixgbe_set_ivar(struct adapter *adapter, u8 entry, u8 vector, s8 type)
   4917 {
   4918 	struct ixgbe_hw *hw = &adapter->hw;
   4919 	u32 ivar, index;
   4920 
   4921 	vector |= IXGBE_IVAR_ALLOC_VAL;
   4922 
   4923 	switch (hw->mac.type) {
   4924 
   4925 	case ixgbe_mac_82598EB:
   4926 		if (type == -1)
   4927 			entry = IXGBE_IVAR_OTHER_CAUSES_INDEX;
   4928 		else
   4929 			entry += (type * 64);
   4930 		index = (entry >> 2) & 0x1F;
   4931 		ivar = IXGBE_READ_REG(hw, IXGBE_IVAR(index));
   4932 		ivar &= ~(0xFF << (8 * (entry & 0x3)));
   4933 		ivar |= (vector << (8 * (entry & 0x3)));
   4934 		IXGBE_WRITE_REG(&adapter->hw, IXGBE_IVAR(index), ivar);
   4935 		break;
   4936 
   4937 	case ixgbe_mac_82599EB:
   4938 		if (type == -1) { /* MISC IVAR */
   4939 			index = (entry & 1) * 8;
   4940 			ivar = IXGBE_READ_REG(hw, IXGBE_IVAR_MISC);
   4941 			ivar &= ~(0xFF << index);
   4942 			ivar |= (vector << index);
   4943 			IXGBE_WRITE_REG(hw, IXGBE_IVAR_MISC, ivar);
   4944 		} else {	/* RX/TX IVARS */
   4945 			index = (16 * (entry & 1)) + (8 * type);
   4946 			ivar = IXGBE_READ_REG(hw, IXGBE_IVAR(entry >> 1));
   4947 			ivar &= ~(0xFF << index);
   4948 			ivar |= (vector << index);
   4949 			IXGBE_WRITE_REG(hw, IXGBE_IVAR(entry >> 1), ivar);
   4950 		}
   4951 
   4952 	default:
   4953 		break;
   4954 	}
   4955 }
   4956 
   4957 static void
   4958 ixgbe_configure_ivars(struct adapter *adapter)
   4959 {
   4960 	struct  ix_queue *que = adapter->queues;
   4961 	u32 newitr;
   4962 
   4963 	if (ixgbe_max_interrupt_rate > 0)
   4964 		newitr = (8000000 / ixgbe_max_interrupt_rate) & 0x0FF8;
   4965 	else
   4966 		newitr = 0;
   4967 
   4968         for (int i = 0; i < adapter->num_queues; i++, que++) {
   4969 		/* First the RX queue entry */
   4970                 ixgbe_set_ivar(adapter, i, que->msix, 0);
   4971 		/* ... and the TX */
   4972 		ixgbe_set_ivar(adapter, i, que->msix, 1);
   4973 		/* Set an Initial EITR value */
   4974                 IXGBE_WRITE_REG(&adapter->hw,
   4975                     IXGBE_EITR(que->msix), newitr);
   4976 	}
   4977 
   4978 	/* For the Link interrupt */
   4979         ixgbe_set_ivar(adapter, 1, adapter->linkvec, -1);
   4980 }
   4981 
   4982 /*
   4983 ** ixgbe_sfp_probe - called in the local timer to
   4984 ** determine if a port had optics inserted.
   4985 */
   4986 static bool ixgbe_sfp_probe(struct adapter *adapter)
   4987 {
   4988 	struct ixgbe_hw	*hw = &adapter->hw;
   4989 	device_t	dev = adapter->dev;
   4990 	bool		result = FALSE;
   4991 
   4992 	if ((hw->phy.type == ixgbe_phy_nl) &&
   4993 	    (hw->phy.sfp_type == ixgbe_sfp_type_not_present)) {
   4994 		s32 ret = hw->phy.ops.identify_sfp(hw);
   4995 		if (ret)
   4996                         goto out;
   4997 		ret = hw->phy.ops.reset(hw);
   4998 		if (ret == IXGBE_ERR_SFP_NOT_SUPPORTED) {
   4999 			device_printf(dev,"Unsupported SFP+ module detected!");
   5000 			device_printf(dev, "Reload driver with supported module.\n");
   5001 			adapter->sfp_probe = FALSE;
   5002                         goto out;
   5003 		} else
   5004 			device_printf(dev,"SFP+ module detected!\n");
   5005 		/* We now have supported optics */
   5006 		adapter->sfp_probe = FALSE;
   5007 		/* Set the optics type so system reports correctly */
   5008 		ixgbe_setup_optics(adapter);
   5009 		result = TRUE;
   5010 	}
   5011 out:
   5012 	return (result);
   5013 }
   5014 
   5015 /*
   5016 ** Tasklet handler for MSIX Link interrupts
   5017 **  - do outside interrupt since it might sleep
   5018 */
   5019 static void
   5020 ixgbe_handle_link(void *context)
   5021 {
   5022 	struct adapter  *adapter = context;
   5023 
   5024 	if (ixgbe_check_link(&adapter->hw,
   5025 	    &adapter->link_speed, &adapter->link_up, 0) == 0)
   5026 	    ixgbe_update_link_status(adapter);
   5027 }
   5028 
   5029 /*
   5030 ** Tasklet for handling SFP module interrupts
   5031 */
   5032 static void
   5033 ixgbe_handle_mod(void *context)
   5034 {
   5035 	struct adapter  *adapter = context;
   5036 	struct ixgbe_hw *hw = &adapter->hw;
   5037 	device_t	dev = adapter->dev;
   5038 	u32 err;
   5039 
   5040 	err = hw->phy.ops.identify_sfp(hw);
   5041 	if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
   5042 		device_printf(dev,
   5043 		    "Unsupported SFP+ module type was detected.\n");
   5044 		return;
   5045 	}
   5046 	err = hw->mac.ops.setup_sfp(hw);
   5047 	if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
   5048 		device_printf(dev,
   5049 		    "Setup failure - unsupported SFP+ module type.\n");
   5050 		return;
   5051 	}
   5052 	softint_schedule(adapter->msf_si);
   5053 	return;
   5054 }
   5055 
   5056 
   5057 /*
   5058 ** Tasklet for handling MSF (multispeed fiber) interrupts
   5059 */
   5060 static void
   5061 ixgbe_handle_msf(void *context)
   5062 {
   5063 	struct adapter  *adapter = context;
   5064 	struct ixgbe_hw *hw = &adapter->hw;
   5065 	u32 autoneg;
   5066 	bool negotiate;
   5067 
   5068 	autoneg = hw->phy.autoneg_advertised;
   5069 	if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
   5070 		hw->mac.ops.get_link_capabilities(hw, &autoneg, &negotiate);
   5071 	else
   5072 		negotiate = 0;
   5073 	if (hw->mac.ops.setup_link)
   5074 		hw->mac.ops.setup_link(hw, autoneg, negotiate, TRUE);
   5075 	return;
   5076 }
   5077 
   5078 #ifdef IXGBE_FDIR
   5079 /*
   5080 ** Tasklet for reinitializing the Flow Director filter table
   5081 */
   5082 static void
   5083 ixgbe_reinit_fdir(void *context)
   5084 {
   5085 	struct adapter  *adapter = context;
   5086 	struct ifnet   *ifp = adapter->ifp;
   5087 
   5088 	if (adapter->fdir_reinit != 1) /* Shouldn't happen */
   5089 		return;
   5090 	ixgbe_reinit_fdir_tables_82599(&adapter->hw);
   5091 	adapter->fdir_reinit = 0;
   5092 	/* Restart the interface */
   5093 	ifp->if_flags |= IFF_RUNNING;
   5094 	return;
   5095 }
   5096 #endif
   5097 
   5098 /**********************************************************************
   5099  *
   5100  *  Update the board statistics counters.
   5101  *
   5102  **********************************************************************/
   5103 static void
   5104 ixgbe_update_stats_counters(struct adapter *adapter)
   5105 {
   5106 	struct ifnet   *ifp = adapter->ifp;
   5107 	struct ixgbe_hw *hw = &adapter->hw;
   5108 	u32  missed_rx = 0, bprc, lxon, lxoff, total;
   5109 	u64  total_missed_rx = 0;
   5110 
   5111 	adapter->stats.crcerrs.ev_count += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
   5112 	adapter->stats.illerrc.ev_count += IXGBE_READ_REG(hw, IXGBE_ILLERRC);
   5113 	adapter->stats.errbc.ev_count += IXGBE_READ_REG(hw, IXGBE_ERRBC);
   5114 	adapter->stats.mspdc.ev_count += IXGBE_READ_REG(hw, IXGBE_MSPDC);
   5115 
   5116 	for (int i = 0; i < __arraycount(adapter->stats.mpc); i++) {
   5117 		int j = i % adapter->num_queues;
   5118 		u32 mp;
   5119 		mp = IXGBE_READ_REG(hw, IXGBE_MPC(i));
   5120 		/* missed_rx tallies misses for the gprc workaround */
   5121 		missed_rx += mp;
   5122 		/* global total per queue */
   5123         	adapter->stats.mpc[j].ev_count += mp;
   5124 		/* Running comprehensive total for stats display */
   5125 		total_missed_rx += adapter->stats.mpc[j].ev_count;
   5126 		if (hw->mac.type == ixgbe_mac_82598EB)
   5127 			adapter->stats.rnbc[j] +=
   5128 			    IXGBE_READ_REG(hw, IXGBE_RNBC(i));
   5129 		adapter->stats.pxontxc[j].ev_count +=
   5130 		    IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
   5131 		adapter->stats.pxonrxc[j].ev_count +=
   5132 		    IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
   5133 		adapter->stats.pxofftxc[j].ev_count +=
   5134 		    IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
   5135 		adapter->stats.pxoffrxc[j].ev_count +=
   5136 		    IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
   5137 		adapter->stats.pxon2offc[j].ev_count +=
   5138 		    IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
   5139 	}
   5140 	for (int i = 0; i < __arraycount(adapter->stats.qprc); i++) {
   5141 		int j = i % adapter->num_queues;
   5142 		adapter->stats.qprc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
   5143 		adapter->stats.qptc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
   5144 		adapter->stats.qbrc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QBRC(i));
   5145 		adapter->stats.qbrc[j].ev_count +=
   5146 		    ((u64)IXGBE_READ_REG(hw, IXGBE_QBRC(i)) << 32);
   5147 		adapter->stats.qbtc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QBTC(i));
   5148 		adapter->stats.qbtc[j].ev_count +=
   5149 		    ((u64)IXGBE_READ_REG(hw, IXGBE_QBTC(i)) << 32);
   5150 		adapter->stats.qprdc[j].ev_count += IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
   5151 	}
   5152 	adapter->stats.mlfc.ev_count += IXGBE_READ_REG(hw, IXGBE_MLFC);
   5153 	adapter->stats.mrfc.ev_count += IXGBE_READ_REG(hw, IXGBE_MRFC);
   5154 	adapter->stats.rlec.ev_count += IXGBE_READ_REG(hw, IXGBE_RLEC);
   5155 
   5156 	/* Hardware workaround, gprc counts missed packets */
   5157 	adapter->stats.gprc.ev_count += IXGBE_READ_REG(hw, IXGBE_GPRC) - missed_rx;
   5158 
   5159 	lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC);
   5160 	adapter->stats.lxontxc.ev_count += lxon;
   5161 	lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
   5162 	adapter->stats.lxofftxc.ev_count += lxoff;
   5163 	total = lxon + lxoff;
   5164 
   5165 	if (hw->mac.type != ixgbe_mac_82598EB) {
   5166 		adapter->stats.gorc.ev_count += IXGBE_READ_REG(hw, IXGBE_GORCL) +
   5167 		    ((u64)IXGBE_READ_REG(hw, IXGBE_GORCH) << 32);
   5168 		adapter->stats.gotc.ev_count += IXGBE_READ_REG(hw, IXGBE_GOTCL) +
   5169 		    ((u64)IXGBE_READ_REG(hw, IXGBE_GOTCH) << 32) - total * ETHER_MIN_LEN;
   5170 		adapter->stats.tor.ev_count += IXGBE_READ_REG(hw, IXGBE_TORL) +
   5171 		    ((u64)IXGBE_READ_REG(hw, IXGBE_TORH) << 32);
   5172 		adapter->stats.lxonrxc.ev_count += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT);
   5173 		adapter->stats.lxoffrxc.ev_count += IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT);
   5174 	} else {
   5175 		adapter->stats.lxonrxc.ev_count += IXGBE_READ_REG(hw, IXGBE_LXONRXC);
   5176 		adapter->stats.lxoffrxc.ev_count += IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
   5177 		/* 82598 only has a counter in the high register */
   5178 		adapter->stats.gorc.ev_count += IXGBE_READ_REG(hw, IXGBE_GORCH);
   5179 		adapter->stats.gotc.ev_count += IXGBE_READ_REG(hw, IXGBE_GOTCH) - total * ETHER_MIN_LEN;
   5180 		adapter->stats.tor.ev_count += IXGBE_READ_REG(hw, IXGBE_TORH);
   5181 	}
   5182 
   5183 	/*
   5184 	 * Workaround: mprc hardware is incorrectly counting
   5185 	 * broadcasts, so for now we subtract those.
   5186 	 */
   5187 	bprc = IXGBE_READ_REG(hw, IXGBE_BPRC);
   5188 	adapter->stats.bprc.ev_count += bprc;
   5189 	adapter->stats.mprc.ev_count += IXGBE_READ_REG(hw, IXGBE_MPRC) - ((hw->mac.type == ixgbe_mac_82598EB) ? bprc : 0);
   5190 
   5191 	adapter->stats.prc64.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC64);
   5192 	adapter->stats.prc127.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC127);
   5193 	adapter->stats.prc255.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC255);
   5194 	adapter->stats.prc511.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC511);
   5195 	adapter->stats.prc1023.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC1023);
   5196 	adapter->stats.prc1522.ev_count += IXGBE_READ_REG(hw, IXGBE_PRC1522);
   5197 
   5198 	adapter->stats.gptc.ev_count += IXGBE_READ_REG(hw, IXGBE_GPTC) - total;
   5199 	adapter->stats.mptc.ev_count += IXGBE_READ_REG(hw, IXGBE_MPTC) - total;
   5200 	adapter->stats.ptc64.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC64) - total;
   5201 
   5202 	adapter->stats.ruc.ev_count += IXGBE_READ_REG(hw, IXGBE_RUC);
   5203 	adapter->stats.rfc.ev_count += IXGBE_READ_REG(hw, IXGBE_RFC);
   5204 	adapter->stats.roc.ev_count += IXGBE_READ_REG(hw, IXGBE_ROC);
   5205 	adapter->stats.rjc.ev_count += IXGBE_READ_REG(hw, IXGBE_RJC);
   5206 	adapter->stats.mngprc.ev_count += IXGBE_READ_REG(hw, IXGBE_MNGPRC);
   5207 	adapter->stats.mngpdc.ev_count += IXGBE_READ_REG(hw, IXGBE_MNGPDC);
   5208 	adapter->stats.mngptc.ev_count += IXGBE_READ_REG(hw, IXGBE_MNGPTC);
   5209 	adapter->stats.tpr.ev_count += IXGBE_READ_REG(hw, IXGBE_TPR);
   5210 	adapter->stats.tpt.ev_count += IXGBE_READ_REG(hw, IXGBE_TPT);
   5211 	adapter->stats.ptc127.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC127);
   5212 	adapter->stats.ptc255.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC255);
   5213 	adapter->stats.ptc511.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC511);
   5214 	adapter->stats.ptc1023.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC1023);
   5215 	adapter->stats.ptc1522.ev_count += IXGBE_READ_REG(hw, IXGBE_PTC1522);
   5216 	adapter->stats.bptc.ev_count += IXGBE_READ_REG(hw, IXGBE_BPTC);
   5217 	adapter->stats.xec.ev_count += IXGBE_READ_REG(hw, IXGBE_XEC);
   5218 	adapter->stats.fccrc.ev_count += IXGBE_READ_REG(hw, IXGBE_FCCRC);
   5219 	adapter->stats.fclast.ev_count += IXGBE_READ_REG(hw, IXGBE_FCLAST);
   5220 
   5221 	/* Only read FCOE on 82599 */
   5222 	if (hw->mac.type != ixgbe_mac_82598EB) {
   5223 		adapter->stats.fcoerpdc.ev_count +=
   5224 		    IXGBE_READ_REG(hw, IXGBE_FCOERPDC);
   5225 		adapter->stats.fcoeprc.ev_count +=
   5226 		    IXGBE_READ_REG(hw, IXGBE_FCOEPRC);
   5227 		adapter->stats.fcoeptc.ev_count +=
   5228 		    IXGBE_READ_REG(hw, IXGBE_FCOEPTC);
   5229 		adapter->stats.fcoedwrc.ev_count +=
   5230 		    IXGBE_READ_REG(hw, IXGBE_FCOEDWRC);
   5231 		adapter->stats.fcoedwtc.ev_count +=
   5232 		    IXGBE_READ_REG(hw, IXGBE_FCOEDWTC);
   5233 	}
   5234 
   5235 	/* Fill out the OS statistics structure */
   5236 	ifp->if_ipackets = adapter->stats.gprc.ev_count;
   5237 	ifp->if_opackets = adapter->stats.gptc.ev_count;
   5238 	ifp->if_ibytes = adapter->stats.gorc.ev_count;
   5239 	ifp->if_obytes = adapter->stats.gotc.ev_count;
   5240 	ifp->if_imcasts = adapter->stats.mprc.ev_count;
   5241 	ifp->if_collisions = 0;
   5242 
   5243 	/* Rx Errors */
   5244 	ifp->if_ierrors = total_missed_rx + adapter->stats.crcerrs.ev_count +
   5245 		adapter->stats.rlec.ev_count;
   5246 }
   5247 
   5248 /** ixgbe_sysctl_tdh_handler - Handler function
   5249  *  Retrieves the TDH value from the hardware
   5250  */
   5251 static int
   5252 ixgbe_sysctl_tdh_handler(SYSCTLFN_ARGS)
   5253 {
   5254 	struct sysctlnode node;
   5255 	uint32_t val;
   5256 	struct tx_ring *txr;
   5257 
   5258 	node = *rnode;
   5259 	txr = (struct tx_ring *)node.sysctl_data;
   5260 	if (txr == NULL)
   5261 		return 0;
   5262 	val = IXGBE_READ_REG(&txr->adapter->hw, IXGBE_TDH(txr->me));
   5263 	node.sysctl_data = &val;
   5264 	return sysctl_lookup(SYSCTLFN_CALL(&node));
   5265 }
   5266 
   5267 /** ixgbe_sysctl_tdt_handler - Handler function
   5268  *  Retrieves the TDT value from the hardware
   5269  */
   5270 static int
   5271 ixgbe_sysctl_tdt_handler(SYSCTLFN_ARGS)
   5272 {
   5273 	struct sysctlnode node;
   5274 	uint32_t val;
   5275 	struct tx_ring *txr;
   5276 
   5277 	node = *rnode;
   5278 	txr = (struct tx_ring *)node.sysctl_data;
   5279 	if (txr == NULL)
   5280 		return 0;
   5281 	val = IXGBE_READ_REG(&txr->adapter->hw, IXGBE_TDT(txr->me));
   5282 	node.sysctl_data = &val;
   5283 	return sysctl_lookup(SYSCTLFN_CALL(&node));
   5284 }
   5285 
   5286 /** ixgbe_sysctl_rdh_handler - Handler function
   5287  *  Retrieves the RDH value from the hardware
   5288  */
   5289 static int
   5290 ixgbe_sysctl_rdh_handler(SYSCTLFN_ARGS)
   5291 {
   5292 	struct sysctlnode node;
   5293 	uint32_t val;
   5294 	struct rx_ring *rxr;
   5295 
   5296 	node = *rnode;
   5297 	rxr = (struct rx_ring *)node.sysctl_data;
   5298 	if (rxr == NULL)
   5299 		return 0;
   5300 	val = IXGBE_READ_REG(&rxr->adapter->hw, IXGBE_RDH(rxr->me));
   5301 	node.sysctl_data = &val;
   5302 	return sysctl_lookup(SYSCTLFN_CALL(&node));
   5303 }
   5304 
   5305 /** ixgbe_sysctl_rdt_handler - Handler function
   5306  *  Retrieves the RDT value from the hardware
   5307  */
   5308 static int
   5309 ixgbe_sysctl_rdt_handler(SYSCTLFN_ARGS)
   5310 {
   5311 	struct sysctlnode node;
   5312 	uint32_t val;
   5313 	struct rx_ring *rxr;
   5314 
   5315 	node = *rnode;
   5316 	rxr = (struct rx_ring *)node.sysctl_data;
   5317 	if (rxr == NULL)
   5318 		return 0;
   5319 	val = IXGBE_READ_REG(&rxr->adapter->hw, IXGBE_RDT(rxr->me));
   5320 	node.sysctl_data = &val;
   5321 	return sysctl_lookup(SYSCTLFN_CALL(&node));
   5322 }
   5323 
   5324 static int
   5325 ixgbe_sysctl_interrupt_rate_handler(SYSCTLFN_ARGS)
   5326 {
   5327 	struct sysctlnode node;
   5328 	struct ix_queue *que;
   5329 	uint32_t reg, usec, rate;
   5330 
   5331 	node = *rnode;
   5332 	que = (struct ix_queue *)node.sysctl_data;
   5333 	if (que == NULL)
   5334 		return 0;
   5335 	reg = IXGBE_READ_REG(&que->adapter->hw, IXGBE_EITR(que->msix));
   5336 	usec = ((reg & 0x0FF8) >> 3);
   5337 	if (usec > 0)
   5338 		rate = 1000000 / usec;
   5339 	else
   5340 		rate = 0;
   5341 	node.sysctl_data = &rate;
   5342 	return sysctl_lookup(SYSCTLFN_CALL(&node));
   5343 }
   5344 
   5345 const struct sysctlnode *
   5346 ixgbe_sysctl_instance(struct adapter *adapter)
   5347 {
   5348 	const char *dvname;
   5349 	struct sysctllog **log;
   5350 	int rc;
   5351 	const struct sysctlnode *rnode;
   5352 
   5353 	log = &adapter->sysctllog;
   5354 	dvname = device_xname(adapter->dev);
   5355 
   5356 	if ((rc = sysctl_createv(log, 0, NULL, &rnode,
   5357 	    0, CTLTYPE_NODE, dvname,
   5358 	    SYSCTL_DESCR("ixgbe information and settings"),
   5359 	    NULL, 0, NULL, 0, CTL_HW, CTL_CREATE, CTL_EOL)) != 0)
   5360 		goto err;
   5361 
   5362 	return rnode;
   5363 err:
   5364 	printf("%s: sysctl_createv failed, rc = %d\n", __func__, rc);
   5365 	return NULL;
   5366 }
   5367 
   5368 /*
   5369  * Add sysctl variables, one per statistic, to the system.
   5370  */
   5371 static void
   5372 ixgbe_add_hw_stats(struct adapter *adapter)
   5373 {
   5374 	device_t dev = adapter->dev;
   5375 	const struct sysctlnode *rnode, *cnode;
   5376 	struct sysctllog **log = &adapter->sysctllog;
   5377 	struct tx_ring *txr = adapter->tx_rings;
   5378 	struct rx_ring *rxr = adapter->rx_rings;
   5379 	struct ixgbe_hw	 *hw = &adapter->hw;
   5380 
   5381 	struct ixgbe_hw_stats *stats = &adapter->stats;
   5382 
   5383 	/* Driver Statistics */
   5384 #if 0
   5385 	/* These counters are not updated by the software */
   5386 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped",
   5387 			CTLFLAG_RD, &adapter->dropped_pkts,
   5388 			"Driver dropped packets");
   5389 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_header_failed",
   5390 			CTLFLAG_RD, &adapter->mbuf_header_failed,
   5391 			"???");
   5392 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_packet_failed",
   5393 			CTLFLAG_RD, &adapter->mbuf_packet_failed,
   5394 			"???");
   5395 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "no_tx_map_avail",
   5396 			CTLFLAG_RD, &adapter->no_tx_map_avail,
   5397 			"???");
   5398 #endif
   5399 	evcnt_attach_dynamic(&adapter->handleq, EVCNT_TYPE_MISC,
   5400 	    NULL, device_xname(dev), "Handled queue in softint");
   5401 	evcnt_attach_dynamic(&adapter->req, EVCNT_TYPE_MISC,
   5402 	    NULL, device_xname(dev), "Requeued in softint");
   5403 	evcnt_attach_dynamic(&adapter->morerx, EVCNT_TYPE_MISC,
   5404 	    NULL, device_xname(dev), "Interrupt handler more rx");
   5405 	evcnt_attach_dynamic(&adapter->moretx, EVCNT_TYPE_MISC,
   5406 	    NULL, device_xname(dev), "Interrupt handler more tx");
   5407 	evcnt_attach_dynamic(&adapter->txloops, EVCNT_TYPE_MISC,
   5408 	    NULL, device_xname(dev), "Interrupt handler tx loops");
   5409 	evcnt_attach_dynamic(&adapter->efbig_tx_dma_setup, EVCNT_TYPE_MISC,
   5410 	    NULL, device_xname(dev), "Driver tx dma soft fail EFBIG");
   5411 	evcnt_attach_dynamic(&adapter->m_defrag_failed, EVCNT_TYPE_MISC,
   5412 	    NULL, device_xname(dev), "m_defrag() failed");
   5413 	evcnt_attach_dynamic(&adapter->efbig2_tx_dma_setup, EVCNT_TYPE_MISC,
   5414 	    NULL, device_xname(dev), "Driver tx dma hard fail EFBIG");
   5415 	evcnt_attach_dynamic(&adapter->einval_tx_dma_setup, EVCNT_TYPE_MISC,
   5416 	    NULL, device_xname(dev), "Driver tx dma hard fail EINVAL");
   5417 	evcnt_attach_dynamic(&adapter->other_tx_dma_setup, EVCNT_TYPE_MISC,
   5418 	    NULL, device_xname(dev), "Driver tx dma hard fail other");
   5419 	evcnt_attach_dynamic(&adapter->eagain_tx_dma_setup, EVCNT_TYPE_MISC,
   5420 	    NULL, device_xname(dev), "Driver tx dma soft fail EAGAIN");
   5421 	evcnt_attach_dynamic(&adapter->enomem_tx_dma_setup, EVCNT_TYPE_MISC,
   5422 	    NULL, device_xname(dev), "Driver tx dma soft fail ENOMEM");
   5423 	evcnt_attach_dynamic(&adapter->watchdog_events, EVCNT_TYPE_MISC,
   5424 	    NULL, device_xname(dev), "Watchdog timeouts");
   5425 	evcnt_attach_dynamic(&adapter->tso_err, EVCNT_TYPE_MISC,
   5426 	    NULL, device_xname(dev), "TSO errors");
   5427 	evcnt_attach_dynamic(&adapter->tso_tx, EVCNT_TYPE_MISC,
   5428 	    NULL, device_xname(dev), "TSO");
   5429 	evcnt_attach_dynamic(&adapter->link_irq, EVCNT_TYPE_MISC,
   5430 	    NULL, device_xname(dev), "Link MSIX IRQ Handled");
   5431 
   5432 	for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
   5433 		snprintf(adapter->queues[i].evnamebuf,
   5434 		    sizeof(adapter->queues[i].evnamebuf), "%s queue%d",
   5435 		    device_xname(dev), i);
   5436 		snprintf(adapter->queues[i].namebuf,
   5437 		    sizeof(adapter->queues[i].namebuf), "queue%d", i);
   5438 
   5439 		if ((rnode = ixgbe_sysctl_instance(adapter)) == NULL) {
   5440 			aprint_error_dev(dev, "could not create sysctl root\n");
   5441 			break;
   5442 		}
   5443 
   5444 		if (sysctl_createv(log, 0, &rnode, &rnode,
   5445 		    0, CTLTYPE_NODE,
   5446 		    adapter->queues[i].namebuf, SYSCTL_DESCR("Queue Name"),
   5447 		    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL) != 0)
   5448 			break;
   5449 
   5450 		if (sysctl_createv(log, 0, &rnode, &cnode,
   5451 		    CTLFLAG_READONLY, CTLTYPE_INT,
   5452 		    "interrupt_rate", SYSCTL_DESCR("Interrupt Rate"),
   5453 		    ixgbe_sysctl_interrupt_rate_handler, 0,
   5454 		    (void *)&adapter->queues[i], 0, CTL_CREATE, CTL_EOL) != 0)
   5455 			break;
   5456 
   5457 		if (sysctl_createv(log, 0, &rnode, &cnode,
   5458 		    CTLFLAG_READONLY, CTLTYPE_INT,
   5459 		    "txd_head", SYSCTL_DESCR("Transmit Descriptor Head"),
   5460 		    ixgbe_sysctl_tdh_handler, 0, (void *)txr,
   5461 		    0, CTL_CREATE, CTL_EOL) != 0)
   5462 			break;
   5463 
   5464 		if (sysctl_createv(log, 0, &rnode, &cnode,
   5465 		    CTLFLAG_READONLY, CTLTYPE_INT,
   5466 		    "txd_tail", SYSCTL_DESCR("Transmit Descriptor Tail"),
   5467 		    ixgbe_sysctl_tdt_handler, 0, (void *)txr,
   5468 		    0, CTL_CREATE, CTL_EOL) != 0)
   5469 			break;
   5470 
   5471 		evcnt_attach_dynamic(&txr->no_desc_avail, EVCNT_TYPE_MISC,
   5472 		    NULL, adapter->queues[i].evnamebuf,
   5473 		    "Queue No Descriptor Available");
   5474 		evcnt_attach_dynamic(&txr->total_packets, EVCNT_TYPE_MISC,
   5475 		    NULL, adapter->queues[i].evnamebuf,
   5476 		    "Queue Packets Transmitted");
   5477 
   5478 #ifdef LRO
   5479 		struct lro_ctrl *lro = &rxr->lro;
   5480 #endif /* LRO */
   5481 
   5482 		if (sysctl_createv(log, 0, &rnode, &cnode,
   5483 		    CTLFLAG_READONLY,
   5484 		    CTLTYPE_INT,
   5485 		    "rxd_head", SYSCTL_DESCR("Receive Descriptor Head"),
   5486 		    ixgbe_sysctl_rdh_handler, 0, (void *)rxr, 0,
   5487 		    CTL_CREATE, CTL_EOL) != 0)
   5488 			break;
   5489 
   5490 		if (sysctl_createv(log, 0, &rnode, &cnode,
   5491 		    CTLFLAG_READONLY,
   5492 		    CTLTYPE_INT,
   5493 		    "rxd_tail", SYSCTL_DESCR("Receive Descriptor Tail"),
   5494 		    ixgbe_sysctl_rdt_handler, 0, (void *)rxr, 0,
   5495 		    CTL_CREATE, CTL_EOL) != 0)
   5496 			break;
   5497 
   5498 		if (i < __arraycount(adapter->stats.mpc)) {
   5499 			evcnt_attach_dynamic(&adapter->stats.mpc[i],
   5500 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5501 			    "Missed Packet Count");
   5502 		}
   5503 		if (i < __arraycount(adapter->stats.pxontxc)) {
   5504 			evcnt_attach_dynamic(&adapter->stats.pxontxc[i],
   5505 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5506 			    "pxontxc");
   5507 			evcnt_attach_dynamic(&adapter->stats.pxonrxc[i],
   5508 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5509 			    "pxonrxc");
   5510 			evcnt_attach_dynamic(&adapter->stats.pxofftxc[i],
   5511 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5512 			    "pxofftxc");
   5513 			evcnt_attach_dynamic(&adapter->stats.pxoffrxc[i],
   5514 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5515 			    "pxoffrxc");
   5516 			evcnt_attach_dynamic(&adapter->stats.pxon2offc[i],
   5517 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5518 			    "pxon2offc");
   5519 		}
   5520 		if (i < __arraycount(adapter->stats.qprc)) {
   5521 			evcnt_attach_dynamic(&adapter->stats.qprc[i],
   5522 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5523 			    "qprc");
   5524 			evcnt_attach_dynamic(&adapter->stats.qptc[i],
   5525 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5526 			    "qptc");
   5527 			evcnt_attach_dynamic(&adapter->stats.qbrc[i],
   5528 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5529 			    "qbrc");
   5530 			evcnt_attach_dynamic(&adapter->stats.qbtc[i],
   5531 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5532 			    "qbtc");
   5533 			evcnt_attach_dynamic(&adapter->stats.qprdc[i],
   5534 			    EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
   5535 			    "qprdc");
   5536 		}
   5537 
   5538 		evcnt_attach_dynamic(&rxr->rx_packets, EVCNT_TYPE_MISC,
   5539 		    NULL, adapter->queues[i].evnamebuf, "Queue Packets Received");
   5540 		evcnt_attach_dynamic(&rxr->rx_bytes, EVCNT_TYPE_MISC,
   5541 		    NULL, adapter->queues[i].evnamebuf, "Queue Bytes Received");
   5542 		evcnt_attach_dynamic(&rxr->no_jmbuf, EVCNT_TYPE_MISC,
   5543 		    NULL, adapter->queues[i].evnamebuf, "Rx no jumbo mbuf");
   5544 		evcnt_attach_dynamic(&rxr->rx_discarded, EVCNT_TYPE_MISC,
   5545 		    NULL, adapter->queues[i].evnamebuf, "Rx discarded");
   5546 		evcnt_attach_dynamic(&rxr->rx_split_packets, EVCNT_TYPE_MISC,
   5547 		    NULL, adapter->queues[i].evnamebuf, "Rx split packets");
   5548 		evcnt_attach_dynamic(&rxr->rx_irq, EVCNT_TYPE_MISC,
   5549 		    NULL, adapter->queues[i].evnamebuf, "Rx interrupts");
   5550 #ifdef LRO
   5551 		SYSCTL_ADD_INT(ctx, queue_list, OID_AUTO, "lro_queued",
   5552 				CTLFLAG_RD, &lro->lro_queued, 0,
   5553 				"LRO Queued");
   5554 		SYSCTL_ADD_INT(ctx, queue_list, OID_AUTO, "lro_flushed",
   5555 				CTLFLAG_RD, &lro->lro_flushed, 0,
   5556 				"LRO Flushed");
   5557 #endif /* LRO */
   5558 	}
   5559 
   5560 	/* MAC stats get the own sub node */
   5561 
   5562 
   5563 	snprintf(stats->namebuf,
   5564 	    sizeof(stats->namebuf), "%s MAC Statistics", device_xname(dev));
   5565 
   5566 	evcnt_attach_dynamic(&stats->ipcs, EVCNT_TYPE_MISC, NULL,
   5567 	    stats->namebuf, "rx csum offload - IP");
   5568 	evcnt_attach_dynamic(&stats->l4cs, EVCNT_TYPE_MISC, NULL,
   5569 	    stats->namebuf, "rx csum offload - L4");
   5570 	evcnt_attach_dynamic(&stats->ipcs_bad, EVCNT_TYPE_MISC, NULL,
   5571 	    stats->namebuf, "rx csum offload - IP bad");
   5572 	evcnt_attach_dynamic(&stats->l4cs_bad, EVCNT_TYPE_MISC, NULL,
   5573 	    stats->namebuf, "rx csum offload - L4 bad");
   5574 	evcnt_attach_dynamic(&stats->intzero, EVCNT_TYPE_MISC, NULL,
   5575 	    stats->namebuf, "Interrupt conditions zero");
   5576 	evcnt_attach_dynamic(&stats->legint, EVCNT_TYPE_MISC, NULL,
   5577 	    stats->namebuf, "Legacy interrupts");
   5578 	evcnt_attach_dynamic(&stats->crcerrs, EVCNT_TYPE_MISC, NULL,
   5579 	    stats->namebuf, "CRC Errors");
   5580 	evcnt_attach_dynamic(&stats->illerrc, EVCNT_TYPE_MISC, NULL,
   5581 	    stats->namebuf, "Illegal Byte Errors");
   5582 	evcnt_attach_dynamic(&stats->errbc, EVCNT_TYPE_MISC, NULL,
   5583 	    stats->namebuf, "Byte Errors");
   5584 	evcnt_attach_dynamic(&stats->mspdc, EVCNT_TYPE_MISC, NULL,
   5585 	    stats->namebuf, "MAC Short Packets Discarded");
   5586 	evcnt_attach_dynamic(&stats->mlfc, EVCNT_TYPE_MISC, NULL,
   5587 	    stats->namebuf, "MAC Local Faults");
   5588 	evcnt_attach_dynamic(&stats->mrfc, EVCNT_TYPE_MISC, NULL,
   5589 	    stats->namebuf, "MAC Remote Faults");
   5590 	evcnt_attach_dynamic(&stats->rlec, EVCNT_TYPE_MISC, NULL,
   5591 	    stats->namebuf, "Receive Length Errors");
   5592 	evcnt_attach_dynamic(&stats->lxontxc, EVCNT_TYPE_MISC, NULL,
   5593 	    stats->namebuf, "Link XON Transmitted");
   5594 	evcnt_attach_dynamic(&stats->lxonrxc, EVCNT_TYPE_MISC, NULL,
   5595 	    stats->namebuf, "Link XON Received");
   5596 	evcnt_attach_dynamic(&stats->lxofftxc, EVCNT_TYPE_MISC, NULL,
   5597 	    stats->namebuf, "Link XOFF Transmitted");
   5598 	evcnt_attach_dynamic(&stats->lxoffrxc, EVCNT_TYPE_MISC, NULL,
   5599 	    stats->namebuf, "Link XOFF Received");
   5600 
   5601 	/* Packet Reception Stats */
   5602 	evcnt_attach_dynamic(&stats->tor, EVCNT_TYPE_MISC, NULL,
   5603 	    stats->namebuf, "Total Octets Received");
   5604 	evcnt_attach_dynamic(&stats->gorc, EVCNT_TYPE_MISC, NULL,
   5605 	    stats->namebuf, "Good Octets Received");
   5606 	evcnt_attach_dynamic(&stats->tpr, EVCNT_TYPE_MISC, NULL,
   5607 	    stats->namebuf, "Total Packets Received");
   5608 	evcnt_attach_dynamic(&stats->gprc, EVCNT_TYPE_MISC, NULL,
   5609 	    stats->namebuf, "Good Packets Received");
   5610 	evcnt_attach_dynamic(&stats->mprc, EVCNT_TYPE_MISC, NULL,
   5611 	    stats->namebuf, "Multicast Packets Received");
   5612 	evcnt_attach_dynamic(&stats->bprc, EVCNT_TYPE_MISC, NULL,
   5613 	    stats->namebuf, "Broadcast Packets Received");
   5614 	evcnt_attach_dynamic(&stats->prc64, EVCNT_TYPE_MISC, NULL,
   5615 	    stats->namebuf, "64 byte frames received ");
   5616 	evcnt_attach_dynamic(&stats->prc127, EVCNT_TYPE_MISC, NULL,
   5617 	    stats->namebuf, "65-127 byte frames received");
   5618 	evcnt_attach_dynamic(&stats->prc255, EVCNT_TYPE_MISC, NULL,
   5619 	    stats->namebuf, "128-255 byte frames received");
   5620 	evcnt_attach_dynamic(&stats->prc511, EVCNT_TYPE_MISC, NULL,
   5621 	    stats->namebuf, "256-511 byte frames received");
   5622 	evcnt_attach_dynamic(&stats->prc1023, EVCNT_TYPE_MISC, NULL,
   5623 	    stats->namebuf, "512-1023 byte frames received");
   5624 	evcnt_attach_dynamic(&stats->prc1522, EVCNT_TYPE_MISC, NULL,
   5625 	    stats->namebuf, "1023-1522 byte frames received");
   5626 	evcnt_attach_dynamic(&stats->ruc, EVCNT_TYPE_MISC, NULL,
   5627 	    stats->namebuf, "Receive Undersized");
   5628 	evcnt_attach_dynamic(&stats->rfc, EVCNT_TYPE_MISC, NULL,
   5629 	    stats->namebuf, "Fragmented Packets Received ");
   5630 	evcnt_attach_dynamic(&stats->roc, EVCNT_TYPE_MISC, NULL,
   5631 	    stats->namebuf, "Oversized Packets Received");
   5632 	evcnt_attach_dynamic(&stats->rjc, EVCNT_TYPE_MISC, NULL,
   5633 	    stats->namebuf, "Received Jabber");
   5634 	evcnt_attach_dynamic(&stats->mngprc, EVCNT_TYPE_MISC, NULL,
   5635 	    stats->namebuf, "Management Packets Received");
   5636 	evcnt_attach_dynamic(&stats->xec, EVCNT_TYPE_MISC, NULL,
   5637 	    stats->namebuf, "Checksum Errors");
   5638 
   5639 	/* Packet Transmission Stats */
   5640 	evcnt_attach_dynamic(&stats->gotc, EVCNT_TYPE_MISC, NULL,
   5641 	    stats->namebuf, "Good Octets Transmitted");
   5642 	evcnt_attach_dynamic(&stats->tpt, EVCNT_TYPE_MISC, NULL,
   5643 	    stats->namebuf, "Total Packets Transmitted");
   5644 	evcnt_attach_dynamic(&stats->gptc, EVCNT_TYPE_MISC, NULL,
   5645 	    stats->namebuf, "Good Packets Transmitted");
   5646 	evcnt_attach_dynamic(&stats->bptc, EVCNT_TYPE_MISC, NULL,
   5647 	    stats->namebuf, "Broadcast Packets Transmitted");
   5648 	evcnt_attach_dynamic(&stats->mptc, EVCNT_TYPE_MISC, NULL,
   5649 	    stats->namebuf, "Multicast Packets Transmitted");
   5650 	evcnt_attach_dynamic(&stats->mngptc, EVCNT_TYPE_MISC, NULL,
   5651 	    stats->namebuf, "Management Packets Transmitted");
   5652 	evcnt_attach_dynamic(&stats->ptc64, EVCNT_TYPE_MISC, NULL,
   5653 	    stats->namebuf, "64 byte frames transmitted ");
   5654 	evcnt_attach_dynamic(&stats->ptc127, EVCNT_TYPE_MISC, NULL,
   5655 	    stats->namebuf, "65-127 byte frames transmitted");
   5656 	evcnt_attach_dynamic(&stats->ptc255, EVCNT_TYPE_MISC, NULL,
   5657 	    stats->namebuf, "128-255 byte frames transmitted");
   5658 	evcnt_attach_dynamic(&stats->ptc511, EVCNT_TYPE_MISC, NULL,
   5659 	    stats->namebuf, "256-511 byte frames transmitted");
   5660 	evcnt_attach_dynamic(&stats->ptc1023, EVCNT_TYPE_MISC, NULL,
   5661 	    stats->namebuf, "512-1023 byte frames transmitted");
   5662 	evcnt_attach_dynamic(&stats->ptc1522, EVCNT_TYPE_MISC, NULL,
   5663 	    stats->namebuf, "1024-1522 byte frames transmitted");
   5664 
   5665 	/* FC Stats */
   5666 	evcnt_attach_dynamic(&stats->fccrc, EVCNT_TYPE_MISC, NULL,
   5667 	    stats->namebuf, "FC CRC Errors");
   5668 	evcnt_attach_dynamic(&stats->fclast, EVCNT_TYPE_MISC, NULL,
   5669 	    stats->namebuf, "FC Last Error");
   5670 	if (hw->mac.type != ixgbe_mac_82598EB) {
   5671 		evcnt_attach_dynamic(&stats->fcoerpdc, EVCNT_TYPE_MISC, NULL,
   5672 		    stats->namebuf, "FCoE Packets Dropped");
   5673 		evcnt_attach_dynamic(&stats->fcoeprc, EVCNT_TYPE_MISC, NULL,
   5674 		    stats->namebuf, "FCoE Packets Received");
   5675 		evcnt_attach_dynamic(&stats->fcoeptc, EVCNT_TYPE_MISC, NULL,
   5676 		    stats->namebuf, "FCoE Packets Transmitted");
   5677 		evcnt_attach_dynamic(&stats->fcoedwrc, EVCNT_TYPE_MISC, NULL,
   5678 		    stats->namebuf, "FCoE DWords Received");
   5679 		evcnt_attach_dynamic(&stats->fcoedwtc, EVCNT_TYPE_MISC, NULL,
   5680 		    stats->namebuf, "FCoE DWords Transmitted");
   5681 	}
   5682 }
   5683 
   5684 /*
   5685 ** Set flow control using sysctl:
   5686 ** Flow control values:
   5687 ** 	0 - off
   5688 **	1 - rx pause
   5689 **	2 - tx pause
   5690 **	3 - full
   5691 */
   5692 static int
   5693 ixgbe_set_flowcntl(SYSCTLFN_ARGS)
   5694 {
   5695 	struct sysctlnode node;
   5696 	int error;
   5697 	int last = ixgbe_flow_control;
   5698 	struct adapter *adapter;
   5699 
   5700 	node = *rnode;
   5701 	adapter = (struct adapter *)node.sysctl_data;
   5702 	node.sysctl_data = &ixgbe_flow_control;
   5703 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
   5704 	if (error != 0 || newp == NULL)
   5705 		return error;
   5706 
   5707 	/* Don't bother if it's not changed */
   5708 	if (ixgbe_flow_control == last)
   5709 		return (0);
   5710 
   5711 	switch (ixgbe_flow_control) {
   5712 		case ixgbe_fc_rx_pause:
   5713 		case ixgbe_fc_tx_pause:
   5714 		case ixgbe_fc_full:
   5715 			adapter->hw.fc.requested_mode = ixgbe_flow_control;
   5716 			break;
   5717 		case ixgbe_fc_none:
   5718 		default:
   5719 			adapter->hw.fc.requested_mode = ixgbe_fc_none;
   5720 	}
   5721 
   5722 	ixgbe_fc_enable(&adapter->hw, 0);
   5723 	return 0;
   5724 }
   5725 
   5726 static void
   5727 ixgbe_add_rx_process_limit(struct adapter *adapter, const char *name,
   5728         const char *description, int *limit, int value)
   5729 {
   5730 	const struct sysctlnode *rnode, *cnode;
   5731 	struct sysctllog **log = &adapter->sysctllog;
   5732 
   5733         *limit = value;
   5734 
   5735 	if ((rnode = ixgbe_sysctl_instance(adapter)) == NULL)
   5736 		aprint_error_dev(adapter->dev,
   5737 		    "could not create sysctl root\n");
   5738 	else if (sysctl_createv(log, 0, &rnode, &cnode,
   5739 	    CTLFLAG_READWRITE,
   5740 	    CTLTYPE_INT,
   5741 	    name, SYSCTL_DESCR(description),
   5742 	    NULL, 0, limit, 0,
   5743 	    CTL_CREATE, CTL_EOL) != 0) {
   5744 		aprint_error_dev(adapter->dev, "%s: could not create sysctl",
   5745 		    __func__);
   5746 	}
   5747 }
   5748 
   5749 /*
   5750 ** Control link advertise speed:
   5751 ** 	0 - normal
   5752 **	1 - advertise only 1G
   5753 */
   5754 static int
   5755 ixgbe_set_advertise(SYSCTLFN_ARGS)
   5756 {
   5757 	struct sysctlnode	node;
   5758 	int			t, error;
   5759 	struct adapter		*adapter;
   5760 	struct ixgbe_hw		*hw;
   5761 	ixgbe_link_speed	speed, last;
   5762 
   5763 	node = *rnode;
   5764 	adapter = (struct adapter *)node.sysctl_data;
   5765 	t = adapter->advertise;
   5766 	node.sysctl_data = &t;
   5767 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
   5768 	if (error != 0 || newp == NULL)
   5769 		return error;
   5770 
   5771 	if (t == -1)
   5772 		return 0;
   5773 
   5774 	adapter->advertise = t;
   5775 
   5776 	hw = &adapter->hw;
   5777 	last = hw->phy.autoneg_advertised;
   5778 
   5779 	if (!((hw->phy.media_type == ixgbe_media_type_copper) ||
   5780             (hw->phy.multispeed_fiber)))
   5781 		return 0;
   5782 
   5783 	if (adapter->advertise == 1)
   5784                 speed = IXGBE_LINK_SPEED_1GB_FULL;
   5785 	else
   5786                 speed = IXGBE_LINK_SPEED_1GB_FULL |
   5787 			IXGBE_LINK_SPEED_10GB_FULL;
   5788 
   5789 	if (speed == last) /* no change */
   5790 		return 0;
   5791 
   5792 	hw->mac.autotry_restart = TRUE;
   5793 	hw->mac.ops.setup_link(hw, speed, TRUE, TRUE);
   5794 
   5795 	return 0;
   5796 }
   5797