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