1 /****************************************************************************** 2 3 Copyright (c) 2001-2011, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Redistributions in binary form must reproduce the above copyright 13 notice, this list of conditions and the following disclaimer in the 14 documentation and/or other materials provided with the distribution. 15 16 3. Neither the name of the Intel Corporation nor the names of its 17 contributors may be used to endorse or promote products derived from 18 this software without specific prior written permission. 19 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32 ******************************************************************************/ 33 /*$FreeBSD$*/ 34 35 #ifdef HAVE_KERNEL_OPTION_HEADERS 36 #include "opt_device_polling.h" 37 #include "opt_inet.h" 38 #endif 39 40 #include <sys/param.h> 41 #include <sys/systm.h> 42 #if __FreeBSD_version >= 800000 43 #include <sys/buf_ring.h> 44 #endif 45 #include <sys/bus.h> 46 #include <sys/endian.h> 47 #include <sys/kernel.h> 48 #include <sys/kthread.h> 49 #include <sys/malloc.h> 50 #include <sys/mbuf.h> 51 #include <sys/module.h> 52 #include <sys/rman.h> 53 #include <sys/socket.h> 54 #include <sys/sockio.h> 55 #include <sys/sysctl.h> 56 #include <sys/taskqueue.h> 57 #include <sys/eventhandler.h> 58 #include <machine/bus.h> 59 #include <machine/resource.h> 60 61 #include <net/bpf.h> 62 #include <net/ethernet.h> 63 #include <net/if.h> 64 #include <net/if_arp.h> 65 #include <net/if_dl.h> 66 #include <net/if_media.h> 67 68 #include <net/if_types.h> 69 #include <net/if_vlan_var.h> 70 71 #include <netinet/in_systm.h> 72 #include <netinet/in.h> 73 #include <netinet/if_ether.h> 74 #include <netinet/ip.h> 75 #include <netinet/ip6.h> 76 #include <netinet/tcp.h> 77 #include <netinet/udp.h> 78 79 #include <machine/in_cksum.h> 80 #include <dev/led/led.h> 81 #include <dev/pci/pcivar.h> 82 #include <dev/pci/pcireg.h> 83 84 #include "e1000_api.h" 85 #include "e1000_82571.h" 86 #include "if_em.h" 87 88 /********************************************************************* 89 * Set this to one to display debug statistics 90 *********************************************************************/ 91 int em_display_debug_stats = 0; 92 93 /********************************************************************* 94 * Driver version: 95 *********************************************************************/ 96 char em_driver_version[] = "7.2.3"; 97 98 /********************************************************************* 99 * PCI Device ID Table 100 * 101 * Used by probe to select devices to load on 102 * Last field stores an index into e1000_strings 103 * Last entry must be all 0s 104 * 105 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index } 106 *********************************************************************/ 107 108 static em_vendor_info_t em_vendor_info_array[] = 109 { 110 /* Intel(R) PRO/1000 Network Connection */ 111 { 0x8086, E1000_DEV_ID_82571EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 112 { 0x8086, E1000_DEV_ID_82571EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 113 { 0x8086, E1000_DEV_ID_82571EB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 114 { 0x8086, E1000_DEV_ID_82571EB_SERDES_DUAL, 115 PCI_ANY_ID, PCI_ANY_ID, 0}, 116 { 0x8086, E1000_DEV_ID_82571EB_SERDES_QUAD, 117 PCI_ANY_ID, PCI_ANY_ID, 0}, 118 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER, 119 PCI_ANY_ID, PCI_ANY_ID, 0}, 120 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LP, 121 PCI_ANY_ID, PCI_ANY_ID, 0}, 122 { 0x8086, E1000_DEV_ID_82571EB_QUAD_FIBER, 123 PCI_ANY_ID, PCI_ANY_ID, 0}, 124 { 0x8086, E1000_DEV_ID_82571PT_QUAD_COPPER, 125 PCI_ANY_ID, PCI_ANY_ID, 0}, 126 { 0x8086, E1000_DEV_ID_82572EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 127 { 0x8086, E1000_DEV_ID_82572EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 128 { 0x8086, E1000_DEV_ID_82572EI_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 129 { 0x8086, E1000_DEV_ID_82572EI, PCI_ANY_ID, PCI_ANY_ID, 0}, 130 131 { 0x8086, E1000_DEV_ID_82573E, PCI_ANY_ID, PCI_ANY_ID, 0}, 132 { 0x8086, E1000_DEV_ID_82573E_IAMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 133 { 0x8086, E1000_DEV_ID_82573L, PCI_ANY_ID, PCI_ANY_ID, 0}, 134 { 0x8086, E1000_DEV_ID_82583V, PCI_ANY_ID, PCI_ANY_ID, 0}, 135 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT, 136 PCI_ANY_ID, PCI_ANY_ID, 0}, 137 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT, 138 PCI_ANY_ID, PCI_ANY_ID, 0}, 139 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT, 140 PCI_ANY_ID, PCI_ANY_ID, 0}, 141 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT, 142 PCI_ANY_ID, PCI_ANY_ID, 0}, 143 { 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 144 { 0x8086, E1000_DEV_ID_ICH8_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 145 { 0x8086, E1000_DEV_ID_ICH8_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0}, 146 { 0x8086, E1000_DEV_ID_ICH8_IFE, PCI_ANY_ID, PCI_ANY_ID, 0}, 147 { 0x8086, E1000_DEV_ID_ICH8_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0}, 148 { 0x8086, E1000_DEV_ID_ICH8_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0}, 149 { 0x8086, E1000_DEV_ID_ICH8_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0}, 150 { 0x8086, E1000_DEV_ID_ICH8_82567V_3, PCI_ANY_ID, PCI_ANY_ID, 0}, 151 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 152 { 0x8086, E1000_DEV_ID_ICH9_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 153 { 0x8086, E1000_DEV_ID_ICH9_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0}, 154 { 0x8086, E1000_DEV_ID_ICH9_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0}, 155 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_V, PCI_ANY_ID, PCI_ANY_ID, 0}, 156 { 0x8086, E1000_DEV_ID_ICH9_IFE, PCI_ANY_ID, PCI_ANY_ID, 0}, 157 { 0x8086, E1000_DEV_ID_ICH9_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0}, 158 { 0x8086, E1000_DEV_ID_ICH9_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0}, 159 { 0x8086, E1000_DEV_ID_ICH9_BM, PCI_ANY_ID, PCI_ANY_ID, 0}, 160 { 0x8086, E1000_DEV_ID_82574L, PCI_ANY_ID, PCI_ANY_ID, 0}, 161 { 0x8086, E1000_DEV_ID_82574LA, PCI_ANY_ID, PCI_ANY_ID, 0}, 162 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0}, 163 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0}, 164 { 0x8086, E1000_DEV_ID_ICH10_R_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0}, 165 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0}, 166 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0}, 167 { 0x8086, E1000_DEV_ID_ICH10_D_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0}, 168 { 0x8086, E1000_DEV_ID_PCH_M_HV_LM, PCI_ANY_ID, PCI_ANY_ID, 0}, 169 { 0x8086, E1000_DEV_ID_PCH_M_HV_LC, PCI_ANY_ID, PCI_ANY_ID, 0}, 170 { 0x8086, E1000_DEV_ID_PCH_D_HV_DM, PCI_ANY_ID, PCI_ANY_ID, 0}, 171 { 0x8086, E1000_DEV_ID_PCH_D_HV_DC, PCI_ANY_ID, PCI_ANY_ID, 0}, 172 { 0x8086, E1000_DEV_ID_PCH2_LV_LM, PCI_ANY_ID, PCI_ANY_ID, 0}, 173 { 0x8086, E1000_DEV_ID_PCH2_LV_V, PCI_ANY_ID, PCI_ANY_ID, 0}, 174 /* required last entry */ 175 { 0, 0, 0, 0, 0} 176 }; 177 178 /********************************************************************* 179 * Table of branding strings for all supported NICs. 180 *********************************************************************/ 181 182 static char *em_strings[] = { 183 "Intel(R) PRO/1000 Network Connection" 184 }; 185 186 /********************************************************************* 187 * Function prototypes 188 *********************************************************************/ 189 static int em_probe(device_t); 190 static int em_attach(device_t); 191 static int em_detach(device_t); 192 static int em_shutdown(device_t); 193 static int em_suspend(device_t); 194 static int em_resume(device_t); 195 static void em_start(struct ifnet *); 196 static void em_start_locked(struct ifnet *, struct tx_ring *); 197 #ifdef EM_MULTIQUEUE 198 static int em_mq_start(struct ifnet *, struct mbuf *); 199 static int em_mq_start_locked(struct ifnet *, 200 struct tx_ring *, struct mbuf *); 201 static void em_qflush(struct ifnet *); 202 #endif 203 static int em_ioctl(struct ifnet *, u_long, caddr_t); 204 static void em_init(void *); 205 static void em_init_locked(struct adapter *); 206 static void em_stop(void *); 207 static void em_media_status(struct ifnet *, struct ifmediareq *); 208 static int em_media_change(struct ifnet *); 209 static void em_identify_hardware(struct adapter *); 210 static int em_allocate_pci_resources(struct adapter *); 211 static int em_allocate_legacy(struct adapter *); 212 static int em_allocate_msix(struct adapter *); 213 static int em_allocate_queues(struct adapter *); 214 static int em_setup_msix(struct adapter *); 215 static void em_free_pci_resources(struct adapter *); 216 static void em_local_timer(void *); 217 static void em_reset(struct adapter *); 218 static int em_setup_interface(device_t, struct adapter *); 219 220 static void em_setup_transmit_structures(struct adapter *); 221 static void em_initialize_transmit_unit(struct adapter *); 222 static int em_allocate_transmit_buffers(struct tx_ring *); 223 static void em_free_transmit_structures(struct adapter *); 224 static void em_free_transmit_buffers(struct tx_ring *); 225 226 static int em_setup_receive_structures(struct adapter *); 227 static int em_allocate_receive_buffers(struct rx_ring *); 228 static void em_initialize_receive_unit(struct adapter *); 229 static void em_free_receive_structures(struct adapter *); 230 static void em_free_receive_buffers(struct rx_ring *); 231 232 static void em_enable_intr(struct adapter *); 233 static void em_disable_intr(struct adapter *); 234 static void em_update_stats_counters(struct adapter *); 235 static void em_add_hw_stats(struct adapter *adapter); 236 static bool em_txeof(struct tx_ring *); 237 static bool em_rxeof(struct rx_ring *, int, int *); 238 #ifndef __NO_STRICT_ALIGNMENT 239 static int em_fixup_rx(struct rx_ring *); 240 #endif 241 static void em_receive_checksum(struct e1000_rx_desc *, struct mbuf *); 242 static void em_transmit_checksum_setup(struct tx_ring *, struct mbuf *, int, 243 struct ip *, u32 *, u32 *); 244 static void em_tso_setup(struct tx_ring *, struct mbuf *, int, struct ip *, 245 struct tcphdr *, u32 *, u32 *); 246 static void em_set_promisc(struct adapter *); 247 static void em_disable_promisc(struct adapter *); 248 static void em_set_multi(struct adapter *); 249 static void em_update_link_status(struct adapter *); 250 static void em_refresh_mbufs(struct rx_ring *, int); 251 static void em_register_vlan(void *, struct ifnet *, u16); 252 static void em_unregister_vlan(void *, struct ifnet *, u16); 253 static void em_setup_vlan_hw_support(struct adapter *); 254 static int em_xmit(struct tx_ring *, struct mbuf **); 255 static int em_dma_malloc(struct adapter *, bus_size_t, 256 struct em_dma_alloc *, int); 257 static void em_dma_free(struct adapter *, struct em_dma_alloc *); 258 static int em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS); 259 static void em_print_nvm_info(struct adapter *); 260 static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS); 261 static void em_print_debug_info(struct adapter *); 262 static int em_is_valid_ether_addr(u8 *); 263 static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS); 264 static void em_add_int_delay_sysctl(struct adapter *, const char *, 265 const char *, struct em_int_delay_info *, int, int); 266 /* Management and WOL Support */ 267 static void em_init_manageability(struct adapter *); 268 static void em_release_manageability(struct adapter *); 269 static void em_get_hw_control(struct adapter *); 270 static void em_release_hw_control(struct adapter *); 271 static void em_get_wakeup(device_t); 272 static void em_enable_wakeup(device_t); 273 static int em_enable_phy_wakeup(struct adapter *); 274 static void em_led_func(void *, int); 275 static void em_disable_aspm(struct adapter *); 276 277 static int em_irq_fast(void *); 278 279 /* MSIX handlers */ 280 static void em_msix_tx(void *); 281 static void em_msix_rx(void *); 282 static void em_msix_link(void *); 283 static void em_handle_tx(void *context, int pending); 284 static void em_handle_rx(void *context, int pending); 285 static void em_handle_link(void *context, int pending); 286 287 static void em_set_sysctl_value(struct adapter *, const char *, 288 const char *, int *, int); 289 290 static __inline void em_rx_discard(struct rx_ring *, int); 291 292 #ifdef DEVICE_POLLING 293 static poll_handler_t em_poll; 294 #endif /* POLLING */ 295 296 /********************************************************************* 297 * FreeBSD Device Interface Entry Points 298 *********************************************************************/ 299 300 static device_method_t em_methods[] = { 301 /* Device interface */ 302 DEVMETHOD(device_probe, em_probe), 303 DEVMETHOD(device_attach, em_attach), 304 DEVMETHOD(device_detach, em_detach), 305 DEVMETHOD(device_shutdown, em_shutdown), 306 DEVMETHOD(device_suspend, em_suspend), 307 DEVMETHOD(device_resume, em_resume), 308 {0, 0} 309 }; 310 311 static driver_t em_driver = { 312 "em", em_methods, sizeof(struct adapter), 313 }; 314 315 devclass_t em_devclass; 316 DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0); 317 MODULE_DEPEND(em, pci, 1, 1, 1); 318 MODULE_DEPEND(em, ether, 1, 1, 1); 319 320 /********************************************************************* 321 * Tunable default values. 322 *********************************************************************/ 323 324 #define EM_TICKS_TO_USECS(ticks) ((1024 * (ticks) + 500) / 1000) 325 #define EM_USECS_TO_TICKS(usecs) ((1000 * (usecs) + 512) / 1024) 326 #define M_TSO_LEN 66 327 328 /* Allow common code without TSO */ 329 #ifndef CSUM_TSO 330 #define CSUM_TSO 0 331 #endif 332 333 static SYSCTL_NODE(_hw, OID_AUTO, em, CTLFLAG_RD, 0, "EM driver parameters"); 334 335 static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV); 336 static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR); 337 TUNABLE_INT("hw.em.tx_int_delay", &em_tx_int_delay_dflt); 338 TUNABLE_INT("hw.em.rx_int_delay", &em_rx_int_delay_dflt); 339 SYSCTL_INT(_hw_em, OID_AUTO, tx_int_delay, CTLFLAG_RDTUN, &em_tx_int_delay_dflt, 340 0, "Default transmit interrupt delay in usecs"); 341 SYSCTL_INT(_hw_em, OID_AUTO, rx_int_delay, CTLFLAG_RDTUN, &em_rx_int_delay_dflt, 342 0, "Default receive interrupt delay in usecs"); 343 344 static int em_tx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_TADV); 345 static int em_rx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_RADV); 346 TUNABLE_INT("hw.em.tx_abs_int_delay", &em_tx_abs_int_delay_dflt); 347 TUNABLE_INT("hw.em.rx_abs_int_delay", &em_rx_abs_int_delay_dflt); 348 SYSCTL_INT(_hw_em, OID_AUTO, tx_abs_int_delay, CTLFLAG_RDTUN, 349 &em_tx_abs_int_delay_dflt, 0, 350 "Default transmit interrupt delay limit in usecs"); 351 SYSCTL_INT(_hw_em, OID_AUTO, rx_abs_int_delay, CTLFLAG_RDTUN, 352 &em_rx_abs_int_delay_dflt, 0, 353 "Default receive interrupt delay limit in usecs"); 354 355 static int em_rxd = EM_DEFAULT_RXD; 356 static int em_txd = EM_DEFAULT_TXD; 357 TUNABLE_INT("hw.em.rxd", &em_rxd); 358 TUNABLE_INT("hw.em.txd", &em_txd); 359 SYSCTL_INT(_hw_em, OID_AUTO, rxd, CTLFLAG_RDTUN, &em_rxd, 0, 360 "Number of receive descriptors per queue"); 361 SYSCTL_INT(_hw_em, OID_AUTO, txd, CTLFLAG_RDTUN, &em_txd, 0, 362 "Number of transmit descriptors per queue"); 363 364 static int em_smart_pwr_down = FALSE; 365 TUNABLE_INT("hw.em.smart_pwr_down", &em_smart_pwr_down); 366 SYSCTL_INT(_hw_em, OID_AUTO, smart_pwr_down, CTLFLAG_RDTUN, &em_smart_pwr_down, 367 0, "Set to true to leave smart power down enabled on newer adapters"); 368 369 /* Controls whether promiscuous also shows bad packets */ 370 static int em_debug_sbp = FALSE; 371 TUNABLE_INT("hw.em.sbp", &em_debug_sbp); 372 SYSCTL_INT(_hw_em, OID_AUTO, sbp, CTLFLAG_RDTUN, &em_debug_sbp, 0, 373 "Show bad packets in promiscuous mode"); 374 375 static int em_enable_msix = TRUE; 376 TUNABLE_INT("hw.em.enable_msix", &em_enable_msix); 377 SYSCTL_INT(_hw_em, OID_AUTO, enable_msix, CTLFLAG_RDTUN, &em_enable_msix, 0, 378 "Enable MSI-X interrupts"); 379 380 /* How many packets rxeof tries to clean at a time */ 381 static int em_rx_process_limit = 100; 382 TUNABLE_INT("hw.em.rx_process_limit", &em_rx_process_limit); 383 SYSCTL_INT(_hw_em, OID_AUTO, rx_process_limit, CTLFLAG_RDTUN, 384 &em_rx_process_limit, 0, 385 "Maximum number of received packets to process at a time, -1 means unlimited"); 386 387 /* Flow control setting - default to FULL */ 388 static int em_fc_setting = e1000_fc_full; 389 TUNABLE_INT("hw.em.fc_setting", &em_fc_setting); 390 SYSCTL_INT(_hw_em, OID_AUTO, fc_setting, CTLFLAG_RDTUN, &em_fc_setting, 0, 391 "Flow control"); 392 393 /* Energy efficient ethernet - default to OFF */ 394 static int eee_setting = 0; 395 TUNABLE_INT("hw.em.eee_setting", &eee_setting); 396 SYSCTL_INT(_hw_em, OID_AUTO, eee_setting, CTLFLAG_RDTUN, &eee_setting, 0, 397 "Enable Energy Efficient Ethernet"); 398 399 /* Global used in WOL setup with multiport cards */ 400 static int global_quad_port_a = 0; 401 402 /********************************************************************* 403 * Device identification routine 404 * 405 * em_probe determines if the driver should be loaded on 406 * adapter based on PCI vendor/device id of the adapter. 407 * 408 * return BUS_PROBE_DEFAULT on success, positive on failure 409 *********************************************************************/ 410 411 static int 412 em_probe(device_t dev) 413 { 414 char adapter_name[60]; 415 u16 pci_vendor_id = 0; 416 u16 pci_device_id = 0; 417 u16 pci_subvendor_id = 0; 418 u16 pci_subdevice_id = 0; 419 em_vendor_info_t *ent; 420 421 INIT_DEBUGOUT("em_probe: begin"); 422 423 pci_vendor_id = pci_get_vendor(dev); 424 if (pci_vendor_id != EM_VENDOR_ID) 425 return (ENXIO); 426 427 pci_device_id = pci_get_device(dev); 428 pci_subvendor_id = pci_get_subvendor(dev); 429 pci_subdevice_id = pci_get_subdevice(dev); 430 431 ent = em_vendor_info_array; 432 while (ent->vendor_id != 0) { 433 if ((pci_vendor_id == ent->vendor_id) && 434 (pci_device_id == ent->device_id) && 435 436 ((pci_subvendor_id == ent->subvendor_id) || 437 (ent->subvendor_id == PCI_ANY_ID)) && 438 439 ((pci_subdevice_id == ent->subdevice_id) || 440 (ent->subdevice_id == PCI_ANY_ID))) { 441 sprintf(adapter_name, "%s %s", 442 em_strings[ent->index], 443 em_driver_version); 444 device_set_desc_copy(dev, adapter_name); 445 return (BUS_PROBE_DEFAULT); 446 } 447 ent++; 448 } 449 450 return (ENXIO); 451 } 452 453 /********************************************************************* 454 * Device initialization routine 455 * 456 * The attach entry point is called when the driver is being loaded. 457 * This routine identifies the type of hardware, allocates all resources 458 * and initializes the hardware. 459 * 460 * return 0 on success, positive on failure 461 *********************************************************************/ 462 463 static int 464 em_attach(device_t dev) 465 { 466 struct adapter *adapter; 467 struct e1000_hw *hw; 468 int error = 0; 469 470 INIT_DEBUGOUT("em_attach: begin"); 471 472 adapter = device_get_softc(dev); 473 adapter->dev = adapter->osdep.dev = dev; 474 hw = &adapter->hw; 475 EM_CORE_LOCK_INIT(adapter, device_get_nameunit(dev)); 476 477 /* SYSCTL stuff */ 478 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 479 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), 480 OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, 481 em_sysctl_nvm_info, "I", "NVM Information"); 482 483 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 484 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), 485 OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, 486 em_sysctl_debug_info, "I", "Debug Information"); 487 488 callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0); 489 490 /* Determine hardware and mac info */ 491 em_identify_hardware(adapter); 492 493 /* Setup PCI resources */ 494 if (em_allocate_pci_resources(adapter)) { 495 device_printf(dev, "Allocation of PCI resources failed\n"); 496 error = ENXIO; 497 goto err_pci; 498 } 499 500 /* 501 ** For ICH8 and family we need to 502 ** map the flash memory, and this 503 ** must happen after the MAC is 504 ** identified 505 */ 506 if ((hw->mac.type == e1000_ich8lan) || 507 (hw->mac.type == e1000_ich9lan) || 508 (hw->mac.type == e1000_ich10lan) || 509 (hw->mac.type == e1000_pchlan) || 510 (hw->mac.type == e1000_pch2lan)) { 511 int rid = EM_BAR_TYPE_FLASH; 512 adapter->flash = bus_alloc_resource_any(dev, 513 SYS_RES_MEMORY, &rid, RF_ACTIVE); 514 if (adapter->flash == NULL) { 515 device_printf(dev, "Mapping of Flash failed\n"); 516 error = ENXIO; 517 goto err_pci; 518 } 519 /* This is used in the shared code */ 520 hw->flash_address = (u8 *)adapter->flash; 521 adapter->osdep.flash_bus_space_tag = 522 rman_get_bustag(adapter->flash); 523 adapter->osdep.flash_bus_space_handle = 524 rman_get_bushandle(adapter->flash); 525 } 526 527 /* Do Shared Code initialization */ 528 if (e1000_setup_init_funcs(hw, TRUE)) { 529 device_printf(dev, "Setup of Shared code failed\n"); 530 error = ENXIO; 531 goto err_pci; 532 } 533 534 e1000_get_bus_info(hw); 535 536 /* Set up some sysctls for the tunable interrupt delays */ 537 em_add_int_delay_sysctl(adapter, "rx_int_delay", 538 "receive interrupt delay in usecs", &adapter->rx_int_delay, 539 E1000_REGISTER(hw, E1000_RDTR), em_rx_int_delay_dflt); 540 em_add_int_delay_sysctl(adapter, "tx_int_delay", 541 "transmit interrupt delay in usecs", &adapter->tx_int_delay, 542 E1000_REGISTER(hw, E1000_TIDV), em_tx_int_delay_dflt); 543 em_add_int_delay_sysctl(adapter, "rx_abs_int_delay", 544 "receive interrupt delay limit in usecs", 545 &adapter->rx_abs_int_delay, 546 E1000_REGISTER(hw, E1000_RADV), 547 em_rx_abs_int_delay_dflt); 548 em_add_int_delay_sysctl(adapter, "tx_abs_int_delay", 549 "transmit interrupt delay limit in usecs", 550 &adapter->tx_abs_int_delay, 551 E1000_REGISTER(hw, E1000_TADV), 552 em_tx_abs_int_delay_dflt); 553 554 /* Sysctl for limiting the amount of work done in the taskqueue */ 555 em_set_sysctl_value(adapter, "rx_processing_limit", 556 "max number of rx packets to process", &adapter->rx_process_limit, 557 em_rx_process_limit); 558 559 /* Sysctl for setting the interface flow control */ 560 em_set_sysctl_value(adapter, "flow_control", 561 "configure flow control", 562 &adapter->fc_setting, em_fc_setting); 563 564 /* 565 * Validate number of transmit and receive descriptors. It 566 * must not exceed hardware maximum, and must be multiple 567 * of E1000_DBA_ALIGN. 568 */ 569 if (((em_txd * sizeof(struct e1000_tx_desc)) % EM_DBA_ALIGN) != 0 || 570 (em_txd > EM_MAX_TXD) || (em_txd < EM_MIN_TXD)) { 571 device_printf(dev, "Using %d TX descriptors instead of %d!\n", 572 EM_DEFAULT_TXD, em_txd); 573 adapter->num_tx_desc = EM_DEFAULT_TXD; 574 } else 575 adapter->num_tx_desc = em_txd; 576 577 if (((em_rxd * sizeof(struct e1000_rx_desc)) % EM_DBA_ALIGN) != 0 || 578 (em_rxd > EM_MAX_RXD) || (em_rxd < EM_MIN_RXD)) { 579 device_printf(dev, "Using %d RX descriptors instead of %d!\n", 580 EM_DEFAULT_RXD, em_rxd); 581 adapter->num_rx_desc = EM_DEFAULT_RXD; 582 } else 583 adapter->num_rx_desc = em_rxd; 584 585 hw->mac.autoneg = DO_AUTO_NEG; 586 hw->phy.autoneg_wait_to_complete = FALSE; 587 hw->phy.autoneg_advertised = AUTONEG_ADV_DEFAULT; 588 589 /* Copper options */ 590 if (hw->phy.media_type == e1000_media_type_copper) { 591 hw->phy.mdix = AUTO_ALL_MODES; 592 hw->phy.disable_polarity_correction = FALSE; 593 hw->phy.ms_type = EM_MASTER_SLAVE; 594 } 595 596 /* 597 * Set the frame limits assuming 598 * standard ethernet sized frames. 599 */ 600 adapter->max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE; 601 adapter->min_frame_size = ETH_ZLEN + ETHERNET_FCS_SIZE; 602 603 /* 604 * This controls when hardware reports transmit completion 605 * status. 606 */ 607 hw->mac.report_tx_early = 1; 608 609 /* 610 ** Get queue/ring memory 611 */ 612 if (em_allocate_queues(adapter)) { 613 error = ENOMEM; 614 goto err_pci; 615 } 616 617 /* Allocate multicast array memory. */ 618 adapter->mta = malloc(sizeof(u8) * ETH_ADDR_LEN * 619 MAX_NUM_MULTICAST_ADDRESSES, M_DEVBUF, M_NOWAIT); 620 if (adapter->mta == NULL) { 621 device_printf(dev, "Can not allocate multicast setup array\n"); 622 error = ENOMEM; 623 goto err_late; 624 } 625 626 /* Check SOL/IDER usage */ 627 if (e1000_check_reset_block(hw)) 628 device_printf(dev, "PHY reset is blocked" 629 " due to SOL/IDER session.\n"); 630 631 /* Sysctl for setting Energy Efficient Ethernet */ 632 em_set_sysctl_value(adapter, "eee_control", 633 "enable Energy Efficient Ethernet", 634 &hw->dev_spec.ich8lan.eee_disable, eee_setting); 635 636 /* 637 ** Start from a known state, this is 638 ** important in reading the nvm and 639 ** mac from that. 640 */ 641 e1000_reset_hw(hw); 642 643 644 /* Make sure we have a good EEPROM before we read from it */ 645 if (e1000_validate_nvm_checksum(hw) < 0) { 646 /* 647 ** Some PCI-E parts fail the first check due to 648 ** the link being in sleep state, call it again, 649 ** if it fails a second time its a real issue. 650 */ 651 if (e1000_validate_nvm_checksum(hw) < 0) { 652 device_printf(dev, 653 "The EEPROM Checksum Is Not Valid\n"); 654 error = EIO; 655 goto err_late; 656 } 657 } 658 659 /* Copy the permanent MAC address out of the EEPROM */ 660 if (e1000_read_mac_addr(hw) < 0) { 661 device_printf(dev, "EEPROM read error while reading MAC" 662 " address\n"); 663 error = EIO; 664 goto err_late; 665 } 666 667 if (!em_is_valid_ether_addr(hw->mac.addr)) { 668 device_printf(dev, "Invalid MAC address\n"); 669 error = EIO; 670 goto err_late; 671 } 672 673 /* 674 ** Do interrupt configuration 675 */ 676 if (adapter->msix > 1) /* Do MSIX */ 677 error = em_allocate_msix(adapter); 678 else /* MSI or Legacy */ 679 error = em_allocate_legacy(adapter); 680 if (error) 681 goto err_late; 682 683 /* 684 * Get Wake-on-Lan and Management info for later use 685 */ 686 em_get_wakeup(dev); 687 688 /* Setup OS specific network interface */ 689 if (em_setup_interface(dev, adapter) != 0) 690 goto err_late; 691 692 em_reset(adapter); 693 694 /* Initialize statistics */ 695 em_update_stats_counters(adapter); 696 697 hw->mac.get_link_status = 1; 698 em_update_link_status(adapter); 699 700 /* Register for VLAN events */ 701 adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config, 702 em_register_vlan, adapter, EVENTHANDLER_PRI_FIRST); 703 adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig, 704 em_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST); 705 706 em_add_hw_stats(adapter); 707 708 /* Non-AMT based hardware can now take control from firmware */ 709 if (adapter->has_manage && !adapter->has_amt) 710 em_get_hw_control(adapter); 711 712 /* Tell the stack that the interface is not active */ 713 adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 714 715 adapter->led_dev = led_create(em_led_func, adapter, 716 device_get_nameunit(dev)); 717 718 INIT_DEBUGOUT("em_attach: end"); 719 720 return (0); 721 722 err_late: 723 em_free_transmit_structures(adapter); 724 em_free_receive_structures(adapter); 725 em_release_hw_control(adapter); 726 if (adapter->ifp != NULL) 727 if_free(adapter->ifp); 728 err_pci: 729 em_free_pci_resources(adapter); 730 free(adapter->mta, M_DEVBUF); 731 EM_CORE_LOCK_DESTROY(adapter); 732 733 return (error); 734 } 735 736 /********************************************************************* 737 * Device removal routine 738 * 739 * The detach entry point is called when the driver is being removed. 740 * This routine stops the adapter and deallocates all the resources 741 * that were allocated for driver operation. 742 * 743 * return 0 on success, positive on failure 744 *********************************************************************/ 745 746 static int 747 em_detach(device_t dev) 748 { 749 struct adapter *adapter = device_get_softc(dev); 750 struct ifnet *ifp = adapter->ifp; 751 752 INIT_DEBUGOUT("em_detach: begin"); 753 754 /* Make sure VLANS are not using driver */ 755 if (adapter->ifp->if_vlantrunk != NULL) { 756 device_printf(dev,"Vlan in use, detach first\n"); 757 return (EBUSY); 758 } 759 760 #ifdef DEVICE_POLLING 761 if (ifp->if_capenable & IFCAP_POLLING) 762 ether_poll_deregister(ifp); 763 #endif 764 765 if (adapter->led_dev != NULL) 766 led_destroy(adapter->led_dev); 767 768 EM_CORE_LOCK(adapter); 769 adapter->in_detach = 1; 770 em_stop(adapter); 771 EM_CORE_UNLOCK(adapter); 772 EM_CORE_LOCK_DESTROY(adapter); 773 774 e1000_phy_hw_reset(&adapter->hw); 775 776 em_release_manageability(adapter); 777 em_release_hw_control(adapter); 778 779 /* Unregister VLAN events */ 780 if (adapter->vlan_attach != NULL) 781 EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach); 782 if (adapter->vlan_detach != NULL) 783 EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach); 784 785 ether_ifdetach(adapter->ifp); 786 callout_drain(&adapter->timer); 787 788 em_free_pci_resources(adapter); 789 bus_generic_detach(dev); 790 if_free(ifp); 791 792 em_free_transmit_structures(adapter); 793 em_free_receive_structures(adapter); 794 795 em_release_hw_control(adapter); 796 free(adapter->mta, M_DEVBUF); 797 798 return (0); 799 } 800 801 /********************************************************************* 802 * 803 * Shutdown entry point 804 * 805 **********************************************************************/ 806 807 static int 808 em_shutdown(device_t dev) 809 { 810 return em_suspend(dev); 811 } 812 813 /* 814 * Suspend/resume device methods. 815 */ 816 static int 817 em_suspend(device_t dev) 818 { 819 struct adapter *adapter = device_get_softc(dev); 820 821 EM_CORE_LOCK(adapter); 822 823 em_release_manageability(adapter); 824 em_release_hw_control(adapter); 825 em_enable_wakeup(dev); 826 827 EM_CORE_UNLOCK(adapter); 828 829 return bus_generic_suspend(dev); 830 } 831 832 static int 833 em_resume(device_t dev) 834 { 835 struct adapter *adapter = device_get_softc(dev); 836 struct ifnet *ifp = adapter->ifp; 837 838 EM_CORE_LOCK(adapter); 839 em_init_locked(adapter); 840 em_init_manageability(adapter); 841 EM_CORE_UNLOCK(adapter); 842 em_start(ifp); 843 844 return bus_generic_resume(dev); 845 } 846 847 848 /********************************************************************* 849 * Transmit entry point 850 * 851 * em_start is called by the stack to initiate a transmit. 852 * The driver will remain in this routine as long as there are 853 * packets to transmit and transmit resources are available. 854 * In case resources are not available stack is notified and 855 * the packet is requeued. 856 **********************************************************************/ 857 858 #ifdef EM_MULTIQUEUE 859 static int 860 em_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m) 861 { 862 struct adapter *adapter = txr->adapter; 863 struct mbuf *next; 864 int err = 0, enq = 0; 865 866 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != 867 IFF_DRV_RUNNING || adapter->link_active == 0) { 868 if (m != NULL) 869 err = drbr_enqueue(ifp, txr->br, m); 870 return (err); 871 } 872 873 /* Call cleanup if number of TX descriptors low */ 874 if (txr->tx_avail <= EM_TX_CLEANUP_THRESHOLD) 875 em_txeof(txr); 876 877 enq = 0; 878 if (m == NULL) { 879 next = drbr_dequeue(ifp, txr->br); 880 } else if (drbr_needs_enqueue(ifp, txr->br)) { 881 if ((err = drbr_enqueue(ifp, txr->br, m)) != 0) 882 return (err); 883 next = drbr_dequeue(ifp, txr->br); 884 } else 885 next = m; 886 887 /* Process the queue */ 888 while (next != NULL) { 889 if ((err = em_xmit(txr, &next)) != 0) { 890 if (next != NULL) 891 err = drbr_enqueue(ifp, txr->br, next); 892 break; 893 } 894 enq++; 895 drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags); 896 ETHER_BPF_MTAP(ifp, next); 897 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) 898 break; 899 if (txr->tx_avail < EM_MAX_SCATTER) { 900 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 901 break; 902 } 903 next = drbr_dequeue(ifp, txr->br); 904 } 905 906 if (enq > 0) { 907 /* Set the watchdog */ 908 txr->queue_status = EM_QUEUE_WORKING; 909 txr->watchdog_time = ticks; 910 } 911 return (err); 912 } 913 914 /* 915 ** Multiqueue capable stack interface 916 */ 917 static int 918 em_mq_start(struct ifnet *ifp, struct mbuf *m) 919 { 920 struct adapter *adapter = ifp->if_softc; 921 struct tx_ring *txr = adapter->tx_rings; 922 int error; 923 924 if (EM_TX_TRYLOCK(txr)) { 925 error = em_mq_start_locked(ifp, txr, m); 926 EM_TX_UNLOCK(txr); 927 } else 928 error = drbr_enqueue(ifp, txr->br, m); 929 930 return (error); 931 } 932 933 /* 934 ** Flush all ring buffers 935 */ 936 static void 937 em_qflush(struct ifnet *ifp) 938 { 939 struct adapter *adapter = ifp->if_softc; 940 struct tx_ring *txr = adapter->tx_rings; 941 struct mbuf *m; 942 943 for (int i = 0; i < adapter->num_queues; i++, txr++) { 944 EM_TX_LOCK(txr); 945 while ((m = buf_ring_dequeue_sc(txr->br)) != NULL) 946 m_freem(m); 947 EM_TX_UNLOCK(txr); 948 } 949 if_qflush(ifp); 950 } 951 952 #endif /* EM_MULTIQUEUE */ 953 954 static void 955 em_start_locked(struct ifnet *ifp, struct tx_ring *txr) 956 { 957 struct adapter *adapter = ifp->if_softc; 958 struct mbuf *m_head; 959 960 EM_TX_LOCK_ASSERT(txr); 961 962 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != 963 IFF_DRV_RUNNING) 964 return; 965 966 if (!adapter->link_active) 967 return; 968 969 while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { 970 /* Call cleanup if number of TX descriptors low */ 971 if (txr->tx_avail <= EM_TX_CLEANUP_THRESHOLD) 972 em_txeof(txr); 973 if (txr->tx_avail < EM_MAX_SCATTER) { 974 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 975 break; 976 } 977 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); 978 if (m_head == NULL) 979 break; 980 /* 981 * Encapsulation can modify our pointer, and or make it 982 * NULL on failure. In that event, we can't requeue. 983 */ 984 if (em_xmit(txr, &m_head)) { 985 if (m_head == NULL) 986 break; 987 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 988 IFQ_DRV_PREPEND(&ifp->if_snd, m_head); 989 break; 990 } 991 992 /* Send a copy of the frame to the BPF listener */ 993 ETHER_BPF_MTAP(ifp, m_head); 994 995 /* Set timeout in case hardware has problems transmitting. */ 996 txr->watchdog_time = ticks; 997 txr->queue_status = EM_QUEUE_WORKING; 998 } 999 1000 return; 1001 } 1002 1003 static void 1004 em_start(struct ifnet *ifp) 1005 { 1006 struct adapter *adapter = ifp->if_softc; 1007 struct tx_ring *txr = adapter->tx_rings; 1008 1009 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1010 EM_TX_LOCK(txr); 1011 em_start_locked(ifp, txr); 1012 EM_TX_UNLOCK(txr); 1013 } 1014 return; 1015 } 1016 1017 /********************************************************************* 1018 * Ioctl entry point 1019 * 1020 * em_ioctl is called when the user wants to configure the 1021 * interface. 1022 * 1023 * return 0 on success, positive on failure 1024 **********************************************************************/ 1025 1026 static int 1027 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data) 1028 { 1029 struct adapter *adapter = ifp->if_softc; 1030 struct ifreq *ifr = (struct ifreq *)data; 1031 #ifdef INET 1032 struct ifaddr *ifa = (struct ifaddr *)data; 1033 #endif 1034 int error = 0; 1035 1036 if (adapter->in_detach) 1037 return (error); 1038 1039 switch (command) { 1040 case SIOCSIFADDR: 1041 #ifdef INET 1042 if (ifa->ifa_addr->sa_family == AF_INET) { 1043 /* 1044 * XXX 1045 * Since resetting hardware takes a very long time 1046 * and results in link renegotiation we only 1047 * initialize the hardware only when it is absolutely 1048 * required. 1049 */ 1050 ifp->if_flags |= IFF_UP; 1051 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { 1052 EM_CORE_LOCK(adapter); 1053 em_init_locked(adapter); 1054 EM_CORE_UNLOCK(adapter); 1055 } 1056 arp_ifinit(ifp, ifa); 1057 } else 1058 #endif 1059 error = ether_ioctl(ifp, command, data); 1060 break; 1061 case SIOCSIFMTU: 1062 { 1063 int max_frame_size; 1064 1065 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)"); 1066 1067 EM_CORE_LOCK(adapter); 1068 switch (adapter->hw.mac.type) { 1069 case e1000_82571: 1070 case e1000_82572: 1071 case e1000_ich9lan: 1072 case e1000_ich10lan: 1073 case e1000_pch2lan: 1074 case e1000_82574: 1075 case e1000_80003es2lan: /* 9K Jumbo Frame size */ 1076 max_frame_size = 9234; 1077 break; 1078 case e1000_pchlan: 1079 max_frame_size = 4096; 1080 break; 1081 /* Adapters that do not support jumbo frames */ 1082 case e1000_82583: 1083 case e1000_ich8lan: 1084 max_frame_size = ETHER_MAX_LEN; 1085 break; 1086 default: 1087 max_frame_size = MAX_JUMBO_FRAME_SIZE; 1088 } 1089 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN - 1090 ETHER_CRC_LEN) { 1091 EM_CORE_UNLOCK(adapter); 1092 error = EINVAL; 1093 break; 1094 } 1095 1096 ifp->if_mtu = ifr->ifr_mtu; 1097 adapter->max_frame_size = 1098 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; 1099 em_init_locked(adapter); 1100 EM_CORE_UNLOCK(adapter); 1101 break; 1102 } 1103 case SIOCSIFFLAGS: 1104 IOCTL_DEBUGOUT("ioctl rcv'd:\ 1105 SIOCSIFFLAGS (Set Interface Flags)"); 1106 EM_CORE_LOCK(adapter); 1107 if (ifp->if_flags & IFF_UP) { 1108 if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) { 1109 if ((ifp->if_flags ^ adapter->if_flags) & 1110 (IFF_PROMISC | IFF_ALLMULTI)) { 1111 em_disable_promisc(adapter); 1112 em_set_promisc(adapter); 1113 } 1114 } else 1115 em_init_locked(adapter); 1116 } else 1117 if (ifp->if_drv_flags & IFF_DRV_RUNNING) 1118 em_stop(adapter); 1119 adapter->if_flags = ifp->if_flags; 1120 EM_CORE_UNLOCK(adapter); 1121 break; 1122 case SIOCADDMULTI: 1123 case SIOCDELMULTI: 1124 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI"); 1125 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1126 EM_CORE_LOCK(adapter); 1127 em_disable_intr(adapter); 1128 em_set_multi(adapter); 1129 #ifdef DEVICE_POLLING 1130 if (!(ifp->if_capenable & IFCAP_POLLING)) 1131 #endif 1132 em_enable_intr(adapter); 1133 EM_CORE_UNLOCK(adapter); 1134 } 1135 break; 1136 case SIOCSIFMEDIA: 1137 /* 1138 ** As the speed/duplex settings are being 1139 ** changed, we need to reset the PHY. 1140 */ 1141 adapter->hw.phy.reset_disable = FALSE; 1142 /* Check SOL/IDER usage */ 1143 EM_CORE_LOCK(adapter); 1144 if (e1000_check_reset_block(&adapter->hw)) { 1145 EM_CORE_UNLOCK(adapter); 1146 device_printf(adapter->dev, "Media change is" 1147 " blocked due to SOL/IDER session.\n"); 1148 break; 1149 } 1150 EM_CORE_UNLOCK(adapter); 1151 /* falls thru */ 1152 case SIOCGIFMEDIA: 1153 IOCTL_DEBUGOUT("ioctl rcv'd: \ 1154 SIOCxIFMEDIA (Get/Set Interface Media)"); 1155 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command); 1156 break; 1157 case SIOCSIFCAP: 1158 { 1159 int mask, reinit; 1160 1161 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)"); 1162 reinit = 0; 1163 mask = ifr->ifr_reqcap ^ ifp->if_capenable; 1164 #ifdef DEVICE_POLLING 1165 if (mask & IFCAP_POLLING) { 1166 if (ifr->ifr_reqcap & IFCAP_POLLING) { 1167 error = ether_poll_register(em_poll, ifp); 1168 if (error) 1169 return (error); 1170 EM_CORE_LOCK(adapter); 1171 em_disable_intr(adapter); 1172 ifp->if_capenable |= IFCAP_POLLING; 1173 EM_CORE_UNLOCK(adapter); 1174 } else { 1175 error = ether_poll_deregister(ifp); 1176 /* Enable interrupt even in error case */ 1177 EM_CORE_LOCK(adapter); 1178 em_enable_intr(adapter); 1179 ifp->if_capenable &= ~IFCAP_POLLING; 1180 EM_CORE_UNLOCK(adapter); 1181 } 1182 } 1183 #endif 1184 if (mask & IFCAP_HWCSUM) { 1185 ifp->if_capenable ^= IFCAP_HWCSUM; 1186 reinit = 1; 1187 } 1188 if (mask & IFCAP_TSO4) { 1189 ifp->if_capenable ^= IFCAP_TSO4; 1190 reinit = 1; 1191 } 1192 if (mask & IFCAP_VLAN_HWTAGGING) { 1193 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; 1194 reinit = 1; 1195 } 1196 if (mask & IFCAP_VLAN_HWFILTER) { 1197 ifp->if_capenable ^= IFCAP_VLAN_HWFILTER; 1198 reinit = 1; 1199 } 1200 if ((mask & IFCAP_WOL) && 1201 (ifp->if_capabilities & IFCAP_WOL) != 0) { 1202 if (mask & IFCAP_WOL_MCAST) 1203 ifp->if_capenable ^= IFCAP_WOL_MCAST; 1204 if (mask & IFCAP_WOL_MAGIC) 1205 ifp->if_capenable ^= IFCAP_WOL_MAGIC; 1206 } 1207 if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING)) 1208 em_init(adapter); 1209 VLAN_CAPABILITIES(ifp); 1210 break; 1211 } 1212 1213 default: 1214 error = ether_ioctl(ifp, command, data); 1215 break; 1216 } 1217 1218 return (error); 1219 } 1220 1221 1222 /********************************************************************* 1223 * Init entry point 1224 * 1225 * This routine is used in two ways. It is used by the stack as 1226 * init entry point in network interface structure. It is also used 1227 * by the driver as a hw/sw initialization routine to get to a 1228 * consistent state. 1229 * 1230 * return 0 on success, positive on failure 1231 **********************************************************************/ 1232 1233 static void 1234 em_init_locked(struct adapter *adapter) 1235 { 1236 struct ifnet *ifp = adapter->ifp; 1237 device_t dev = adapter->dev; 1238 u32 pba; 1239 1240 INIT_DEBUGOUT("em_init: begin"); 1241 1242 EM_CORE_LOCK_ASSERT(adapter); 1243 1244 em_disable_intr(adapter); 1245 callout_stop(&adapter->timer); 1246 1247 /* 1248 * Packet Buffer Allocation (PBA) 1249 * Writing PBA sets the receive portion of the buffer 1250 * the remainder is used for the transmit buffer. 1251 */ 1252 switch (adapter->hw.mac.type) { 1253 /* Total Packet Buffer on these is 48K */ 1254 case e1000_82571: 1255 case e1000_82572: 1256 case e1000_80003es2lan: 1257 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */ 1258 break; 1259 case e1000_82573: /* 82573: Total Packet Buffer is 32K */ 1260 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */ 1261 break; 1262 case e1000_82574: 1263 case e1000_82583: 1264 pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */ 1265 break; 1266 case e1000_ich8lan: 1267 pba = E1000_PBA_8K; 1268 break; 1269 case e1000_ich9lan: 1270 case e1000_ich10lan: 1271 pba = E1000_PBA_10K; 1272 break; 1273 case e1000_pchlan: 1274 case e1000_pch2lan: 1275 pba = E1000_PBA_26K; 1276 break; 1277 default: 1278 if (adapter->max_frame_size > 8192) 1279 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */ 1280 else 1281 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */ 1282 } 1283 1284 INIT_DEBUGOUT1("em_init: pba=%dK",pba); 1285 E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba); 1286 1287 /* Get the latest mac address, User can use a LAA */ 1288 bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr, 1289 ETHER_ADDR_LEN); 1290 1291 /* Put the address into the Receive Address Array */ 1292 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); 1293 1294 /* 1295 * With the 82571 adapter, RAR[0] may be overwritten 1296 * when the other port is reset, we make a duplicate 1297 * in RAR[14] for that eventuality, this assures 1298 * the interface continues to function. 1299 */ 1300 if (adapter->hw.mac.type == e1000_82571) { 1301 e1000_set_laa_state_82571(&adapter->hw, TRUE); 1302 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 1303 E1000_RAR_ENTRIES - 1); 1304 } 1305 1306 /* Initialize the hardware */ 1307 em_reset(adapter); 1308 em_update_link_status(adapter); 1309 1310 /* Setup VLAN support, basic and offload if available */ 1311 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN); 1312 1313 /* Set hardware offload abilities */ 1314 ifp->if_hwassist = 0; 1315 if (ifp->if_capenable & IFCAP_TXCSUM) 1316 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP); 1317 if (ifp->if_capenable & IFCAP_TSO4) 1318 ifp->if_hwassist |= CSUM_TSO; 1319 1320 /* Configure for OS presence */ 1321 em_init_manageability(adapter); 1322 1323 /* Prepare transmit descriptors and buffers */ 1324 em_setup_transmit_structures(adapter); 1325 em_initialize_transmit_unit(adapter); 1326 1327 /* Setup Multicast table */ 1328 em_set_multi(adapter); 1329 1330 /* 1331 ** Figure out the desired mbuf 1332 ** pool for doing jumbos 1333 */ 1334 if (adapter->max_frame_size <= 2048) 1335 adapter->rx_mbuf_sz = MCLBYTES; 1336 else if (adapter->max_frame_size <= 4096) 1337 adapter->rx_mbuf_sz = MJUMPAGESIZE; 1338 else 1339 adapter->rx_mbuf_sz = MJUM9BYTES; 1340 1341 /* Prepare receive descriptors and buffers */ 1342 if (em_setup_receive_structures(adapter)) { 1343 device_printf(dev, "Could not setup receive structures\n"); 1344 em_stop(adapter); 1345 return; 1346 } 1347 em_initialize_receive_unit(adapter); 1348 1349 /* Use real VLAN Filter support? */ 1350 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) { 1351 if (ifp->if_capenable & IFCAP_VLAN_HWFILTER) 1352 /* Use real VLAN Filter support */ 1353 em_setup_vlan_hw_support(adapter); 1354 else { 1355 u32 ctrl; 1356 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL); 1357 ctrl |= E1000_CTRL_VME; 1358 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl); 1359 } 1360 } 1361 1362 /* Don't lose promiscuous settings */ 1363 em_set_promisc(adapter); 1364 1365 ifp->if_drv_flags |= IFF_DRV_RUNNING; 1366 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 1367 1368 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1369 e1000_clear_hw_cntrs_base_generic(&adapter->hw); 1370 1371 /* MSI/X configuration for 82574 */ 1372 if (adapter->hw.mac.type == e1000_82574) { 1373 int tmp; 1374 tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 1375 tmp |= E1000_CTRL_EXT_PBA_CLR; 1376 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp); 1377 /* Set the IVAR - interrupt vector routing. */ 1378 E1000_WRITE_REG(&adapter->hw, E1000_IVAR, adapter->ivars); 1379 } 1380 1381 #ifdef DEVICE_POLLING 1382 /* 1383 * Only enable interrupts if we are not polling, make sure 1384 * they are off otherwise. 1385 */ 1386 if (ifp->if_capenable & IFCAP_POLLING) 1387 em_disable_intr(adapter); 1388 else 1389 #endif /* DEVICE_POLLING */ 1390 em_enable_intr(adapter); 1391 1392 /* AMT based hardware can now take control from firmware */ 1393 if (adapter->has_manage && adapter->has_amt) 1394 em_get_hw_control(adapter); 1395 1396 /* Don't reset the phy next time init gets called */ 1397 adapter->hw.phy.reset_disable = TRUE; 1398 } 1399 1400 static void 1401 em_init(void *arg) 1402 { 1403 struct adapter *adapter = arg; 1404 1405 EM_CORE_LOCK(adapter); 1406 em_init_locked(adapter); 1407 EM_CORE_UNLOCK(adapter); 1408 } 1409 1410 1411 #ifdef DEVICE_POLLING 1412 /********************************************************************* 1413 * 1414 * Legacy polling routine: note this only works with single queue 1415 * 1416 *********************************************************************/ 1417 static int 1418 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) 1419 { 1420 struct adapter *adapter = ifp->if_softc; 1421 struct tx_ring *txr = adapter->tx_rings; 1422 struct rx_ring *rxr = adapter->rx_rings; 1423 u32 reg_icr; 1424 int rx_done; 1425 1426 EM_CORE_LOCK(adapter); 1427 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 1428 EM_CORE_UNLOCK(adapter); 1429 return (0); 1430 } 1431 1432 if (cmd == POLL_AND_CHECK_STATUS) { 1433 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1434 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1435 callout_stop(&adapter->timer); 1436 adapter->hw.mac.get_link_status = 1; 1437 em_update_link_status(adapter); 1438 callout_reset(&adapter->timer, hz, 1439 em_local_timer, adapter); 1440 } 1441 } 1442 EM_CORE_UNLOCK(adapter); 1443 1444 em_rxeof(rxr, count, &rx_done); 1445 1446 EM_TX_LOCK(txr); 1447 em_txeof(txr); 1448 #ifdef EM_MULTIQUEUE 1449 if (!drbr_empty(ifp, txr->br)) 1450 em_mq_start_locked(ifp, txr, NULL); 1451 #else 1452 em_start_locked(ifp, txr); 1453 #endif 1454 EM_TX_UNLOCK(txr); 1455 1456 return (rx_done); 1457 } 1458 #endif /* DEVICE_POLLING */ 1459 1460 1461 /********************************************************************* 1462 * 1463 * Fast Legacy/MSI Combined Interrupt Service routine 1464 * 1465 *********************************************************************/ 1466 static int 1467 em_irq_fast(void *arg) 1468 { 1469 struct adapter *adapter = arg; 1470 struct ifnet *ifp; 1471 u32 reg_icr; 1472 1473 ifp = adapter->ifp; 1474 1475 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1476 1477 /* Hot eject? */ 1478 if (reg_icr == 0xffffffff) 1479 return FILTER_STRAY; 1480 1481 /* Definitely not our interrupt. */ 1482 if (reg_icr == 0x0) 1483 return FILTER_STRAY; 1484 1485 /* 1486 * Starting with the 82571 chip, bit 31 should be used to 1487 * determine whether the interrupt belongs to us. 1488 */ 1489 if (adapter->hw.mac.type >= e1000_82571 && 1490 (reg_icr & E1000_ICR_INT_ASSERTED) == 0) 1491 return FILTER_STRAY; 1492 1493 em_disable_intr(adapter); 1494 taskqueue_enqueue(adapter->tq, &adapter->que_task); 1495 1496 /* Link status change */ 1497 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1498 adapter->hw.mac.get_link_status = 1; 1499 taskqueue_enqueue(taskqueue_fast, &adapter->link_task); 1500 } 1501 1502 if (reg_icr & E1000_ICR_RXO) 1503 adapter->rx_overruns++; 1504 return FILTER_HANDLED; 1505 } 1506 1507 /* Combined RX/TX handler, used by Legacy and MSI */ 1508 static void 1509 em_handle_que(void *context, int pending) 1510 { 1511 struct adapter *adapter = context; 1512 struct ifnet *ifp = adapter->ifp; 1513 struct tx_ring *txr = adapter->tx_rings; 1514 struct rx_ring *rxr = adapter->rx_rings; 1515 1516 1517 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1518 bool more = em_rxeof(rxr, adapter->rx_process_limit, NULL); 1519 EM_TX_LOCK(txr); 1520 em_txeof(txr); 1521 #ifdef EM_MULTIQUEUE 1522 if (!drbr_empty(ifp, txr->br)) 1523 em_mq_start_locked(ifp, txr, NULL); 1524 #else 1525 em_start_locked(ifp, txr); 1526 #endif 1527 EM_TX_UNLOCK(txr); 1528 if (more || (ifp->if_drv_flags & IFF_DRV_OACTIVE)) { 1529 taskqueue_enqueue(adapter->tq, &adapter->que_task); 1530 return; 1531 } 1532 } 1533 1534 em_enable_intr(adapter); 1535 return; 1536 } 1537 1538 1539 /********************************************************************* 1540 * 1541 * MSIX Interrupt Service Routines 1542 * 1543 **********************************************************************/ 1544 static void 1545 em_msix_tx(void *arg) 1546 { 1547 struct tx_ring *txr = arg; 1548 struct adapter *adapter = txr->adapter; 1549 bool more; 1550 1551 ++txr->tx_irq; 1552 EM_TX_LOCK(txr); 1553 more = em_txeof(txr); 1554 EM_TX_UNLOCK(txr); 1555 if (more) 1556 taskqueue_enqueue(txr->tq, &txr->tx_task); 1557 else 1558 /* Reenable this interrupt */ 1559 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims); 1560 return; 1561 } 1562 1563 /********************************************************************* 1564 * 1565 * MSIX RX Interrupt Service routine 1566 * 1567 **********************************************************************/ 1568 1569 static void 1570 em_msix_rx(void *arg) 1571 { 1572 struct rx_ring *rxr = arg; 1573 struct adapter *adapter = rxr->adapter; 1574 bool more; 1575 1576 ++rxr->rx_irq; 1577 more = em_rxeof(rxr, adapter->rx_process_limit, NULL); 1578 if (more) 1579 taskqueue_enqueue(rxr->tq, &rxr->rx_task); 1580 else 1581 /* Reenable this interrupt */ 1582 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims); 1583 return; 1584 } 1585 1586 /********************************************************************* 1587 * 1588 * MSIX Link Fast Interrupt Service routine 1589 * 1590 **********************************************************************/ 1591 static void 1592 em_msix_link(void *arg) 1593 { 1594 struct adapter *adapter = arg; 1595 u32 reg_icr; 1596 1597 ++adapter->link_irq; 1598 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1599 1600 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1601 adapter->hw.mac.get_link_status = 1; 1602 em_handle_link(adapter, 0); 1603 } else 1604 E1000_WRITE_REG(&adapter->hw, E1000_IMS, 1605 EM_MSIX_LINK | E1000_IMS_LSC); 1606 return; 1607 } 1608 1609 static void 1610 em_handle_rx(void *context, int pending) 1611 { 1612 struct rx_ring *rxr = context; 1613 struct adapter *adapter = rxr->adapter; 1614 bool more; 1615 1616 more = em_rxeof(rxr, adapter->rx_process_limit, NULL); 1617 if (more) 1618 taskqueue_enqueue(rxr->tq, &rxr->rx_task); 1619 else 1620 /* Reenable this interrupt */ 1621 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims); 1622 } 1623 1624 static void 1625 em_handle_tx(void *context, int pending) 1626 { 1627 struct tx_ring *txr = context; 1628 struct adapter *adapter = txr->adapter; 1629 struct ifnet *ifp = adapter->ifp; 1630 1631 EM_TX_LOCK(txr); 1632 em_txeof(txr); 1633 #ifdef EM_MULTIQUEUE 1634 if (!drbr_empty(ifp, txr->br)) 1635 em_mq_start_locked(ifp, txr, NULL); 1636 #else 1637 em_start_locked(ifp, txr); 1638 #endif 1639 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims); 1640 EM_TX_UNLOCK(txr); 1641 } 1642 1643 static void 1644 em_handle_link(void *context, int pending) 1645 { 1646 struct adapter *adapter = context; 1647 struct ifnet *ifp = adapter->ifp; 1648 1649 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) 1650 return; 1651 1652 EM_CORE_LOCK(adapter); 1653 callout_stop(&adapter->timer); 1654 em_update_link_status(adapter); 1655 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1656 E1000_WRITE_REG(&adapter->hw, E1000_IMS, 1657 EM_MSIX_LINK | E1000_IMS_LSC); 1658 EM_CORE_UNLOCK(adapter); 1659 } 1660 1661 1662 /********************************************************************* 1663 * 1664 * Media Ioctl callback 1665 * 1666 * This routine is called whenever the user queries the status of 1667 * the interface using ifconfig. 1668 * 1669 **********************************************************************/ 1670 static void 1671 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) 1672 { 1673 struct adapter *adapter = ifp->if_softc; 1674 u_char fiber_type = IFM_1000_SX; 1675 1676 INIT_DEBUGOUT("em_media_status: begin"); 1677 1678 EM_CORE_LOCK(adapter); 1679 em_update_link_status(adapter); 1680 1681 ifmr->ifm_status = IFM_AVALID; 1682 ifmr->ifm_active = IFM_ETHER; 1683 1684 if (!adapter->link_active) { 1685 EM_CORE_UNLOCK(adapter); 1686 return; 1687 } 1688 1689 ifmr->ifm_status |= IFM_ACTIVE; 1690 1691 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 1692 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) { 1693 ifmr->ifm_active |= fiber_type | IFM_FDX; 1694 } else { 1695 switch (adapter->link_speed) { 1696 case 10: 1697 ifmr->ifm_active |= IFM_10_T; 1698 break; 1699 case 100: 1700 ifmr->ifm_active |= IFM_100_TX; 1701 break; 1702 case 1000: 1703 ifmr->ifm_active |= IFM_1000_T; 1704 break; 1705 } 1706 if (adapter->link_duplex == FULL_DUPLEX) 1707 ifmr->ifm_active |= IFM_FDX; 1708 else 1709 ifmr->ifm_active |= IFM_HDX; 1710 } 1711 EM_CORE_UNLOCK(adapter); 1712 } 1713 1714 /********************************************************************* 1715 * 1716 * Media Ioctl callback 1717 * 1718 * This routine is called when the user changes speed/duplex using 1719 * media/mediopt option with ifconfig. 1720 * 1721 **********************************************************************/ 1722 static int 1723 em_media_change(struct ifnet *ifp) 1724 { 1725 struct adapter *adapter = ifp->if_softc; 1726 struct ifmedia *ifm = &adapter->media; 1727 1728 INIT_DEBUGOUT("em_media_change: begin"); 1729 1730 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) 1731 return (EINVAL); 1732 1733 EM_CORE_LOCK(adapter); 1734 switch (IFM_SUBTYPE(ifm->ifm_media)) { 1735 case IFM_AUTO: 1736 adapter->hw.mac.autoneg = DO_AUTO_NEG; 1737 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT; 1738 break; 1739 case IFM_1000_LX: 1740 case IFM_1000_SX: 1741 case IFM_1000_T: 1742 adapter->hw.mac.autoneg = DO_AUTO_NEG; 1743 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL; 1744 break; 1745 case IFM_100_TX: 1746 adapter->hw.mac.autoneg = FALSE; 1747 adapter->hw.phy.autoneg_advertised = 0; 1748 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 1749 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL; 1750 else 1751 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF; 1752 break; 1753 case IFM_10_T: 1754 adapter->hw.mac.autoneg = FALSE; 1755 adapter->hw.phy.autoneg_advertised = 0; 1756 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 1757 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL; 1758 else 1759 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF; 1760 break; 1761 default: 1762 device_printf(adapter->dev, "Unsupported media type\n"); 1763 } 1764 1765 em_init_locked(adapter); 1766 EM_CORE_UNLOCK(adapter); 1767 1768 return (0); 1769 } 1770 1771 /********************************************************************* 1772 * 1773 * This routine maps the mbufs to tx descriptors. 1774 * 1775 * return 0 on success, positive on failure 1776 **********************************************************************/ 1777 1778 static int 1779 em_xmit(struct tx_ring *txr, struct mbuf **m_headp) 1780 { 1781 struct adapter *adapter = txr->adapter; 1782 bus_dma_segment_t segs[EM_MAX_SCATTER]; 1783 bus_dmamap_t map; 1784 struct em_buffer *tx_buffer, *tx_buffer_mapped; 1785 struct e1000_tx_desc *ctxd = NULL; 1786 struct mbuf *m_head; 1787 struct ether_header *eh; 1788 struct ip *ip = NULL; 1789 struct tcphdr *tp = NULL; 1790 u32 txd_upper, txd_lower, txd_used, txd_saved; 1791 int ip_off, poff; 1792 int nsegs, i, j, first, last = 0; 1793 int error, do_tso, tso_desc = 0, remap = 1; 1794 1795 retry: 1796 m_head = *m_headp; 1797 txd_upper = txd_lower = txd_used = txd_saved = 0; 1798 do_tso = ((m_head->m_pkthdr.csum_flags & CSUM_TSO) != 0); 1799 ip_off = poff = 0; 1800 1801 /* 1802 * Intel recommends entire IP/TCP header length reside in a single 1803 * buffer. If multiple descriptors are used to describe the IP and 1804 * TCP header, each descriptor should describe one or more 1805 * complete headers; descriptors referencing only parts of headers 1806 * are not supported. If all layer headers are not coalesced into 1807 * a single buffer, each buffer should not cross a 4KB boundary, 1808 * or be larger than the maximum read request size. 1809 * Controller also requires modifing IP/TCP header to make TSO work 1810 * so we firstly get a writable mbuf chain then coalesce ethernet/ 1811 * IP/TCP header into a single buffer to meet the requirement of 1812 * controller. This also simplifies IP/TCP/UDP checksum offloading 1813 * which also has similiar restrictions. 1814 */ 1815 if (do_tso || m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD) { 1816 if (do_tso || (m_head->m_next != NULL && 1817 m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)) { 1818 if (M_WRITABLE(*m_headp) == 0) { 1819 m_head = m_dup(*m_headp, M_DONTWAIT); 1820 m_freem(*m_headp); 1821 if (m_head == NULL) { 1822 *m_headp = NULL; 1823 return (ENOBUFS); 1824 } 1825 *m_headp = m_head; 1826 } 1827 } 1828 /* 1829 * XXX 1830 * Assume IPv4, we don't have TSO/checksum offload support 1831 * for IPv6 yet. 1832 */ 1833 ip_off = sizeof(struct ether_header); 1834 m_head = m_pullup(m_head, ip_off); 1835 if (m_head == NULL) { 1836 *m_headp = NULL; 1837 return (ENOBUFS); 1838 } 1839 eh = mtod(m_head, struct ether_header *); 1840 if (eh->ether_type == htons(ETHERTYPE_VLAN)) { 1841 ip_off = sizeof(struct ether_vlan_header); 1842 m_head = m_pullup(m_head, ip_off); 1843 if (m_head == NULL) { 1844 *m_headp = NULL; 1845 return (ENOBUFS); 1846 } 1847 } 1848 m_head = m_pullup(m_head, ip_off + sizeof(struct ip)); 1849 if (m_head == NULL) { 1850 *m_headp = NULL; 1851 return (ENOBUFS); 1852 } 1853 ip = (struct ip *)(mtod(m_head, char *) + ip_off); 1854 poff = ip_off + (ip->ip_hl << 2); 1855 if (do_tso) { 1856 m_head = m_pullup(m_head, poff + sizeof(struct tcphdr)); 1857 if (m_head == NULL) { 1858 *m_headp = NULL; 1859 return (ENOBUFS); 1860 } 1861 tp = (struct tcphdr *)(mtod(m_head, char *) + poff); 1862 /* 1863 * TSO workaround: 1864 * pull 4 more bytes of data into it. 1865 */ 1866 m_head = m_pullup(m_head, poff + (tp->th_off << 2) + 4); 1867 if (m_head == NULL) { 1868 *m_headp = NULL; 1869 return (ENOBUFS); 1870 } 1871 ip = (struct ip *)(mtod(m_head, char *) + ip_off); 1872 ip->ip_len = 0; 1873 ip->ip_sum = 0; 1874 /* 1875 * The pseudo TCP checksum does not include TCP payload 1876 * length so driver should recompute the checksum here 1877 * what hardware expect to see. This is adherence of 1878 * Microsoft's Large Send specification. 1879 */ 1880 tp = (struct tcphdr *)(mtod(m_head, char *) + poff); 1881 tp->th_sum = in_pseudo(ip->ip_src.s_addr, 1882 ip->ip_dst.s_addr, htons(IPPROTO_TCP)); 1883 } else if (m_head->m_pkthdr.csum_flags & CSUM_TCP) { 1884 m_head = m_pullup(m_head, poff + sizeof(struct tcphdr)); 1885 if (m_head == NULL) { 1886 *m_headp = NULL; 1887 return (ENOBUFS); 1888 } 1889 tp = (struct tcphdr *)(mtod(m_head, char *) + poff); 1890 m_head = m_pullup(m_head, poff + (tp->th_off << 2)); 1891 if (m_head == NULL) { 1892 *m_headp = NULL; 1893 return (ENOBUFS); 1894 } 1895 ip = (struct ip *)(mtod(m_head, char *) + ip_off); 1896 tp = (struct tcphdr *)(mtod(m_head, char *) + poff); 1897 } else if (m_head->m_pkthdr.csum_flags & CSUM_UDP) { 1898 m_head = m_pullup(m_head, poff + sizeof(struct udphdr)); 1899 if (m_head == NULL) { 1900 *m_headp = NULL; 1901 return (ENOBUFS); 1902 } 1903 ip = (struct ip *)(mtod(m_head, char *) + ip_off); 1904 } 1905 *m_headp = m_head; 1906 } 1907 1908 /* 1909 * Map the packet for DMA 1910 * 1911 * Capture the first descriptor index, 1912 * this descriptor will have the index 1913 * of the EOP which is the only one that 1914 * now gets a DONE bit writeback. 1915 */ 1916 first = txr->next_avail_desc; 1917 tx_buffer = &txr->tx_buffers[first]; 1918 tx_buffer_mapped = tx_buffer; 1919 map = tx_buffer->map; 1920 1921 error = bus_dmamap_load_mbuf_sg(txr->txtag, map, 1922 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); 1923 1924 /* 1925 * There are two types of errors we can (try) to handle: 1926 * - EFBIG means the mbuf chain was too long and bus_dma ran 1927 * out of segments. Defragment the mbuf chain and try again. 1928 * - ENOMEM means bus_dma could not obtain enough bounce buffers 1929 * at this point in time. Defer sending and try again later. 1930 * All other errors, in particular EINVAL, are fatal and prevent the 1931 * mbuf chain from ever going through. Drop it and report error. 1932 */ 1933 if (error == EFBIG && remap) { 1934 struct mbuf *m; 1935 1936 m = m_defrag(*m_headp, M_DONTWAIT); 1937 if (m == NULL) { 1938 adapter->mbuf_alloc_failed++; 1939 m_freem(*m_headp); 1940 *m_headp = NULL; 1941 return (ENOBUFS); 1942 } 1943 *m_headp = m; 1944 1945 /* Try it again, but only once */ 1946 remap = 0; 1947 goto retry; 1948 } else if (error == ENOMEM) { 1949 adapter->no_tx_dma_setup++; 1950 return (error); 1951 } else if (error != 0) { 1952 adapter->no_tx_dma_setup++; 1953 m_freem(*m_headp); 1954 *m_headp = NULL; 1955 return (error); 1956 } 1957 1958 /* 1959 * TSO Hardware workaround, if this packet is not 1960 * TSO, and is only a single descriptor long, and 1961 * it follows a TSO burst, then we need to add a 1962 * sentinel descriptor to prevent premature writeback. 1963 */ 1964 if ((do_tso == 0) && (txr->tx_tso == TRUE)) { 1965 if (nsegs == 1) 1966 tso_desc = TRUE; 1967 txr->tx_tso = FALSE; 1968 } 1969 1970 if (nsegs > (txr->tx_avail - 2)) { 1971 txr->no_desc_avail++; 1972 bus_dmamap_unload(txr->txtag, map); 1973 return (ENOBUFS); 1974 } 1975 m_head = *m_headp; 1976 1977 /* Do hardware assists */ 1978 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) { 1979 em_tso_setup(txr, m_head, ip_off, ip, tp, 1980 &txd_upper, &txd_lower); 1981 /* we need to make a final sentinel transmit desc */ 1982 tso_desc = TRUE; 1983 } else if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD) 1984 em_transmit_checksum_setup(txr, m_head, 1985 ip_off, ip, &txd_upper, &txd_lower); 1986 1987 i = txr->next_avail_desc; 1988 1989 /* Set up our transmit descriptors */ 1990 for (j = 0; j < nsegs; j++) { 1991 bus_size_t seg_len; 1992 bus_addr_t seg_addr; 1993 1994 tx_buffer = &txr->tx_buffers[i]; 1995 ctxd = &txr->tx_base[i]; 1996 seg_addr = segs[j].ds_addr; 1997 seg_len = segs[j].ds_len; 1998 /* 1999 ** TSO Workaround: 2000 ** If this is the last descriptor, we want to 2001 ** split it so we have a small final sentinel 2002 */ 2003 if (tso_desc && (j == (nsegs -1)) && (seg_len > 8)) { 2004 seg_len -= 4; 2005 ctxd->buffer_addr = htole64(seg_addr); 2006 ctxd->lower.data = htole32( 2007 adapter->txd_cmd | txd_lower | seg_len); 2008 ctxd->upper.data = 2009 htole32(txd_upper); 2010 if (++i == adapter->num_tx_desc) 2011 i = 0; 2012 /* Now make the sentinel */ 2013 ++txd_used; /* using an extra txd */ 2014 ctxd = &txr->tx_base[i]; 2015 tx_buffer = &txr->tx_buffers[i]; 2016 ctxd->buffer_addr = 2017 htole64(seg_addr + seg_len); 2018 ctxd->lower.data = htole32( 2019 adapter->txd_cmd | txd_lower | 4); 2020 ctxd->upper.data = 2021 htole32(txd_upper); 2022 last = i; 2023 if (++i == adapter->num_tx_desc) 2024 i = 0; 2025 } else { 2026 ctxd->buffer_addr = htole64(seg_addr); 2027 ctxd->lower.data = htole32( 2028 adapter->txd_cmd | txd_lower | seg_len); 2029 ctxd->upper.data = 2030 htole32(txd_upper); 2031 last = i; 2032 if (++i == adapter->num_tx_desc) 2033 i = 0; 2034 } 2035 tx_buffer->m_head = NULL; 2036 tx_buffer->next_eop = -1; 2037 } 2038 2039 txr->next_avail_desc = i; 2040 txr->tx_avail -= nsegs; 2041 if (tso_desc) /* TSO used an extra for sentinel */ 2042 txr->tx_avail -= txd_used; 2043 2044 if (m_head->m_flags & M_VLANTAG) { 2045 /* Set the vlan id. */ 2046 ctxd->upper.fields.special = 2047 htole16(m_head->m_pkthdr.ether_vtag); 2048 /* Tell hardware to add tag */ 2049 ctxd->lower.data |= htole32(E1000_TXD_CMD_VLE); 2050 } 2051 2052 tx_buffer->m_head = m_head; 2053 tx_buffer_mapped->map = tx_buffer->map; 2054 tx_buffer->map = map; 2055 bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE); 2056 2057 /* 2058 * Last Descriptor of Packet 2059 * needs End Of Packet (EOP) 2060 * and Report Status (RS) 2061 */ 2062 ctxd->lower.data |= 2063 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS); 2064 /* 2065 * Keep track in the first buffer which 2066 * descriptor will be written back 2067 */ 2068 tx_buffer = &txr->tx_buffers[first]; 2069 tx_buffer->next_eop = last; 2070 /* Update the watchdog time early and often */ 2071 txr->watchdog_time = ticks; 2072 2073 /* 2074 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000 2075 * that this frame is available to transmit. 2076 */ 2077 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map, 2078 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2079 E1000_WRITE_REG(&adapter->hw, E1000_TDT(txr->me), i); 2080 2081 return (0); 2082 } 2083 2084 static void 2085 em_set_promisc(struct adapter *adapter) 2086 { 2087 struct ifnet *ifp = adapter->ifp; 2088 u32 reg_rctl; 2089 2090 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2091 2092 if (ifp->if_flags & IFF_PROMISC) { 2093 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); 2094 /* Turn this on if you want to see bad packets */ 2095 if (em_debug_sbp) 2096 reg_rctl |= E1000_RCTL_SBP; 2097 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2098 } else if (ifp->if_flags & IFF_ALLMULTI) { 2099 reg_rctl |= E1000_RCTL_MPE; 2100 reg_rctl &= ~E1000_RCTL_UPE; 2101 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2102 } 2103 } 2104 2105 static void 2106 em_disable_promisc(struct adapter *adapter) 2107 { 2108 u32 reg_rctl; 2109 2110 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2111 2112 reg_rctl &= (~E1000_RCTL_UPE); 2113 reg_rctl &= (~E1000_RCTL_MPE); 2114 reg_rctl &= (~E1000_RCTL_SBP); 2115 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2116 } 2117 2118 2119 /********************************************************************* 2120 * Multicast Update 2121 * 2122 * This routine is called whenever multicast address list is updated. 2123 * 2124 **********************************************************************/ 2125 2126 static void 2127 em_set_multi(struct adapter *adapter) 2128 { 2129 struct ifnet *ifp = adapter->ifp; 2130 struct ifmultiaddr *ifma; 2131 u32 reg_rctl = 0; 2132 u8 *mta; /* Multicast array memory */ 2133 int mcnt = 0; 2134 2135 IOCTL_DEBUGOUT("em_set_multi: begin"); 2136 2137 mta = adapter->mta; 2138 bzero(mta, sizeof(u8) * ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES); 2139 2140 if (adapter->hw.mac.type == e1000_82542 && 2141 adapter->hw.revision_id == E1000_REVISION_2) { 2142 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2143 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 2144 e1000_pci_clear_mwi(&adapter->hw); 2145 reg_rctl |= E1000_RCTL_RST; 2146 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2147 msec_delay(5); 2148 } 2149 2150 #if __FreeBSD_version < 800000 2151 IF_ADDR_LOCK(ifp); 2152 #else 2153 if_maddr_rlock(ifp); 2154 #endif 2155 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 2156 if (ifma->ifma_addr->sa_family != AF_LINK) 2157 continue; 2158 2159 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) 2160 break; 2161 2162 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr), 2163 &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN); 2164 mcnt++; 2165 } 2166 #if __FreeBSD_version < 800000 2167 IF_ADDR_UNLOCK(ifp); 2168 #else 2169 if_maddr_runlock(ifp); 2170 #endif 2171 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) { 2172 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2173 reg_rctl |= E1000_RCTL_MPE; 2174 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2175 } else 2176 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt); 2177 2178 if (adapter->hw.mac.type == e1000_82542 && 2179 adapter->hw.revision_id == E1000_REVISION_2) { 2180 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2181 reg_rctl &= ~E1000_RCTL_RST; 2182 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2183 msec_delay(5); 2184 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 2185 e1000_pci_set_mwi(&adapter->hw); 2186 } 2187 } 2188 2189 2190 /********************************************************************* 2191 * Timer routine 2192 * 2193 * This routine checks for link status and updates statistics. 2194 * 2195 **********************************************************************/ 2196 2197 static void 2198 em_local_timer(void *arg) 2199 { 2200 struct adapter *adapter = arg; 2201 struct ifnet *ifp = adapter->ifp; 2202 struct tx_ring *txr = adapter->tx_rings; 2203 struct rx_ring *rxr = adapter->rx_rings; 2204 u32 trigger; 2205 2206 EM_CORE_LOCK_ASSERT(adapter); 2207 2208 em_update_link_status(adapter); 2209 em_update_stats_counters(adapter); 2210 2211 /* Reset LAA into RAR[0] on 82571 */ 2212 if ((adapter->hw.mac.type == e1000_82571) && 2213 e1000_get_laa_state_82571(&adapter->hw)) 2214 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); 2215 2216 /* Mask to use in the irq trigger */ 2217 if (adapter->msix_mem) 2218 trigger = rxr->ims; /* RX for 82574 */ 2219 else 2220 trigger = E1000_ICS_RXDMT0; 2221 2222 /* 2223 ** Don't do TX watchdog check if we've been paused 2224 */ 2225 if (adapter->pause_frames) { 2226 adapter->pause_frames = 0; 2227 goto out; 2228 } 2229 /* 2230 ** Check on the state of the TX queue(s), this 2231 ** can be done without the lock because its RO 2232 ** and the HUNG state will be static if set. 2233 */ 2234 for (int i = 0; i < adapter->num_queues; i++, txr++) 2235 if (txr->queue_status == EM_QUEUE_HUNG) 2236 goto hung; 2237 out: 2238 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 2239 #ifndef DEVICE_POLLING 2240 /* Trigger an RX interrupt to guarantee mbuf refresh */ 2241 E1000_WRITE_REG(&adapter->hw, E1000_ICS, trigger); 2242 #endif 2243 return; 2244 hung: 2245 /* Looks like we're hung */ 2246 device_printf(adapter->dev, "Watchdog timeout -- resetting\n"); 2247 device_printf(adapter->dev, 2248 "Queue(%d) tdh = %d, hw tdt = %d\n", txr->me, 2249 E1000_READ_REG(&adapter->hw, E1000_TDH(txr->me)), 2250 E1000_READ_REG(&adapter->hw, E1000_TDT(txr->me))); 2251 device_printf(adapter->dev,"TX(%d) desc avail = %d," 2252 "Next TX to Clean = %d\n", 2253 txr->me, txr->tx_avail, txr->next_to_clean); 2254 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 2255 adapter->watchdog_events++; 2256 em_init_locked(adapter); 2257 } 2258 2259 2260 static void 2261 em_update_link_status(struct adapter *adapter) 2262 { 2263 struct e1000_hw *hw = &adapter->hw; 2264 struct ifnet *ifp = adapter->ifp; 2265 device_t dev = adapter->dev; 2266 struct tx_ring *txr = adapter->tx_rings; 2267 u32 link_check = 0; 2268 2269 /* Get the cached link value or read phy for real */ 2270 switch (hw->phy.media_type) { 2271 case e1000_media_type_copper: 2272 if (hw->mac.get_link_status) { 2273 /* Do the work to read phy */ 2274 e1000_check_for_link(hw); 2275 link_check = !hw->mac.get_link_status; 2276 if (link_check) /* ESB2 fix */ 2277 e1000_cfg_on_link_up(hw); 2278 } else 2279 link_check = TRUE; 2280 break; 2281 case e1000_media_type_fiber: 2282 e1000_check_for_link(hw); 2283 link_check = (E1000_READ_REG(hw, E1000_STATUS) & 2284 E1000_STATUS_LU); 2285 break; 2286 case e1000_media_type_internal_serdes: 2287 e1000_check_for_link(hw); 2288 link_check = adapter->hw.mac.serdes_has_link; 2289 break; 2290 default: 2291 case e1000_media_type_unknown: 2292 break; 2293 } 2294 2295 /* Now check for a transition */ 2296 if (link_check && (adapter->link_active == 0)) { 2297 e1000_get_speed_and_duplex(hw, &adapter->link_speed, 2298 &adapter->link_duplex); 2299 /* Check if we must disable SPEED_MODE bit on PCI-E */ 2300 if ((adapter->link_speed != SPEED_1000) && 2301 ((hw->mac.type == e1000_82571) || 2302 (hw->mac.type == e1000_82572))) { 2303 int tarc0; 2304 tarc0 = E1000_READ_REG(hw, E1000_TARC(0)); 2305 tarc0 &= ~SPEED_MODE_BIT; 2306 E1000_WRITE_REG(hw, E1000_TARC(0), tarc0); 2307 } 2308 if (bootverbose) 2309 device_printf(dev, "Link is up %d Mbps %s\n", 2310 adapter->link_speed, 2311 ((adapter->link_duplex == FULL_DUPLEX) ? 2312 "Full Duplex" : "Half Duplex")); 2313 adapter->link_active = 1; 2314 adapter->smartspeed = 0; 2315 ifp->if_baudrate = adapter->link_speed * 1000000; 2316 if_link_state_change(ifp, LINK_STATE_UP); 2317 } else if (!link_check && (adapter->link_active == 1)) { 2318 ifp->if_baudrate = adapter->link_speed = 0; 2319 adapter->link_duplex = 0; 2320 if (bootverbose) 2321 device_printf(dev, "Link is Down\n"); 2322 adapter->link_active = 0; 2323 /* Link down, disable watchdog */ 2324 for (int i = 0; i < adapter->num_queues; i++, txr++) 2325 txr->queue_status = EM_QUEUE_IDLE; 2326 if_link_state_change(ifp, LINK_STATE_DOWN); 2327 } 2328 } 2329 2330 /********************************************************************* 2331 * 2332 * This routine disables all traffic on the adapter by issuing a 2333 * global reset on the MAC and deallocates TX/RX buffers. 2334 * 2335 * This routine should always be called with BOTH the CORE 2336 * and TX locks. 2337 **********************************************************************/ 2338 2339 static void 2340 em_stop(void *arg) 2341 { 2342 struct adapter *adapter = arg; 2343 struct ifnet *ifp = adapter->ifp; 2344 struct tx_ring *txr = adapter->tx_rings; 2345 2346 EM_CORE_LOCK_ASSERT(adapter); 2347 2348 INIT_DEBUGOUT("em_stop: begin"); 2349 2350 em_disable_intr(adapter); 2351 callout_stop(&adapter->timer); 2352 2353 /* Tell the stack that the interface is no longer active */ 2354 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 2355 2356 /* Unarm watchdog timer. */ 2357 for (int i = 0; i < adapter->num_queues; i++, txr++) { 2358 EM_TX_LOCK(txr); 2359 txr->queue_status = EM_QUEUE_IDLE; 2360 EM_TX_UNLOCK(txr); 2361 } 2362 2363 e1000_reset_hw(&adapter->hw); 2364 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0); 2365 2366 e1000_led_off(&adapter->hw); 2367 e1000_cleanup_led(&adapter->hw); 2368 } 2369 2370 2371 /********************************************************************* 2372 * 2373 * Determine hardware revision. 2374 * 2375 **********************************************************************/ 2376 static void 2377 em_identify_hardware(struct adapter *adapter) 2378 { 2379 device_t dev = adapter->dev; 2380 2381 /* Make sure our PCI config space has the necessary stuff set */ 2382 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2); 2383 if (!((adapter->hw.bus.pci_cmd_word & PCIM_CMD_BUSMASTEREN) && 2384 (adapter->hw.bus.pci_cmd_word & PCIM_CMD_MEMEN))) { 2385 device_printf(dev, "Memory Access and/or Bus Master bits " 2386 "were not set!\n"); 2387 adapter->hw.bus.pci_cmd_word |= 2388 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN); 2389 pci_write_config(dev, PCIR_COMMAND, 2390 adapter->hw.bus.pci_cmd_word, 2); 2391 } 2392 2393 /* Save off the information about this board */ 2394 adapter->hw.vendor_id = pci_get_vendor(dev); 2395 adapter->hw.device_id = pci_get_device(dev); 2396 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1); 2397 adapter->hw.subsystem_vendor_id = 2398 pci_read_config(dev, PCIR_SUBVEND_0, 2); 2399 adapter->hw.subsystem_device_id = 2400 pci_read_config(dev, PCIR_SUBDEV_0, 2); 2401 2402 /* Do Shared Code Init and Setup */ 2403 if (e1000_set_mac_type(&adapter->hw)) { 2404 device_printf(dev, "Setup init failure\n"); 2405 return; 2406 } 2407 } 2408 2409 static int 2410 em_allocate_pci_resources(struct adapter *adapter) 2411 { 2412 device_t dev = adapter->dev; 2413 int rid; 2414 2415 rid = PCIR_BAR(0); 2416 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 2417 &rid, RF_ACTIVE); 2418 if (adapter->memory == NULL) { 2419 device_printf(dev, "Unable to allocate bus resource: memory\n"); 2420 return (ENXIO); 2421 } 2422 adapter->osdep.mem_bus_space_tag = 2423 rman_get_bustag(adapter->memory); 2424 adapter->osdep.mem_bus_space_handle = 2425 rman_get_bushandle(adapter->memory); 2426 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle; 2427 2428 /* Default to a single queue */ 2429 adapter->num_queues = 1; 2430 2431 /* 2432 * Setup MSI/X or MSI if PCI Express 2433 */ 2434 adapter->msix = em_setup_msix(adapter); 2435 2436 adapter->hw.back = &adapter->osdep; 2437 2438 return (0); 2439 } 2440 2441 /********************************************************************* 2442 * 2443 * Setup the Legacy or MSI Interrupt handler 2444 * 2445 **********************************************************************/ 2446 int 2447 em_allocate_legacy(struct adapter *adapter) 2448 { 2449 device_t dev = adapter->dev; 2450 int error, rid = 0; 2451 2452 /* Manually turn off all interrupts */ 2453 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 2454 2455 if (adapter->msix == 1) /* using MSI */ 2456 rid = 1; 2457 /* We allocate a single interrupt resource */ 2458 adapter->res = bus_alloc_resource_any(dev, 2459 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE); 2460 if (adapter->res == NULL) { 2461 device_printf(dev, "Unable to allocate bus resource: " 2462 "interrupt\n"); 2463 return (ENXIO); 2464 } 2465 2466 /* 2467 * Allocate a fast interrupt and the associated 2468 * deferred processing contexts. 2469 */ 2470 TASK_INIT(&adapter->que_task, 0, em_handle_que, adapter); 2471 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter); 2472 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT, 2473 taskqueue_thread_enqueue, &adapter->tq); 2474 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq", 2475 device_get_nameunit(adapter->dev)); 2476 if ((error = bus_setup_intr(dev, adapter->res, INTR_TYPE_NET, 2477 em_irq_fast, NULL, adapter, &adapter->tag)) != 0) { 2478 device_printf(dev, "Failed to register fast interrupt " 2479 "handler: %d\n", error); 2480 taskqueue_free(adapter->tq); 2481 adapter->tq = NULL; 2482 return (error); 2483 } 2484 2485 return (0); 2486 } 2487 2488 /********************************************************************* 2489 * 2490 * Setup the MSIX Interrupt handlers 2491 * This is not really Multiqueue, rather 2492 * its just multiple interrupt vectors. 2493 * 2494 **********************************************************************/ 2495 int 2496 em_allocate_msix(struct adapter *adapter) 2497 { 2498 device_t dev = adapter->dev; 2499 struct tx_ring *txr = adapter->tx_rings; 2500 struct rx_ring *rxr = adapter->rx_rings; 2501 int error, rid, vector = 0; 2502 2503 2504 /* Make sure all interrupts are disabled */ 2505 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 2506 2507 /* First set up ring resources */ 2508 for (int i = 0; i < adapter->num_queues; i++, txr++, rxr++) { 2509 2510 /* RX ring */ 2511 rid = vector + 1; 2512 2513 rxr->res = bus_alloc_resource_any(dev, 2514 SYS_RES_IRQ, &rid, RF_ACTIVE); 2515 if (rxr->res == NULL) { 2516 device_printf(dev, 2517 "Unable to allocate bus resource: " 2518 "RX MSIX Interrupt %d\n", i); 2519 return (ENXIO); 2520 } 2521 if ((error = bus_setup_intr(dev, rxr->res, 2522 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx, 2523 rxr, &rxr->tag)) != 0) { 2524 device_printf(dev, "Failed to register RX handler"); 2525 return (error); 2526 } 2527 #if __FreeBSD_version >= 800504 2528 bus_describe_intr(dev, rxr->res, rxr->tag, "rx %d", i); 2529 #endif 2530 rxr->msix = vector++; /* NOTE increment vector for TX */ 2531 TASK_INIT(&rxr->rx_task, 0, em_handle_rx, rxr); 2532 rxr->tq = taskqueue_create_fast("em_rxq", M_NOWAIT, 2533 taskqueue_thread_enqueue, &rxr->tq); 2534 taskqueue_start_threads(&rxr->tq, 1, PI_NET, "%s rxq", 2535 device_get_nameunit(adapter->dev)); 2536 /* 2537 ** Set the bit to enable interrupt 2538 ** in E1000_IMS -- bits 20 and 21 2539 ** are for RX0 and RX1, note this has 2540 ** NOTHING to do with the MSIX vector 2541 */ 2542 rxr->ims = 1 << (20 + i); 2543 adapter->ivars |= (8 | rxr->msix) << (i * 4); 2544 2545 /* TX ring */ 2546 rid = vector + 1; 2547 txr->res = bus_alloc_resource_any(dev, 2548 SYS_RES_IRQ, &rid, RF_ACTIVE); 2549 if (txr->res == NULL) { 2550 device_printf(dev, 2551 "Unable to allocate bus resource: " 2552 "TX MSIX Interrupt %d\n", i); 2553 return (ENXIO); 2554 } 2555 if ((error = bus_setup_intr(dev, txr->res, 2556 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx, 2557 txr, &txr->tag)) != 0) { 2558 device_printf(dev, "Failed to register TX handler"); 2559 return (error); 2560 } 2561 #if __FreeBSD_version >= 800504 2562 bus_describe_intr(dev, txr->res, txr->tag, "tx %d", i); 2563 #endif 2564 txr->msix = vector++; /* Increment vector for next pass */ 2565 TASK_INIT(&txr->tx_task, 0, em_handle_tx, txr); 2566 txr->tq = taskqueue_create_fast("em_txq", M_NOWAIT, 2567 taskqueue_thread_enqueue, &txr->tq); 2568 taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq", 2569 device_get_nameunit(adapter->dev)); 2570 /* 2571 ** Set the bit to enable interrupt 2572 ** in E1000_IMS -- bits 22 and 23 2573 ** are for TX0 and TX1, note this has 2574 ** NOTHING to do with the MSIX vector 2575 */ 2576 txr->ims = 1 << (22 + i); 2577 adapter->ivars |= (8 | txr->msix) << (8 + (i * 4)); 2578 } 2579 2580 /* Link interrupt */ 2581 ++rid; 2582 adapter->res = bus_alloc_resource_any(dev, 2583 SYS_RES_IRQ, &rid, RF_ACTIVE); 2584 if (!adapter->res) { 2585 device_printf(dev,"Unable to allocate " 2586 "bus resource: Link interrupt [%d]\n", rid); 2587 return (ENXIO); 2588 } 2589 /* Set the link handler function */ 2590 error = bus_setup_intr(dev, adapter->res, 2591 INTR_TYPE_NET | INTR_MPSAFE, NULL, 2592 em_msix_link, adapter, &adapter->tag); 2593 if (error) { 2594 adapter->res = NULL; 2595 device_printf(dev, "Failed to register LINK handler"); 2596 return (error); 2597 } 2598 #if __FreeBSD_version >= 800504 2599 bus_describe_intr(dev, adapter->res, adapter->tag, "link"); 2600 #endif 2601 adapter->linkvec = vector; 2602 adapter->ivars |= (8 | vector) << 16; 2603 adapter->ivars |= 0x80000000; 2604 2605 return (0); 2606 } 2607 2608 2609 static void 2610 em_free_pci_resources(struct adapter *adapter) 2611 { 2612 device_t dev = adapter->dev; 2613 struct tx_ring *txr; 2614 struct rx_ring *rxr; 2615 int rid; 2616 2617 2618 /* 2619 ** Release all the queue interrupt resources: 2620 */ 2621 for (int i = 0; i < adapter->num_queues; i++) { 2622 txr = &adapter->tx_rings[i]; 2623 rxr = &adapter->rx_rings[i]; 2624 /* an early abort? */ 2625 if ((txr == NULL) || (rxr == NULL)) 2626 break; 2627 rid = txr->msix +1; 2628 if (txr->tag != NULL) { 2629 bus_teardown_intr(dev, txr->res, txr->tag); 2630 txr->tag = NULL; 2631 } 2632 if (txr->res != NULL) 2633 bus_release_resource(dev, SYS_RES_IRQ, 2634 rid, txr->res); 2635 rid = rxr->msix +1; 2636 if (rxr->tag != NULL) { 2637 bus_teardown_intr(dev, rxr->res, rxr->tag); 2638 rxr->tag = NULL; 2639 } 2640 if (rxr->res != NULL) 2641 bus_release_resource(dev, SYS_RES_IRQ, 2642 rid, rxr->res); 2643 } 2644 2645 if (adapter->linkvec) /* we are doing MSIX */ 2646 rid = adapter->linkvec + 1; 2647 else 2648 (adapter->msix != 0) ? (rid = 1):(rid = 0); 2649 2650 if (adapter->tag != NULL) { 2651 bus_teardown_intr(dev, adapter->res, adapter->tag); 2652 adapter->tag = NULL; 2653 } 2654 2655 if (adapter->res != NULL) 2656 bus_release_resource(dev, SYS_RES_IRQ, rid, adapter->res); 2657 2658 2659 if (adapter->msix) 2660 pci_release_msi(dev); 2661 2662 if (adapter->msix_mem != NULL) 2663 bus_release_resource(dev, SYS_RES_MEMORY, 2664 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem); 2665 2666 if (adapter->memory != NULL) 2667 bus_release_resource(dev, SYS_RES_MEMORY, 2668 PCIR_BAR(0), adapter->memory); 2669 2670 if (adapter->flash != NULL) 2671 bus_release_resource(dev, SYS_RES_MEMORY, 2672 EM_FLASH, adapter->flash); 2673 } 2674 2675 /* 2676 * Setup MSI or MSI/X 2677 */ 2678 static int 2679 em_setup_msix(struct adapter *adapter) 2680 { 2681 device_t dev = adapter->dev; 2682 int val = 0; 2683 2684 2685 /* 2686 ** Setup MSI/X for Hartwell: tests have shown 2687 ** use of two queues to be unstable, and to 2688 ** provide no great gain anyway, so we simply 2689 ** seperate the interrupts and use a single queue. 2690 */ 2691 if ((adapter->hw.mac.type == e1000_82574) && 2692 (em_enable_msix == TRUE)) { 2693 /* Map the MSIX BAR */ 2694 int rid = PCIR_BAR(EM_MSIX_BAR); 2695 adapter->msix_mem = bus_alloc_resource_any(dev, 2696 SYS_RES_MEMORY, &rid, RF_ACTIVE); 2697 if (!adapter->msix_mem) { 2698 /* May not be enabled */ 2699 device_printf(adapter->dev, 2700 "Unable to map MSIX table \n"); 2701 goto msi; 2702 } 2703 val = pci_msix_count(dev); 2704 if (val < 3) { 2705 bus_release_resource(dev, SYS_RES_MEMORY, 2706 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem); 2707 adapter->msix_mem = NULL; 2708 device_printf(adapter->dev, 2709 "MSIX: insufficient vectors, using MSI\n"); 2710 goto msi; 2711 } 2712 val = 3; 2713 adapter->num_queues = 1; 2714 if (pci_alloc_msix(dev, &val) == 0) { 2715 device_printf(adapter->dev, 2716 "Using MSIX interrupts " 2717 "with %d vectors\n", val); 2718 } 2719 2720 return (val); 2721 } 2722 msi: 2723 val = pci_msi_count(dev); 2724 if (val == 1 && pci_alloc_msi(dev, &val) == 0) { 2725 adapter->msix = 1; 2726 device_printf(adapter->dev,"Using an MSI interrupt\n"); 2727 return (val); 2728 } 2729 /* Should only happen due to manual configuration */ 2730 device_printf(adapter->dev,"No MSI/MSIX using a Legacy IRQ\n"); 2731 return (0); 2732 } 2733 2734 2735 /********************************************************************* 2736 * 2737 * Initialize the hardware to a configuration 2738 * as specified by the adapter structure. 2739 * 2740 **********************************************************************/ 2741 static void 2742 em_reset(struct adapter *adapter) 2743 { 2744 device_t dev = adapter->dev; 2745 struct ifnet *ifp = adapter->ifp; 2746 struct e1000_hw *hw = &adapter->hw; 2747 u16 rx_buffer_size; 2748 2749 INIT_DEBUGOUT("em_reset: begin"); 2750 2751 /* Set up smart power down as default off on newer adapters. */ 2752 if (!em_smart_pwr_down && (hw->mac.type == e1000_82571 || 2753 hw->mac.type == e1000_82572)) { 2754 u16 phy_tmp = 0; 2755 2756 /* Speed up time to link by disabling smart power down. */ 2757 e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_tmp); 2758 phy_tmp &= ~IGP02E1000_PM_SPD; 2759 e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_tmp); 2760 } 2761 2762 /* 2763 * These parameters control the automatic generation (Tx) and 2764 * response (Rx) to Ethernet PAUSE frames. 2765 * - High water mark should allow for at least two frames to be 2766 * received after sending an XOFF. 2767 * - Low water mark works best when it is very near the high water mark. 2768 * This allows the receiver to restart by sending XON when it has 2769 * drained a bit. Here we use an arbitary value of 1500 which will 2770 * restart after one full frame is pulled from the buffer. There 2771 * could be several smaller frames in the buffer and if so they will 2772 * not trigger the XON until their total number reduces the buffer 2773 * by 1500. 2774 * - The pause time is fairly large at 1000 x 512ns = 512 usec. 2775 */ 2776 rx_buffer_size = ((E1000_READ_REG(hw, E1000_PBA) & 0xffff) << 10 ); 2777 2778 hw->fc.high_water = rx_buffer_size - 2779 roundup2(adapter->max_frame_size, 1024); 2780 hw->fc.low_water = hw->fc.high_water - 1500; 2781 2782 if (hw->mac.type == e1000_80003es2lan) 2783 hw->fc.pause_time = 0xFFFF; 2784 else 2785 hw->fc.pause_time = EM_FC_PAUSE_TIME; 2786 2787 hw->fc.send_xon = TRUE; 2788 2789 /* Set Flow control, use the tunable location if sane */ 2790 hw->fc.requested_mode = adapter->fc_setting; 2791 2792 /* Workaround: no TX flow ctrl for PCH */ 2793 if (hw->mac.type == e1000_pchlan) 2794 hw->fc.requested_mode = e1000_fc_rx_pause; 2795 2796 /* Override - settings for PCH2LAN, ya its magic :) */ 2797 if (hw->mac.type == e1000_pch2lan) { 2798 hw->fc.high_water = 0x5C20; 2799 hw->fc.low_water = 0x5048; 2800 hw->fc.pause_time = 0x0650; 2801 hw->fc.refresh_time = 0x0400; 2802 /* Jumbos need adjusted PBA */ 2803 if (ifp->if_mtu > ETHERMTU) 2804 E1000_WRITE_REG(hw, E1000_PBA, 12); 2805 else 2806 E1000_WRITE_REG(hw, E1000_PBA, 26); 2807 } 2808 2809 /* Issue a global reset */ 2810 e1000_reset_hw(hw); 2811 E1000_WRITE_REG(hw, E1000_WUC, 0); 2812 em_disable_aspm(adapter); 2813 2814 if (e1000_init_hw(hw) < 0) { 2815 device_printf(dev, "Hardware Initialization Failed\n"); 2816 return; 2817 } 2818 2819 E1000_WRITE_REG(hw, E1000_VET, ETHERTYPE_VLAN); 2820 e1000_get_phy_info(hw); 2821 e1000_check_for_link(hw); 2822 return; 2823 } 2824 2825 /********************************************************************* 2826 * 2827 * Setup networking device structure and register an interface. 2828 * 2829 **********************************************************************/ 2830 static int 2831 em_setup_interface(device_t dev, struct adapter *adapter) 2832 { 2833 struct ifnet *ifp; 2834 2835 INIT_DEBUGOUT("em_setup_interface: begin"); 2836 2837 ifp = adapter->ifp = if_alloc(IFT_ETHER); 2838 if (ifp == NULL) { 2839 device_printf(dev, "can not allocate ifnet structure\n"); 2840 return (-1); 2841 } 2842 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); 2843 ifp->if_mtu = ETHERMTU; 2844 ifp->if_init = em_init; 2845 ifp->if_softc = adapter; 2846 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 2847 ifp->if_ioctl = em_ioctl; 2848 ifp->if_start = em_start; 2849 IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1); 2850 ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1; 2851 IFQ_SET_READY(&ifp->if_snd); 2852 2853 ether_ifattach(ifp, adapter->hw.mac.addr); 2854 2855 ifp->if_capabilities = ifp->if_capenable = 0; 2856 2857 #ifdef EM_MULTIQUEUE 2858 /* Multiqueue tx functions */ 2859 ifp->if_transmit = em_mq_start; 2860 ifp->if_qflush = em_qflush; 2861 #endif 2862 2863 ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM; 2864 ifp->if_capenable |= IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM; 2865 2866 /* Enable TSO by default, can disable with ifconfig */ 2867 ifp->if_capabilities |= IFCAP_TSO4; 2868 ifp->if_capenable |= IFCAP_TSO4; 2869 2870 /* 2871 * Tell the upper layer(s) we 2872 * support full VLAN capability 2873 */ 2874 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); 2875 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU; 2876 ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU; 2877 2878 /* 2879 ** Dont turn this on by default, if vlans are 2880 ** created on another pseudo device (eg. lagg) 2881 ** then vlan events are not passed thru, breaking 2882 ** operation, but with HW FILTER off it works. If 2883 ** using vlans directly on the em driver you can 2884 ** enable this and get full hardware tag filtering. 2885 */ 2886 ifp->if_capabilities |= IFCAP_VLAN_HWFILTER; 2887 2888 #ifdef DEVICE_POLLING 2889 ifp->if_capabilities |= IFCAP_POLLING; 2890 #endif 2891 2892 /* Enable only WOL MAGIC by default */ 2893 if (adapter->wol) { 2894 ifp->if_capabilities |= IFCAP_WOL; 2895 ifp->if_capenable |= IFCAP_WOL_MAGIC; 2896 } 2897 2898 /* 2899 * Specify the media types supported by this adapter and register 2900 * callbacks to update media and link information 2901 */ 2902 ifmedia_init(&adapter->media, IFM_IMASK, 2903 em_media_change, em_media_status); 2904 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 2905 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) { 2906 u_char fiber_type = IFM_1000_SX; /* default type */ 2907 2908 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX, 2909 0, NULL); 2910 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL); 2911 } else { 2912 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL); 2913 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX, 2914 0, NULL); 2915 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX, 2916 0, NULL); 2917 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 2918 0, NULL); 2919 if (adapter->hw.phy.type != e1000_phy_ife) { 2920 ifmedia_add(&adapter->media, 2921 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL); 2922 ifmedia_add(&adapter->media, 2923 IFM_ETHER | IFM_1000_T, 0, NULL); 2924 } 2925 } 2926 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); 2927 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO); 2928 return (0); 2929 } 2930 2931 2932 /* 2933 * Manage DMA'able memory. 2934 */ 2935 static void 2936 em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) 2937 { 2938 if (error) 2939 return; 2940 *(bus_addr_t *) arg = segs[0].ds_addr; 2941 } 2942 2943 static int 2944 em_dma_malloc(struct adapter *adapter, bus_size_t size, 2945 struct em_dma_alloc *dma, int mapflags) 2946 { 2947 int error; 2948 2949 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */ 2950 EM_DBA_ALIGN, 0, /* alignment, bounds */ 2951 BUS_SPACE_MAXADDR, /* lowaddr */ 2952 BUS_SPACE_MAXADDR, /* highaddr */ 2953 NULL, NULL, /* filter, filterarg */ 2954 size, /* maxsize */ 2955 1, /* nsegments */ 2956 size, /* maxsegsize */ 2957 0, /* flags */ 2958 NULL, /* lockfunc */ 2959 NULL, /* lockarg */ 2960 &dma->dma_tag); 2961 if (error) { 2962 device_printf(adapter->dev, 2963 "%s: bus_dma_tag_create failed: %d\n", 2964 __func__, error); 2965 goto fail_0; 2966 } 2967 2968 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr, 2969 BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map); 2970 if (error) { 2971 device_printf(adapter->dev, 2972 "%s: bus_dmamem_alloc(%ju) failed: %d\n", 2973 __func__, (uintmax_t)size, error); 2974 goto fail_2; 2975 } 2976 2977 dma->dma_paddr = 0; 2978 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr, 2979 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT); 2980 if (error || dma->dma_paddr == 0) { 2981 device_printf(adapter->dev, 2982 "%s: bus_dmamap_load failed: %d\n", 2983 __func__, error); 2984 goto fail_3; 2985 } 2986 2987 return (0); 2988 2989 fail_3: 2990 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 2991 fail_2: 2992 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 2993 bus_dma_tag_destroy(dma->dma_tag); 2994 fail_0: 2995 dma->dma_map = NULL; 2996 dma->dma_tag = NULL; 2997 2998 return (error); 2999 } 3000 3001 static void 3002 em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma) 3003 { 3004 if (dma->dma_tag == NULL) 3005 return; 3006 if (dma->dma_map != NULL) { 3007 bus_dmamap_sync(dma->dma_tag, dma->dma_map, 3008 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 3009 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 3010 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 3011 dma->dma_map = NULL; 3012 } 3013 bus_dma_tag_destroy(dma->dma_tag); 3014 dma->dma_tag = NULL; 3015 } 3016 3017 3018 /********************************************************************* 3019 * 3020 * Allocate memory for the transmit and receive rings, and then 3021 * the descriptors associated with each, called only once at attach. 3022 * 3023 **********************************************************************/ 3024 static int 3025 em_allocate_queues(struct adapter *adapter) 3026 { 3027 device_t dev = adapter->dev; 3028 struct tx_ring *txr = NULL; 3029 struct rx_ring *rxr = NULL; 3030 int rsize, tsize, error = E1000_SUCCESS; 3031 int txconf = 0, rxconf = 0; 3032 3033 3034 /* Allocate the TX ring struct memory */ 3035 if (!(adapter->tx_rings = 3036 (struct tx_ring *) malloc(sizeof(struct tx_ring) * 3037 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) { 3038 device_printf(dev, "Unable to allocate TX ring memory\n"); 3039 error = ENOMEM; 3040 goto fail; 3041 } 3042 3043 /* Now allocate the RX */ 3044 if (!(adapter->rx_rings = 3045 (struct rx_ring *) malloc(sizeof(struct rx_ring) * 3046 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) { 3047 device_printf(dev, "Unable to allocate RX ring memory\n"); 3048 error = ENOMEM; 3049 goto rx_fail; 3050 } 3051 3052 tsize = roundup2(adapter->num_tx_desc * 3053 sizeof(struct e1000_tx_desc), EM_DBA_ALIGN); 3054 /* 3055 * Now set up the TX queues, txconf is needed to handle the 3056 * possibility that things fail midcourse and we need to 3057 * undo memory gracefully 3058 */ 3059 for (int i = 0; i < adapter->num_queues; i++, txconf++) { 3060 /* Set up some basics */ 3061 txr = &adapter->tx_rings[i]; 3062 txr->adapter = adapter; 3063 txr->me = i; 3064 3065 /* Initialize the TX lock */ 3066 snprintf(txr->mtx_name, sizeof(txr->mtx_name), "%s:tx(%d)", 3067 device_get_nameunit(dev), txr->me); 3068 mtx_init(&txr->tx_mtx, txr->mtx_name, NULL, MTX_DEF); 3069 3070 if (em_dma_malloc(adapter, tsize, 3071 &txr->txdma, BUS_DMA_NOWAIT)) { 3072 device_printf(dev, 3073 "Unable to allocate TX Descriptor memory\n"); 3074 error = ENOMEM; 3075 goto err_tx_desc; 3076 } 3077 txr->tx_base = (struct e1000_tx_desc *)txr->txdma.dma_vaddr; 3078 bzero((void *)txr->tx_base, tsize); 3079 3080 if (em_allocate_transmit_buffers(txr)) { 3081 device_printf(dev, 3082 "Critical Failure setting up transmit buffers\n"); 3083 error = ENOMEM; 3084 goto err_tx_desc; 3085 } 3086 #if __FreeBSD_version >= 800000 3087 /* Allocate a buf ring */ 3088 txr->br = buf_ring_alloc(4096, M_DEVBUF, 3089 M_WAITOK, &txr->tx_mtx); 3090 #endif 3091 } 3092 3093 /* 3094 * Next the RX queues... 3095 */ 3096 rsize = roundup2(adapter->num_rx_desc * 3097 sizeof(struct e1000_rx_desc), EM_DBA_ALIGN); 3098 for (int i = 0; i < adapter->num_queues; i++, rxconf++) { 3099 rxr = &adapter->rx_rings[i]; 3100 rxr->adapter = adapter; 3101 rxr->me = i; 3102 3103 /* Initialize the RX lock */ 3104 snprintf(rxr->mtx_name, sizeof(rxr->mtx_name), "%s:rx(%d)", 3105 device_get_nameunit(dev), txr->me); 3106 mtx_init(&rxr->rx_mtx, rxr->mtx_name, NULL, MTX_DEF); 3107 3108 if (em_dma_malloc(adapter, rsize, 3109 &rxr->rxdma, BUS_DMA_NOWAIT)) { 3110 device_printf(dev, 3111 "Unable to allocate RxDescriptor memory\n"); 3112 error = ENOMEM; 3113 goto err_rx_desc; 3114 } 3115 rxr->rx_base = (struct e1000_rx_desc *)rxr->rxdma.dma_vaddr; 3116 bzero((void *)rxr->rx_base, rsize); 3117 3118 /* Allocate receive buffers for the ring*/ 3119 if (em_allocate_receive_buffers(rxr)) { 3120 device_printf(dev, 3121 "Critical Failure setting up receive buffers\n"); 3122 error = ENOMEM; 3123 goto err_rx_desc; 3124 } 3125 } 3126 3127 return (0); 3128 3129 err_rx_desc: 3130 for (rxr = adapter->rx_rings; rxconf > 0; rxr++, rxconf--) 3131 em_dma_free(adapter, &rxr->rxdma); 3132 err_tx_desc: 3133 for (txr = adapter->tx_rings; txconf > 0; txr++, txconf--) 3134 em_dma_free(adapter, &txr->txdma); 3135 free(adapter->rx_rings, M_DEVBUF); 3136 rx_fail: 3137 #if __FreeBSD_version >= 800000 3138 buf_ring_free(txr->br, M_DEVBUF); 3139 #endif 3140 free(adapter->tx_rings, M_DEVBUF); 3141 fail: 3142 return (error); 3143 } 3144 3145 3146 /********************************************************************* 3147 * 3148 * Allocate memory for tx_buffer structures. The tx_buffer stores all 3149 * the information needed to transmit a packet on the wire. This is 3150 * called only once at attach, setup is done every reset. 3151 * 3152 **********************************************************************/ 3153 static int 3154 em_allocate_transmit_buffers(struct tx_ring *txr) 3155 { 3156 struct adapter *adapter = txr->adapter; 3157 device_t dev = adapter->dev; 3158 struct em_buffer *txbuf; 3159 int error, i; 3160 3161 /* 3162 * Setup DMA descriptor areas. 3163 */ 3164 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev), 3165 1, 0, /* alignment, bounds */ 3166 BUS_SPACE_MAXADDR, /* lowaddr */ 3167 BUS_SPACE_MAXADDR, /* highaddr */ 3168 NULL, NULL, /* filter, filterarg */ 3169 EM_TSO_SIZE, /* maxsize */ 3170 EM_MAX_SCATTER, /* nsegments */ 3171 PAGE_SIZE, /* maxsegsize */ 3172 0, /* flags */ 3173 NULL, /* lockfunc */ 3174 NULL, /* lockfuncarg */ 3175 &txr->txtag))) { 3176 device_printf(dev,"Unable to allocate TX DMA tag\n"); 3177 goto fail; 3178 } 3179 3180 if (!(txr->tx_buffers = 3181 (struct em_buffer *) malloc(sizeof(struct em_buffer) * 3182 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO))) { 3183 device_printf(dev, "Unable to allocate tx_buffer memory\n"); 3184 error = ENOMEM; 3185 goto fail; 3186 } 3187 3188 /* Create the descriptor buffer dma maps */ 3189 txbuf = txr->tx_buffers; 3190 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) { 3191 error = bus_dmamap_create(txr->txtag, 0, &txbuf->map); 3192 if (error != 0) { 3193 device_printf(dev, "Unable to create TX DMA map\n"); 3194 goto fail; 3195 } 3196 } 3197 3198 return 0; 3199 fail: 3200 /* We free all, it handles case where we are in the middle */ 3201 em_free_transmit_structures(adapter); 3202 return (error); 3203 } 3204 3205 /********************************************************************* 3206 * 3207 * Initialize a transmit ring. 3208 * 3209 **********************************************************************/ 3210 static void 3211 em_setup_transmit_ring(struct tx_ring *txr) 3212 { 3213 struct adapter *adapter = txr->adapter; 3214 struct em_buffer *txbuf; 3215 int i; 3216 3217 /* Clear the old descriptor contents */ 3218 EM_TX_LOCK(txr); 3219 bzero((void *)txr->tx_base, 3220 (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc); 3221 /* Reset indices */ 3222 txr->next_avail_desc = 0; 3223 txr->next_to_clean = 0; 3224 3225 /* Free any existing tx buffers. */ 3226 txbuf = txr->tx_buffers; 3227 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) { 3228 if (txbuf->m_head != NULL) { 3229 bus_dmamap_sync(txr->txtag, txbuf->map, 3230 BUS_DMASYNC_POSTWRITE); 3231 bus_dmamap_unload(txr->txtag, txbuf->map); 3232 m_freem(txbuf->m_head); 3233 txbuf->m_head = NULL; 3234 } 3235 /* clear the watch index */ 3236 txbuf->next_eop = -1; 3237 } 3238 3239 /* Set number of descriptors available */ 3240 txr->tx_avail = adapter->num_tx_desc; 3241 txr->queue_status = EM_QUEUE_IDLE; 3242 3243 /* Clear checksum offload context. */ 3244 txr->last_hw_offload = 0; 3245 txr->last_hw_ipcss = 0; 3246 txr->last_hw_ipcso = 0; 3247 txr->last_hw_tucss = 0; 3248 txr->last_hw_tucso = 0; 3249 3250 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map, 3251 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3252 EM_TX_UNLOCK(txr); 3253 } 3254 3255 /********************************************************************* 3256 * 3257 * Initialize all transmit rings. 3258 * 3259 **********************************************************************/ 3260 static void 3261 em_setup_transmit_structures(struct adapter *adapter) 3262 { 3263 struct tx_ring *txr = adapter->tx_rings; 3264 3265 for (int i = 0; i < adapter->num_queues; i++, txr++) 3266 em_setup_transmit_ring(txr); 3267 3268 return; 3269 } 3270 3271 /********************************************************************* 3272 * 3273 * Enable transmit unit. 3274 * 3275 **********************************************************************/ 3276 static void 3277 em_initialize_transmit_unit(struct adapter *adapter) 3278 { 3279 struct tx_ring *txr = adapter->tx_rings; 3280 struct e1000_hw *hw = &adapter->hw; 3281 u32 tctl, tarc, tipg = 0; 3282 3283 INIT_DEBUGOUT("em_initialize_transmit_unit: begin"); 3284 3285 for (int i = 0; i < adapter->num_queues; i++, txr++) { 3286 u64 bus_addr = txr->txdma.dma_paddr; 3287 /* Base and Len of TX Ring */ 3288 E1000_WRITE_REG(hw, E1000_TDLEN(i), 3289 adapter->num_tx_desc * sizeof(struct e1000_tx_desc)); 3290 E1000_WRITE_REG(hw, E1000_TDBAH(i), 3291 (u32)(bus_addr >> 32)); 3292 E1000_WRITE_REG(hw, E1000_TDBAL(i), 3293 (u32)bus_addr); 3294 /* Init the HEAD/TAIL indices */ 3295 E1000_WRITE_REG(hw, E1000_TDT(i), 0); 3296 E1000_WRITE_REG(hw, E1000_TDH(i), 0); 3297 3298 HW_DEBUGOUT2("Base = %x, Length = %x\n", 3299 E1000_READ_REG(&adapter->hw, E1000_TDBAL(i)), 3300 E1000_READ_REG(&adapter->hw, E1000_TDLEN(i))); 3301 3302 txr->queue_status = EM_QUEUE_IDLE; 3303 } 3304 3305 /* Set the default values for the Tx Inter Packet Gap timer */ 3306 switch (adapter->hw.mac.type) { 3307 case e1000_82542: 3308 tipg = DEFAULT_82542_TIPG_IPGT; 3309 tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 3310 tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 3311 break; 3312 case e1000_80003es2lan: 3313 tipg = DEFAULT_82543_TIPG_IPGR1; 3314 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 << 3315 E1000_TIPG_IPGR2_SHIFT; 3316 break; 3317 default: 3318 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 3319 (adapter->hw.phy.media_type == 3320 e1000_media_type_internal_serdes)) 3321 tipg = DEFAULT_82543_TIPG_IPGT_FIBER; 3322 else 3323 tipg = DEFAULT_82543_TIPG_IPGT_COPPER; 3324 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 3325 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 3326 } 3327 3328 E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg); 3329 E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value); 3330 3331 if(adapter->hw.mac.type >= e1000_82540) 3332 E1000_WRITE_REG(&adapter->hw, E1000_TADV, 3333 adapter->tx_abs_int_delay.value); 3334 3335 if ((adapter->hw.mac.type == e1000_82571) || 3336 (adapter->hw.mac.type == e1000_82572)) { 3337 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0)); 3338 tarc |= SPEED_MODE_BIT; 3339 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc); 3340 } else if (adapter->hw.mac.type == e1000_80003es2lan) { 3341 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0)); 3342 tarc |= 1; 3343 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc); 3344 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1)); 3345 tarc |= 1; 3346 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc); 3347 } 3348 3349 adapter->txd_cmd = E1000_TXD_CMD_IFCS; 3350 if (adapter->tx_int_delay.value > 0) 3351 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 3352 3353 /* Program the Transmit Control Register */ 3354 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL); 3355 tctl &= ~E1000_TCTL_CT; 3356 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN | 3357 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT)); 3358 3359 if (adapter->hw.mac.type >= e1000_82571) 3360 tctl |= E1000_TCTL_MULR; 3361 3362 /* This write will effectively turn on the transmit unit. */ 3363 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl); 3364 3365 } 3366 3367 3368 /********************************************************************* 3369 * 3370 * Free all transmit rings. 3371 * 3372 **********************************************************************/ 3373 static void 3374 em_free_transmit_structures(struct adapter *adapter) 3375 { 3376 struct tx_ring *txr = adapter->tx_rings; 3377 3378 for (int i = 0; i < adapter->num_queues; i++, txr++) { 3379 EM_TX_LOCK(txr); 3380 em_free_transmit_buffers(txr); 3381 em_dma_free(adapter, &txr->txdma); 3382 EM_TX_UNLOCK(txr); 3383 EM_TX_LOCK_DESTROY(txr); 3384 } 3385 3386 free(adapter->tx_rings, M_DEVBUF); 3387 } 3388 3389 /********************************************************************* 3390 * 3391 * Free transmit ring related data structures. 3392 * 3393 **********************************************************************/ 3394 static void 3395 em_free_transmit_buffers(struct tx_ring *txr) 3396 { 3397 struct adapter *adapter = txr->adapter; 3398 struct em_buffer *txbuf; 3399 3400 INIT_DEBUGOUT("free_transmit_ring: begin"); 3401 3402 if (txr->tx_buffers == NULL) 3403 return; 3404 3405 for (int i = 0; i < adapter->num_tx_desc; i++) { 3406 txbuf = &txr->tx_buffers[i]; 3407 if (txbuf->m_head != NULL) { 3408 bus_dmamap_sync(txr->txtag, txbuf->map, 3409 BUS_DMASYNC_POSTWRITE); 3410 bus_dmamap_unload(txr->txtag, 3411 txbuf->map); 3412 m_freem(txbuf->m_head); 3413 txbuf->m_head = NULL; 3414 if (txbuf->map != NULL) { 3415 bus_dmamap_destroy(txr->txtag, 3416 txbuf->map); 3417 txbuf->map = NULL; 3418 } 3419 } else if (txbuf->map != NULL) { 3420 bus_dmamap_unload(txr->txtag, 3421 txbuf->map); 3422 bus_dmamap_destroy(txr->txtag, 3423 txbuf->map); 3424 txbuf->map = NULL; 3425 } 3426 } 3427 #if __FreeBSD_version >= 800000 3428 if (txr->br != NULL) 3429 buf_ring_free(txr->br, M_DEVBUF); 3430 #endif 3431 if (txr->tx_buffers != NULL) { 3432 free(txr->tx_buffers, M_DEVBUF); 3433 txr->tx_buffers = NULL; 3434 } 3435 if (txr->txtag != NULL) { 3436 bus_dma_tag_destroy(txr->txtag); 3437 txr->txtag = NULL; 3438 } 3439 return; 3440 } 3441 3442 3443 /********************************************************************* 3444 * The offload context is protocol specific (TCP/UDP) and thus 3445 * only needs to be set when the protocol changes. The occasion 3446 * of a context change can be a performance detriment, and 3447 * might be better just disabled. The reason arises in the way 3448 * in which the controller supports pipelined requests from the 3449 * Tx data DMA. Up to four requests can be pipelined, and they may 3450 * belong to the same packet or to multiple packets. However all 3451 * requests for one packet are issued before a request is issued 3452 * for a subsequent packet and if a request for the next packet 3453 * requires a context change, that request will be stalled 3454 * until the previous request completes. This means setting up 3455 * a new context effectively disables pipelined Tx data DMA which 3456 * in turn greatly slow down performance to send small sized 3457 * frames. 3458 **********************************************************************/ 3459 static void 3460 em_transmit_checksum_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off, 3461 struct ip *ip, u32 *txd_upper, u32 *txd_lower) 3462 { 3463 struct adapter *adapter = txr->adapter; 3464 struct e1000_context_desc *TXD = NULL; 3465 struct em_buffer *tx_buffer; 3466 int cur, hdr_len; 3467 u32 cmd = 0; 3468 u16 offload = 0; 3469 u8 ipcso, ipcss, tucso, tucss; 3470 3471 ipcss = ipcso = tucss = tucso = 0; 3472 hdr_len = ip_off + (ip->ip_hl << 2); 3473 cur = txr->next_avail_desc; 3474 3475 /* Setup of IP header checksum. */ 3476 if (mp->m_pkthdr.csum_flags & CSUM_IP) { 3477 *txd_upper |= E1000_TXD_POPTS_IXSM << 8; 3478 offload |= CSUM_IP; 3479 ipcss = ip_off; 3480 ipcso = ip_off + offsetof(struct ip, ip_sum); 3481 /* 3482 * Start offset for header checksum calculation. 3483 * End offset for header checksum calculation. 3484 * Offset of place to put the checksum. 3485 */ 3486 TXD = (struct e1000_context_desc *)&txr->tx_base[cur]; 3487 TXD->lower_setup.ip_fields.ipcss = ipcss; 3488 TXD->lower_setup.ip_fields.ipcse = htole16(hdr_len); 3489 TXD->lower_setup.ip_fields.ipcso = ipcso; 3490 cmd |= E1000_TXD_CMD_IP; 3491 } 3492 3493 if (mp->m_pkthdr.csum_flags & CSUM_TCP) { 3494 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 3495 *txd_upper |= E1000_TXD_POPTS_TXSM << 8; 3496 offload |= CSUM_TCP; 3497 tucss = hdr_len; 3498 tucso = hdr_len + offsetof(struct tcphdr, th_sum); 3499 /* 3500 * Setting up new checksum offload context for every frames 3501 * takes a lot of processing time for hardware. This also 3502 * reduces performance a lot for small sized frames so avoid 3503 * it if driver can use previously configured checksum 3504 * offload context. 3505 */ 3506 if (txr->last_hw_offload == offload) { 3507 if (offload & CSUM_IP) { 3508 if (txr->last_hw_ipcss == ipcss && 3509 txr->last_hw_ipcso == ipcso && 3510 txr->last_hw_tucss == tucss && 3511 txr->last_hw_tucso == tucso) 3512 return; 3513 } else { 3514 if (txr->last_hw_tucss == tucss && 3515 txr->last_hw_tucso == tucso) 3516 return; 3517 } 3518 } 3519 txr->last_hw_offload = offload; 3520 txr->last_hw_tucss = tucss; 3521 txr->last_hw_tucso = tucso; 3522 /* 3523 * Start offset for payload checksum calculation. 3524 * End offset for payload checksum calculation. 3525 * Offset of place to put the checksum. 3526 */ 3527 TXD = (struct e1000_context_desc *)&txr->tx_base[cur]; 3528 TXD->upper_setup.tcp_fields.tucss = hdr_len; 3529 TXD->upper_setup.tcp_fields.tucse = htole16(0); 3530 TXD->upper_setup.tcp_fields.tucso = tucso; 3531 cmd |= E1000_TXD_CMD_TCP; 3532 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) { 3533 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 3534 *txd_upper |= E1000_TXD_POPTS_TXSM << 8; 3535 tucss = hdr_len; 3536 tucso = hdr_len + offsetof(struct udphdr, uh_sum); 3537 /* 3538 * Setting up new checksum offload context for every frames 3539 * takes a lot of processing time for hardware. This also 3540 * reduces performance a lot for small sized frames so avoid 3541 * it if driver can use previously configured checksum 3542 * offload context. 3543 */ 3544 if (txr->last_hw_offload == offload) { 3545 if (offload & CSUM_IP) { 3546 if (txr->last_hw_ipcss == ipcss && 3547 txr->last_hw_ipcso == ipcso && 3548 txr->last_hw_tucss == tucss && 3549 txr->last_hw_tucso == tucso) 3550 return; 3551 } else { 3552 if (txr->last_hw_tucss == tucss && 3553 txr->last_hw_tucso == tucso) 3554 return; 3555 } 3556 } 3557 txr->last_hw_offload = offload; 3558 txr->last_hw_tucss = tucss; 3559 txr->last_hw_tucso = tucso; 3560 /* 3561 * Start offset for header checksum calculation. 3562 * End offset for header checksum calculation. 3563 * Offset of place to put the checksum. 3564 */ 3565 TXD = (struct e1000_context_desc *)&txr->tx_base[cur]; 3566 TXD->upper_setup.tcp_fields.tucss = tucss; 3567 TXD->upper_setup.tcp_fields.tucse = htole16(0); 3568 TXD->upper_setup.tcp_fields.tucso = tucso; 3569 } 3570 3571 if (offload & CSUM_IP) { 3572 txr->last_hw_ipcss = ipcss; 3573 txr->last_hw_ipcso = ipcso; 3574 } 3575 3576 TXD->tcp_seg_setup.data = htole32(0); 3577 TXD->cmd_and_length = 3578 htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd); 3579 tx_buffer = &txr->tx_buffers[cur]; 3580 tx_buffer->m_head = NULL; 3581 tx_buffer->next_eop = -1; 3582 3583 if (++cur == adapter->num_tx_desc) 3584 cur = 0; 3585 3586 txr->tx_avail--; 3587 txr->next_avail_desc = cur; 3588 } 3589 3590 3591 /********************************************************************** 3592 * 3593 * Setup work for hardware segmentation offload (TSO) 3594 * 3595 **********************************************************************/ 3596 static void 3597 em_tso_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off, 3598 struct ip *ip, struct tcphdr *tp, u32 *txd_upper, u32 *txd_lower) 3599 { 3600 struct adapter *adapter = txr->adapter; 3601 struct e1000_context_desc *TXD; 3602 struct em_buffer *tx_buffer; 3603 int cur, hdr_len; 3604 3605 /* 3606 * In theory we can use the same TSO context if and only if 3607 * frame is the same type(IP/TCP) and the same MSS. However 3608 * checking whether a frame has the same IP/TCP structure is 3609 * hard thing so just ignore that and always restablish a 3610 * new TSO context. 3611 */ 3612 hdr_len = ip_off + (ip->ip_hl << 2) + (tp->th_off << 2); 3613 *txd_lower = (E1000_TXD_CMD_DEXT | /* Extended descr type */ 3614 E1000_TXD_DTYP_D | /* Data descr type */ 3615 E1000_TXD_CMD_TSE); /* Do TSE on this packet */ 3616 3617 /* IP and/or TCP header checksum calculation and insertion. */ 3618 *txd_upper = (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8; 3619 3620 cur = txr->next_avail_desc; 3621 tx_buffer = &txr->tx_buffers[cur]; 3622 TXD = (struct e1000_context_desc *) &txr->tx_base[cur]; 3623 3624 /* 3625 * Start offset for header checksum calculation. 3626 * End offset for header checksum calculation. 3627 * Offset of place put the checksum. 3628 */ 3629 TXD->lower_setup.ip_fields.ipcss = ip_off; 3630 TXD->lower_setup.ip_fields.ipcse = 3631 htole16(ip_off + (ip->ip_hl << 2) - 1); 3632 TXD->lower_setup.ip_fields.ipcso = ip_off + offsetof(struct ip, ip_sum); 3633 /* 3634 * Start offset for payload checksum calculation. 3635 * End offset for payload checksum calculation. 3636 * Offset of place to put the checksum. 3637 */ 3638 TXD->upper_setup.tcp_fields.tucss = ip_off + (ip->ip_hl << 2); 3639 TXD->upper_setup.tcp_fields.tucse = 0; 3640 TXD->upper_setup.tcp_fields.tucso = 3641 ip_off + (ip->ip_hl << 2) + offsetof(struct tcphdr, th_sum); 3642 /* 3643 * Payload size per packet w/o any headers. 3644 * Length of all headers up to payload. 3645 */ 3646 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz); 3647 TXD->tcp_seg_setup.fields.hdr_len = hdr_len; 3648 3649 TXD->cmd_and_length = htole32(adapter->txd_cmd | 3650 E1000_TXD_CMD_DEXT | /* Extended descr */ 3651 E1000_TXD_CMD_TSE | /* TSE context */ 3652 E1000_TXD_CMD_IP | /* Do IP csum */ 3653 E1000_TXD_CMD_TCP | /* Do TCP checksum */ 3654 (mp->m_pkthdr.len - (hdr_len))); /* Total len */ 3655 3656 tx_buffer->m_head = NULL; 3657 tx_buffer->next_eop = -1; 3658 3659 if (++cur == adapter->num_tx_desc) 3660 cur = 0; 3661 3662 txr->tx_avail--; 3663 txr->next_avail_desc = cur; 3664 txr->tx_tso = TRUE; 3665 } 3666 3667 3668 /********************************************************************** 3669 * 3670 * Examine each tx_buffer in the used queue. If the hardware is done 3671 * processing the packet then free associated resources. The 3672 * tx_buffer is put back on the free queue. 3673 * 3674 **********************************************************************/ 3675 static bool 3676 em_txeof(struct tx_ring *txr) 3677 { 3678 struct adapter *adapter = txr->adapter; 3679 int first, last, done, processed; 3680 struct em_buffer *tx_buffer; 3681 struct e1000_tx_desc *tx_desc, *eop_desc; 3682 struct ifnet *ifp = adapter->ifp; 3683 3684 EM_TX_LOCK_ASSERT(txr); 3685 3686 /* No work, make sure watchdog is off */ 3687 if (txr->tx_avail == adapter->num_tx_desc) { 3688 txr->queue_status = EM_QUEUE_IDLE; 3689 return (FALSE); 3690 } 3691 3692 processed = 0; 3693 first = txr->next_to_clean; 3694 tx_desc = &txr->tx_base[first]; 3695 tx_buffer = &txr->tx_buffers[first]; 3696 last = tx_buffer->next_eop; 3697 eop_desc = &txr->tx_base[last]; 3698 3699 /* 3700 * What this does is get the index of the 3701 * first descriptor AFTER the EOP of the 3702 * first packet, that way we can do the 3703 * simple comparison on the inner while loop. 3704 */ 3705 if (++last == adapter->num_tx_desc) 3706 last = 0; 3707 done = last; 3708 3709 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map, 3710 BUS_DMASYNC_POSTREAD); 3711 3712 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) { 3713 /* We clean the range of the packet */ 3714 while (first != done) { 3715 tx_desc->upper.data = 0; 3716 tx_desc->lower.data = 0; 3717 tx_desc->buffer_addr = 0; 3718 ++txr->tx_avail; 3719 ++processed; 3720 3721 if (tx_buffer->m_head) { 3722 bus_dmamap_sync(txr->txtag, 3723 tx_buffer->map, 3724 BUS_DMASYNC_POSTWRITE); 3725 bus_dmamap_unload(txr->txtag, 3726 tx_buffer->map); 3727 m_freem(tx_buffer->m_head); 3728 tx_buffer->m_head = NULL; 3729 } 3730 tx_buffer->next_eop = -1; 3731 txr->watchdog_time = ticks; 3732 3733 if (++first == adapter->num_tx_desc) 3734 first = 0; 3735 3736 tx_buffer = &txr->tx_buffers[first]; 3737 tx_desc = &txr->tx_base[first]; 3738 } 3739 ++ifp->if_opackets; 3740 /* See if we can continue to the next packet */ 3741 last = tx_buffer->next_eop; 3742 if (last != -1) { 3743 eop_desc = &txr->tx_base[last]; 3744 /* Get new done point */ 3745 if (++last == adapter->num_tx_desc) last = 0; 3746 done = last; 3747 } else 3748 break; 3749 } 3750 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map, 3751 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3752 3753 txr->next_to_clean = first; 3754 3755 /* 3756 ** Watchdog calculation, we know there's 3757 ** work outstanding or the first return 3758 ** would have been taken, so none processed 3759 ** for too long indicates a hang. local timer 3760 ** will examine this and do a reset if needed. 3761 */ 3762 if ((!processed) && ((ticks - txr->watchdog_time) > EM_WATCHDOG)) 3763 txr->queue_status = EM_QUEUE_HUNG; 3764 3765 /* 3766 * If we have a minimum free, clear IFF_DRV_OACTIVE 3767 * to tell the stack that it is OK to send packets. 3768 */ 3769 if (txr->tx_avail > EM_MAX_SCATTER) 3770 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 3771 3772 /* Disable watchdog if all clean */ 3773 if (txr->tx_avail == adapter->num_tx_desc) { 3774 txr->queue_status = EM_QUEUE_IDLE; 3775 return (FALSE); 3776 } 3777 3778 return (TRUE); 3779 } 3780 3781 3782 /********************************************************************* 3783 * 3784 * Refresh RX descriptor mbufs from system mbuf buffer pool. 3785 * 3786 **********************************************************************/ 3787 static void 3788 em_refresh_mbufs(struct rx_ring *rxr, int limit) 3789 { 3790 struct adapter *adapter = rxr->adapter; 3791 struct mbuf *m; 3792 bus_dma_segment_t segs[1]; 3793 struct em_buffer *rxbuf; 3794 int i, j, error, nsegs; 3795 bool cleaned = FALSE; 3796 3797 i = j = rxr->next_to_refresh; 3798 /* 3799 ** Get one descriptor beyond 3800 ** our work mark to control 3801 ** the loop. 3802 */ 3803 if (++j == adapter->num_rx_desc) 3804 j = 0; 3805 3806 while (j != limit) { 3807 rxbuf = &rxr->rx_buffers[i]; 3808 if (rxbuf->m_head == NULL) { 3809 m = m_getjcl(M_DONTWAIT, MT_DATA, 3810 M_PKTHDR, adapter->rx_mbuf_sz); 3811 /* 3812 ** If we have a temporary resource shortage 3813 ** that causes a failure, just abort refresh 3814 ** for now, we will return to this point when 3815 ** reinvoked from em_rxeof. 3816 */ 3817 if (m == NULL) 3818 goto update; 3819 } else 3820 m = rxbuf->m_head; 3821 3822 m->m_len = m->m_pkthdr.len = adapter->rx_mbuf_sz; 3823 m->m_flags |= M_PKTHDR; 3824 m->m_data = m->m_ext.ext_buf; 3825 3826 /* Use bus_dma machinery to setup the memory mapping */ 3827 error = bus_dmamap_load_mbuf_sg(rxr->rxtag, rxbuf->map, 3828 m, segs, &nsegs, BUS_DMA_NOWAIT); 3829 if (error != 0) { 3830 printf("Refresh mbufs: hdr dmamap load" 3831 " failure - %d\n", error); 3832 m_free(m); 3833 rxbuf->m_head = NULL; 3834 goto update; 3835 } 3836 rxbuf->m_head = m; 3837 bus_dmamap_sync(rxr->rxtag, 3838 rxbuf->map, BUS_DMASYNC_PREREAD); 3839 rxr->rx_base[i].buffer_addr = htole64(segs[0].ds_addr); 3840 cleaned = TRUE; 3841 3842 i = j; /* Next is precalulated for us */ 3843 rxr->next_to_refresh = i; 3844 /* Calculate next controlling index */ 3845 if (++j == adapter->num_rx_desc) 3846 j = 0; 3847 } 3848 update: 3849 /* 3850 ** Update the tail pointer only if, 3851 ** and as far as we have refreshed. 3852 */ 3853 if (cleaned) 3854 E1000_WRITE_REG(&adapter->hw, 3855 E1000_RDT(rxr->me), rxr->next_to_refresh); 3856 3857 return; 3858 } 3859 3860 3861 /********************************************************************* 3862 * 3863 * Allocate memory for rx_buffer structures. Since we use one 3864 * rx_buffer per received packet, the maximum number of rx_buffer's 3865 * that we'll need is equal to the number of receive descriptors 3866 * that we've allocated. 3867 * 3868 **********************************************************************/ 3869 static int 3870 em_allocate_receive_buffers(struct rx_ring *rxr) 3871 { 3872 struct adapter *adapter = rxr->adapter; 3873 device_t dev = adapter->dev; 3874 struct em_buffer *rxbuf; 3875 int error; 3876 3877 rxr->rx_buffers = malloc(sizeof(struct em_buffer) * 3878 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO); 3879 if (rxr->rx_buffers == NULL) { 3880 device_printf(dev, "Unable to allocate rx_buffer memory\n"); 3881 return (ENOMEM); 3882 } 3883 3884 error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */ 3885 1, 0, /* alignment, bounds */ 3886 BUS_SPACE_MAXADDR, /* lowaddr */ 3887 BUS_SPACE_MAXADDR, /* highaddr */ 3888 NULL, NULL, /* filter, filterarg */ 3889 MJUM9BYTES, /* maxsize */ 3890 1, /* nsegments */ 3891 MJUM9BYTES, /* maxsegsize */ 3892 0, /* flags */ 3893 NULL, /* lockfunc */ 3894 NULL, /* lockarg */ 3895 &rxr->rxtag); 3896 if (error) { 3897 device_printf(dev, "%s: bus_dma_tag_create failed %d\n", 3898 __func__, error); 3899 goto fail; 3900 } 3901 3902 rxbuf = rxr->rx_buffers; 3903 for (int i = 0; i < adapter->num_rx_desc; i++, rxbuf++) { 3904 rxbuf = &rxr->rx_buffers[i]; 3905 error = bus_dmamap_create(rxr->rxtag, BUS_DMA_NOWAIT, 3906 &rxbuf->map); 3907 if (error) { 3908 device_printf(dev, "%s: bus_dmamap_create failed: %d\n", 3909 __func__, error); 3910 goto fail; 3911 } 3912 } 3913 3914 return (0); 3915 3916 fail: 3917 em_free_receive_structures(adapter); 3918 return (error); 3919 } 3920 3921 3922 /********************************************************************* 3923 * 3924 * Initialize a receive ring and its buffers. 3925 * 3926 **********************************************************************/ 3927 static int 3928 em_setup_receive_ring(struct rx_ring *rxr) 3929 { 3930 struct adapter *adapter = rxr->adapter; 3931 struct em_buffer *rxbuf; 3932 bus_dma_segment_t seg[1]; 3933 int i, j, nsegs, error = 0; 3934 3935 3936 /* Clear the ring contents */ 3937 EM_RX_LOCK(rxr); 3938 3939 /* Invalidate all descriptors */ 3940 for (i = 0; i < adapter->num_rx_desc; i++) { 3941 struct e1000_rx_desc* cur; 3942 cur = &rxr->rx_base[i]; 3943 cur->status = 0; 3944 } 3945 3946 /* Now replenish the mbufs */ 3947 i = j = rxr->next_to_refresh; 3948 if (++j == adapter->num_rx_desc) 3949 j = 0; 3950 3951 while (j != rxr->next_to_check) { 3952 rxbuf = &rxr->rx_buffers[i]; 3953 rxbuf->m_head = m_getjcl(M_DONTWAIT, MT_DATA, 3954 M_PKTHDR, adapter->rx_mbuf_sz); 3955 if (rxbuf->m_head == NULL) { 3956 error = ENOBUFS; 3957 goto fail; 3958 } 3959 rxbuf->m_head->m_len = adapter->rx_mbuf_sz; 3960 rxbuf->m_head->m_flags &= ~M_HASFCS; /* we strip it */ 3961 rxbuf->m_head->m_pkthdr.len = adapter->rx_mbuf_sz; 3962 3963 /* Get the memory mapping */ 3964 error = bus_dmamap_load_mbuf_sg(rxr->rxtag, 3965 rxbuf->map, rxbuf->m_head, seg, 3966 &nsegs, BUS_DMA_NOWAIT); 3967 if (error != 0) { 3968 m_freem(rxbuf->m_head); 3969 rxbuf->m_head = NULL; 3970 goto fail; 3971 } 3972 bus_dmamap_sync(rxr->rxtag, 3973 rxbuf->map, BUS_DMASYNC_PREREAD); 3974 3975 /* Update descriptor */ 3976 rxr->rx_base[i].buffer_addr = htole64(seg[0].ds_addr); 3977 i = j; 3978 if (++j == adapter->num_rx_desc) 3979 j = 0; 3980 } 3981 3982 fail: 3983 rxr->next_to_refresh = i; 3984 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map, 3985 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3986 EM_RX_UNLOCK(rxr); 3987 return (error); 3988 } 3989 3990 /********************************************************************* 3991 * 3992 * Initialize all receive rings. 3993 * 3994 **********************************************************************/ 3995 static int 3996 em_setup_receive_structures(struct adapter *adapter) 3997 { 3998 struct rx_ring *rxr = adapter->rx_rings; 3999 int q; 4000 4001 for (q = 0; q < adapter->num_queues; q++, rxr++) 4002 if (em_setup_receive_ring(rxr)) 4003 goto fail; 4004 4005 return (0); 4006 fail: 4007 /* 4008 * Free RX buffers allocated so far, we will only handle 4009 * the rings that completed, the failing case will have 4010 * cleaned up for itself. 'q' failed, so its the terminus. 4011 */ 4012 for (int i = 0, n = 0; i < q; ++i) { 4013 rxr = &adapter->rx_rings[i]; 4014 n = rxr->next_to_check; 4015 while(n != rxr->next_to_refresh) { 4016 struct em_buffer *rxbuf; 4017 rxbuf = &rxr->rx_buffers[n]; 4018 if (rxbuf->m_head != NULL) { 4019 bus_dmamap_sync(rxr->rxtag, rxbuf->map, 4020 BUS_DMASYNC_POSTREAD); 4021 bus_dmamap_unload(rxr->rxtag, rxbuf->map); 4022 m_freem(rxbuf->m_head); 4023 rxbuf->m_head = NULL; 4024 } 4025 if (++n == adapter->num_rx_desc) 4026 n = 0; 4027 } 4028 rxr->next_to_check = 0; 4029 rxr->next_to_refresh = 0; 4030 } 4031 4032 return (ENOBUFS); 4033 } 4034 4035 /********************************************************************* 4036 * 4037 * Free all receive rings. 4038 * 4039 **********************************************************************/ 4040 static void 4041 em_free_receive_structures(struct adapter *adapter) 4042 { 4043 struct rx_ring *rxr = adapter->rx_rings; 4044 4045 for (int i = 0; i < adapter->num_queues; i++, rxr++) { 4046 em_free_receive_buffers(rxr); 4047 /* Free the ring memory as well */ 4048 em_dma_free(adapter, &rxr->rxdma); 4049 EM_RX_LOCK_DESTROY(rxr); 4050 } 4051 4052 free(adapter->rx_rings, M_DEVBUF); 4053 } 4054 4055 4056 /********************************************************************* 4057 * 4058 * Free receive ring data structures 4059 * 4060 **********************************************************************/ 4061 static void 4062 em_free_receive_buffers(struct rx_ring *rxr) 4063 { 4064 struct adapter *adapter = rxr->adapter; 4065 struct em_buffer *rxbuf = NULL; 4066 4067 INIT_DEBUGOUT("free_receive_buffers: begin"); 4068 4069 if (rxr->rx_buffers != NULL) { 4070 int i = rxr->next_to_check; 4071 while(i != rxr->next_to_refresh) { 4072 rxbuf = &rxr->rx_buffers[i]; 4073 if (rxbuf->map != NULL) { 4074 bus_dmamap_sync(rxr->rxtag, rxbuf->map, 4075 BUS_DMASYNC_POSTREAD); 4076 bus_dmamap_unload(rxr->rxtag, rxbuf->map); 4077 bus_dmamap_destroy(rxr->rxtag, rxbuf->map); 4078 } 4079 if (rxbuf->m_head != NULL) { 4080 m_freem(rxbuf->m_head); 4081 rxbuf->m_head = NULL; 4082 } 4083 if (++i == adapter->num_rx_desc) 4084 i = 0; 4085 } 4086 free(rxr->rx_buffers, M_DEVBUF); 4087 rxr->rx_buffers = NULL; 4088 rxr->next_to_check = 0; 4089 rxr->next_to_refresh = 0; 4090 } 4091 4092 if (rxr->rxtag != NULL) { 4093 bus_dma_tag_destroy(rxr->rxtag); 4094 rxr->rxtag = NULL; 4095 } 4096 4097 return; 4098 } 4099 4100 4101 /********************************************************************* 4102 * 4103 * Enable receive unit. 4104 * 4105 **********************************************************************/ 4106 #define MAX_INTS_PER_SEC 8000 4107 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256) 4108 4109 static void 4110 em_initialize_receive_unit(struct adapter *adapter) 4111 { 4112 struct rx_ring *rxr = adapter->rx_rings; 4113 struct ifnet *ifp = adapter->ifp; 4114 struct e1000_hw *hw = &adapter->hw; 4115 u64 bus_addr; 4116 u32 rctl, rxcsum; 4117 4118 INIT_DEBUGOUT("em_initialize_receive_units: begin"); 4119 4120 /* 4121 * Make sure receives are disabled while setting 4122 * up the descriptor ring 4123 */ 4124 rctl = E1000_READ_REG(hw, E1000_RCTL); 4125 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN); 4126 4127 E1000_WRITE_REG(&adapter->hw, E1000_RADV, 4128 adapter->rx_abs_int_delay.value); 4129 /* 4130 * Set the interrupt throttling rate. Value is calculated 4131 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) 4132 */ 4133 E1000_WRITE_REG(hw, E1000_ITR, DEFAULT_ITR); 4134 4135 /* 4136 ** When using MSIX interrupts we need to throttle 4137 ** using the EITR register (82574 only) 4138 */ 4139 if (hw->mac.type == e1000_82574) 4140 for (int i = 0; i < 4; i++) 4141 E1000_WRITE_REG(hw, E1000_EITR_82574(i), 4142 DEFAULT_ITR); 4143 4144 /* Disable accelerated ackknowledge */ 4145 if (adapter->hw.mac.type == e1000_82574) 4146 E1000_WRITE_REG(hw, E1000_RFCTL, E1000_RFCTL_ACK_DIS); 4147 4148 if (ifp->if_capenable & IFCAP_RXCSUM) { 4149 rxcsum = E1000_READ_REG(hw, E1000_RXCSUM); 4150 rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL); 4151 E1000_WRITE_REG(hw, E1000_RXCSUM, rxcsum); 4152 } 4153 4154 /* 4155 ** XXX TEMPORARY WORKAROUND: on some systems with 82573 4156 ** long latencies are observed, like Lenovo X60. This 4157 ** change eliminates the problem, but since having positive 4158 ** values in RDTR is a known source of problems on other 4159 ** platforms another solution is being sought. 4160 */ 4161 if (hw->mac.type == e1000_82573) 4162 E1000_WRITE_REG(hw, E1000_RDTR, 0x20); 4163 4164 for (int i = 0; i < adapter->num_queues; i++, rxr++) { 4165 /* Setup the Base and Length of the Rx Descriptor Ring */ 4166 bus_addr = rxr->rxdma.dma_paddr; 4167 E1000_WRITE_REG(hw, E1000_RDLEN(i), 4168 adapter->num_rx_desc * sizeof(struct e1000_rx_desc)); 4169 E1000_WRITE_REG(hw, E1000_RDBAH(i), (u32)(bus_addr >> 32)); 4170 E1000_WRITE_REG(hw, E1000_RDBAL(i), (u32)bus_addr); 4171 /* Setup the Head and Tail Descriptor Pointers */ 4172 E1000_WRITE_REG(hw, E1000_RDH(i), rxr->next_to_check); 4173 E1000_WRITE_REG(hw, E1000_RDT(i), rxr->next_to_refresh); 4174 } 4175 4176 /* Set early receive threshold on appropriate hw */ 4177 if (((adapter->hw.mac.type == e1000_ich9lan) || 4178 (adapter->hw.mac.type == e1000_pch2lan) || 4179 (adapter->hw.mac.type == e1000_ich10lan)) && 4180 (ifp->if_mtu > ETHERMTU)) { 4181 u32 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(0)); 4182 E1000_WRITE_REG(hw, E1000_RXDCTL(0), rxdctl | 3); 4183 E1000_WRITE_REG(hw, E1000_ERT, 0x100 | (1 << 13)); 4184 } 4185 4186 if (adapter->hw.mac.type == e1000_pch2lan) { 4187 if (ifp->if_mtu > ETHERMTU) 4188 e1000_lv_jumbo_workaround_ich8lan(hw, TRUE); 4189 else 4190 e1000_lv_jumbo_workaround_ich8lan(hw, FALSE); 4191 } 4192 4193 /* Setup the Receive Control Register */ 4194 rctl &= ~(3 << E1000_RCTL_MO_SHIFT); 4195 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | 4196 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF | 4197 (hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT); 4198 4199 /* Strip the CRC */ 4200 rctl |= E1000_RCTL_SECRC; 4201 4202 /* Make sure VLAN Filters are off */ 4203 rctl &= ~E1000_RCTL_VFE; 4204 rctl &= ~E1000_RCTL_SBP; 4205 4206 if (adapter->rx_mbuf_sz == MCLBYTES) 4207 rctl |= E1000_RCTL_SZ_2048; 4208 else if (adapter->rx_mbuf_sz == MJUMPAGESIZE) 4209 rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX; 4210 else if (adapter->rx_mbuf_sz > MJUMPAGESIZE) 4211 rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX; 4212 4213 if (ifp->if_mtu > ETHERMTU) 4214 rctl |= E1000_RCTL_LPE; 4215 else 4216 rctl &= ~E1000_RCTL_LPE; 4217 4218 /* Write out the settings */ 4219 E1000_WRITE_REG(hw, E1000_RCTL, rctl); 4220 4221 return; 4222 } 4223 4224 4225 /********************************************************************* 4226 * 4227 * This routine executes in interrupt context. It replenishes 4228 * the mbufs in the descriptor and sends data which has been 4229 * dma'ed into host memory to upper layer. 4230 * 4231 * We loop at most count times if count is > 0, or until done if 4232 * count < 0. 4233 * 4234 * For polling we also now return the number of cleaned packets 4235 *********************************************************************/ 4236 static bool 4237 em_rxeof(struct rx_ring *rxr, int count, int *done) 4238 { 4239 struct adapter *adapter = rxr->adapter; 4240 struct ifnet *ifp = adapter->ifp; 4241 struct mbuf *mp, *sendmp; 4242 u8 status = 0; 4243 u16 len; 4244 int i, processed, rxdone = 0; 4245 bool eop; 4246 struct e1000_rx_desc *cur; 4247 4248 EM_RX_LOCK(rxr); 4249 4250 for (i = rxr->next_to_check, processed = 0; count != 0;) { 4251 4252 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) 4253 break; 4254 4255 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map, 4256 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 4257 4258 cur = &rxr->rx_base[i]; 4259 status = cur->status; 4260 mp = sendmp = NULL; 4261 4262 if ((status & E1000_RXD_STAT_DD) == 0) 4263 break; 4264 4265 len = le16toh(cur->length); 4266 eop = (status & E1000_RXD_STAT_EOP) != 0; 4267 4268 if ((cur->errors & E1000_RXD_ERR_FRAME_ERR_MASK) || 4269 (rxr->discard == TRUE)) { 4270 ifp->if_ierrors++; 4271 ++rxr->rx_discarded; 4272 if (!eop) /* Catch subsequent segs */ 4273 rxr->discard = TRUE; 4274 else 4275 rxr->discard = FALSE; 4276 em_rx_discard(rxr, i); 4277 goto next_desc; 4278 } 4279 4280 /* Assign correct length to the current fragment */ 4281 mp = rxr->rx_buffers[i].m_head; 4282 mp->m_len = len; 4283 4284 /* Trigger for refresh */ 4285 rxr->rx_buffers[i].m_head = NULL; 4286 4287 /* First segment? */ 4288 if (rxr->fmp == NULL) { 4289 mp->m_pkthdr.len = len; 4290 rxr->fmp = rxr->lmp = mp; 4291 } else { 4292 /* Chain mbuf's together */ 4293 mp->m_flags &= ~M_PKTHDR; 4294 rxr->lmp->m_next = mp; 4295 rxr->lmp = mp; 4296 rxr->fmp->m_pkthdr.len += len; 4297 } 4298 4299 if (eop) { 4300 --count; 4301 sendmp = rxr->fmp; 4302 sendmp->m_pkthdr.rcvif = ifp; 4303 ifp->if_ipackets++; 4304 em_receive_checksum(cur, sendmp); 4305 #ifndef __NO_STRICT_ALIGNMENT 4306 if (adapter->max_frame_size > 4307 (MCLBYTES - ETHER_ALIGN) && 4308 em_fixup_rx(rxr) != 0) 4309 goto skip; 4310 #endif 4311 if (status & E1000_RXD_STAT_VP) { 4312 sendmp->m_pkthdr.ether_vtag = 4313 (le16toh(cur->special) & 4314 E1000_RXD_SPC_VLAN_MASK); 4315 sendmp->m_flags |= M_VLANTAG; 4316 } 4317 #ifdef EM_MULTIQUEUE 4318 sendmp->m_pkthdr.flowid = rxr->msix; 4319 sendmp->m_flags |= M_FLOWID; 4320 #endif 4321 #ifndef __NO_STRICT_ALIGNMENT 4322 skip: 4323 #endif 4324 rxr->fmp = rxr->lmp = NULL; 4325 } 4326 next_desc: 4327 /* Zero out the receive descriptors status. */ 4328 cur->status = 0; 4329 ++rxdone; /* cumulative for POLL */ 4330 ++processed; 4331 4332 /* Advance our pointers to the next descriptor. */ 4333 if (++i == adapter->num_rx_desc) 4334 i = 0; 4335 4336 /* Send to the stack */ 4337 if (sendmp != NULL) { 4338 rxr->next_to_check = i; 4339 EM_RX_UNLOCK(rxr); 4340 (*ifp->if_input)(ifp, sendmp); 4341 EM_RX_LOCK(rxr); 4342 i = rxr->next_to_check; 4343 } 4344 4345 /* Only refresh mbufs every 8 descriptors */ 4346 if (processed == 8) { 4347 em_refresh_mbufs(rxr, i); 4348 processed = 0; 4349 } 4350 } 4351 4352 /* Catch any remaining refresh work */ 4353 if (e1000_rx_unrefreshed(rxr)) 4354 em_refresh_mbufs(rxr, i); 4355 4356 rxr->next_to_check = i; 4357 if (done != NULL) 4358 *done = rxdone; 4359 EM_RX_UNLOCK(rxr); 4360 4361 return ((status & E1000_RXD_STAT_DD) ? TRUE : FALSE); 4362 } 4363 4364 static __inline void 4365 em_rx_discard(struct rx_ring *rxr, int i) 4366 { 4367 struct em_buffer *rbuf; 4368 4369 rbuf = &rxr->rx_buffers[i]; 4370 /* Free any previous pieces */ 4371 if (rxr->fmp != NULL) { 4372 rxr->fmp->m_flags |= M_PKTHDR; 4373 m_freem(rxr->fmp); 4374 rxr->fmp = NULL; 4375 rxr->lmp = NULL; 4376 } 4377 /* 4378 ** Free buffer and allow em_refresh_mbufs() 4379 ** to clean up and recharge buffer. 4380 */ 4381 if (rbuf->m_head) { 4382 m_free(rbuf->m_head); 4383 rbuf->m_head = NULL; 4384 } 4385 return; 4386 } 4387 4388 #ifndef __NO_STRICT_ALIGNMENT 4389 /* 4390 * When jumbo frames are enabled we should realign entire payload on 4391 * architecures with strict alignment. This is serious design mistake of 8254x 4392 * as it nullifies DMA operations. 8254x just allows RX buffer size to be 4393 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its 4394 * payload. On architecures without strict alignment restrictions 8254x still 4395 * performs unaligned memory access which would reduce the performance too. 4396 * To avoid copying over an entire frame to align, we allocate a new mbuf and 4397 * copy ethernet header to the new mbuf. The new mbuf is prepended into the 4398 * existing mbuf chain. 4399 * 4400 * Be aware, best performance of the 8254x is achived only when jumbo frame is 4401 * not used at all on architectures with strict alignment. 4402 */ 4403 static int 4404 em_fixup_rx(struct rx_ring *rxr) 4405 { 4406 struct adapter *adapter = rxr->adapter; 4407 struct mbuf *m, *n; 4408 int error; 4409 4410 error = 0; 4411 m = rxr->fmp; 4412 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) { 4413 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len); 4414 m->m_data += ETHER_HDR_LEN; 4415 } else { 4416 MGETHDR(n, M_DONTWAIT, MT_DATA); 4417 if (n != NULL) { 4418 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN); 4419 m->m_data += ETHER_HDR_LEN; 4420 m->m_len -= ETHER_HDR_LEN; 4421 n->m_len = ETHER_HDR_LEN; 4422 M_MOVE_PKTHDR(n, m); 4423 n->m_next = m; 4424 rxr->fmp = n; 4425 } else { 4426 adapter->dropped_pkts++; 4427 m_freem(rxr->fmp); 4428 rxr->fmp = NULL; 4429 error = ENOMEM; 4430 } 4431 } 4432 4433 return (error); 4434 } 4435 #endif 4436 4437 /********************************************************************* 4438 * 4439 * Verify that the hardware indicated that the checksum is valid. 4440 * Inform the stack about the status of checksum so that stack 4441 * doesn't spend time verifying the checksum. 4442 * 4443 *********************************************************************/ 4444 static void 4445 em_receive_checksum(struct e1000_rx_desc *rx_desc, struct mbuf *mp) 4446 { 4447 /* Ignore Checksum bit is set */ 4448 if (rx_desc->status & E1000_RXD_STAT_IXSM) { 4449 mp->m_pkthdr.csum_flags = 0; 4450 return; 4451 } 4452 4453 if (rx_desc->status & E1000_RXD_STAT_IPCS) { 4454 /* Did it pass? */ 4455 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) { 4456 /* IP Checksum Good */ 4457 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED; 4458 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID; 4459 4460 } else { 4461 mp->m_pkthdr.csum_flags = 0; 4462 } 4463 } 4464 4465 if (rx_desc->status & E1000_RXD_STAT_TCPCS) { 4466 /* Did it pass? */ 4467 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) { 4468 mp->m_pkthdr.csum_flags |= 4469 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR); 4470 mp->m_pkthdr.csum_data = htons(0xffff); 4471 } 4472 } 4473 } 4474 4475 /* 4476 * This routine is run via an vlan 4477 * config EVENT 4478 */ 4479 static void 4480 em_register_vlan(void *arg, struct ifnet *ifp, u16 vtag) 4481 { 4482 struct adapter *adapter = ifp->if_softc; 4483 u32 index, bit; 4484 4485 if (ifp->if_softc != arg) /* Not our event */ 4486 return; 4487 4488 if ((vtag == 0) || (vtag > 4095)) /* Invalid ID */ 4489 return; 4490 4491 EM_CORE_LOCK(adapter); 4492 index = (vtag >> 5) & 0x7F; 4493 bit = vtag & 0x1F; 4494 adapter->shadow_vfta[index] |= (1 << bit); 4495 ++adapter->num_vlans; 4496 /* Re-init to load the changes */ 4497 if (ifp->if_capenable & IFCAP_VLAN_HWFILTER) 4498 em_init_locked(adapter); 4499 EM_CORE_UNLOCK(adapter); 4500 } 4501 4502 /* 4503 * This routine is run via an vlan 4504 * unconfig EVENT 4505 */ 4506 static void 4507 em_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag) 4508 { 4509 struct adapter *adapter = ifp->if_softc; 4510 u32 index, bit; 4511 4512 if (ifp->if_softc != arg) 4513 return; 4514 4515 if ((vtag == 0) || (vtag > 4095)) /* Invalid */ 4516 return; 4517 4518 EM_CORE_LOCK(adapter); 4519 index = (vtag >> 5) & 0x7F; 4520 bit = vtag & 0x1F; 4521 adapter->shadow_vfta[index] &= ~(1 << bit); 4522 --adapter->num_vlans; 4523 /* Re-init to load the changes */ 4524 if (ifp->if_capenable & IFCAP_VLAN_HWFILTER) 4525 em_init_locked(adapter); 4526 EM_CORE_UNLOCK(adapter); 4527 } 4528 4529 static void 4530 em_setup_vlan_hw_support(struct adapter *adapter) 4531 { 4532 struct e1000_hw *hw = &adapter->hw; 4533 u32 reg; 4534 4535 /* 4536 ** We get here thru init_locked, meaning 4537 ** a soft reset, this has already cleared 4538 ** the VFTA and other state, so if there 4539 ** have been no vlan's registered do nothing. 4540 */ 4541 if (adapter->num_vlans == 0) 4542 return; 4543 4544 /* 4545 ** A soft reset zero's out the VFTA, so 4546 ** we need to repopulate it now. 4547 */ 4548 for (int i = 0; i < EM_VFTA_SIZE; i++) 4549 if (adapter->shadow_vfta[i] != 0) 4550 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, 4551 i, adapter->shadow_vfta[i]); 4552 4553 reg = E1000_READ_REG(hw, E1000_CTRL); 4554 reg |= E1000_CTRL_VME; 4555 E1000_WRITE_REG(hw, E1000_CTRL, reg); 4556 4557 /* Enable the Filter Table */ 4558 reg = E1000_READ_REG(hw, E1000_RCTL); 4559 reg &= ~E1000_RCTL_CFIEN; 4560 reg |= E1000_RCTL_VFE; 4561 E1000_WRITE_REG(hw, E1000_RCTL, reg); 4562 } 4563 4564 static void 4565 em_enable_intr(struct adapter *adapter) 4566 { 4567 struct e1000_hw *hw = &adapter->hw; 4568 u32 ims_mask = IMS_ENABLE_MASK; 4569 4570 if (hw->mac.type == e1000_82574) { 4571 E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK); 4572 ims_mask |= EM_MSIX_MASK; 4573 } 4574 E1000_WRITE_REG(hw, E1000_IMS, ims_mask); 4575 } 4576 4577 static void 4578 em_disable_intr(struct adapter *adapter) 4579 { 4580 struct e1000_hw *hw = &adapter->hw; 4581 4582 if (hw->mac.type == e1000_82574) 4583 E1000_WRITE_REG(hw, EM_EIAC, 0); 4584 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 4585 } 4586 4587 /* 4588 * Bit of a misnomer, what this really means is 4589 * to enable OS management of the system... aka 4590 * to disable special hardware management features 4591 */ 4592 static void 4593 em_init_manageability(struct adapter *adapter) 4594 { 4595 /* A shared code workaround */ 4596 #define E1000_82542_MANC2H E1000_MANC2H 4597 if (adapter->has_manage) { 4598 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H); 4599 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC); 4600 4601 /* disable hardware interception of ARP */ 4602 manc &= ~(E1000_MANC_ARP_EN); 4603 4604 /* enable receiving management packets to the host */ 4605 manc |= E1000_MANC_EN_MNG2HOST; 4606 #define E1000_MNG2HOST_PORT_623 (1 << 5) 4607 #define E1000_MNG2HOST_PORT_664 (1 << 6) 4608 manc2h |= E1000_MNG2HOST_PORT_623; 4609 manc2h |= E1000_MNG2HOST_PORT_664; 4610 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h); 4611 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc); 4612 } 4613 } 4614 4615 /* 4616 * Give control back to hardware management 4617 * controller if there is one. 4618 */ 4619 static void 4620 em_release_manageability(struct adapter *adapter) 4621 { 4622 if (adapter->has_manage) { 4623 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC); 4624 4625 /* re-enable hardware interception of ARP */ 4626 manc |= E1000_MANC_ARP_EN; 4627 manc &= ~E1000_MANC_EN_MNG2HOST; 4628 4629 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc); 4630 } 4631 } 4632 4633 /* 4634 * em_get_hw_control sets the {CTRL_EXT|FWSM}:DRV_LOAD bit. 4635 * For ASF and Pass Through versions of f/w this means 4636 * that the driver is loaded. For AMT version type f/w 4637 * this means that the network i/f is open. 4638 */ 4639 static void 4640 em_get_hw_control(struct adapter *adapter) 4641 { 4642 u32 ctrl_ext, swsm; 4643 4644 if (adapter->hw.mac.type == e1000_82573) { 4645 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM); 4646 E1000_WRITE_REG(&adapter->hw, E1000_SWSM, 4647 swsm | E1000_SWSM_DRV_LOAD); 4648 return; 4649 } 4650 /* else */ 4651 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 4652 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, 4653 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD); 4654 return; 4655 } 4656 4657 /* 4658 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit. 4659 * For ASF and Pass Through versions of f/w this means that 4660 * the driver is no longer loaded. For AMT versions of the 4661 * f/w this means that the network i/f is closed. 4662 */ 4663 static void 4664 em_release_hw_control(struct adapter *adapter) 4665 { 4666 u32 ctrl_ext, swsm; 4667 4668 if (!adapter->has_manage) 4669 return; 4670 4671 if (adapter->hw.mac.type == e1000_82573) { 4672 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM); 4673 E1000_WRITE_REG(&adapter->hw, E1000_SWSM, 4674 swsm & ~E1000_SWSM_DRV_LOAD); 4675 return; 4676 } 4677 /* else */ 4678 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 4679 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, 4680 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD); 4681 return; 4682 } 4683 4684 static int 4685 em_is_valid_ether_addr(u8 *addr) 4686 { 4687 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 }; 4688 4689 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) { 4690 return (FALSE); 4691 } 4692 4693 return (TRUE); 4694 } 4695 4696 /* 4697 ** Parse the interface capabilities with regard 4698 ** to both system management and wake-on-lan for 4699 ** later use. 4700 */ 4701 static void 4702 em_get_wakeup(device_t dev) 4703 { 4704 struct adapter *adapter = device_get_softc(dev); 4705 u16 eeprom_data = 0, device_id, apme_mask; 4706 4707 adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw); 4708 apme_mask = EM_EEPROM_APME; 4709 4710 switch (adapter->hw.mac.type) { 4711 case e1000_82573: 4712 case e1000_82583: 4713 adapter->has_amt = TRUE; 4714 /* Falls thru */ 4715 case e1000_82571: 4716 case e1000_82572: 4717 case e1000_80003es2lan: 4718 if (adapter->hw.bus.func == 1) { 4719 e1000_read_nvm(&adapter->hw, 4720 NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); 4721 break; 4722 } else 4723 e1000_read_nvm(&adapter->hw, 4724 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); 4725 break; 4726 case e1000_ich8lan: 4727 case e1000_ich9lan: 4728 case e1000_ich10lan: 4729 case e1000_pchlan: 4730 case e1000_pch2lan: 4731 apme_mask = E1000_WUC_APME; 4732 adapter->has_amt = TRUE; 4733 eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC); 4734 break; 4735 default: 4736 e1000_read_nvm(&adapter->hw, 4737 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); 4738 break; 4739 } 4740 if (eeprom_data & apme_mask) 4741 adapter->wol = (E1000_WUFC_MAG | E1000_WUFC_MC); 4742 /* 4743 * We have the eeprom settings, now apply the special cases 4744 * where the eeprom may be wrong or the board won't support 4745 * wake on lan on a particular port 4746 */ 4747 device_id = pci_get_device(dev); 4748 switch (device_id) { 4749 case E1000_DEV_ID_82571EB_FIBER: 4750 /* Wake events only supported on port A for dual fiber 4751 * regardless of eeprom setting */ 4752 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) & 4753 E1000_STATUS_FUNC_1) 4754 adapter->wol = 0; 4755 break; 4756 case E1000_DEV_ID_82571EB_QUAD_COPPER: 4757 case E1000_DEV_ID_82571EB_QUAD_FIBER: 4758 case E1000_DEV_ID_82571EB_QUAD_COPPER_LP: 4759 /* if quad port adapter, disable WoL on all but port A */ 4760 if (global_quad_port_a != 0) 4761 adapter->wol = 0; 4762 /* Reset for multiple quad port adapters */ 4763 if (++global_quad_port_a == 4) 4764 global_quad_port_a = 0; 4765 break; 4766 } 4767 return; 4768 } 4769 4770 4771 /* 4772 * Enable PCI Wake On Lan capability 4773 */ 4774 static void 4775 em_enable_wakeup(device_t dev) 4776 { 4777 struct adapter *adapter = device_get_softc(dev); 4778 struct ifnet *ifp = adapter->ifp; 4779 u32 pmc, ctrl, ctrl_ext, rctl; 4780 u16 status; 4781 4782 if ((pci_find_cap(dev, PCIY_PMG, &pmc) != 0)) 4783 return; 4784 4785 /* Advertise the wakeup capability */ 4786 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL); 4787 ctrl |= (E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN3); 4788 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl); 4789 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN); 4790 4791 if ((adapter->hw.mac.type == e1000_ich8lan) || 4792 (adapter->hw.mac.type == e1000_pchlan) || 4793 (adapter->hw.mac.type == e1000_ich9lan) || 4794 (adapter->hw.mac.type == e1000_ich10lan)) 4795 e1000_disable_gig_wol_ich8lan(&adapter->hw); 4796 4797 /* Keep the laser running on Fiber adapters */ 4798 if (adapter->hw.phy.media_type == e1000_media_type_fiber || 4799 adapter->hw.phy.media_type == e1000_media_type_internal_serdes) { 4800 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 4801 ctrl_ext |= E1000_CTRL_EXT_SDP3_DATA; 4802 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, ctrl_ext); 4803 } 4804 4805 /* 4806 ** Determine type of Wakeup: note that wol 4807 ** is set with all bits on by default. 4808 */ 4809 if ((ifp->if_capenable & IFCAP_WOL_MAGIC) == 0) 4810 adapter->wol &= ~E1000_WUFC_MAG; 4811 4812 if ((ifp->if_capenable & IFCAP_WOL_MCAST) == 0) 4813 adapter->wol &= ~E1000_WUFC_MC; 4814 else { 4815 rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 4816 rctl |= E1000_RCTL_MPE; 4817 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl); 4818 } 4819 4820 if ((adapter->hw.mac.type == e1000_pchlan) || 4821 (adapter->hw.mac.type == e1000_pch2lan)) { 4822 if (em_enable_phy_wakeup(adapter)) 4823 return; 4824 } else { 4825 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN); 4826 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol); 4827 } 4828 4829 if (adapter->hw.phy.type == e1000_phy_igp_3) 4830 e1000_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw); 4831 4832 /* Request PME */ 4833 status = pci_read_config(dev, pmc + PCIR_POWER_STATUS, 2); 4834 status &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE); 4835 if (ifp->if_capenable & IFCAP_WOL) 4836 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; 4837 pci_write_config(dev, pmc + PCIR_POWER_STATUS, status, 2); 4838 4839 return; 4840 } 4841 4842 /* 4843 ** WOL in the newer chipset interfaces (pchlan) 4844 ** require thing to be copied into the phy 4845 */ 4846 static int 4847 em_enable_phy_wakeup(struct adapter *adapter) 4848 { 4849 struct e1000_hw *hw = &adapter->hw; 4850 u32 mreg, ret = 0; 4851 u16 preg; 4852 4853 /* copy MAC RARs to PHY RARs */ 4854 e1000_copy_rx_addrs_to_phy_ich8lan(hw); 4855 4856 /* copy MAC MTA to PHY MTA */ 4857 for (int i = 0; i < adapter->hw.mac.mta_reg_count; i++) { 4858 mreg = E1000_READ_REG_ARRAY(hw, E1000_MTA, i); 4859 e1000_write_phy_reg(hw, BM_MTA(i), (u16)(mreg & 0xFFFF)); 4860 e1000_write_phy_reg(hw, BM_MTA(i) + 1, 4861 (u16)((mreg >> 16) & 0xFFFF)); 4862 } 4863 4864 /* configure PHY Rx Control register */ 4865 e1000_read_phy_reg(&adapter->hw, BM_RCTL, &preg); 4866 mreg = E1000_READ_REG(hw, E1000_RCTL); 4867 if (mreg & E1000_RCTL_UPE) 4868 preg |= BM_RCTL_UPE; 4869 if (mreg & E1000_RCTL_MPE) 4870 preg |= BM_RCTL_MPE; 4871 preg &= ~(BM_RCTL_MO_MASK); 4872 if (mreg & E1000_RCTL_MO_3) 4873 preg |= (((mreg & E1000_RCTL_MO_3) >> E1000_RCTL_MO_SHIFT) 4874 << BM_RCTL_MO_SHIFT); 4875 if (mreg & E1000_RCTL_BAM) 4876 preg |= BM_RCTL_BAM; 4877 if (mreg & E1000_RCTL_PMCF) 4878 preg |= BM_RCTL_PMCF; 4879 mreg = E1000_READ_REG(hw, E1000_CTRL); 4880 if (mreg & E1000_CTRL_RFCE) 4881 preg |= BM_RCTL_RFCE; 4882 e1000_write_phy_reg(&adapter->hw, BM_RCTL, preg); 4883 4884 /* enable PHY wakeup in MAC register */ 4885 E1000_WRITE_REG(hw, E1000_WUC, 4886 E1000_WUC_PHY_WAKE | E1000_WUC_PME_EN); 4887 E1000_WRITE_REG(hw, E1000_WUFC, adapter->wol); 4888 4889 /* configure and enable PHY wakeup in PHY registers */ 4890 e1000_write_phy_reg(&adapter->hw, BM_WUFC, adapter->wol); 4891 e1000_write_phy_reg(&adapter->hw, BM_WUC, E1000_WUC_PME_EN); 4892 4893 /* activate PHY wakeup */ 4894 ret = hw->phy.ops.acquire(hw); 4895 if (ret) { 4896 printf("Could not acquire PHY\n"); 4897 return ret; 4898 } 4899 e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 4900 (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT)); 4901 ret = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &preg); 4902 if (ret) { 4903 printf("Could not read PHY page 769\n"); 4904 goto out; 4905 } 4906 preg |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT; 4907 ret = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, preg); 4908 if (ret) 4909 printf("Could not set PHY Host Wakeup bit\n"); 4910 out: 4911 hw->phy.ops.release(hw); 4912 4913 return ret; 4914 } 4915 4916 static void 4917 em_led_func(void *arg, int onoff) 4918 { 4919 struct adapter *adapter = arg; 4920 4921 EM_CORE_LOCK(adapter); 4922 if (onoff) { 4923 e1000_setup_led(&adapter->hw); 4924 e1000_led_on(&adapter->hw); 4925 } else { 4926 e1000_led_off(&adapter->hw); 4927 e1000_cleanup_led(&adapter->hw); 4928 } 4929 EM_CORE_UNLOCK(adapter); 4930 } 4931 4932 /* 4933 ** Disable the L0S and L1 LINK states 4934 */ 4935 static void 4936 em_disable_aspm(struct adapter *adapter) 4937 { 4938 int base, reg; 4939 u16 link_cap,link_ctrl; 4940 device_t dev = adapter->dev; 4941 4942 switch (adapter->hw.mac.type) { 4943 case e1000_82573: 4944 case e1000_82574: 4945 case e1000_82583: 4946 break; 4947 default: 4948 return; 4949 } 4950 if (pci_find_cap(dev, PCIY_EXPRESS, &base) != 0) 4951 return; 4952 reg = base + PCIR_EXPRESS_LINK_CAP; 4953 link_cap = pci_read_config(dev, reg, 2); 4954 if ((link_cap & PCIM_LINK_CAP_ASPM) == 0) 4955 return; 4956 reg = base + PCIR_EXPRESS_LINK_CTL; 4957 link_ctrl = pci_read_config(dev, reg, 2); 4958 link_ctrl &= 0xFFFC; /* turn off bit 1 and 2 */ 4959 pci_write_config(dev, reg, link_ctrl, 2); 4960 return; 4961 } 4962 4963 /********************************************************************** 4964 * 4965 * Update the board statistics counters. 4966 * 4967 **********************************************************************/ 4968 static void 4969 em_update_stats_counters(struct adapter *adapter) 4970 { 4971 struct ifnet *ifp; 4972 4973 if(adapter->hw.phy.media_type == e1000_media_type_copper || 4974 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) { 4975 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS); 4976 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC); 4977 } 4978 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS); 4979 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC); 4980 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC); 4981 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL); 4982 4983 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC); 4984 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL); 4985 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC); 4986 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC); 4987 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC); 4988 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC); 4989 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC); 4990 /* 4991 ** For watchdog management we need to know if we have been 4992 ** paused during the last interval, so capture that here. 4993 */ 4994 adapter->pause_frames = E1000_READ_REG(&adapter->hw, E1000_XOFFRXC); 4995 adapter->stats.xoffrxc += adapter->pause_frames; 4996 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC); 4997 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC); 4998 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64); 4999 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127); 5000 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255); 5001 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511); 5002 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023); 5003 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522); 5004 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC); 5005 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC); 5006 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC); 5007 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC); 5008 5009 /* For the 64-bit byte counters the low dword must be read first. */ 5010 /* Both registers clear on the read of the high dword */ 5011 5012 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) + 5013 ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32); 5014 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) + 5015 ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32); 5016 5017 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC); 5018 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC); 5019 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC); 5020 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC); 5021 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC); 5022 5023 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH); 5024 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH); 5025 5026 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR); 5027 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT); 5028 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64); 5029 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127); 5030 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255); 5031 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511); 5032 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023); 5033 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522); 5034 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC); 5035 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC); 5036 5037 /* Interrupt Counts */ 5038 5039 adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC); 5040 adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC); 5041 adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC); 5042 adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC); 5043 adapter->stats.ictxatc += E1000_READ_REG(&adapter->hw, E1000_ICTXATC); 5044 adapter->stats.ictxqec += E1000_READ_REG(&adapter->hw, E1000_ICTXQEC); 5045 adapter->stats.ictxqmtc += E1000_READ_REG(&adapter->hw, E1000_ICTXQMTC); 5046 adapter->stats.icrxdmtc += E1000_READ_REG(&adapter->hw, E1000_ICRXDMTC); 5047 adapter->stats.icrxoc += E1000_READ_REG(&adapter->hw, E1000_ICRXOC); 5048 5049 if (adapter->hw.mac.type >= e1000_82543) { 5050 adapter->stats.algnerrc += 5051 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC); 5052 adapter->stats.rxerrc += 5053 E1000_READ_REG(&adapter->hw, E1000_RXERRC); 5054 adapter->stats.tncrs += 5055 E1000_READ_REG(&adapter->hw, E1000_TNCRS); 5056 adapter->stats.cexterr += 5057 E1000_READ_REG(&adapter->hw, E1000_CEXTERR); 5058 adapter->stats.tsctc += 5059 E1000_READ_REG(&adapter->hw, E1000_TSCTC); 5060 adapter->stats.tsctfc += 5061 E1000_READ_REG(&adapter->hw, E1000_TSCTFC); 5062 } 5063 ifp = adapter->ifp; 5064 5065 ifp->if_collisions = adapter->stats.colc; 5066 5067 /* Rx Errors */ 5068 ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc + 5069 adapter->stats.crcerrs + adapter->stats.algnerrc + 5070 adapter->stats.ruc + adapter->stats.roc + 5071 adapter->stats.mpc + adapter->stats.cexterr; 5072 5073 /* Tx Errors */ 5074 ifp->if_oerrors = adapter->stats.ecol + 5075 adapter->stats.latecol + adapter->watchdog_events; 5076 } 5077 5078 /* Export a single 32-bit register via a read-only sysctl. */ 5079 static int 5080 em_sysctl_reg_handler(SYSCTL_HANDLER_ARGS) 5081 { 5082 struct adapter *adapter; 5083 u_int val; 5084 5085 adapter = oidp->oid_arg1; 5086 val = E1000_READ_REG(&adapter->hw, oidp->oid_arg2); 5087 return (sysctl_handle_int(oidp, &val, 0, req)); 5088 } 5089 5090 /* 5091 * Add sysctl variables, one per statistic, to the system. 5092 */ 5093 static void 5094 em_add_hw_stats(struct adapter *adapter) 5095 { 5096 device_t dev = adapter->dev; 5097 5098 struct tx_ring *txr = adapter->tx_rings; 5099 struct rx_ring *rxr = adapter->rx_rings; 5100 5101 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev); 5102 struct sysctl_oid *tree = device_get_sysctl_tree(dev); 5103 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree); 5104 struct e1000_hw_stats *stats = &adapter->stats; 5105 5106 struct sysctl_oid *stat_node, *queue_node, *int_node; 5107 struct sysctl_oid_list *stat_list, *queue_list, *int_list; 5108 5109 #define QUEUE_NAME_LEN 32 5110 char namebuf[QUEUE_NAME_LEN]; 5111 5112 /* Driver Statistics */ 5113 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq", 5114 CTLFLAG_RD, &adapter->link_irq, 5115 "Link MSIX IRQ Handled"); 5116 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_alloc_fail", 5117 CTLFLAG_RD, &adapter->mbuf_alloc_failed, 5118 "Std mbuf failed"); 5119 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "cluster_alloc_fail", 5120 CTLFLAG_RD, &adapter->mbuf_cluster_failed, 5121 "Std mbuf cluster failed"); 5122 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped", 5123 CTLFLAG_RD, &adapter->dropped_pkts, 5124 "Driver dropped packets"); 5125 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail", 5126 CTLFLAG_RD, &adapter->no_tx_dma_setup, 5127 "Driver tx dma failure in xmit"); 5128 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "rx_overruns", 5129 CTLFLAG_RD, &adapter->rx_overruns, 5130 "RX overruns"); 5131 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "watchdog_timeouts", 5132 CTLFLAG_RD, &adapter->watchdog_events, 5133 "Watchdog timeouts"); 5134 5135 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "device_control", 5136 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_CTRL, 5137 em_sysctl_reg_handler, "IU", 5138 "Device Control Register"); 5139 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rx_control", 5140 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_RCTL, 5141 em_sysctl_reg_handler, "IU", 5142 "Receiver Control Register"); 5143 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_high_water", 5144 CTLFLAG_RD, &adapter->hw.fc.high_water, 0, 5145 "Flow Control High Watermark"); 5146 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_low_water", 5147 CTLFLAG_RD, &adapter->hw.fc.low_water, 0, 5148 "Flow Control Low Watermark"); 5149 5150 for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) { 5151 snprintf(namebuf, QUEUE_NAME_LEN, "queue%d", i); 5152 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf, 5153 CTLFLAG_RD, NULL, "Queue Name"); 5154 queue_list = SYSCTL_CHILDREN(queue_node); 5155 5156 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_head", 5157 CTLTYPE_UINT | CTLFLAG_RD, adapter, 5158 E1000_TDH(txr->me), 5159 em_sysctl_reg_handler, "IU", 5160 "Transmit Descriptor Head"); 5161 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_tail", 5162 CTLTYPE_UINT | CTLFLAG_RD, adapter, 5163 E1000_TDT(txr->me), 5164 em_sysctl_reg_handler, "IU", 5165 "Transmit Descriptor Tail"); 5166 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "tx_irq", 5167 CTLFLAG_RD, &txr->tx_irq, 5168 "Queue MSI-X Transmit Interrupts"); 5169 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "no_desc_avail", 5170 CTLFLAG_RD, &txr->no_desc_avail, 5171 "Queue No Descriptor Available"); 5172 5173 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_head", 5174 CTLTYPE_UINT | CTLFLAG_RD, adapter, 5175 E1000_RDH(rxr->me), 5176 em_sysctl_reg_handler, "IU", 5177 "Receive Descriptor Head"); 5178 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_tail", 5179 CTLTYPE_UINT | CTLFLAG_RD, adapter, 5180 E1000_RDT(rxr->me), 5181 em_sysctl_reg_handler, "IU", 5182 "Receive Descriptor Tail"); 5183 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "rx_irq", 5184 CTLFLAG_RD, &rxr->rx_irq, 5185 "Queue MSI-X Receive Interrupts"); 5186 } 5187 5188 /* MAC stats get their own sub node */ 5189 5190 stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats", 5191 CTLFLAG_RD, NULL, "Statistics"); 5192 stat_list = SYSCTL_CHILDREN(stat_node); 5193 5194 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "excess_coll", 5195 CTLFLAG_RD, &stats->ecol, 5196 "Excessive collisions"); 5197 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "single_coll", 5198 CTLFLAG_RD, &stats->scc, 5199 "Single collisions"); 5200 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "multiple_coll", 5201 CTLFLAG_RD, &stats->mcc, 5202 "Multiple collisions"); 5203 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "late_coll", 5204 CTLFLAG_RD, &stats->latecol, 5205 "Late collisions"); 5206 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "collision_count", 5207 CTLFLAG_RD, &stats->colc, 5208 "Collision Count"); 5209 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "symbol_errors", 5210 CTLFLAG_RD, &adapter->stats.symerrs, 5211 "Symbol Errors"); 5212 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "sequence_errors", 5213 CTLFLAG_RD, &adapter->stats.sec, 5214 "Sequence Errors"); 5215 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "defer_count", 5216 CTLFLAG_RD, &adapter->stats.dc, 5217 "Defer Count"); 5218 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "missed_packets", 5219 CTLFLAG_RD, &adapter->stats.mpc, 5220 "Missed Packets"); 5221 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_no_buff", 5222 CTLFLAG_RD, &adapter->stats.rnbc, 5223 "Receive No Buffers"); 5224 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_undersize", 5225 CTLFLAG_RD, &adapter->stats.ruc, 5226 "Receive Undersize"); 5227 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_fragmented", 5228 CTLFLAG_RD, &adapter->stats.rfc, 5229 "Fragmented Packets Received "); 5230 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_oversize", 5231 CTLFLAG_RD, &adapter->stats.roc, 5232 "Oversized Packets Received"); 5233 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_jabber", 5234 CTLFLAG_RD, &adapter->stats.rjc, 5235 "Recevied Jabber"); 5236 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_errs", 5237 CTLFLAG_RD, &adapter->stats.rxerrc, 5238 "Receive Errors"); 5239 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "crc_errs", 5240 CTLFLAG_RD, &adapter->stats.crcerrs, 5241 "CRC errors"); 5242 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "alignment_errs", 5243 CTLFLAG_RD, &adapter->stats.algnerrc, 5244 "Alignment Errors"); 5245 /* On 82575 these are collision counts */ 5246 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "coll_ext_errs", 5247 CTLFLAG_RD, &adapter->stats.cexterr, 5248 "Collision/Carrier extension errors"); 5249 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_recvd", 5250 CTLFLAG_RD, &adapter->stats.xonrxc, 5251 "XON Received"); 5252 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_txd", 5253 CTLFLAG_RD, &adapter->stats.xontxc, 5254 "XON Transmitted"); 5255 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_recvd", 5256 CTLFLAG_RD, &adapter->stats.xoffrxc, 5257 "XOFF Received"); 5258 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_txd", 5259 CTLFLAG_RD, &adapter->stats.xofftxc, 5260 "XOFF Transmitted"); 5261 5262 /* Packet Reception Stats */ 5263 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_recvd", 5264 CTLFLAG_RD, &adapter->stats.tpr, 5265 "Total Packets Received "); 5266 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_recvd", 5267 CTLFLAG_RD, &adapter->stats.gprc, 5268 "Good Packets Received"); 5269 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_recvd", 5270 CTLFLAG_RD, &adapter->stats.bprc, 5271 "Broadcast Packets Received"); 5272 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_recvd", 5273 CTLFLAG_RD, &adapter->stats.mprc, 5274 "Multicast Packets Received"); 5275 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_64", 5276 CTLFLAG_RD, &adapter->stats.prc64, 5277 "64 byte frames received "); 5278 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_65_127", 5279 CTLFLAG_RD, &adapter->stats.prc127, 5280 "65-127 byte frames received"); 5281 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_128_255", 5282 CTLFLAG_RD, &adapter->stats.prc255, 5283 "128-255 byte frames received"); 5284 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_256_511", 5285 CTLFLAG_RD, &adapter->stats.prc511, 5286 "256-511 byte frames received"); 5287 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_512_1023", 5288 CTLFLAG_RD, &adapter->stats.prc1023, 5289 "512-1023 byte frames received"); 5290 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_1024_1522", 5291 CTLFLAG_RD, &adapter->stats.prc1522, 5292 "1023-1522 byte frames received"); 5293 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_recvd", 5294 CTLFLAG_RD, &adapter->stats.gorc, 5295 "Good Octets Received"); 5296 5297 /* Packet Transmission Stats */ 5298 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_txd", 5299 CTLFLAG_RD, &adapter->stats.gotc, 5300 "Good Octets Transmitted"); 5301 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_txd", 5302 CTLFLAG_RD, &adapter->stats.tpt, 5303 "Total Packets Transmitted"); 5304 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd", 5305 CTLFLAG_RD, &adapter->stats.gptc, 5306 "Good Packets Transmitted"); 5307 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_txd", 5308 CTLFLAG_RD, &adapter->stats.bptc, 5309 "Broadcast Packets Transmitted"); 5310 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_txd", 5311 CTLFLAG_RD, &adapter->stats.mptc, 5312 "Multicast Packets Transmitted"); 5313 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_64", 5314 CTLFLAG_RD, &adapter->stats.ptc64, 5315 "64 byte frames transmitted "); 5316 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_65_127", 5317 CTLFLAG_RD, &adapter->stats.ptc127, 5318 "65-127 byte frames transmitted"); 5319 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_128_255", 5320 CTLFLAG_RD, &adapter->stats.ptc255, 5321 "128-255 byte frames transmitted"); 5322 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_256_511", 5323 CTLFLAG_RD, &adapter->stats.ptc511, 5324 "256-511 byte frames transmitted"); 5325 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_512_1023", 5326 CTLFLAG_RD, &adapter->stats.ptc1023, 5327 "512-1023 byte frames transmitted"); 5328 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_1024_1522", 5329 CTLFLAG_RD, &adapter->stats.ptc1522, 5330 "1024-1522 byte frames transmitted"); 5331 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_txd", 5332 CTLFLAG_RD, &adapter->stats.tsctc, 5333 "TSO Contexts Transmitted"); 5334 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_ctx_fail", 5335 CTLFLAG_RD, &adapter->stats.tsctfc, 5336 "TSO Contexts Failed"); 5337 5338 5339 /* Interrupt Stats */ 5340 5341 int_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "interrupts", 5342 CTLFLAG_RD, NULL, "Interrupt Statistics"); 5343 int_list = SYSCTL_CHILDREN(int_node); 5344 5345 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "asserts", 5346 CTLFLAG_RD, &adapter->stats.iac, 5347 "Interrupt Assertion Count"); 5348 5349 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_pkt_timer", 5350 CTLFLAG_RD, &adapter->stats.icrxptc, 5351 "Interrupt Cause Rx Pkt Timer Expire Count"); 5352 5353 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_abs_timer", 5354 CTLFLAG_RD, &adapter->stats.icrxatc, 5355 "Interrupt Cause Rx Abs Timer Expire Count"); 5356 5357 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_pkt_timer", 5358 CTLFLAG_RD, &adapter->stats.ictxptc, 5359 "Interrupt Cause Tx Pkt Timer Expire Count"); 5360 5361 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_abs_timer", 5362 CTLFLAG_RD, &adapter->stats.ictxatc, 5363 "Interrupt Cause Tx Abs Timer Expire Count"); 5364 5365 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_empty", 5366 CTLFLAG_RD, &adapter->stats.ictxqec, 5367 "Interrupt Cause Tx Queue Empty Count"); 5368 5369 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_min_thresh", 5370 CTLFLAG_RD, &adapter->stats.ictxqmtc, 5371 "Interrupt Cause Tx Queue Min Thresh Count"); 5372 5373 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_desc_min_thresh", 5374 CTLFLAG_RD, &adapter->stats.icrxdmtc, 5375 "Interrupt Cause Rx Desc Min Thresh Count"); 5376 5377 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_overrun", 5378 CTLFLAG_RD, &adapter->stats.icrxoc, 5379 "Interrupt Cause Receiver Overrun Count"); 5380 } 5381 5382 /********************************************************************** 5383 * 5384 * This routine provides a way to dump out the adapter eeprom, 5385 * often a useful debug/service tool. This only dumps the first 5386 * 32 words, stuff that matters is in that extent. 5387 * 5388 **********************************************************************/ 5389 static int 5390 em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS) 5391 { 5392 struct adapter *adapter; 5393 int error; 5394 int result; 5395 5396 result = -1; 5397 error = sysctl_handle_int(oidp, &result, 0, req); 5398 5399 if (error || !req->newptr) 5400 return (error); 5401 5402 /* 5403 * This value will cause a hex dump of the 5404 * first 32 16-bit words of the EEPROM to 5405 * the screen. 5406 */ 5407 if (result == 1) { 5408 adapter = (struct adapter *)arg1; 5409 em_print_nvm_info(adapter); 5410 } 5411 5412 return (error); 5413 } 5414 5415 static void 5416 em_print_nvm_info(struct adapter *adapter) 5417 { 5418 u16 eeprom_data; 5419 int i, j, row = 0; 5420 5421 /* Its a bit crude, but it gets the job done */ 5422 printf("\nInterface EEPROM Dump:\n"); 5423 printf("Offset\n0x0000 "); 5424 for (i = 0, j = 0; i < 32; i++, j++) { 5425 if (j == 8) { /* Make the offset block */ 5426 j = 0; ++row; 5427 printf("\n0x00%x0 ",row); 5428 } 5429 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data); 5430 printf("%04x ", eeprom_data); 5431 } 5432 printf("\n"); 5433 } 5434 5435 static int 5436 em_sysctl_int_delay(SYSCTL_HANDLER_ARGS) 5437 { 5438 struct em_int_delay_info *info; 5439 struct adapter *adapter; 5440 u32 regval; 5441 int error, usecs, ticks; 5442 5443 info = (struct em_int_delay_info *)arg1; 5444 usecs = info->value; 5445 error = sysctl_handle_int(oidp, &usecs, 0, req); 5446 if (error != 0 || req->newptr == NULL) 5447 return (error); 5448 if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535)) 5449 return (EINVAL); 5450 info->value = usecs; 5451 ticks = EM_USECS_TO_TICKS(usecs); 5452 5453 adapter = info->adapter; 5454 5455 EM_CORE_LOCK(adapter); 5456 regval = E1000_READ_OFFSET(&adapter->hw, info->offset); 5457 regval = (regval & ~0xffff) | (ticks & 0xffff); 5458 /* Handle a few special cases. */ 5459 switch (info->offset) { 5460 case E1000_RDTR: 5461 break; 5462 case E1000_TIDV: 5463 if (ticks == 0) { 5464 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE; 5465 /* Don't write 0 into the TIDV register. */ 5466 regval++; 5467 } else 5468 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 5469 break; 5470 } 5471 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval); 5472 EM_CORE_UNLOCK(adapter); 5473 return (0); 5474 } 5475 5476 static void 5477 em_add_int_delay_sysctl(struct adapter *adapter, const char *name, 5478 const char *description, struct em_int_delay_info *info, 5479 int offset, int value) 5480 { 5481 info->adapter = adapter; 5482 info->offset = offset; 5483 info->value = value; 5484 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev), 5485 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), 5486 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, 5487 info, 0, em_sysctl_int_delay, "I", description); 5488 } 5489 5490 static void 5491 em_set_sysctl_value(struct adapter *adapter, const char *name, 5492 const char *description, int *limit, int value) 5493 { 5494 *limit = value; 5495 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev), 5496 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), 5497 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description); 5498 } 5499 5500 static int 5501 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS) 5502 { 5503 struct adapter *adapter; 5504 int error; 5505 int result; 5506 5507 result = -1; 5508 error = sysctl_handle_int(oidp, &result, 0, req); 5509 5510 if (error || !req->newptr) 5511 return (error); 5512 5513 if (result == 1) { 5514 adapter = (struct adapter *)arg1; 5515 em_print_debug_info(adapter); 5516 } 5517 5518 return (error); 5519 } 5520 5521 /* 5522 ** This routine is meant to be fluid, add whatever is 5523 ** needed for debugging a problem. -jfv 5524 */ 5525 static void 5526 em_print_debug_info(struct adapter *adapter) 5527 { 5528 device_t dev = adapter->dev; 5529 struct tx_ring *txr = adapter->tx_rings; 5530 struct rx_ring *rxr = adapter->rx_rings; 5531 5532 if (adapter->ifp->if_drv_flags & IFF_DRV_RUNNING) 5533 printf("Interface is RUNNING "); 5534 else 5535 printf("Interface is NOT RUNNING\n"); 5536 if (adapter->ifp->if_drv_flags & IFF_DRV_OACTIVE) 5537 printf("and ACTIVE\n"); 5538 else 5539 printf("and INACTIVE\n"); 5540 5541 device_printf(dev, "hw tdh = %d, hw tdt = %d\n", 5542 E1000_READ_REG(&adapter->hw, E1000_TDH(0)), 5543 E1000_READ_REG(&adapter->hw, E1000_TDT(0))); 5544 device_printf(dev, "hw rdh = %d, hw rdt = %d\n", 5545 E1000_READ_REG(&adapter->hw, E1000_RDH(0)), 5546 E1000_READ_REG(&adapter->hw, E1000_RDT(0))); 5547 device_printf(dev, "Tx Queue Status = %d\n", txr->queue_status); 5548 device_printf(dev, "TX descriptors avail = %d\n", 5549 txr->tx_avail); 5550 device_printf(dev, "Tx Descriptors avail failure = %ld\n", 5551 txr->no_desc_avail); 5552 device_printf(dev, "RX discarded packets = %ld\n", 5553 rxr->rx_discarded); 5554 device_printf(dev, "RX Next to Check = %d\n", rxr->next_to_check); 5555 device_printf(dev, "RX Next to Refresh = %d\n", rxr->next_to_refresh); 5556 } 5557