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