xref: /freebsd/sys/dev/ixgbe/if_ixv.c (revision 3fc36ee018bb836bd1796067cf4ef8683f166ebc)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2015, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 
36 #ifndef IXGBE_STANDALONE_BUILD
37 #include "opt_inet.h"
38 #include "opt_inet6.h"
39 #endif
40 
41 #include "ixgbe.h"
42 
43 /*********************************************************************
44  *  Driver version
45  *********************************************************************/
46 char ixv_driver_version[] = "1.4.6-k";
47 
48 /*********************************************************************
49  *  PCI Device ID Table
50  *
51  *  Used by probe to select devices to load on
52  *  Last field stores an index into ixv_strings
53  *  Last entry must be all 0s
54  *
55  *  { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
56  *********************************************************************/
57 
58 static ixgbe_vendor_info_t ixv_vendor_info_array[] =
59 {
60 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_VF, 0, 0, 0},
61 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_X540_VF, 0, 0, 0},
62 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_X550_VF, 0, 0, 0},
63 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_X550EM_X_VF, 0, 0, 0},
64 	/* required last entry */
65 	{0, 0, 0, 0, 0}
66 };
67 
68 /*********************************************************************
69  *  Table of branding strings
70  *********************************************************************/
71 
72 static char    *ixv_strings[] = {
73 	"Intel(R) PRO/10GbE Virtual Function Network Driver"
74 };
75 
76 /*********************************************************************
77  *  Function prototypes
78  *********************************************************************/
79 static int      ixv_probe(device_t);
80 static int      ixv_attach(device_t);
81 static int      ixv_detach(device_t);
82 static int      ixv_shutdown(device_t);
83 static int      ixv_ioctl(struct ifnet *, u_long, caddr_t);
84 static void	ixv_init(void *);
85 static void	ixv_init_locked(struct adapter *);
86 static void     ixv_stop(void *);
87 static void     ixv_media_status(struct ifnet *, struct ifmediareq *);
88 static int      ixv_media_change(struct ifnet *);
89 static void     ixv_identify_hardware(struct adapter *);
90 static int      ixv_allocate_pci_resources(struct adapter *);
91 static int      ixv_allocate_msix(struct adapter *);
92 static int	ixv_setup_msix(struct adapter *);
93 static void	ixv_free_pci_resources(struct adapter *);
94 static void     ixv_local_timer(void *);
95 static void     ixv_setup_interface(device_t, struct adapter *);
96 static void     ixv_config_link(struct adapter *);
97 
98 static void     ixv_initialize_transmit_units(struct adapter *);
99 static void     ixv_initialize_receive_units(struct adapter *);
100 
101 static void     ixv_enable_intr(struct adapter *);
102 static void     ixv_disable_intr(struct adapter *);
103 static void     ixv_set_multi(struct adapter *);
104 static void     ixv_update_link_status(struct adapter *);
105 static int	ixv_sysctl_debug(SYSCTL_HANDLER_ARGS);
106 static void	ixv_set_ivar(struct adapter *, u8, u8, s8);
107 static void	ixv_configure_ivars(struct adapter *);
108 static u8 *	ixv_mc_array_itr(struct ixgbe_hw *, u8 **, u32 *);
109 
110 static void	ixv_setup_vlan_support(struct adapter *);
111 static void	ixv_register_vlan(void *, struct ifnet *, u16);
112 static void	ixv_unregister_vlan(void *, struct ifnet *, u16);
113 
114 static void	ixv_save_stats(struct adapter *);
115 static void	ixv_init_stats(struct adapter *);
116 static void	ixv_update_stats(struct adapter *);
117 static void	ixv_add_stats_sysctls(struct adapter *);
118 static void	ixv_set_sysctl_value(struct adapter *, const char *,
119 		    const char *, int *, int);
120 
121 /* The MSI/X Interrupt handlers */
122 static void	ixv_msix_que(void *);
123 static void	ixv_msix_mbx(void *);
124 
125 /* Deferred interrupt tasklets */
126 static void	ixv_handle_que(void *, int);
127 static void	ixv_handle_mbx(void *, int);
128 
129 #ifdef DEV_NETMAP
130 /*
131  * This is defined in <dev/netmap/ixgbe_netmap.h>, which is included by
132  * if_ix.c.
133  */
134 extern void ixgbe_netmap_attach(struct adapter *adapter);
135 
136 #include <net/netmap.h>
137 #include <sys/selinfo.h>
138 #include <dev/netmap/netmap_kern.h>
139 #endif /* DEV_NETMAP */
140 
141 /*********************************************************************
142  *  FreeBSD Device Interface Entry Points
143  *********************************************************************/
144 
145 static device_method_t ixv_methods[] = {
146 	/* Device interface */
147 	DEVMETHOD(device_probe, ixv_probe),
148 	DEVMETHOD(device_attach, ixv_attach),
149 	DEVMETHOD(device_detach, ixv_detach),
150 	DEVMETHOD(device_shutdown, ixv_shutdown),
151 	DEVMETHOD_END
152 };
153 
154 static driver_t ixv_driver = {
155 	"ixv", ixv_methods, sizeof(struct adapter),
156 };
157 
158 devclass_t ixv_devclass;
159 DRIVER_MODULE(ixv, pci, ixv_driver, ixv_devclass, 0, 0);
160 MODULE_DEPEND(ixv, pci, 1, 1, 1);
161 MODULE_DEPEND(ixv, ether, 1, 1, 1);
162 #ifdef DEV_NETMAP
163 MODULE_DEPEND(ix, netmap, 1, 1, 1);
164 #endif /* DEV_NETMAP */
165 /* XXX depend on 'ix' ? */
166 
167 /*
168 ** TUNEABLE PARAMETERS:
169 */
170 
171 /* Number of Queues - do not exceed MSIX vectors - 1 */
172 static int ixv_num_queues = 1;
173 TUNABLE_INT("hw.ixv.num_queues", &ixv_num_queues);
174 
175 /*
176 ** AIM: Adaptive Interrupt Moderation
177 ** which means that the interrupt rate
178 ** is varied over time based on the
179 ** traffic for that interrupt vector
180 */
181 static int ixv_enable_aim = FALSE;
182 TUNABLE_INT("hw.ixv.enable_aim", &ixv_enable_aim);
183 
184 /* How many packets rxeof tries to clean at a time */
185 static int ixv_rx_process_limit = 256;
186 TUNABLE_INT("hw.ixv.rx_process_limit", &ixv_rx_process_limit);
187 
188 /* How many packets txeof tries to clean at a time */
189 static int ixv_tx_process_limit = 256;
190 TUNABLE_INT("hw.ixv.tx_process_limit", &ixv_tx_process_limit);
191 
192 /* Flow control setting, default to full */
193 static int ixv_flow_control = ixgbe_fc_full;
194 TUNABLE_INT("hw.ixv.flow_control", &ixv_flow_control);
195 
196 /*
197  * Header split: this causes the hardware to DMA
198  * the header into a separate mbuf from the payload,
199  * it can be a performance win in some workloads, but
200  * in others it actually hurts, its off by default.
201  */
202 static int ixv_header_split = FALSE;
203 TUNABLE_INT("hw.ixv.hdr_split", &ixv_header_split);
204 
205 /*
206 ** Number of TX descriptors per ring,
207 ** setting higher than RX as this seems
208 ** the better performing choice.
209 */
210 static int ixv_txd = DEFAULT_TXD;
211 TUNABLE_INT("hw.ixv.txd", &ixv_txd);
212 
213 /* Number of RX descriptors per ring */
214 static int ixv_rxd = DEFAULT_RXD;
215 TUNABLE_INT("hw.ixv.rxd", &ixv_rxd);
216 
217 /*
218 ** Shadow VFTA table, this is needed because
219 ** the real filter table gets cleared during
220 ** a soft reset and we need to repopulate it.
221 */
222 static u32 ixv_shadow_vfta[IXGBE_VFTA_SIZE];
223 
224 /*********************************************************************
225  *  Device identification routine
226  *
227  *  ixv_probe determines if the driver should be loaded on
228  *  adapter based on PCI vendor/device id of the adapter.
229  *
230  *  return BUS_PROBE_DEFAULT on success, positive on failure
231  *********************************************************************/
232 
233 static int
234 ixv_probe(device_t dev)
235 {
236 	ixgbe_vendor_info_t *ent;
237 
238 	u16	pci_vendor_id = 0;
239 	u16	pci_device_id = 0;
240 	u16	pci_subvendor_id = 0;
241 	u16	pci_subdevice_id = 0;
242 	char	adapter_name[256];
243 
244 
245 	pci_vendor_id = pci_get_vendor(dev);
246 	if (pci_vendor_id != IXGBE_INTEL_VENDOR_ID)
247 		return (ENXIO);
248 
249 	pci_device_id = pci_get_device(dev);
250 	pci_subvendor_id = pci_get_subvendor(dev);
251 	pci_subdevice_id = pci_get_subdevice(dev);
252 
253 	ent = ixv_vendor_info_array;
254 	while (ent->vendor_id != 0) {
255 		if ((pci_vendor_id == ent->vendor_id) &&
256 		    (pci_device_id == ent->device_id) &&
257 
258 		    ((pci_subvendor_id == ent->subvendor_id) ||
259 		     (ent->subvendor_id == 0)) &&
260 
261 		    ((pci_subdevice_id == ent->subdevice_id) ||
262 		     (ent->subdevice_id == 0))) {
263 			sprintf(adapter_name, "%s, Version - %s",
264 				ixv_strings[ent->index],
265 				ixv_driver_version);
266 			device_set_desc_copy(dev, adapter_name);
267 			return (BUS_PROBE_DEFAULT);
268 		}
269 		ent++;
270 	}
271 	return (ENXIO);
272 }
273 
274 /*********************************************************************
275  *  Device initialization routine
276  *
277  *  The attach entry point is called when the driver is being loaded.
278  *  This routine identifies the type of hardware, allocates all resources
279  *  and initializes the hardware.
280  *
281  *  return 0 on success, positive on failure
282  *********************************************************************/
283 
284 static int
285 ixv_attach(device_t dev)
286 {
287 	struct adapter *adapter;
288 	struct ixgbe_hw *hw;
289 	int             error = 0;
290 
291 	INIT_DEBUGOUT("ixv_attach: begin");
292 
293 	/* Allocate, clear, and link in our adapter structure */
294 	adapter = device_get_softc(dev);
295 	adapter->dev = dev;
296 	hw = &adapter->hw;
297 
298 #ifdef DEV_NETMAP
299 	adapter->init_locked = ixv_init_locked;
300 	adapter->stop_locked = ixv_stop;
301 #endif
302 
303 	/* Core Lock Init*/
304 	IXGBE_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
305 
306 	/* SYSCTL APIs */
307 	SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
308 			SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
309 			OID_AUTO, "debug", CTLTYPE_INT | CTLFLAG_RW,
310 			adapter, 0, ixv_sysctl_debug, "I", "Debug Info");
311 
312 	SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
313 			SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
314 			OID_AUTO, "enable_aim", CTLFLAG_RW,
315 			&ixv_enable_aim, 1, "Interrupt Moderation");
316 
317 	/* Set up the timer callout */
318 	callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
319 
320 	/* Determine hardware revision */
321 	ixv_identify_hardware(adapter);
322 
323 	/* Do base PCI setup - map BAR0 */
324 	if (ixv_allocate_pci_resources(adapter)) {
325 		device_printf(dev, "ixv_allocate_pci_resources() failed!\n");
326 		error = ENXIO;
327 		goto err_out;
328 	}
329 
330 	/* Sysctls for limiting the amount of work done in the taskqueues */
331 	ixv_set_sysctl_value(adapter, "rx_processing_limit",
332 	    "max number of rx packets to process",
333 	    &adapter->rx_process_limit, ixv_rx_process_limit);
334 
335 	ixv_set_sysctl_value(adapter, "tx_processing_limit",
336 	    "max number of tx packets to process",
337 	    &adapter->tx_process_limit, ixv_tx_process_limit);
338 
339 	/* Do descriptor calc and sanity checks */
340 	if (((ixv_txd * sizeof(union ixgbe_adv_tx_desc)) % DBA_ALIGN) != 0 ||
341 	    ixv_txd < MIN_TXD || ixv_txd > MAX_TXD) {
342 		device_printf(dev, "TXD config issue, using default!\n");
343 		adapter->num_tx_desc = DEFAULT_TXD;
344 	} else
345 		adapter->num_tx_desc = ixv_txd;
346 
347 	if (((ixv_rxd * sizeof(union ixgbe_adv_rx_desc)) % DBA_ALIGN) != 0 ||
348 	    ixv_rxd < MIN_RXD || ixv_rxd > MAX_RXD) {
349 		device_printf(dev, "RXD config issue, using default!\n");
350 		adapter->num_rx_desc = DEFAULT_RXD;
351 	} else
352 		adapter->num_rx_desc = ixv_rxd;
353 
354 	/* Allocate our TX/RX Queues */
355 	if (ixgbe_allocate_queues(adapter)) {
356 		device_printf(dev, "ixgbe_allocate_queues() failed!\n");
357 		error = ENOMEM;
358 		goto err_out;
359 	}
360 
361 	/*
362 	** Initialize the shared code: its
363 	** at this point the mac type is set.
364 	*/
365 	error = ixgbe_init_shared_code(hw);
366 	if (error) {
367 		device_printf(dev, "ixgbe_init_shared_code() failed!\n");
368 		error = EIO;
369 		goto err_late;
370 	}
371 
372 	/* Setup the mailbox */
373 	ixgbe_init_mbx_params_vf(hw);
374 
375 	/* Reset mbox api to 1.0 */
376 	error = ixgbe_reset_hw(hw);
377 	if (error == IXGBE_ERR_RESET_FAILED)
378 		device_printf(dev, "ixgbe_reset_hw() failure: Reset Failed!\n");
379 	else if (error)
380 		device_printf(dev, "ixgbe_reset_hw() failed with error %d\n", error);
381 	if (error) {
382 		error = EIO;
383 		goto err_late;
384 	}
385 
386 	/* Negotiate mailbox API version */
387 	error = ixgbevf_negotiate_api_version(hw, ixgbe_mbox_api_11);
388 	if (error) {
389 		device_printf(dev, "MBX API 1.1 negotiation failed! Error %d\n", error);
390 		error = EIO;
391 		goto err_late;
392 	}
393 
394 	error = ixgbe_init_hw(hw);
395 	if (error) {
396 		device_printf(dev, "ixgbe_init_hw() failed!\n");
397 		error = EIO;
398 		goto err_late;
399 	}
400 
401 	error = ixv_allocate_msix(adapter);
402 	if (error) {
403 		device_printf(dev, "ixv_allocate_msix() failed!\n");
404 		goto err_late;
405 	}
406 
407 	/* If no mac address was assigned, make a random one */
408 	if (!ixv_check_ether_addr(hw->mac.addr)) {
409 		u8 addr[ETHER_ADDR_LEN];
410 		arc4rand(&addr, sizeof(addr), 0);
411 		addr[0] &= 0xFE;
412 		addr[0] |= 0x02;
413 		bcopy(addr, hw->mac.addr, sizeof(addr));
414 	}
415 
416 	/* Setup OS specific network interface */
417 	ixv_setup_interface(dev, adapter);
418 
419 	/* Do the stats setup */
420 	ixv_save_stats(adapter);
421 	ixv_init_stats(adapter);
422 	ixv_add_stats_sysctls(adapter);
423 
424 	/* Register for VLAN events */
425 	adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
426 	    ixv_register_vlan, adapter, EVENTHANDLER_PRI_FIRST);
427 	adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
428 	    ixv_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
429 
430 #ifdef DEV_NETMAP
431 	ixgbe_netmap_attach(adapter);
432 #endif /* DEV_NETMAP */
433 	INIT_DEBUGOUT("ixv_attach: end");
434 	return (0);
435 
436 err_late:
437 	ixgbe_free_transmit_structures(adapter);
438 	ixgbe_free_receive_structures(adapter);
439 err_out:
440 	ixv_free_pci_resources(adapter);
441 	return (error);
442 
443 }
444 
445 /*********************************************************************
446  *  Device removal routine
447  *
448  *  The detach entry point is called when the driver is being removed.
449  *  This routine stops the adapter and deallocates all the resources
450  *  that were allocated for driver operation.
451  *
452  *  return 0 on success, positive on failure
453  *********************************************************************/
454 
455 static int
456 ixv_detach(device_t dev)
457 {
458 	struct adapter *adapter = device_get_softc(dev);
459 	struct ix_queue *que = adapter->queues;
460 
461 	INIT_DEBUGOUT("ixv_detach: begin");
462 
463 	/* Make sure VLANS are not using driver */
464 	if (adapter->ifp->if_vlantrunk != NULL) {
465 		device_printf(dev, "Vlan in use, detach first\n");
466 		return (EBUSY);
467 	}
468 
469 	IXGBE_CORE_LOCK(adapter);
470 	ixv_stop(adapter);
471 	IXGBE_CORE_UNLOCK(adapter);
472 
473 	for (int i = 0; i < adapter->num_queues; i++, que++) {
474 		if (que->tq) {
475 			struct tx_ring  *txr = que->txr;
476 			taskqueue_drain(que->tq, &txr->txq_task);
477 			taskqueue_drain(que->tq, &que->que_task);
478 			taskqueue_free(que->tq);
479 		}
480 	}
481 
482 	/* Drain the Mailbox(link) queue */
483 	if (adapter->tq) {
484 		taskqueue_drain(adapter->tq, &adapter->link_task);
485 		taskqueue_free(adapter->tq);
486 	}
487 
488 	/* Unregister VLAN events */
489 	if (adapter->vlan_attach != NULL)
490 		EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
491 	if (adapter->vlan_detach != NULL)
492 		EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
493 
494 	ether_ifdetach(adapter->ifp);
495 	callout_drain(&adapter->timer);
496 #ifdef DEV_NETMAP
497 	netmap_detach(adapter->ifp);
498 #endif /* DEV_NETMAP */
499 	ixv_free_pci_resources(adapter);
500 	bus_generic_detach(dev);
501 	if_free(adapter->ifp);
502 
503 	ixgbe_free_transmit_structures(adapter);
504 	ixgbe_free_receive_structures(adapter);
505 
506 	IXGBE_CORE_LOCK_DESTROY(adapter);
507 	return (0);
508 }
509 
510 /*********************************************************************
511  *
512  *  Shutdown entry point
513  *
514  **********************************************************************/
515 static int
516 ixv_shutdown(device_t dev)
517 {
518 	struct adapter *adapter = device_get_softc(dev);
519 	IXGBE_CORE_LOCK(adapter);
520 	ixv_stop(adapter);
521 	IXGBE_CORE_UNLOCK(adapter);
522 	return (0);
523 }
524 
525 
526 /*********************************************************************
527  *  Ioctl entry point
528  *
529  *  ixv_ioctl is called when the user wants to configure the
530  *  interface.
531  *
532  *  return 0 on success, positive on failure
533  **********************************************************************/
534 
535 static int
536 ixv_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
537 {
538 	struct adapter	*adapter = ifp->if_softc;
539 	struct ifreq	*ifr = (struct ifreq *) data;
540 #if defined(INET) || defined(INET6)
541 	struct ifaddr	*ifa = (struct ifaddr *) data;
542 	bool		avoid_reset = FALSE;
543 #endif
544 	int             error = 0;
545 
546 	switch (command) {
547 
548 	case SIOCSIFADDR:
549 #ifdef INET
550 		if (ifa->ifa_addr->sa_family == AF_INET)
551 			avoid_reset = TRUE;
552 #endif
553 #ifdef INET6
554 		if (ifa->ifa_addr->sa_family == AF_INET6)
555 			avoid_reset = TRUE;
556 #endif
557 #if defined(INET) || defined(INET6)
558 		/*
559 		** Calling init results in link renegotiation,
560 		** so we avoid doing it when possible.
561 		*/
562 		if (avoid_reset) {
563 			ifp->if_flags |= IFF_UP;
564 			if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
565 				ixv_init(adapter);
566 			if (!(ifp->if_flags & IFF_NOARP))
567 				arp_ifinit(ifp, ifa);
568 		} else
569 			error = ether_ioctl(ifp, command, data);
570 		break;
571 #endif
572 	case SIOCSIFMTU:
573 		IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
574 		if (ifr->ifr_mtu > IXGBE_MAX_FRAME_SIZE - IXGBE_MTU_HDR) {
575 			error = EINVAL;
576 		} else {
577 			IXGBE_CORE_LOCK(adapter);
578 			ifp->if_mtu = ifr->ifr_mtu;
579 			adapter->max_frame_size =
580 				ifp->if_mtu + IXGBE_MTU_HDR;
581 			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
582 				ixv_init_locked(adapter);
583 			IXGBE_CORE_UNLOCK(adapter);
584 		}
585 		break;
586 	case SIOCSIFFLAGS:
587 		IOCTL_DEBUGOUT("ioctl: SIOCSIFFLAGS (Set Interface Flags)");
588 		IXGBE_CORE_LOCK(adapter);
589 		if (ifp->if_flags & IFF_UP) {
590 			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
591 				ixv_init_locked(adapter);
592 		} else
593 			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
594 				ixv_stop(adapter);
595 		adapter->if_flags = ifp->if_flags;
596 		IXGBE_CORE_UNLOCK(adapter);
597 		break;
598 	case SIOCADDMULTI:
599 	case SIOCDELMULTI:
600 		IOCTL_DEBUGOUT("ioctl: SIOC(ADD|DEL)MULTI");
601 		if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
602 			IXGBE_CORE_LOCK(adapter);
603 			ixv_disable_intr(adapter);
604 			ixv_set_multi(adapter);
605 			ixv_enable_intr(adapter);
606 			IXGBE_CORE_UNLOCK(adapter);
607 		}
608 		break;
609 	case SIOCSIFMEDIA:
610 	case SIOCGIFMEDIA:
611 		IOCTL_DEBUGOUT("ioctl: SIOCxIFMEDIA (Get/Set Interface Media)");
612 		error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
613 		break;
614 	case SIOCSIFCAP:
615 	{
616 		int mask = ifr->ifr_reqcap ^ ifp->if_capenable;
617 		IOCTL_DEBUGOUT("ioctl: SIOCSIFCAP (Set Capabilities)");
618 		if (mask & IFCAP_HWCSUM)
619 			ifp->if_capenable ^= IFCAP_HWCSUM;
620 		if (mask & IFCAP_TSO4)
621 			ifp->if_capenable ^= IFCAP_TSO4;
622 		if (mask & IFCAP_LRO)
623 			ifp->if_capenable ^= IFCAP_LRO;
624 		if (mask & IFCAP_VLAN_HWTAGGING)
625 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
626 		if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
627 			IXGBE_CORE_LOCK(adapter);
628 			ixv_init_locked(adapter);
629 			IXGBE_CORE_UNLOCK(adapter);
630 		}
631 		VLAN_CAPABILITIES(ifp);
632 		break;
633 	}
634 
635 	default:
636 		IOCTL_DEBUGOUT1("ioctl: UNKNOWN (0x%X)\n", (int)command);
637 		error = ether_ioctl(ifp, command, data);
638 		break;
639 	}
640 
641 	return (error);
642 }
643 
644 /*********************************************************************
645  *  Init entry point
646  *
647  *  This routine is used in two ways. It is used by the stack as
648  *  init entry point in network interface structure. It is also used
649  *  by the driver as a hw/sw initialization routine to get to a
650  *  consistent state.
651  *
652  *  return 0 on success, positive on failure
653  **********************************************************************/
654 #define IXGBE_MHADD_MFS_SHIFT 16
655 
656 static void
657 ixv_init_locked(struct adapter *adapter)
658 {
659 	struct ifnet	*ifp = adapter->ifp;
660 	device_t 	dev = adapter->dev;
661 	struct ixgbe_hw *hw = &adapter->hw;
662 	int error = 0;
663 
664 	INIT_DEBUGOUT("ixv_init_locked: begin");
665 	mtx_assert(&adapter->core_mtx, MA_OWNED);
666 	hw->adapter_stopped = FALSE;
667 	ixgbe_stop_adapter(hw);
668         callout_stop(&adapter->timer);
669 
670         /* reprogram the RAR[0] in case user changed it. */
671         ixgbe_set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
672 
673 	/* Get the latest mac address, User can use a LAA */
674 	bcopy(IF_LLADDR(adapter->ifp), hw->mac.addr,
675 	     IXGBE_ETH_LENGTH_OF_ADDRESS);
676         ixgbe_set_rar(hw, 0, hw->mac.addr, 0, 1);
677 	hw->addr_ctrl.rar_used_count = 1;
678 
679 	/* Prepare transmit descriptors and buffers */
680 	if (ixgbe_setup_transmit_structures(adapter)) {
681 		device_printf(dev, "Could not setup transmit structures\n");
682 		ixv_stop(adapter);
683 		return;
684 	}
685 
686 	/* Reset VF and renegotiate mailbox API version */
687 	ixgbe_reset_hw(hw);
688 	error = ixgbevf_negotiate_api_version(hw, ixgbe_mbox_api_11);
689 	if (error)
690 		device_printf(dev, "MBX API 1.1 negotiation failed! Error %d\n", error);
691 
692 	ixv_initialize_transmit_units(adapter);
693 
694 	/* Setup Multicast table */
695 	ixv_set_multi(adapter);
696 
697 	/*
698 	** Determine the correct mbuf pool
699 	** for doing jumbo/headersplit
700 	*/
701 	if (ifp->if_mtu > ETHERMTU)
702 		adapter->rx_mbuf_sz = MJUMPAGESIZE;
703 	else
704 		adapter->rx_mbuf_sz = MCLBYTES;
705 
706 	/* Prepare receive descriptors and buffers */
707 	if (ixgbe_setup_receive_structures(adapter)) {
708 		device_printf(dev, "Could not setup receive structures\n");
709 		ixv_stop(adapter);
710 		return;
711 	}
712 
713 	/* Configure RX settings */
714 	ixv_initialize_receive_units(adapter);
715 
716 	/* Set the various hardware offload abilities */
717 	ifp->if_hwassist = 0;
718 	if (ifp->if_capenable & IFCAP_TSO4)
719 		ifp->if_hwassist |= CSUM_TSO;
720 	if (ifp->if_capenable & IFCAP_TXCSUM) {
721 		ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
722 #if __FreeBSD_version >= 800000
723 		ifp->if_hwassist |= CSUM_SCTP;
724 #endif
725 	}
726 
727 	/* Set up VLAN offload and filter */
728 	ixv_setup_vlan_support(adapter);
729 
730 	/* Set up MSI/X routing */
731 	ixv_configure_ivars(adapter);
732 
733 	/* Set up auto-mask */
734 	IXGBE_WRITE_REG(hw, IXGBE_VTEIAM, IXGBE_EICS_RTX_QUEUE);
735 
736         /* Set moderation on the Link interrupt */
737         IXGBE_WRITE_REG(hw, IXGBE_VTEITR(adapter->vector), IXGBE_LINK_ITR);
738 
739 	/* Stats init */
740 	ixv_init_stats(adapter);
741 
742 	/* Config/Enable Link */
743 	ixv_config_link(adapter);
744 
745 	/* Start watchdog */
746 	callout_reset(&adapter->timer, hz, ixv_local_timer, adapter);
747 
748 	/* And now turn on interrupts */
749 	ixv_enable_intr(adapter);
750 
751 	/* Now inform the stack we're ready */
752 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
753 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
754 
755 	return;
756 }
757 
758 static void
759 ixv_init(void *arg)
760 {
761 	struct adapter *adapter = arg;
762 
763 	IXGBE_CORE_LOCK(adapter);
764 	ixv_init_locked(adapter);
765 	IXGBE_CORE_UNLOCK(adapter);
766 	return;
767 }
768 
769 
770 /*
771 **
772 ** MSIX Interrupt Handlers and Tasklets
773 **
774 */
775 
776 static inline void
777 ixv_enable_queue(struct adapter *adapter, u32 vector)
778 {
779 	struct ixgbe_hw *hw = &adapter->hw;
780 	u32	queue = 1 << vector;
781 	u32	mask;
782 
783 	mask = (IXGBE_EIMS_RTX_QUEUE & queue);
784 	IXGBE_WRITE_REG(hw, IXGBE_VTEIMS, mask);
785 }
786 
787 static inline void
788 ixv_disable_queue(struct adapter *adapter, u32 vector)
789 {
790 	struct ixgbe_hw *hw = &adapter->hw;
791 	u64	queue = (u64)(1 << vector);
792 	u32	mask;
793 
794 	mask = (IXGBE_EIMS_RTX_QUEUE & queue);
795 	IXGBE_WRITE_REG(hw, IXGBE_VTEIMC, mask);
796 }
797 
798 static inline void
799 ixv_rearm_queues(struct adapter *adapter, u64 queues)
800 {
801 	u32 mask = (IXGBE_EIMS_RTX_QUEUE & queues);
802 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_VTEICS, mask);
803 }
804 
805 
806 static void
807 ixv_handle_que(void *context, int pending)
808 {
809 	struct ix_queue *que = context;
810 	struct adapter  *adapter = que->adapter;
811 	struct tx_ring	*txr = que->txr;
812 	struct ifnet    *ifp = adapter->ifp;
813 	bool		more;
814 
815 	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
816 		more = ixgbe_rxeof(que);
817 		IXGBE_TX_LOCK(txr);
818 		ixgbe_txeof(txr);
819 #if __FreeBSD_version >= 800000
820 		if (!drbr_empty(ifp, txr->br))
821 			ixgbe_mq_start_locked(ifp, txr);
822 #else
823 		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
824 			ixgbe_start_locked(txr, ifp);
825 #endif
826 		IXGBE_TX_UNLOCK(txr);
827 		if (more) {
828 			taskqueue_enqueue(que->tq, &que->que_task);
829 			return;
830 		}
831 	}
832 
833 	/* Reenable this interrupt */
834 	ixv_enable_queue(adapter, que->msix);
835 	return;
836 }
837 
838 /*********************************************************************
839  *
840  *  MSI Queue Interrupt Service routine
841  *
842  **********************************************************************/
843 void
844 ixv_msix_que(void *arg)
845 {
846 	struct ix_queue	*que = arg;
847 	struct adapter  *adapter = que->adapter;
848 	struct ifnet    *ifp = adapter->ifp;
849 	struct tx_ring	*txr = que->txr;
850 	struct rx_ring	*rxr = que->rxr;
851 	bool		more;
852 	u32		newitr = 0;
853 
854 	ixv_disable_queue(adapter, que->msix);
855 	++que->irqs;
856 
857 	more = ixgbe_rxeof(que);
858 
859 	IXGBE_TX_LOCK(txr);
860 	ixgbe_txeof(txr);
861 	/*
862 	** Make certain that if the stack
863 	** has anything queued the task gets
864 	** scheduled to handle it.
865 	*/
866 #ifdef IXGBE_LEGACY_TX
867 	if (!IFQ_DRV_IS_EMPTY(&adapter->ifp->if_snd))
868 		ixgbe_start_locked(txr, ifp);
869 #else
870 	if (!drbr_empty(adapter->ifp, txr->br))
871 		ixgbe_mq_start_locked(ifp, txr);
872 #endif
873 	IXGBE_TX_UNLOCK(txr);
874 
875 	/* Do AIM now? */
876 
877 	if (ixv_enable_aim == FALSE)
878 		goto no_calc;
879 	/*
880 	** Do Adaptive Interrupt Moderation:
881         **  - Write out last calculated setting
882 	**  - Calculate based on average size over
883 	**    the last interval.
884 	*/
885         if (que->eitr_setting)
886                 IXGBE_WRITE_REG(&adapter->hw,
887                     IXGBE_VTEITR(que->msix),
888 		    que->eitr_setting);
889 
890         que->eitr_setting = 0;
891 
892         /* Idle, do nothing */
893         if ((txr->bytes == 0) && (rxr->bytes == 0))
894                 goto no_calc;
895 
896 	if ((txr->bytes) && (txr->packets))
897                	newitr = txr->bytes/txr->packets;
898 	if ((rxr->bytes) && (rxr->packets))
899 		newitr = max(newitr,
900 		    (rxr->bytes / rxr->packets));
901 	newitr += 24; /* account for hardware frame, crc */
902 
903 	/* set an upper boundary */
904 	newitr = min(newitr, 3000);
905 
906 	/* Be nice to the mid range */
907 	if ((newitr > 300) && (newitr < 1200))
908 		newitr = (newitr / 3);
909 	else
910 		newitr = (newitr / 2);
911 
912 	newitr |= newitr << 16;
913 
914         /* save for next interrupt */
915         que->eitr_setting = newitr;
916 
917         /* Reset state */
918         txr->bytes = 0;
919         txr->packets = 0;
920         rxr->bytes = 0;
921         rxr->packets = 0;
922 
923 no_calc:
924 	if (more)
925 		taskqueue_enqueue(que->tq, &que->que_task);
926 	else /* Reenable this interrupt */
927 		ixv_enable_queue(adapter, que->msix);
928 	return;
929 }
930 
931 static void
932 ixv_msix_mbx(void *arg)
933 {
934 	struct adapter	*adapter = arg;
935 	struct ixgbe_hw *hw = &adapter->hw;
936 	u32		reg;
937 
938 	++adapter->link_irq;
939 
940 	/* First get the cause */
941 	reg = IXGBE_READ_REG(hw, IXGBE_VTEICS);
942 	/* Clear interrupt with write */
943 	IXGBE_WRITE_REG(hw, IXGBE_VTEICR, reg);
944 
945 	/* Link status change */
946 	if (reg & IXGBE_EICR_LSC)
947 		taskqueue_enqueue(adapter->tq, &adapter->link_task);
948 
949 	IXGBE_WRITE_REG(hw, IXGBE_VTEIMS, IXGBE_EIMS_OTHER);
950 	return;
951 }
952 
953 /*********************************************************************
954  *
955  *  Media Ioctl callback
956  *
957  *  This routine is called whenever the user queries the status of
958  *  the interface using ifconfig.
959  *
960  **********************************************************************/
961 static void
962 ixv_media_status(struct ifnet * ifp, struct ifmediareq * ifmr)
963 {
964 	struct adapter *adapter = ifp->if_softc;
965 
966 	INIT_DEBUGOUT("ixv_media_status: begin");
967 	IXGBE_CORE_LOCK(adapter);
968 	ixv_update_link_status(adapter);
969 
970 	ifmr->ifm_status = IFM_AVALID;
971 	ifmr->ifm_active = IFM_ETHER;
972 
973 	if (!adapter->link_active) {
974 		IXGBE_CORE_UNLOCK(adapter);
975 		return;
976 	}
977 
978 	ifmr->ifm_status |= IFM_ACTIVE;
979 
980 	switch (adapter->link_speed) {
981 		case IXGBE_LINK_SPEED_1GB_FULL:
982 			ifmr->ifm_active |= IFM_1000_T | IFM_FDX;
983 			break;
984 		case IXGBE_LINK_SPEED_10GB_FULL:
985 			ifmr->ifm_active |= IFM_FDX;
986 			break;
987 	}
988 
989 	IXGBE_CORE_UNLOCK(adapter);
990 
991 	return;
992 }
993 
994 /*********************************************************************
995  *
996  *  Media Ioctl callback
997  *
998  *  This routine is called when the user changes speed/duplex using
999  *  media/mediopt option with ifconfig.
1000  *
1001  **********************************************************************/
1002 static int
1003 ixv_media_change(struct ifnet * ifp)
1004 {
1005 	struct adapter *adapter = ifp->if_softc;
1006 	struct ifmedia *ifm = &adapter->media;
1007 
1008 	INIT_DEBUGOUT("ixv_media_change: begin");
1009 
1010 	if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1011 		return (EINVAL);
1012 
1013         switch (IFM_SUBTYPE(ifm->ifm_media)) {
1014         case IFM_AUTO:
1015                 break;
1016         default:
1017                 device_printf(adapter->dev, "Only auto media type\n");
1018 		return (EINVAL);
1019         }
1020 
1021 	return (0);
1022 }
1023 
1024 
1025 /*********************************************************************
1026  *  Multicast Update
1027  *
1028  *  This routine is called whenever multicast address list is updated.
1029  *
1030  **********************************************************************/
1031 #define IXGBE_RAR_ENTRIES 16
1032 
1033 static void
1034 ixv_set_multi(struct adapter *adapter)
1035 {
1036 	u8	mta[MAX_NUM_MULTICAST_ADDRESSES * IXGBE_ETH_LENGTH_OF_ADDRESS];
1037 	u8	*update_ptr;
1038 	struct	ifmultiaddr *ifma;
1039 	int	mcnt = 0;
1040 	struct ifnet   *ifp = adapter->ifp;
1041 
1042 	IOCTL_DEBUGOUT("ixv_set_multi: begin");
1043 
1044 #if __FreeBSD_version < 800000
1045 	IF_ADDR_LOCK(ifp);
1046 #else
1047 	if_maddr_rlock(ifp);
1048 #endif
1049 	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1050 		if (ifma->ifma_addr->sa_family != AF_LINK)
1051 			continue;
1052 		bcopy(LLADDR((struct sockaddr_dl *) ifma->ifma_addr),
1053 		    &mta[mcnt * IXGBE_ETH_LENGTH_OF_ADDRESS],
1054 		    IXGBE_ETH_LENGTH_OF_ADDRESS);
1055 		mcnt++;
1056 	}
1057 #if __FreeBSD_version < 800000
1058 	IF_ADDR_UNLOCK(ifp);
1059 #else
1060 	if_maddr_runlock(ifp);
1061 #endif
1062 
1063 	update_ptr = mta;
1064 
1065 	ixgbe_update_mc_addr_list(&adapter->hw,
1066 	    update_ptr, mcnt, ixv_mc_array_itr, TRUE);
1067 
1068 	return;
1069 }
1070 
1071 /*
1072  * This is an iterator function now needed by the multicast
1073  * shared code. It simply feeds the shared code routine the
1074  * addresses in the array of ixv_set_multi() one by one.
1075  */
1076 static u8 *
1077 ixv_mc_array_itr(struct ixgbe_hw *hw, u8 **update_ptr, u32 *vmdq)
1078 {
1079 	u8 *addr = *update_ptr;
1080 	u8 *newptr;
1081 	*vmdq = 0;
1082 
1083 	newptr = addr + IXGBE_ETH_LENGTH_OF_ADDRESS;
1084 	*update_ptr = newptr;
1085 	return addr;
1086 }
1087 
1088 /*********************************************************************
1089  *  Timer routine
1090  *
1091  *  This routine checks for link status,updates statistics,
1092  *  and runs the watchdog check.
1093  *
1094  **********************************************************************/
1095 
1096 static void
1097 ixv_local_timer(void *arg)
1098 {
1099 	struct adapter	*adapter = arg;
1100 	device_t	dev = adapter->dev;
1101 	struct ix_queue	*que = adapter->queues;
1102 	u64		queues = 0;
1103 	int		hung = 0;
1104 
1105 	mtx_assert(&adapter->core_mtx, MA_OWNED);
1106 
1107 	ixv_update_link_status(adapter);
1108 
1109 	/* Stats Update */
1110 	ixv_update_stats(adapter);
1111 
1112 	/*
1113 	** Check the TX queues status
1114 	**      - mark hung queues so we don't schedule on them
1115 	**      - watchdog only if all queues show hung
1116 	*/
1117 	for (int i = 0; i < adapter->num_queues; i++, que++) {
1118 		/* Keep track of queues with work for soft irq */
1119 		if (que->txr->busy)
1120 			queues |= ((u64)1 << que->me);
1121 		/*
1122 		** Each time txeof runs without cleaning, but there
1123 		** are uncleaned descriptors it increments busy. If
1124 		** we get to the MAX we declare it hung.
1125 		*/
1126 		if (que->busy == IXGBE_QUEUE_HUNG) {
1127 			++hung;
1128 			/* Mark the queue as inactive */
1129 			adapter->active_queues &= ~((u64)1 << que->me);
1130 			continue;
1131 		} else {
1132 			/* Check if we've come back from hung */
1133 			if ((adapter->active_queues & ((u64)1 << que->me)) == 0)
1134                                 adapter->active_queues |= ((u64)1 << que->me);
1135 		}
1136 		if (que->busy >= IXGBE_MAX_TX_BUSY) {
1137 			device_printf(dev,"Warning queue %d "
1138 			    "appears to be hung!\n", i);
1139 			que->txr->busy = IXGBE_QUEUE_HUNG;
1140 			++hung;
1141 		}
1142 
1143 	}
1144 
1145 	/* Only truly watchdog if all queues show hung */
1146 	if (hung == adapter->num_queues)
1147 		goto watchdog;
1148 	else if (queues != 0) { /* Force an IRQ on queues with work */
1149 		ixv_rearm_queues(adapter, queues);
1150 	}
1151 
1152 	callout_reset(&adapter->timer, hz, ixv_local_timer, adapter);
1153 	return;
1154 
1155 watchdog:
1156 	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
1157 	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
1158 	adapter->watchdog_events++;
1159 	ixv_init_locked(adapter);
1160 }
1161 
1162 /*
1163 ** Note: this routine updates the OS on the link state
1164 **	the real check of the hardware only happens with
1165 **	a link interrupt.
1166 */
1167 static void
1168 ixv_update_link_status(struct adapter *adapter)
1169 {
1170 	struct ifnet	*ifp = adapter->ifp;
1171 	device_t dev = adapter->dev;
1172 
1173 	if (adapter->link_up){
1174 		if (adapter->link_active == FALSE) {
1175 			if (bootverbose)
1176 				device_printf(dev,"Link is up %d Gbps %s \n",
1177 				    ((adapter->link_speed == 128)? 10:1),
1178 				    "Full Duplex");
1179 			adapter->link_active = TRUE;
1180 			if_link_state_change(ifp, LINK_STATE_UP);
1181 		}
1182 	} else { /* Link down */
1183 		if (adapter->link_active == TRUE) {
1184 			if (bootverbose)
1185 				device_printf(dev,"Link is Down\n");
1186 			if_link_state_change(ifp, LINK_STATE_DOWN);
1187 			adapter->link_active = FALSE;
1188 		}
1189 	}
1190 
1191 	return;
1192 }
1193 
1194 
1195 /*********************************************************************
1196  *
1197  *  This routine disables all traffic on the adapter by issuing a
1198  *  global reset on the MAC and deallocates TX/RX buffers.
1199  *
1200  **********************************************************************/
1201 
1202 static void
1203 ixv_stop(void *arg)
1204 {
1205 	struct ifnet   *ifp;
1206 	struct adapter *adapter = arg;
1207 	struct ixgbe_hw *hw = &adapter->hw;
1208 	ifp = adapter->ifp;
1209 
1210 	mtx_assert(&adapter->core_mtx, MA_OWNED);
1211 
1212 	INIT_DEBUGOUT("ixv_stop: begin\n");
1213 	ixv_disable_intr(adapter);
1214 
1215 	/* Tell the stack that the interface is no longer active */
1216 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
1217 
1218 	ixgbe_reset_hw(hw);
1219 	adapter->hw.adapter_stopped = FALSE;
1220 	ixgbe_stop_adapter(hw);
1221 	callout_stop(&adapter->timer);
1222 
1223 	/* reprogram the RAR[0] in case user changed it. */
1224 	ixgbe_set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
1225 
1226 	return;
1227 }
1228 
1229 
1230 /*********************************************************************
1231  *
1232  *  Determine hardware revision.
1233  *
1234  **********************************************************************/
1235 static void
1236 ixv_identify_hardware(struct adapter *adapter)
1237 {
1238 	device_t        dev = adapter->dev;
1239 	struct ixgbe_hw *hw = &adapter->hw;
1240 
1241 	/*
1242 	** Make sure BUSMASTER is set, on a VM under
1243 	** KVM it may not be and will break things.
1244 	*/
1245 	pci_enable_busmaster(dev);
1246 
1247 	/* Save off the information about this board */
1248 	hw->vendor_id = pci_get_vendor(dev);
1249 	hw->device_id = pci_get_device(dev);
1250 	hw->revision_id = pci_read_config(dev, PCIR_REVID, 1);
1251 	hw->subsystem_vendor_id =
1252 	    pci_read_config(dev, PCIR_SUBVEND_0, 2);
1253 	hw->subsystem_device_id =
1254 	    pci_read_config(dev, PCIR_SUBDEV_0, 2);
1255 
1256 	/* We need this to determine device-specific things */
1257 	ixgbe_set_mac_type(hw);
1258 
1259 	/* Set the right number of segments */
1260 	adapter->num_segs = IXGBE_82599_SCATTER;
1261 
1262 	return;
1263 }
1264 
1265 /*********************************************************************
1266  *
1267  *  Setup MSIX Interrupt resources and handlers
1268  *
1269  **********************************************************************/
1270 static int
1271 ixv_allocate_msix(struct adapter *adapter)
1272 {
1273 	device_t	dev = adapter->dev;
1274 	struct 		ix_queue *que = adapter->queues;
1275 	struct		tx_ring *txr = adapter->tx_rings;
1276 	int 		error, rid, vector = 0;
1277 
1278 	for (int i = 0; i < adapter->num_queues; i++, vector++, que++, txr++) {
1279 		rid = vector + 1;
1280 		que->res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1281 		    RF_SHAREABLE | RF_ACTIVE);
1282 		if (que->res == NULL) {
1283 			device_printf(dev,"Unable to allocate"
1284 		    	    " bus resource: que interrupt [%d]\n", vector);
1285 			return (ENXIO);
1286 		}
1287 		/* Set the handler function */
1288 		error = bus_setup_intr(dev, que->res,
1289 		    INTR_TYPE_NET | INTR_MPSAFE, NULL,
1290 		    ixv_msix_que, que, &que->tag);
1291 		if (error) {
1292 			que->res = NULL;
1293 			device_printf(dev, "Failed to register QUE handler");
1294 			return (error);
1295 		}
1296 #if __FreeBSD_version >= 800504
1297 		bus_describe_intr(dev, que->res, que->tag, "que %d", i);
1298 #endif
1299 		que->msix = vector;
1300         	adapter->active_queues |= (u64)(1 << que->msix);
1301 		/*
1302 		** Bind the msix vector, and thus the
1303 		** ring to the corresponding cpu.
1304 		*/
1305 		if (adapter->num_queues > 1)
1306 			bus_bind_intr(dev, que->res, i);
1307 		TASK_INIT(&txr->txq_task, 0, ixgbe_deferred_mq_start, txr);
1308 		TASK_INIT(&que->que_task, 0, ixv_handle_que, que);
1309 		que->tq = taskqueue_create_fast("ixv_que", M_NOWAIT,
1310 		    taskqueue_thread_enqueue, &que->tq);
1311 		taskqueue_start_threads(&que->tq, 1, PI_NET, "%s que",
1312 		    device_get_nameunit(adapter->dev));
1313 	}
1314 
1315 	/* and Mailbox */
1316 	rid = vector + 1;
1317 	adapter->res = bus_alloc_resource_any(dev,
1318     	    SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
1319 	if (!adapter->res) {
1320 		device_printf(dev,"Unable to allocate"
1321     	    " bus resource: MBX interrupt [%d]\n", rid);
1322 		return (ENXIO);
1323 	}
1324 	/* Set the mbx handler function */
1325 	error = bus_setup_intr(dev, adapter->res,
1326 	    INTR_TYPE_NET | INTR_MPSAFE, NULL,
1327 	    ixv_msix_mbx, adapter, &adapter->tag);
1328 	if (error) {
1329 		adapter->res = NULL;
1330 		device_printf(dev, "Failed to register LINK handler");
1331 		return (error);
1332 	}
1333 #if __FreeBSD_version >= 800504
1334 	bus_describe_intr(dev, adapter->res, adapter->tag, "mbx");
1335 #endif
1336 	adapter->vector = vector;
1337 	/* Tasklets for Mailbox */
1338 	TASK_INIT(&adapter->link_task, 0, ixv_handle_mbx, adapter);
1339 	adapter->tq = taskqueue_create_fast("ixv_mbx", M_NOWAIT,
1340 	    taskqueue_thread_enqueue, &adapter->tq);
1341 	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s mbxq",
1342 	    device_get_nameunit(adapter->dev));
1343 	/*
1344 	** Due to a broken design QEMU will fail to properly
1345 	** enable the guest for MSIX unless the vectors in
1346 	** the table are all set up, so we must rewrite the
1347 	** ENABLE in the MSIX control register again at this
1348 	** point to cause it to successfully initialize us.
1349 	*/
1350 	if (adapter->hw.mac.type == ixgbe_mac_82599_vf) {
1351 		int msix_ctrl;
1352 		pci_find_cap(dev, PCIY_MSIX, &rid);
1353 		rid += PCIR_MSIX_CTRL;
1354 		msix_ctrl = pci_read_config(dev, rid, 2);
1355 		msix_ctrl |= PCIM_MSIXCTRL_MSIX_ENABLE;
1356 		pci_write_config(dev, rid, msix_ctrl, 2);
1357 	}
1358 
1359 	return (0);
1360 }
1361 
1362 /*
1363  * Setup MSIX resources, note that the VF
1364  * device MUST use MSIX, there is no fallback.
1365  */
1366 static int
1367 ixv_setup_msix(struct adapter *adapter)
1368 {
1369 	device_t dev = adapter->dev;
1370 	int rid, want, msgs;
1371 
1372 
1373 	/* Must have at least 2 MSIX vectors */
1374 	msgs = pci_msix_count(dev);
1375 	if (msgs < 2)
1376 		goto out;
1377 	rid = PCIR_BAR(3);
1378 	adapter->msix_mem = bus_alloc_resource_any(dev,
1379 	    SYS_RES_MEMORY, &rid, RF_ACTIVE);
1380        	if (adapter->msix_mem == NULL) {
1381 		device_printf(adapter->dev,
1382 		    "Unable to map MSIX table \n");
1383 		goto out;
1384 	}
1385 
1386 	/*
1387 	** Want vectors for the queues,
1388 	** plus an additional for mailbox.
1389 	*/
1390 	want = adapter->num_queues + 1;
1391 	if (want > msgs) {
1392 		want = msgs;
1393 		adapter->num_queues = msgs - 1;
1394 	} else
1395 		msgs = want;
1396 	if ((pci_alloc_msix(dev, &msgs) == 0) && (msgs == want)) {
1397                	device_printf(adapter->dev,
1398 		    "Using MSIX interrupts with %d vectors\n", want);
1399 		return (want);
1400 	}
1401 	/* Release in case alloc was insufficient */
1402 	pci_release_msi(dev);
1403 out:
1404        	if (adapter->msix_mem != NULL) {
1405 		bus_release_resource(dev, SYS_RES_MEMORY,
1406 		    rid, adapter->msix_mem);
1407 		adapter->msix_mem = NULL;
1408 	}
1409 	device_printf(adapter->dev,"MSIX config error\n");
1410 	return (ENXIO);
1411 }
1412 
1413 
1414 static int
1415 ixv_allocate_pci_resources(struct adapter *adapter)
1416 {
1417 	int             rid;
1418 	device_t        dev = adapter->dev;
1419 
1420 	rid = PCIR_BAR(0);
1421 	adapter->pci_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
1422 	    &rid, RF_ACTIVE);
1423 
1424 	if (!(adapter->pci_mem)) {
1425 		device_printf(dev, "Unable to allocate bus resource: memory\n");
1426 		return (ENXIO);
1427 	}
1428 
1429 	adapter->osdep.mem_bus_space_tag =
1430 		rman_get_bustag(adapter->pci_mem);
1431 	adapter->osdep.mem_bus_space_handle =
1432 		rman_get_bushandle(adapter->pci_mem);
1433 	adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
1434 
1435 	/* Pick up the tuneable queues */
1436 	adapter->num_queues = ixv_num_queues;
1437 	adapter->hw.back = adapter;
1438 
1439 	/*
1440 	** Now setup MSI/X, should
1441 	** return us the number of
1442 	** configured vectors.
1443 	*/
1444 	adapter->msix = ixv_setup_msix(adapter);
1445 	if (adapter->msix == ENXIO)
1446 		return (ENXIO);
1447 	else
1448 		return (0);
1449 }
1450 
1451 static void
1452 ixv_free_pci_resources(struct adapter * adapter)
1453 {
1454 	struct 		ix_queue *que = adapter->queues;
1455 	device_t	dev = adapter->dev;
1456 	int		rid, memrid;
1457 
1458 	memrid = PCIR_BAR(MSIX_82598_BAR);
1459 
1460 	/*
1461 	** There is a slight possibility of a failure mode
1462 	** in attach that will result in entering this function
1463 	** before interrupt resources have been initialized, and
1464 	** in that case we do not want to execute the loops below
1465 	** We can detect this reliably by the state of the adapter
1466 	** res pointer.
1467 	*/
1468 	if (adapter->res == NULL)
1469 		goto mem;
1470 
1471 	/*
1472 	**  Release all msix queue resources:
1473 	*/
1474 	for (int i = 0; i < adapter->num_queues; i++, que++) {
1475 		rid = que->msix + 1;
1476 		if (que->tag != NULL) {
1477 			bus_teardown_intr(dev, que->res, que->tag);
1478 			que->tag = NULL;
1479 		}
1480 		if (que->res != NULL)
1481 			bus_release_resource(dev, SYS_RES_IRQ, rid, que->res);
1482 	}
1483 
1484 
1485 	/* Clean the Legacy or Link interrupt last */
1486 	if (adapter->vector) /* we are doing MSIX */
1487 		rid = adapter->vector + 1;
1488 	else
1489 		(adapter->msix != 0) ? (rid = 1):(rid = 0);
1490 
1491 	if (adapter->tag != NULL) {
1492 		bus_teardown_intr(dev, adapter->res, adapter->tag);
1493 		adapter->tag = NULL;
1494 	}
1495 	if (adapter->res != NULL)
1496 		bus_release_resource(dev, SYS_RES_IRQ, rid, adapter->res);
1497 
1498 mem:
1499 	if (adapter->msix)
1500 		pci_release_msi(dev);
1501 
1502 	if (adapter->msix_mem != NULL)
1503 		bus_release_resource(dev, SYS_RES_MEMORY,
1504 		    memrid, adapter->msix_mem);
1505 
1506 	if (adapter->pci_mem != NULL)
1507 		bus_release_resource(dev, SYS_RES_MEMORY,
1508 		    PCIR_BAR(0), adapter->pci_mem);
1509 
1510 	return;
1511 }
1512 
1513 /*********************************************************************
1514  *
1515  *  Setup networking device structure and register an interface.
1516  *
1517  **********************************************************************/
1518 static void
1519 ixv_setup_interface(device_t dev, struct adapter *adapter)
1520 {
1521 	struct ifnet   *ifp;
1522 
1523 	INIT_DEBUGOUT("ixv_setup_interface: begin");
1524 
1525 	ifp = adapter->ifp = if_alloc(IFT_ETHER);
1526 	if (ifp == NULL)
1527 		panic("%s: can not if_alloc()\n", device_get_nameunit(dev));
1528 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
1529 	ifp->if_baudrate = 1000000000;
1530 	ifp->if_init = ixv_init;
1531 	ifp->if_softc = adapter;
1532 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1533 	ifp->if_ioctl = ixv_ioctl;
1534 #if __FreeBSD_version >= 800000
1535 	ifp->if_transmit = ixgbe_mq_start;
1536 	ifp->if_qflush = ixgbe_qflush;
1537 #else
1538 	ifp->if_start = ixgbe_start;
1539 #endif
1540 	ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 2;
1541 
1542 	ether_ifattach(ifp, adapter->hw.mac.addr);
1543 
1544 	adapter->max_frame_size =
1545 	    ifp->if_mtu + IXGBE_MTU_HDR_VLAN;
1546 
1547 	/*
1548 	 * Tell the upper layer(s) we support long frames.
1549 	 */
1550 	ifp->if_hdrlen = sizeof(struct ether_vlan_header);
1551 
1552 	ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO4 | IFCAP_VLAN_HWCSUM;
1553 	ifp->if_capabilities |= IFCAP_JUMBO_MTU;
1554 	ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
1555 			     |  IFCAP_VLAN_HWTSO
1556 			     |  IFCAP_VLAN_MTU;
1557 	ifp->if_capabilities |= IFCAP_LRO;
1558 	ifp->if_capenable = ifp->if_capabilities;
1559 
1560 	/*
1561 	 * Specify the media types supported by this adapter and register
1562 	 * callbacks to update media and link information
1563 	 */
1564 	ifmedia_init(&adapter->media, IFM_IMASK, ixv_media_change,
1565 		     ixv_media_status);
1566 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
1567 	ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
1568 
1569 	return;
1570 }
1571 
1572 static void
1573 ixv_config_link(struct adapter *adapter)
1574 {
1575 	struct ixgbe_hw *hw = &adapter->hw;
1576 	u32	autoneg;
1577 
1578 	if (hw->mac.ops.check_link)
1579 		hw->mac.ops.check_link(hw, &autoneg,
1580 		    &adapter->link_up, FALSE);
1581 }
1582 
1583 
1584 /*********************************************************************
1585  *
1586  *  Enable transmit unit.
1587  *
1588  **********************************************************************/
1589 static void
1590 ixv_initialize_transmit_units(struct adapter *adapter)
1591 {
1592 	struct tx_ring	*txr = adapter->tx_rings;
1593 	struct ixgbe_hw	*hw = &adapter->hw;
1594 
1595 
1596 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
1597 		u64	tdba = txr->txdma.dma_paddr;
1598 		u32	txctrl, txdctl;
1599 
1600 		/* Set WTHRESH to 8, burst writeback */
1601 		txdctl = IXGBE_READ_REG(hw, IXGBE_VFTXDCTL(i));
1602 		txdctl |= (8 << 16);
1603 		IXGBE_WRITE_REG(hw, IXGBE_VFTXDCTL(i), txdctl);
1604 
1605 		/* Set the HW Tx Head and Tail indices */
1606 	    	IXGBE_WRITE_REG(&adapter->hw, IXGBE_VFTDH(i), 0);
1607 	    	IXGBE_WRITE_REG(&adapter->hw, IXGBE_VFTDT(i), 0);
1608 
1609 		/* Set Tx Tail register */
1610 		txr->tail = IXGBE_VFTDT(i);
1611 
1612 		/* Set Ring parameters */
1613 		IXGBE_WRITE_REG(hw, IXGBE_VFTDBAL(i),
1614 		       (tdba & 0x00000000ffffffffULL));
1615 		IXGBE_WRITE_REG(hw, IXGBE_VFTDBAH(i), (tdba >> 32));
1616 		IXGBE_WRITE_REG(hw, IXGBE_VFTDLEN(i),
1617 		    adapter->num_tx_desc *
1618 		    sizeof(struct ixgbe_legacy_tx_desc));
1619 		txctrl = IXGBE_READ_REG(hw, IXGBE_VFDCA_TXCTRL(i));
1620 		txctrl &= ~IXGBE_DCA_TXCTRL_DESC_WRO_EN;
1621 		IXGBE_WRITE_REG(hw, IXGBE_VFDCA_TXCTRL(i), txctrl);
1622 
1623 		/* Now enable */
1624 		txdctl = IXGBE_READ_REG(hw, IXGBE_VFTXDCTL(i));
1625 		txdctl |= IXGBE_TXDCTL_ENABLE;
1626 		IXGBE_WRITE_REG(hw, IXGBE_VFTXDCTL(i), txdctl);
1627 	}
1628 
1629 	return;
1630 }
1631 
1632 
1633 /*********************************************************************
1634  *
1635  *  Setup receive registers and features.
1636  *
1637  **********************************************************************/
1638 #define IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT 2
1639 
1640 static void
1641 ixv_initialize_receive_units(struct adapter *adapter)
1642 {
1643 	struct	rx_ring	*rxr = adapter->rx_rings;
1644 	struct ixgbe_hw	*hw = &adapter->hw;
1645 	struct ifnet	*ifp = adapter->ifp;
1646 	u32		bufsz, rxcsum, psrtype;
1647 
1648 	if (ifp->if_mtu > ETHERMTU)
1649 		bufsz = 4096 >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
1650 	else
1651 		bufsz = 2048 >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
1652 
1653 	psrtype = IXGBE_PSRTYPE_TCPHDR | IXGBE_PSRTYPE_UDPHDR |
1654 	    IXGBE_PSRTYPE_IPV4HDR | IXGBE_PSRTYPE_IPV6HDR |
1655 	    IXGBE_PSRTYPE_L2HDR;
1656 
1657 	IXGBE_WRITE_REG(hw, IXGBE_VFPSRTYPE, psrtype);
1658 
1659 	/* Tell PF our max_frame size */
1660 	ixgbevf_rlpml_set_vf(hw, adapter->max_frame_size);
1661 
1662 	for (int i = 0; i < adapter->num_queues; i++, rxr++) {
1663 		u64 rdba = rxr->rxdma.dma_paddr;
1664 		u32 reg, rxdctl;
1665 
1666 		/* Disable the queue */
1667 		rxdctl = IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(i));
1668 		rxdctl &= ~IXGBE_RXDCTL_ENABLE;
1669 		IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(i), rxdctl);
1670 		for (int j = 0; j < 10; j++) {
1671 			if (IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(i)) &
1672 			    IXGBE_RXDCTL_ENABLE)
1673 				msec_delay(1);
1674 			else
1675 				break;
1676 		}
1677 		wmb();
1678 		/* Setup the Base and Length of the Rx Descriptor Ring */
1679 		IXGBE_WRITE_REG(hw, IXGBE_VFRDBAL(i),
1680 		    (rdba & 0x00000000ffffffffULL));
1681 		IXGBE_WRITE_REG(hw, IXGBE_VFRDBAH(i),
1682 		    (rdba >> 32));
1683 		IXGBE_WRITE_REG(hw, IXGBE_VFRDLEN(i),
1684 		    adapter->num_rx_desc * sizeof(union ixgbe_adv_rx_desc));
1685 
1686 		/* Reset the ring indices */
1687 		IXGBE_WRITE_REG(hw, IXGBE_VFRDH(rxr->me), 0);
1688 		IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me), 0);
1689 
1690 		/* Set up the SRRCTL register */
1691 		reg = IXGBE_READ_REG(hw, IXGBE_VFSRRCTL(i));
1692 		reg &= ~IXGBE_SRRCTL_BSIZEHDR_MASK;
1693 		reg &= ~IXGBE_SRRCTL_BSIZEPKT_MASK;
1694 		reg |= bufsz;
1695 		reg |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
1696 		IXGBE_WRITE_REG(hw, IXGBE_VFSRRCTL(i), reg);
1697 
1698 		/* Capture Rx Tail index */
1699 		rxr->tail = IXGBE_VFRDT(rxr->me);
1700 
1701 		/* Do the queue enabling last */
1702 		rxdctl |= IXGBE_RXDCTL_ENABLE | IXGBE_RXDCTL_VME;
1703 		IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(i), rxdctl);
1704 		for (int k = 0; k < 10; k++) {
1705 			if (IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(i)) &
1706 			    IXGBE_RXDCTL_ENABLE)
1707 				break;
1708 			else
1709 				msec_delay(1);
1710 		}
1711 		wmb();
1712 
1713 		/* Set the Tail Pointer */
1714 #ifdef DEV_NETMAP
1715 		/*
1716 		 * In netmap mode, we must preserve the buffers made
1717 		 * available to userspace before the if_init()
1718 		 * (this is true by default on the TX side, because
1719 		 * init makes all buffers available to userspace).
1720 		 *
1721 		 * netmap_reset() and the device specific routines
1722 		 * (e.g. ixgbe_setup_receive_rings()) map these
1723 		 * buffers at the end of the NIC ring, so here we
1724 		 * must set the RDT (tail) register to make sure
1725 		 * they are not overwritten.
1726 		 *
1727 		 * In this driver the NIC ring starts at RDH = 0,
1728 		 * RDT points to the last slot available for reception (?),
1729 		 * so RDT = num_rx_desc - 1 means the whole ring is available.
1730 		 */
1731 		if (ifp->if_capenable & IFCAP_NETMAP) {
1732 			struct netmap_adapter *na = NA(adapter->ifp);
1733 			struct netmap_kring *kring = &na->rx_rings[i];
1734 			int t = na->num_rx_desc - 1 - nm_kr_rxspace(kring);
1735 
1736 			IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me), t);
1737 		} else
1738 #endif /* DEV_NETMAP */
1739 			IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me),
1740 			    adapter->num_rx_desc - 1);
1741 	}
1742 
1743 	rxcsum = IXGBE_READ_REG(hw, IXGBE_RXCSUM);
1744 
1745 	if (ifp->if_capenable & IFCAP_RXCSUM)
1746 		rxcsum |= IXGBE_RXCSUM_PCSD;
1747 
1748 	if (!(rxcsum & IXGBE_RXCSUM_PCSD))
1749 		rxcsum |= IXGBE_RXCSUM_IPPCSE;
1750 
1751 	IXGBE_WRITE_REG(hw, IXGBE_RXCSUM, rxcsum);
1752 
1753 	return;
1754 }
1755 
1756 static void
1757 ixv_setup_vlan_support(struct adapter *adapter)
1758 {
1759 	struct ixgbe_hw *hw = &adapter->hw;
1760 	u32		ctrl, vid, vfta, retry;
1761 	struct rx_ring	*rxr;
1762 
1763 	/*
1764 	** We get here thru init_locked, meaning
1765 	** a soft reset, this has already cleared
1766 	** the VFTA and other state, so if there
1767 	** have been no vlan's registered do nothing.
1768 	*/
1769 	if (adapter->num_vlans == 0)
1770 		return;
1771 
1772 	/* Enable the queues */
1773 	for (int i = 0; i < adapter->num_queues; i++) {
1774 		ctrl = IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(i));
1775 		ctrl |= IXGBE_RXDCTL_VME;
1776 		IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(i), ctrl);
1777 		/*
1778 		 * Let Rx path know that it needs to store VLAN tag
1779 		 * as part of extra mbuf info.
1780 		 */
1781 		rxr = &adapter->rx_rings[i];
1782 		rxr->vtag_strip = TRUE;
1783 	}
1784 
1785 	/*
1786 	** A soft reset zero's out the VFTA, so
1787 	** we need to repopulate it now.
1788 	*/
1789 	for (int i = 0; i < IXGBE_VFTA_SIZE; i++) {
1790 		if (ixv_shadow_vfta[i] == 0)
1791 			continue;
1792 		vfta = ixv_shadow_vfta[i];
1793 		/*
1794 		** Reconstruct the vlan id's
1795 		** based on the bits set in each
1796 		** of the array ints.
1797 		*/
1798 		for (int j = 0; j < 32; j++) {
1799 			retry = 0;
1800 			if ((vfta & (1 << j)) == 0)
1801 				continue;
1802 			vid = (i * 32) + j;
1803 			/* Call the shared code mailbox routine */
1804 			while (ixgbe_set_vfta(hw, vid, 0, TRUE)) {
1805 				if (++retry > 5)
1806 					break;
1807 			}
1808 		}
1809 	}
1810 }
1811 
1812 /*
1813 ** This routine is run via an vlan config EVENT,
1814 ** it enables us to use the HW Filter table since
1815 ** we can get the vlan id. This just creates the
1816 ** entry in the soft version of the VFTA, init will
1817 ** repopulate the real table.
1818 */
1819 static void
1820 ixv_register_vlan(void *arg, struct ifnet *ifp, u16 vtag)
1821 {
1822 	struct adapter	*adapter = ifp->if_softc;
1823 	u16		index, bit;
1824 
1825 	if (ifp->if_softc != arg) /* Not our event */
1826 		return;
1827 
1828 	if ((vtag == 0) || (vtag > 4095)) /* Invalid */
1829 		return;
1830 
1831 	IXGBE_CORE_LOCK(adapter);
1832 	index = (vtag >> 5) & 0x7F;
1833 	bit = vtag & 0x1F;
1834 	ixv_shadow_vfta[index] |= (1 << bit);
1835 	++adapter->num_vlans;
1836 	/* Re-init to load the changes */
1837 	ixv_init_locked(adapter);
1838 	IXGBE_CORE_UNLOCK(adapter);
1839 }
1840 
1841 /*
1842 ** This routine is run via an vlan
1843 ** unconfig EVENT, remove our entry
1844 ** in the soft vfta.
1845 */
1846 static void
1847 ixv_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag)
1848 {
1849 	struct adapter	*adapter = ifp->if_softc;
1850 	u16		index, bit;
1851 
1852 	if (ifp->if_softc !=  arg)
1853 		return;
1854 
1855 	if ((vtag == 0) || (vtag > 4095))	/* Invalid */
1856 		return;
1857 
1858 	IXGBE_CORE_LOCK(adapter);
1859 	index = (vtag >> 5) & 0x7F;
1860 	bit = vtag & 0x1F;
1861 	ixv_shadow_vfta[index] &= ~(1 << bit);
1862 	--adapter->num_vlans;
1863 	/* Re-init to load the changes */
1864 	ixv_init_locked(adapter);
1865 	IXGBE_CORE_UNLOCK(adapter);
1866 }
1867 
1868 static void
1869 ixv_enable_intr(struct adapter *adapter)
1870 {
1871 	struct ixgbe_hw *hw = &adapter->hw;
1872 	struct ix_queue *que = adapter->queues;
1873 	u32 mask = (IXGBE_EIMS_ENABLE_MASK & ~IXGBE_EIMS_RTX_QUEUE);
1874 
1875 
1876 	IXGBE_WRITE_REG(hw, IXGBE_VTEIMS, mask);
1877 
1878 	mask = IXGBE_EIMS_ENABLE_MASK;
1879 	mask &= ~(IXGBE_EIMS_OTHER | IXGBE_EIMS_LSC);
1880 	IXGBE_WRITE_REG(hw, IXGBE_VTEIAC, mask);
1881 
1882         for (int i = 0; i < adapter->num_queues; i++, que++)
1883 		ixv_enable_queue(adapter, que->msix);
1884 
1885 	IXGBE_WRITE_FLUSH(hw);
1886 
1887 	return;
1888 }
1889 
1890 static void
1891 ixv_disable_intr(struct adapter *adapter)
1892 {
1893 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_VTEIAC, 0);
1894 	IXGBE_WRITE_REG(&adapter->hw, IXGBE_VTEIMC, ~0);
1895 	IXGBE_WRITE_FLUSH(&adapter->hw);
1896 	return;
1897 }
1898 
1899 /*
1900 ** Setup the correct IVAR register for a particular MSIX interrupt
1901 **  - entry is the register array entry
1902 **  - vector is the MSIX vector for this queue
1903 **  - type is RX/TX/MISC
1904 */
1905 static void
1906 ixv_set_ivar(struct adapter *adapter, u8 entry, u8 vector, s8 type)
1907 {
1908 	struct ixgbe_hw *hw = &adapter->hw;
1909 	u32 ivar, index;
1910 
1911 	vector |= IXGBE_IVAR_ALLOC_VAL;
1912 
1913 	if (type == -1) { /* MISC IVAR */
1914 		ivar = IXGBE_READ_REG(hw, IXGBE_VTIVAR_MISC);
1915 		ivar &= ~0xFF;
1916 		ivar |= vector;
1917 		IXGBE_WRITE_REG(hw, IXGBE_VTIVAR_MISC, ivar);
1918 	} else {	/* RX/TX IVARS */
1919 		index = (16 * (entry & 1)) + (8 * type);
1920 		ivar = IXGBE_READ_REG(hw, IXGBE_VTIVAR(entry >> 1));
1921 		ivar &= ~(0xFF << index);
1922 		ivar |= (vector << index);
1923 		IXGBE_WRITE_REG(hw, IXGBE_VTIVAR(entry >> 1), ivar);
1924 	}
1925 }
1926 
1927 static void
1928 ixv_configure_ivars(struct adapter *adapter)
1929 {
1930 	struct  ix_queue *que = adapter->queues;
1931 
1932         for (int i = 0; i < adapter->num_queues; i++, que++) {
1933 		/* First the RX queue entry */
1934                 ixv_set_ivar(adapter, i, que->msix, 0);
1935 		/* ... and the TX */
1936 		ixv_set_ivar(adapter, i, que->msix, 1);
1937 		/* Set an initial value in EITR */
1938                 IXGBE_WRITE_REG(&adapter->hw,
1939                     IXGBE_VTEITR(que->msix), IXV_EITR_DEFAULT);
1940 	}
1941 
1942 	/* For the mailbox interrupt */
1943         ixv_set_ivar(adapter, 1, adapter->vector, -1);
1944 }
1945 
1946 
1947 /*
1948 ** Tasklet handler for MSIX MBX interrupts
1949 **  - do outside interrupt since it might sleep
1950 */
1951 static void
1952 ixv_handle_mbx(void *context, int pending)
1953 {
1954 	struct adapter  *adapter = context;
1955 
1956 	ixgbe_check_link(&adapter->hw,
1957 	    &adapter->link_speed, &adapter->link_up, 0);
1958 	ixv_update_link_status(adapter);
1959 }
1960 
1961 /*
1962 ** The VF stats registers never have a truly virgin
1963 ** starting point, so this routine tries to make an
1964 ** artificial one, marking ground zero on attach as
1965 ** it were.
1966 */
1967 static void
1968 ixv_save_stats(struct adapter *adapter)
1969 {
1970 	if (adapter->stats.vf.vfgprc || adapter->stats.vf.vfgptc) {
1971 		adapter->stats.vf.saved_reset_vfgprc +=
1972 		    adapter->stats.vf.vfgprc - adapter->stats.vf.base_vfgprc;
1973 		adapter->stats.vf.saved_reset_vfgptc +=
1974 		    adapter->stats.vf.vfgptc - adapter->stats.vf.base_vfgptc;
1975 		adapter->stats.vf.saved_reset_vfgorc +=
1976 		    adapter->stats.vf.vfgorc - adapter->stats.vf.base_vfgorc;
1977 		adapter->stats.vf.saved_reset_vfgotc +=
1978 		    adapter->stats.vf.vfgotc - adapter->stats.vf.base_vfgotc;
1979 		adapter->stats.vf.saved_reset_vfmprc +=
1980 		    adapter->stats.vf.vfmprc - adapter->stats.vf.base_vfmprc;
1981 	}
1982 }
1983 
1984 static void
1985 ixv_init_stats(struct adapter *adapter)
1986 {
1987 	struct ixgbe_hw *hw = &adapter->hw;
1988 
1989 	adapter->stats.vf.last_vfgprc = IXGBE_READ_REG(hw, IXGBE_VFGPRC);
1990 	adapter->stats.vf.last_vfgorc = IXGBE_READ_REG(hw, IXGBE_VFGORC_LSB);
1991 	adapter->stats.vf.last_vfgorc |=
1992 	    (((u64)(IXGBE_READ_REG(hw, IXGBE_VFGORC_MSB))) << 32);
1993 
1994 	adapter->stats.vf.last_vfgptc = IXGBE_READ_REG(hw, IXGBE_VFGPTC);
1995 	adapter->stats.vf.last_vfgotc = IXGBE_READ_REG(hw, IXGBE_VFGOTC_LSB);
1996 	adapter->stats.vf.last_vfgotc |=
1997 	    (((u64)(IXGBE_READ_REG(hw, IXGBE_VFGOTC_MSB))) << 32);
1998 
1999 	adapter->stats.vf.last_vfmprc = IXGBE_READ_REG(hw, IXGBE_VFMPRC);
2000 
2001 	adapter->stats.vf.base_vfgprc = adapter->stats.vf.last_vfgprc;
2002 	adapter->stats.vf.base_vfgorc = adapter->stats.vf.last_vfgorc;
2003 	adapter->stats.vf.base_vfgptc = adapter->stats.vf.last_vfgptc;
2004 	adapter->stats.vf.base_vfgotc = adapter->stats.vf.last_vfgotc;
2005 	adapter->stats.vf.base_vfmprc = adapter->stats.vf.last_vfmprc;
2006 }
2007 
2008 #define UPDATE_STAT_32(reg, last, count)		\
2009 {							\
2010 	u32 current = IXGBE_READ_REG(hw, reg);		\
2011 	if (current < last)				\
2012 		count += 0x100000000LL;			\
2013 	last = current;					\
2014 	count &= 0xFFFFFFFF00000000LL;			\
2015 	count |= current;				\
2016 }
2017 
2018 #define UPDATE_STAT_36(lsb, msb, last, count) 		\
2019 {							\
2020 	u64 cur_lsb = IXGBE_READ_REG(hw, lsb);		\
2021 	u64 cur_msb = IXGBE_READ_REG(hw, msb);		\
2022 	u64 current = ((cur_msb << 32) | cur_lsb);	\
2023 	if (current < last)				\
2024 		count += 0x1000000000LL;		\
2025 	last = current;					\
2026 	count &= 0xFFFFFFF000000000LL;			\
2027 	count |= current;				\
2028 }
2029 
2030 /*
2031 ** ixv_update_stats - Update the board statistics counters.
2032 */
2033 void
2034 ixv_update_stats(struct adapter *adapter)
2035 {
2036         struct ixgbe_hw *hw = &adapter->hw;
2037 
2038         UPDATE_STAT_32(IXGBE_VFGPRC, adapter->stats.vf.last_vfgprc,
2039 	    adapter->stats.vf.vfgprc);
2040         UPDATE_STAT_32(IXGBE_VFGPTC, adapter->stats.vf.last_vfgptc,
2041 	    adapter->stats.vf.vfgptc);
2042         UPDATE_STAT_36(IXGBE_VFGORC_LSB, IXGBE_VFGORC_MSB,
2043 	    adapter->stats.vf.last_vfgorc, adapter->stats.vf.vfgorc);
2044         UPDATE_STAT_36(IXGBE_VFGOTC_LSB, IXGBE_VFGOTC_MSB,
2045 	    adapter->stats.vf.last_vfgotc, adapter->stats.vf.vfgotc);
2046         UPDATE_STAT_32(IXGBE_VFMPRC, adapter->stats.vf.last_vfmprc,
2047 	    adapter->stats.vf.vfmprc);
2048 }
2049 
2050 /*
2051  * Add statistic sysctls for the VF.
2052  */
2053 static void
2054 ixv_add_stats_sysctls(struct adapter *adapter)
2055 {
2056 	device_t dev = adapter->dev;
2057 	struct ix_queue *que = &adapter->queues[0];
2058 	struct tx_ring *txr = que->txr;
2059 	struct rx_ring *rxr = que->rxr;
2060 
2061 	struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
2062 	struct sysctl_oid *tree = device_get_sysctl_tree(dev);
2063 	struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
2064 	struct ixgbevf_hw_stats *stats = &adapter->stats.vf;
2065 
2066 	struct sysctl_oid *stat_node, *queue_node;
2067 	struct sysctl_oid_list *stat_list, *queue_list;
2068 
2069 	/* Driver Statistics */
2070 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped",
2071 			CTLFLAG_RD, &adapter->dropped_pkts,
2072 			"Driver dropped packets");
2073 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_failed",
2074 			CTLFLAG_RD, &adapter->mbuf_defrag_failed,
2075 			"m_defrag() failed");
2076 	SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "watchdog_events",
2077 			CTLFLAG_RD, &adapter->watchdog_events,
2078 			"Watchdog timeouts");
2079 
2080 	stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac",
2081 				    CTLFLAG_RD, NULL,
2082 				    "VF Statistics (read from HW registers)");
2083 	stat_list = SYSCTL_CHILDREN(stat_node);
2084 
2085 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_rcvd",
2086 			CTLFLAG_RD, &stats->vfgprc,
2087 			"Good Packets Received");
2088 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_rcvd",
2089 			CTLFLAG_RD, &stats->vfgorc,
2090 			"Good Octets Received");
2091 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_rcvd",
2092 			CTLFLAG_RD, &stats->vfmprc,
2093 			"Multicast Packets Received");
2094 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd",
2095 			CTLFLAG_RD, &stats->vfgptc,
2096 			"Good Packets Transmitted");
2097 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_txd",
2098 			CTLFLAG_RD, &stats->vfgotc,
2099 			"Good Octets Transmitted");
2100 
2101 	queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "que",
2102 				    CTLFLAG_RD, NULL,
2103 				    "Queue Statistics (collected by SW)");
2104 	queue_list = SYSCTL_CHILDREN(queue_node);
2105 
2106 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "irqs",
2107 			CTLFLAG_RD, &(que->irqs),
2108 			"IRQs on queue");
2109 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_irqs",
2110 			CTLFLAG_RD, &(rxr->rx_irq),
2111 			"RX irqs on queue");
2112 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_packets",
2113 			CTLFLAG_RD, &(rxr->rx_packets),
2114 			"RX packets");
2115 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_bytes",
2116 			CTLFLAG_RD, &(rxr->rx_bytes),
2117 			"RX bytes");
2118 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_discarded",
2119 			CTLFLAG_RD, &(rxr->rx_discarded),
2120 			"Discarded RX packets");
2121 
2122 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tx_packets",
2123 			CTLFLAG_RD, &(txr->total_packets),
2124 			"TX Packets");
2125 
2126 	SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tx_no_desc",
2127 			CTLFLAG_RD, &(txr->no_desc_avail),
2128 			"# of times not enough descriptors were available during TX");
2129 }
2130 
2131 static void
2132 ixv_set_sysctl_value(struct adapter *adapter, const char *name,
2133 	const char *description, int *limit, int value)
2134 {
2135 	*limit = value;
2136 	SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
2137 	    SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
2138 	    OID_AUTO, name, CTLFLAG_RW, limit, value, description);
2139 }
2140 
2141 /**********************************************************************
2142  *
2143  *  This routine is called only when em_display_debug_stats is enabled.
2144  *  This routine provides a way to take a look at important statistics
2145  *  maintained by the driver and hardware.
2146  *
2147  **********************************************************************/
2148 static void
2149 ixv_print_debug_info(struct adapter *adapter)
2150 {
2151         device_t dev = adapter->dev;
2152         struct ixgbe_hw         *hw = &adapter->hw;
2153         struct ix_queue         *que = adapter->queues;
2154         struct rx_ring          *rxr;
2155         struct tx_ring          *txr;
2156         struct lro_ctrl         *lro;
2157 
2158         device_printf(dev,"Error Byte Count = %u \n",
2159             IXGBE_READ_REG(hw, IXGBE_ERRBC));
2160 
2161         for (int i = 0; i < adapter->num_queues; i++, que++) {
2162                 txr = que->txr;
2163                 rxr = que->rxr;
2164                 lro = &rxr->lro;
2165                 device_printf(dev,"QUE(%d) IRQs Handled: %lu\n",
2166                     que->msix, (long)que->irqs);
2167                 device_printf(dev,"RX(%d) Packets Received: %lld\n",
2168                     rxr->me, (long long)rxr->rx_packets);
2169                 device_printf(dev,"RX(%d) Bytes Received: %lu\n",
2170                     rxr->me, (long)rxr->rx_bytes);
2171                 device_printf(dev,"RX(%d) LRO Queued= %lld\n",
2172                     rxr->me, (long long)lro->lro_queued);
2173                 device_printf(dev,"RX(%d) LRO Flushed= %lld\n",
2174                     rxr->me, (long long)lro->lro_flushed);
2175                 device_printf(dev,"TX(%d) Packets Sent: %lu\n",
2176                     txr->me, (long)txr->total_packets);
2177                 device_printf(dev,"TX(%d) NO Desc Avail: %lu\n",
2178                     txr->me, (long)txr->no_desc_avail);
2179         }
2180 
2181         device_printf(dev,"MBX IRQ Handled: %lu\n",
2182             (long)adapter->link_irq);
2183         return;
2184 }
2185 
2186 static int
2187 ixv_sysctl_debug(SYSCTL_HANDLER_ARGS)
2188 {
2189 	int error, result;
2190 	struct adapter *adapter;
2191 
2192 	result = -1;
2193 	error = sysctl_handle_int(oidp, &result, 0, req);
2194 
2195 	if (error || !req->newptr)
2196 		return (error);
2197 
2198 	if (result == 1) {
2199 		adapter = (struct adapter *) arg1;
2200 		ixv_print_debug_info(adapter);
2201 	}
2202 	return error;
2203 }
2204 
2205