xref: /netbsd-src/sys/dev/pci/ixgbe/ixgbe.c (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
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.14 2014/04/21 16:35:06 chs 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