if_em.c revision 163724
1/************************************************************************** 2 3Copyright (c) 2001-2006, Intel Corporation 4All rights reserved. 5 6Redistribution and use in source and binary forms, with or without 7modification, 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 20THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30POSSIBILITY OF SUCH DAMAGE. 31 32***************************************************************************/ 33 34/*$FreeBSD: head/sys/dev/em/if_em.c 163724 2006-10-28 00:47:55Z jfv $*/ 35 36#ifdef HAVE_KERNEL_OPTION_HEADERS 37#include "opt_device_polling.h" 38#endif 39 40#include <sys/param.h> 41#include <sys/systm.h> 42#include <sys/bus.h> 43#include <sys/endian.h> 44#include <sys/kernel.h> 45#include <sys/kthread.h> 46#include <sys/malloc.h> 47#include <sys/mbuf.h> 48#include <sys/module.h> 49#include <sys/rman.h> 50#include <sys/socket.h> 51#include <sys/sockio.h> 52#include <sys/sysctl.h> 53#include <sys/taskqueue.h> 54 55#include <machine/bus.h> 56#include <machine/resource.h> 57 58#include <net/bpf.h> 59#include <net/ethernet.h> 60#include <net/if.h> 61#include <net/if_arp.h> 62#include <net/if_dl.h> 63#include <net/if_media.h> 64 65#include <net/if_types.h> 66#include <net/if_vlan_var.h> 67 68#include <netinet/in_systm.h> 69#include <netinet/in.h> 70#include <netinet/if_ether.h> 71#include <netinet/ip.h> 72#include <netinet/tcp.h> 73#include <netinet/udp.h> 74 75#include <machine/in_cksum.h> 76 77#include <dev/pci/pcivar.h> 78#include <dev/pci/pcireg.h> 79#include <dev/em/if_em_hw.h> 80#include <dev/em/if_em.h> 81 82/********************************************************************* 83 * Set this to one to display debug statistics 84 *********************************************************************/ 85int em_display_debug_stats = 0; 86 87/********************************************************************* 88 * Driver version 89 *********************************************************************/ 90char em_driver_version[] = "Version - 6.2.9"; 91 92 93/********************************************************************* 94 * PCI Device ID Table 95 * 96 * Used by probe to select devices to load on 97 * Last field stores an index into em_strings 98 * Last entry must be all 0s 99 * 100 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index } 101 *********************************************************************/ 102 103static em_vendor_info_t em_vendor_info_array[] = 104{ 105 /* Intel(R) PRO/1000 Network Connection */ 106 { 0x8086, E1000_DEV_ID_82540EM, PCI_ANY_ID, PCI_ANY_ID, 0}, 107 { 0x8086, E1000_DEV_ID_82540EM_LOM, PCI_ANY_ID, PCI_ANY_ID, 0}, 108 { 0x8086, E1000_DEV_ID_82540EP, PCI_ANY_ID, PCI_ANY_ID, 0}, 109 { 0x8086, E1000_DEV_ID_82540EP_LOM, PCI_ANY_ID, PCI_ANY_ID, 0}, 110 { 0x8086, E1000_DEV_ID_82540EP_LP, PCI_ANY_ID, PCI_ANY_ID, 0}, 111 112 { 0x8086, E1000_DEV_ID_82541EI, PCI_ANY_ID, PCI_ANY_ID, 0}, 113 { 0x8086, E1000_DEV_ID_82541ER, PCI_ANY_ID, PCI_ANY_ID, 0}, 114 { 0x8086, E1000_DEV_ID_82541ER_LOM, PCI_ANY_ID, PCI_ANY_ID, 0}, 115 { 0x8086, E1000_DEV_ID_82541EI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0}, 116 { 0x8086, E1000_DEV_ID_82541GI, PCI_ANY_ID, PCI_ANY_ID, 0}, 117 { 0x8086, E1000_DEV_ID_82541GI_LF, PCI_ANY_ID, PCI_ANY_ID, 0}, 118 { 0x8086, E1000_DEV_ID_82541GI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0}, 119 120 { 0x8086, E1000_DEV_ID_82543GC_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 121 { 0x8086, E1000_DEV_ID_82543GC_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 122 123 { 0x8086, E1000_DEV_ID_82544EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 124 { 0x8086, E1000_DEV_ID_82544EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 125 { 0x8086, E1000_DEV_ID_82544GC_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 126 { 0x8086, E1000_DEV_ID_82544GC_LOM, PCI_ANY_ID, PCI_ANY_ID, 0}, 127 128 { 0x8086, E1000_DEV_ID_82545EM_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 129 { 0x8086, E1000_DEV_ID_82545EM_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 130 { 0x8086, E1000_DEV_ID_82545GM_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 131 { 0x8086, E1000_DEV_ID_82545GM_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 132 { 0x8086, E1000_DEV_ID_82545GM_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 133 134 { 0x8086, E1000_DEV_ID_82546EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 135 { 0x8086, E1000_DEV_ID_82546EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 136 { 0x8086, E1000_DEV_ID_82546EB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 137 { 0x8086, E1000_DEV_ID_82546GB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 138 { 0x8086, E1000_DEV_ID_82546GB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 139 { 0x8086, E1000_DEV_ID_82546GB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 140 { 0x8086, E1000_DEV_ID_82546GB_PCIE, PCI_ANY_ID, PCI_ANY_ID, 0}, 141 { 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 142 { 0x8086, E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3, 143 PCI_ANY_ID, PCI_ANY_ID, 0}, 144 145 { 0x8086, E1000_DEV_ID_82547EI, PCI_ANY_ID, PCI_ANY_ID, 0}, 146 { 0x8086, E1000_DEV_ID_82547EI_MOBILE, PCI_ANY_ID, PCI_ANY_ID, 0}, 147 { 0x8086, E1000_DEV_ID_82547GI, PCI_ANY_ID, PCI_ANY_ID, 0}, 148 149 { 0x8086, E1000_DEV_ID_82571EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 150 { 0x8086, E1000_DEV_ID_82571EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 151 { 0x8086, E1000_DEV_ID_82571EB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 152 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER, 153 PCI_ANY_ID, PCI_ANY_ID, 0}, 154 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE, 155 PCI_ANY_ID, PCI_ANY_ID, 0}, 156 157 { 0x8086, E1000_DEV_ID_82572EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0}, 158 { 0x8086, E1000_DEV_ID_82572EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0}, 159 { 0x8086, E1000_DEV_ID_82572EI_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0}, 160 { 0x8086, E1000_DEV_ID_82572EI, PCI_ANY_ID, PCI_ANY_ID, 0}, 161 162 { 0x8086, E1000_DEV_ID_82573E, PCI_ANY_ID, PCI_ANY_ID, 0}, 163 { 0x8086, E1000_DEV_ID_82573E_IAMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 164 { 0x8086, E1000_DEV_ID_82573L, PCI_ANY_ID, PCI_ANY_ID, 0}, 165 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT, 166 PCI_ANY_ID, PCI_ANY_ID, 0}, 167 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT, 168 PCI_ANY_ID, PCI_ANY_ID, 0}, 169 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT, 170 PCI_ANY_ID, PCI_ANY_ID, 0}, 171 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT, 172 PCI_ANY_ID, PCI_ANY_ID, 0}, 173 { 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 174 { 0x8086, E1000_DEV_ID_ICH8_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0}, 175 { 0x8086, E1000_DEV_ID_ICH8_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0}, 176 { 0x8086, E1000_DEV_ID_ICH8_IFE, PCI_ANY_ID, PCI_ANY_ID, 0}, 177 { 0x8086, E1000_DEV_ID_ICH8_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0}, 178 { 0x8086, E1000_DEV_ID_ICH8_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0}, 179 { 0x8086, E1000_DEV_ID_ICH8_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0}, 180 181 /* required last entry */ 182 { 0, 0, 0, 0, 0} 183}; 184 185/********************************************************************* 186 * Table of branding strings for all supported NICs. 187 *********************************************************************/ 188 189static char *em_strings[] = { 190 "Intel(R) PRO/1000 Network Connection" 191}; 192 193/********************************************************************* 194 * Function prototypes 195 *********************************************************************/ 196static int em_probe(device_t); 197static int em_attach(device_t); 198static int em_detach(device_t); 199static int em_shutdown(device_t); 200static int em_suspend(device_t); 201static int em_resume(device_t); 202static void em_start(struct ifnet *); 203static void em_start_locked(struct ifnet *ifp); 204static int em_ioctl(struct ifnet *, u_long, caddr_t); 205static void em_watchdog(struct ifnet *); 206static void em_init(void *); 207static void em_init_locked(struct adapter *); 208static void em_stop(void *); 209static void em_media_status(struct ifnet *, struct ifmediareq *); 210static int em_media_change(struct ifnet *); 211static void em_identify_hardware(struct adapter *); 212static int em_allocate_pci_resources(struct adapter *); 213static void em_free_pci_resources(struct adapter *); 214static void em_local_timer(void *); 215static int em_hardware_init(struct adapter *); 216static void em_setup_interface(device_t, struct adapter *); 217static void em_setup_transmit_structures(struct adapter *); 218static void em_initialize_transmit_unit(struct adapter *); 219static int em_setup_receive_structures(struct adapter *); 220static void em_initialize_receive_unit(struct adapter *); 221static void em_enable_intr(struct adapter *); 222static void em_disable_intr(struct adapter *); 223static void em_free_transmit_structures(struct adapter *); 224static void em_free_receive_structures(struct adapter *); 225static void em_update_stats_counters(struct adapter *); 226static void em_txeof(struct adapter *); 227static int em_allocate_receive_structures(struct adapter *); 228static int em_allocate_transmit_structures(struct adapter *); 229static int em_rxeof(struct adapter *, int); 230#ifndef __NO_STRICT_ALIGNMENT 231static int em_fixup_rx(struct adapter *); 232#endif 233static void em_receive_checksum(struct adapter *, struct em_rx_desc *, 234 struct mbuf *); 235static void em_transmit_checksum_setup(struct adapter *, struct mbuf *, 236 uint32_t *, uint32_t *); 237#ifdef EM_TSO 238static boolean_t em_tso_setup(struct adapter *, struct mbuf *, u_int32_t *, 239 uint32_t *); 240#endif 241static void em_set_promisc(struct adapter *); 242static void em_disable_promisc(struct adapter *); 243static void em_set_multi(struct adapter *); 244static void em_print_hw_stats(struct adapter *); 245static void em_update_link_status(struct adapter *); 246static int em_get_buf(int i, struct adapter *, struct mbuf *); 247static void em_enable_vlans(struct adapter *); 248static void em_disable_vlans(struct adapter *); 249static int em_encap(struct adapter *, struct mbuf **); 250static void em_smartspeed(struct adapter *); 251static int em_82547_fifo_workaround(struct adapter *, int); 252static void em_82547_update_fifo_head(struct adapter *, int); 253static int em_82547_tx_fifo_reset(struct adapter *); 254static void em_82547_move_tail(void *arg); 255static void em_82547_move_tail_locked(struct adapter *); 256static int em_dma_malloc(struct adapter *, bus_size_t, 257 struct em_dma_alloc *, int); 258static void em_dma_free(struct adapter *, struct em_dma_alloc *); 259static void em_print_debug_info(struct adapter *); 260static int em_is_valid_ether_addr(uint8_t *); 261static int em_sysctl_stats(SYSCTL_HANDLER_ARGS); 262static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS); 263static uint32_t em_fill_descriptors (bus_addr_t address, uint32_t length, 264 PDESC_ARRAY desc_array); 265static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS); 266static void em_add_int_delay_sysctl(struct adapter *, const char *, 267 const char *, struct em_int_delay_info *, int, int); 268static void em_intr(void *); 269 270#ifdef DEVICE_POLLING 271static poll_handler_t em_poll; 272#endif 273 274/********************************************************************* 275 * FreeBSD Device Interface Entry Points 276 *********************************************************************/ 277 278static device_method_t em_methods[] = { 279 /* Device interface */ 280 DEVMETHOD(device_probe, em_probe), 281 DEVMETHOD(device_attach, em_attach), 282 DEVMETHOD(device_detach, em_detach), 283 DEVMETHOD(device_shutdown, em_shutdown), 284 DEVMETHOD(device_suspend, em_suspend), 285 DEVMETHOD(device_resume, em_resume), 286 {0, 0} 287}; 288 289static driver_t em_driver = { 290 "em", em_methods, sizeof(struct adapter), 291}; 292 293static devclass_t em_devclass; 294DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0); 295MODULE_DEPEND(em, pci, 1, 1, 1); 296MODULE_DEPEND(em, ether, 1, 1, 1); 297 298/********************************************************************* 299 * Tunable default values. 300 *********************************************************************/ 301 302#define E1000_TICKS_TO_USECS(ticks) ((1024 * (ticks) + 500) / 1000) 303#define E1000_USECS_TO_TICKS(usecs) ((1000 * (usecs) + 512) / 1024) 304#define M_TSO_LEN 66 /* mbuf with just hdr and TSO pkthdr */ 305 306static int em_tx_int_delay_dflt = E1000_TICKS_TO_USECS(EM_TIDV); 307static int em_rx_int_delay_dflt = E1000_TICKS_TO_USECS(EM_RDTR); 308static int em_tx_abs_int_delay_dflt = E1000_TICKS_TO_USECS(EM_TADV); 309static int em_rx_abs_int_delay_dflt = E1000_TICKS_TO_USECS(EM_RADV); 310static int em_rxd = EM_DEFAULT_RXD; 311static int em_txd = EM_DEFAULT_TXD; 312static int em_smart_pwr_down = FALSE; 313 314TUNABLE_INT("hw.em.tx_int_delay", &em_tx_int_delay_dflt); 315TUNABLE_INT("hw.em.rx_int_delay", &em_rx_int_delay_dflt); 316TUNABLE_INT("hw.em.tx_abs_int_delay", &em_tx_abs_int_delay_dflt); 317TUNABLE_INT("hw.em.rx_abs_int_delay", &em_rx_abs_int_delay_dflt); 318TUNABLE_INT("hw.em.rxd", &em_rxd); 319TUNABLE_INT("hw.em.txd", &em_txd); 320TUNABLE_INT("hw.em.smart_pwr_down", &em_smart_pwr_down); 321 322/********************************************************************* 323 * Device identification routine 324 * 325 * em_probe determines if the driver should be loaded on 326 * adapter based on PCI vendor/device id of the adapter. 327 * 328 * return BUS_PROBE_DEFAULT on success, positive on failure 329 *********************************************************************/ 330 331static int 332em_probe(device_t dev) 333{ 334 char adapter_name[60]; 335 uint16_t pci_vendor_id = 0; 336 uint16_t pci_device_id = 0; 337 uint16_t pci_subvendor_id = 0; 338 uint16_t pci_subdevice_id = 0; 339 em_vendor_info_t *ent; 340 341 INIT_DEBUGOUT("em_probe: begin"); 342 343 pci_vendor_id = pci_get_vendor(dev); 344 if (pci_vendor_id != EM_VENDOR_ID) 345 return (ENXIO); 346 347 pci_device_id = pci_get_device(dev); 348 pci_subvendor_id = pci_get_subvendor(dev); 349 pci_subdevice_id = pci_get_subdevice(dev); 350 351 ent = em_vendor_info_array; 352 while (ent->vendor_id != 0) { 353 if ((pci_vendor_id == ent->vendor_id) && 354 (pci_device_id == ent->device_id) && 355 356 ((pci_subvendor_id == ent->subvendor_id) || 357 (ent->subvendor_id == PCI_ANY_ID)) && 358 359 ((pci_subdevice_id == ent->subdevice_id) || 360 (ent->subdevice_id == PCI_ANY_ID))) { 361 sprintf(adapter_name, "%s %s", 362 em_strings[ent->index], 363 em_driver_version); 364 device_set_desc_copy(dev, adapter_name); 365 return (BUS_PROBE_DEFAULT); 366 } 367 ent++; 368 } 369 370 return (ENXIO); 371} 372 373/********************************************************************* 374 * Device initialization routine 375 * 376 * The attach entry point is called when the driver is being loaded. 377 * This routine identifies the type of hardware, allocates all resources 378 * and initializes the hardware. 379 * 380 * return 0 on success, positive on failure 381 *********************************************************************/ 382 383static int 384em_attach(device_t dev) 385{ 386 struct adapter *adapter; 387 int tsize, rsize; 388 int error = 0; 389 390 INIT_DEBUGOUT("em_attach: begin"); 391 392 adapter = device_get_softc(dev); 393 adapter->dev = adapter->osdep.dev = dev; 394 EM_LOCK_INIT(adapter, device_get_nameunit(dev)); 395 396 /* SYSCTL stuff */ 397 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 398 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), 399 OID_AUTO, "debug_info", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, 400 em_sysctl_debug_info, "I", "Debug Information"); 401 402 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), 403 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), 404 OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, 405 em_sysctl_stats, "I", "Statistics"); 406 407 callout_init(&adapter->timer, CALLOUT_MPSAFE); 408 callout_init(&adapter->tx_fifo_timer, CALLOUT_MPSAFE); 409 410 /* Determine hardware revision */ 411 em_identify_hardware(adapter); 412 413 /* Set up some sysctls for the tunable interrupt delays */ 414 em_add_int_delay_sysctl(adapter, "rx_int_delay", 415 "receive interrupt delay in usecs", &adapter->rx_int_delay, 416 E1000_REG_OFFSET(&adapter->hw, RDTR), em_rx_int_delay_dflt); 417 em_add_int_delay_sysctl(adapter, "tx_int_delay", 418 "transmit interrupt delay in usecs", &adapter->tx_int_delay, 419 E1000_REG_OFFSET(&adapter->hw, TIDV), em_tx_int_delay_dflt); 420 if (adapter->hw.mac_type >= em_82540) { 421 em_add_int_delay_sysctl(adapter, "rx_abs_int_delay", 422 "receive interrupt delay limit in usecs", 423 &adapter->rx_abs_int_delay, 424 E1000_REG_OFFSET(&adapter->hw, RADV), 425 em_rx_abs_int_delay_dflt); 426 em_add_int_delay_sysctl(adapter, "tx_abs_int_delay", 427 "transmit interrupt delay limit in usecs", 428 &adapter->tx_abs_int_delay, 429 E1000_REG_OFFSET(&adapter->hw, TADV), 430 em_tx_abs_int_delay_dflt); 431 } 432 433 /* 434 * Validate number of transmit and receive descriptors. It 435 * must not exceed hardware maximum, and must be multiple 436 * of EM_DBA_ALIGN. 437 */ 438 if (((em_txd * sizeof(struct em_tx_desc)) % EM_DBA_ALIGN) != 0 || 439 (adapter->hw.mac_type >= em_82544 && em_txd > EM_MAX_TXD) || 440 (adapter->hw.mac_type < em_82544 && em_txd > EM_MAX_TXD_82543) || 441 (em_txd < EM_MIN_TXD)) { 442 device_printf(dev, "Using %d TX descriptors instead of %d!\n", 443 EM_DEFAULT_TXD, em_txd); 444 adapter->num_tx_desc = EM_DEFAULT_TXD; 445 } else 446 adapter->num_tx_desc = em_txd; 447 if (((em_rxd * sizeof(struct em_rx_desc)) % EM_DBA_ALIGN) != 0 || 448 (adapter->hw.mac_type >= em_82544 && em_rxd > EM_MAX_RXD) || 449 (adapter->hw.mac_type < em_82544 && em_rxd > EM_MAX_RXD_82543) || 450 (em_rxd < EM_MIN_RXD)) { 451 device_printf(dev, "Using %d RX descriptors instead of %d!\n", 452 EM_DEFAULT_RXD, em_rxd); 453 adapter->num_rx_desc = EM_DEFAULT_RXD; 454 } else 455 adapter->num_rx_desc = em_rxd; 456 457 adapter->hw.autoneg = DO_AUTO_NEG; 458 adapter->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT; 459 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT; 460 adapter->hw.tbi_compatibility_en = TRUE; 461 adapter->rx_buffer_len = EM_RXBUFFER_2048; 462 463 adapter->hw.phy_init_script = 1; 464 adapter->hw.phy_reset_disable = FALSE; 465 466#ifndef EM_MASTER_SLAVE 467 adapter->hw.master_slave = em_ms_hw_default; 468#else 469 adapter->hw.master_slave = EM_MASTER_SLAVE; 470#endif 471 /* 472 * Set the max frame size assuming standard ethernet 473 * sized frames. 474 */ 475 adapter->hw.max_frame_size = 476 ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN; 477 478 adapter->hw.min_frame_size = 479 MINIMUM_ETHERNET_PACKET_SIZE + ETHER_CRC_LEN; 480 481 /* 482 * This controls when hardware reports transmit completion 483 * status. 484 */ 485 adapter->hw.report_tx_early = 1; 486 if (em_allocate_pci_resources(adapter)) { 487 device_printf(dev, "Allocation of PCI resources failed\n"); 488 error = ENXIO; 489 goto err_pci; 490 } 491 492 /* Initialize eeprom parameters */ 493 em_init_eeprom_params(&adapter->hw); 494 495 tsize = roundup2(adapter->num_tx_desc * sizeof(struct em_tx_desc), 496 EM_DBA_ALIGN); 497 498 /* Allocate Transmit Descriptor ring */ 499 if (em_dma_malloc(adapter, tsize, &adapter->txdma, BUS_DMA_NOWAIT)) { 500 device_printf(dev, "Unable to allocate tx_desc memory\n"); 501 error = ENOMEM; 502 goto err_tx_desc; 503 } 504 adapter->tx_desc_base = (struct em_tx_desc *)adapter->txdma.dma_vaddr; 505 506 rsize = roundup2(adapter->num_rx_desc * sizeof(struct em_rx_desc), 507 EM_DBA_ALIGN); 508 509 /* Allocate Receive Descriptor ring */ 510 if (em_dma_malloc(adapter, rsize, &adapter->rxdma, BUS_DMA_NOWAIT)) { 511 device_printf(dev, "Unable to allocate rx_desc memory\n"); 512 error = ENOMEM; 513 goto err_rx_desc; 514 } 515 adapter->rx_desc_base = (struct em_rx_desc *)adapter->rxdma.dma_vaddr; 516 517 /* Initialize the hardware */ 518 if (em_hardware_init(adapter)) { 519 device_printf(dev, "Unable to initialize the hardware\n"); 520 error = EIO; 521 goto err_hw_init; 522 } 523 524 /* Copy the permanent MAC address out of the EEPROM */ 525 if (em_read_mac_addr(&adapter->hw) < 0) { 526 device_printf(dev, "EEPROM read error while reading MAC" 527 " address\n"); 528 error = EIO; 529 goto err_hw_init; 530 } 531 532 if (!em_is_valid_ether_addr(adapter->hw.mac_addr)) { 533 device_printf(dev, "Invalid MAC address\n"); 534 error = EIO; 535 goto err_hw_init; 536 } 537 538 /* Allocate transmit descriptors and buffers */ 539 if (em_allocate_transmit_structures(adapter)) { 540 device_printf(dev, "Could not setup transmit structures\n"); 541 error = ENOMEM; 542 goto err_tx_struct; 543 } 544 545 /* Allocate receive descriptors and buffers */ 546 if (em_allocate_receive_structures(adapter)) { 547 device_printf(dev, "Could not setup receive structures\n"); 548 error = ENOMEM; 549 goto err_rx_struct; 550 } 551 552 /* Setup OS specific network interface */ 553 em_setup_interface(dev, adapter); 554 555 /* Initialize statistics */ 556 em_clear_hw_cntrs(&adapter->hw); 557 em_update_stats_counters(adapter); 558 adapter->hw.get_link_status = 1; 559 em_update_link_status(adapter); 560 561 /* Indicate SOL/IDER usage */ 562 if (em_check_phy_reset_block(&adapter->hw)) 563 device_printf(dev, 564 "PHY reset is blocked due to SOL/IDER session.\n"); 565 566 /* Identify 82544 on PCIX */ 567 em_get_bus_info(&adapter->hw); 568 if (adapter->hw.bus_type == em_bus_type_pcix && 569 adapter->hw.mac_type == em_82544) 570 adapter->pcix_82544 = TRUE; 571 else 572 adapter->pcix_82544 = FALSE; 573 574 INIT_DEBUGOUT("em_attach: end"); 575 576 return (0); 577 578err_rx_struct: 579 em_free_transmit_structures(adapter); 580err_hw_init: 581err_tx_struct: 582 em_dma_free(adapter, &adapter->rxdma); 583err_rx_desc: 584 em_dma_free(adapter, &adapter->txdma); 585err_tx_desc: 586err_pci: 587 em_free_pci_resources(adapter); 588 EM_LOCK_DESTROY(adapter); 589 590 return (error); 591} 592 593/********************************************************************* 594 * Device removal routine 595 * 596 * The detach entry point is called when the driver is being removed. 597 * This routine stops the adapter and deallocates all the resources 598 * that were allocated for driver operation. 599 * 600 * return 0 on success, positive on failure 601 *********************************************************************/ 602 603static int 604em_detach(device_t dev) 605{ 606 struct adapter *adapter = device_get_softc(dev); 607 struct ifnet *ifp = adapter->ifp; 608 609 INIT_DEBUGOUT("em_detach: begin"); 610 611#ifdef DEVICE_POLLING 612 if (ifp->if_capenable & IFCAP_POLLING) 613 ether_poll_deregister(ifp); 614#endif 615 616 EM_LOCK(adapter); 617 adapter->in_detach = 1; 618 em_stop(adapter); 619 em_phy_hw_reset(&adapter->hw); 620 EM_UNLOCK(adapter); 621 ether_ifdetach(adapter->ifp); 622 623 em_free_pci_resources(adapter); 624 bus_generic_detach(dev); 625 if_free(ifp); 626 627 em_free_transmit_structures(adapter); 628 em_free_receive_structures(adapter); 629 630 /* Free Transmit Descriptor ring */ 631 if (adapter->tx_desc_base) { 632 em_dma_free(adapter, &adapter->txdma); 633 adapter->tx_desc_base = NULL; 634 } 635 636 /* Free Receive Descriptor ring */ 637 if (adapter->rx_desc_base) { 638 em_dma_free(adapter, &adapter->rxdma); 639 adapter->rx_desc_base = NULL; 640 } 641 642 EM_LOCK_DESTROY(adapter); 643 644 return (0); 645} 646 647/********************************************************************* 648 * 649 * Shutdown entry point 650 * 651 **********************************************************************/ 652 653static int 654em_shutdown(device_t dev) 655{ 656 struct adapter *adapter = device_get_softc(dev); 657 EM_LOCK(adapter); 658 em_stop(adapter); 659 EM_UNLOCK(adapter); 660 return (0); 661} 662 663/* 664 * Suspend/resume device methods. 665 */ 666static int 667em_suspend(device_t dev) 668{ 669 struct adapter *adapter = device_get_softc(dev); 670 671 EM_LOCK(adapter); 672 em_stop(adapter); 673 EM_UNLOCK(adapter); 674 675 return bus_generic_suspend(dev); 676} 677 678static int 679em_resume(device_t dev) 680{ 681 struct adapter *adapter = device_get_softc(dev); 682 struct ifnet *ifp = adapter->ifp; 683 684 EM_LOCK(adapter); 685 em_init_locked(adapter); 686 if ((ifp->if_flags & IFF_UP) && 687 (ifp->if_drv_flags & IFF_DRV_RUNNING)) 688 em_start_locked(ifp); 689 EM_UNLOCK(adapter); 690 691 return bus_generic_resume(dev); 692} 693 694 695/********************************************************************* 696 * Transmit entry point 697 * 698 * em_start is called by the stack to initiate a transmit. 699 * The driver will remain in this routine as long as there are 700 * packets to transmit and transmit resources are available. 701 * In case resources are not available stack is notified and 702 * the packet is requeued. 703 **********************************************************************/ 704 705static void 706em_start_locked(struct ifnet *ifp) 707{ 708 struct adapter *adapter = ifp->if_softc; 709 struct mbuf *m_head; 710 711 EM_LOCK_ASSERT(adapter); 712 713 if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != 714 IFF_DRV_RUNNING) 715 return; 716 if (!adapter->link_active) 717 return; 718 719 while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { 720 721 IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); 722 if (m_head == NULL) 723 break; 724 /* 725 * em_encap() can modify our pointer, and or make it NULL on 726 * failure. In that event, we can't requeue. 727 */ 728 if (em_encap(adapter, &m_head)) { 729 if (m_head == NULL) 730 break; 731 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 732 IFQ_DRV_PREPEND(&ifp->if_snd, m_head); 733 break; 734 } 735 736 /* Send a copy of the frame to the BPF listener */ 737 BPF_MTAP(ifp, m_head); 738 739 /* Set timeout in case hardware has problems transmitting. */ 740 ifp->if_timer = EM_TX_TIMEOUT; 741 } 742} 743 744static void 745em_start(struct ifnet *ifp) 746{ 747 struct adapter *adapter = ifp->if_softc; 748 749 EM_LOCK(adapter); 750 if (ifp->if_drv_flags & IFF_DRV_RUNNING) 751 em_start_locked(ifp); 752 EM_UNLOCK(adapter); 753} 754 755/********************************************************************* 756 * Ioctl entry point 757 * 758 * em_ioctl is called when the user wants to configure the 759 * interface. 760 * 761 * return 0 on success, positive on failure 762 **********************************************************************/ 763 764static int 765em_ioctl(struct ifnet *ifp, u_long command, caddr_t data) 766{ 767 struct adapter *adapter = ifp->if_softc; 768 struct ifreq *ifr = (struct ifreq *)data; 769 struct ifaddr *ifa = (struct ifaddr *)data; 770 int error = 0; 771 772 if (adapter->in_detach) 773 return (error); 774 775 switch (command) { 776 case SIOCSIFADDR: 777 case SIOCGIFADDR: 778 if (ifa->ifa_addr->sa_family == AF_INET) { 779 /* 780 * XXX 781 * Since resetting hardware takes a very long time 782 * and results in link renegotiation we only 783 * initialize the hardware only when it is absolutely 784 * required. 785 */ 786 ifp->if_flags |= IFF_UP; 787 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { 788 EM_LOCK(adapter); 789 em_init_locked(adapter); 790 EM_UNLOCK(adapter); 791 } 792 arp_ifinit(ifp, ifa); 793 } else 794 error = ether_ioctl(ifp, command, data); 795 break; 796 case SIOCSIFMTU: 797 { 798 int max_frame_size; 799 uint16_t eeprom_data = 0; 800 801 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)"); 802 803 EM_LOCK(adapter); 804 switch (adapter->hw.mac_type) { 805 case em_82573: 806 /* 807 * 82573 only supports jumbo frames 808 * if ASPM is disabled. 809 */ 810 em_read_eeprom(&adapter->hw, 811 EEPROM_INIT_3GIO_3, 1, &eeprom_data); 812 if (eeprom_data & EEPROM_WORD1A_ASPM_MASK) { 813 max_frame_size = ETHER_MAX_LEN; 814 break; 815 } 816 /* Allow Jumbo frames - fall thru */ 817 case em_82571: 818 case em_82572: 819 case em_80003es2lan: /* Limit Jumbo Frame size */ 820 max_frame_size = 9234; 821 break; 822 case em_ich8lan: 823 /* ICH8 does not support jumbo frames */ 824 max_frame_size = ETHER_MAX_LEN; 825 break; 826 default: 827 max_frame_size = MAX_JUMBO_FRAME_SIZE; 828 } 829 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN - 830 ETHER_CRC_LEN) { 831 EM_UNLOCK(adapter); 832 error = EINVAL; 833 break; 834 } 835 836 ifp->if_mtu = ifr->ifr_mtu; 837 adapter->hw.max_frame_size = 838 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; 839 em_init_locked(adapter); 840 EM_UNLOCK(adapter); 841 break; 842 } 843 case SIOCSIFFLAGS: 844 IOCTL_DEBUGOUT("ioctl rcv'd:\ 845 SIOCSIFFLAGS (Set Interface Flags)"); 846 EM_LOCK(adapter); 847 if (ifp->if_flags & IFF_UP) { 848 if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) { 849 if ((ifp->if_flags ^ adapter->if_flags) & 850 IFF_PROMISC) { 851 em_disable_promisc(adapter); 852 em_set_promisc(adapter); 853 } 854 } else 855 em_init_locked(adapter); 856 } else { 857 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 858 em_stop(adapter); 859 } 860 } 861 adapter->if_flags = ifp->if_flags; 862 EM_UNLOCK(adapter); 863 break; 864 case SIOCADDMULTI: 865 case SIOCDELMULTI: 866 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI"); 867 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 868 EM_LOCK(adapter); 869 em_disable_intr(adapter); 870 em_set_multi(adapter); 871 if (adapter->hw.mac_type == em_82542_rev2_0) { 872 em_initialize_receive_unit(adapter); 873 } 874#ifdef DEVICE_POLLING 875 if (!(ifp->if_capenable & IFCAP_POLLING)) 876#endif 877 em_enable_intr(adapter); 878 EM_UNLOCK(adapter); 879 } 880 break; 881 case SIOCSIFMEDIA: 882 /* Check SOL/IDER usage */ 883 if (em_check_phy_reset_block(&adapter->hw)) { 884 device_printf(adapter->dev, "Media change is" 885 "blocked due to SOL/IDER session.\n"); 886 break; 887 } 888 case SIOCGIFMEDIA: 889 IOCTL_DEBUGOUT("ioctl rcv'd: \ 890 SIOCxIFMEDIA (Get/Set Interface Media)"); 891 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command); 892 break; 893 case SIOCSIFCAP: 894 { 895 int mask, reinit; 896 897 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)"); 898 reinit = 0; 899 mask = ifr->ifr_reqcap ^ ifp->if_capenable; 900#ifdef DEVICE_POLLING 901 if (mask & IFCAP_POLLING) { 902 if (ifr->ifr_reqcap & IFCAP_POLLING) { 903 error = ether_poll_register(em_poll, ifp); 904 if (error) 905 return (error); 906 EM_LOCK(adapter); 907 em_disable_intr(adapter); 908 ifp->if_capenable |= IFCAP_POLLING; 909 EM_UNLOCK(adapter); 910 } else { 911 error = ether_poll_deregister(ifp); 912 /* Enable interrupt even in error case */ 913 EM_LOCK(adapter); 914 em_enable_intr(adapter); 915 ifp->if_capenable &= ~IFCAP_POLLING; 916 EM_UNLOCK(adapter); 917 } 918 } 919#endif 920 if (mask & IFCAP_HWCSUM) { 921 ifp->if_capenable ^= IFCAP_HWCSUM; 922 reinit = 1; 923 } 924 if (mask & IFCAP_VLAN_HWTAGGING) { 925 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; 926 reinit = 1; 927 } 928 if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING)) 929 em_init(adapter); 930 break; 931 } 932 default: 933 error = ether_ioctl(ifp, command, data); 934 break; 935 } 936 937 return (error); 938} 939 940/********************************************************************* 941 * Watchdog entry point 942 * 943 * This routine is called whenever hardware quits transmitting. 944 * 945 **********************************************************************/ 946 947static void 948em_watchdog(struct ifnet *ifp) 949{ 950 struct adapter *adapter = ifp->if_softc; 951 952 EM_LOCK(adapter); 953 /* If we are in this routine because of pause frames, then 954 * don't reset the hardware. 955 */ 956 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) { 957 ifp->if_timer = EM_TX_TIMEOUT; 958 EM_UNLOCK(adapter); 959 return; 960 } 961 962 if (em_check_for_link(&adapter->hw) == 0) 963 device_printf(adapter->dev, "watchdog timeout -- resetting\n"); 964 965 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 966 adapter->watchdog_events++; 967 968 em_init_locked(adapter); 969 EM_UNLOCK(adapter); 970} 971 972/********************************************************************* 973 * Init entry point 974 * 975 * This routine is used in two ways. It is used by the stack as 976 * init entry point in network interface structure. It is also used 977 * by the driver as a hw/sw initialization routine to get to a 978 * consistent state. 979 * 980 * return 0 on success, positive on failure 981 **********************************************************************/ 982 983static void 984em_init_locked(struct adapter *adapter) 985{ 986 struct ifnet *ifp = adapter->ifp; 987 device_t dev = adapter->dev; 988 uint32_t pba; 989 990 INIT_DEBUGOUT("em_init: begin"); 991 992 EM_LOCK_ASSERT(adapter); 993 994 em_stop(adapter); 995 996 /* 997 * Packet Buffer Allocation (PBA) 998 * Writing PBA sets the receive portion of the buffer 999 * the remainder is used for the transmit buffer. 1000 * 1001 * Devices before the 82547 had a Packet Buffer of 64K. 1002 * Default allocation: PBA=48K for Rx, leaving 16K for Tx. 1003 * After the 82547 the buffer was reduced to 40K. 1004 * Default allocation: PBA=30K for Rx, leaving 10K for Tx. 1005 * Note: default does not leave enough room for Jumbo Frame >10k. 1006 */ 1007 switch (adapter->hw.mac_type) { 1008 case em_82547: 1009 case em_82547_rev_2: /* 82547: Total Packet Buffer is 40K */ 1010 if (adapter->hw.max_frame_size > EM_RXBUFFER_8192) 1011 pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */ 1012 else 1013 pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */ 1014 adapter->tx_fifo_head = 0; 1015 adapter->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT; 1016 adapter->tx_fifo_size = 1017 (E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT; 1018 break; 1019 /* Total Packet Buffer on these is 48K */ 1020 case em_82571: 1021 case em_82572: 1022 case em_80003es2lan: 1023 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */ 1024 break; 1025 case em_82573: /* 82573: Total Packet Buffer is 32K */ 1026 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */ 1027 break; 1028 case em_ich8lan: 1029 pba = E1000_PBA_8K; 1030 break; 1031 default: 1032 /* Devices before 82547 had a Packet Buffer of 64K. */ 1033 if(adapter->hw.max_frame_size > EM_RXBUFFER_8192) 1034 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */ 1035 else 1036 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */ 1037 } 1038 1039 INIT_DEBUGOUT1("em_init: pba=%dK",pba); 1040 E1000_WRITE_REG(&adapter->hw, PBA, pba); 1041 1042 /* Get the latest mac address, User can use a LAA */ 1043 bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac_addr, 1044 ETHER_ADDR_LEN); 1045 1046 /* Initialize the hardware */ 1047 if (em_hardware_init(adapter)) { 1048 device_printf(dev, "Unable to initialize the hardware\n"); 1049 return; 1050 } 1051 em_update_link_status(adapter); 1052 1053 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) 1054 em_enable_vlans(adapter); 1055 1056 /* Set hardware offload abilities */ 1057 ifp->if_hwassist = 0; 1058 if (adapter->hw.mac_type >= em_82543) { 1059 if (ifp->if_capenable & IFCAP_TXCSUM) 1060 ifp->if_hwassist |= EM_CHECKSUM_FEATURES; 1061#ifdef EM_TSO 1062 if (ifp->if_capenable & IFCAP_TSO) 1063 ifp->if_hwassist |= EM_TCPSEG_FEATURES; 1064#endif 1065 } 1066 1067 /* Prepare transmit descriptors and buffers */ 1068 em_setup_transmit_structures(adapter); 1069 em_initialize_transmit_unit(adapter); 1070 1071 /* Setup Multicast table */ 1072 em_set_multi(adapter); 1073 1074 /* Prepare receive descriptors and buffers */ 1075 if (em_setup_receive_structures(adapter)) { 1076 device_printf(dev, "Could not setup receive structures\n"); 1077 em_stop(adapter); 1078 return; 1079 } 1080 em_initialize_receive_unit(adapter); 1081 1082 /* Don't lose promiscuous settings */ 1083 em_set_promisc(adapter); 1084 1085 ifp->if_drv_flags |= IFF_DRV_RUNNING; 1086 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 1087 1088 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1089 em_clear_hw_cntrs(&adapter->hw); 1090 1091#ifdef DEVICE_POLLING 1092 /* 1093 * Only enable interrupts if we are not polling, make sure 1094 * they are off otherwise. 1095 */ 1096 if (ifp->if_capenable & IFCAP_POLLING) 1097 em_disable_intr(adapter); 1098 else 1099#endif /* DEVICE_POLLING */ 1100 em_enable_intr(adapter); 1101 1102 /* Don't reset the phy next time init gets called */ 1103 adapter->hw.phy_reset_disable = TRUE; 1104} 1105 1106static void 1107em_init(void *arg) 1108{ 1109 struct adapter *adapter = arg; 1110 1111 EM_LOCK(adapter); 1112 em_init_locked(adapter); 1113 EM_UNLOCK(adapter); 1114} 1115 1116 1117#ifdef DEVICE_POLLING 1118static void 1119em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) 1120{ 1121 struct adapter *adapter = ifp->if_softc; 1122 uint32_t reg_icr; 1123 1124 EM_LOCK(adapter); 1125 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 1126 EM_UNLOCK(adapter); 1127 return; 1128 } 1129 1130 if (cmd == POLL_AND_CHECK_STATUS) { 1131 reg_icr = E1000_READ_REG(&adapter->hw, ICR); 1132 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1133 callout_stop(&adapter->timer); 1134 adapter->hw.get_link_status = 1; 1135 em_check_for_link(&adapter->hw); 1136 em_update_link_status(adapter); 1137 callout_reset(&adapter->timer, hz, 1138 em_local_timer, adapter); 1139 } 1140 } 1141 em_rxeof(adapter, count); 1142 em_txeof(adapter); 1143 1144 if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1145 em_start_locked(ifp); 1146 EM_UNLOCK(adapter); 1147} 1148#endif /* DEVICE_POLLING */ 1149 1150/********************************************************************* 1151 * 1152 * Interrupt Service routine 1153 * 1154 *********************************************************************/ 1155static void 1156em_intr(void *arg) 1157{ 1158 struct adapter *adapter = arg; 1159 struct ifnet *ifp; 1160 uint32_t reg_icr; 1161 1162 EM_LOCK(adapter); 1163 1164 ifp = adapter->ifp; 1165 1166#ifdef DEVICE_POLLING 1167 if (ifp->if_capenable & IFCAP_POLLING) { 1168 EM_UNLOCK(adapter); 1169 return; 1170 } 1171#endif /* DEVICE_POLLING */ 1172 1173 for (;;) { 1174 reg_icr = E1000_READ_REG(&adapter->hw, ICR); 1175 if (adapter->hw.mac_type >= em_82571 && 1176 (reg_icr & E1000_ICR_INT_ASSERTED) == 0) 1177 break; 1178 else if (reg_icr == 0) 1179 break; 1180 1181 /* 1182 * XXX: some laptops trigger several spurious interrupts 1183 * on em(4) when in the resume cycle. The ICR register 1184 * reports all-ones value in this case. Processing such 1185 * interrupts would lead to a freeze. I don't know why. 1186 */ 1187 if (reg_icr == 0xffffffff) 1188 break; 1189 1190 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1191 em_rxeof(adapter, -1); 1192 em_txeof(adapter); 1193 } 1194 1195 /* Link status change */ 1196 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1197 callout_stop(&adapter->timer); 1198 adapter->hw.get_link_status = 1; 1199 em_check_for_link(&adapter->hw); 1200 em_update_link_status(adapter); 1201 callout_reset(&adapter->timer, hz, 1202 em_local_timer, adapter); 1203 } 1204 1205 if (reg_icr & E1000_ICR_RXO) 1206 adapter->rx_overruns++; 1207 } 1208 1209 if (ifp->if_drv_flags & IFF_DRV_RUNNING && 1210 !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1211 em_start_locked(ifp); 1212 1213 EM_UNLOCK(adapter); 1214} 1215 1216/********************************************************************* 1217 * 1218 * Media Ioctl callback 1219 * 1220 * This routine is called whenever the user queries the status of 1221 * the interface using ifconfig. 1222 * 1223 **********************************************************************/ 1224static void 1225em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) 1226{ 1227 struct adapter *adapter = ifp->if_softc; 1228 u_char fiber_type = IFM_1000_SX; 1229 1230 INIT_DEBUGOUT("em_media_status: begin"); 1231 1232 EM_LOCK(adapter); 1233 em_check_for_link(&adapter->hw); 1234 em_update_link_status(adapter); 1235 1236 ifmr->ifm_status = IFM_AVALID; 1237 ifmr->ifm_active = IFM_ETHER; 1238 1239 if (!adapter->link_active) { 1240 EM_UNLOCK(adapter); 1241 return; 1242 } 1243 1244 ifmr->ifm_status |= IFM_ACTIVE; 1245 1246 if ((adapter->hw.media_type == em_media_type_fiber) || 1247 (adapter->hw.media_type == em_media_type_internal_serdes)) { 1248 if (adapter->hw.mac_type == em_82545) 1249 fiber_type = IFM_1000_LX; 1250 ifmr->ifm_active |= fiber_type | IFM_FDX; 1251 } else { 1252 switch (adapter->link_speed) { 1253 case 10: 1254 ifmr->ifm_active |= IFM_10_T; 1255 break; 1256 case 100: 1257 ifmr->ifm_active |= IFM_100_TX; 1258 break; 1259 case 1000: 1260 ifmr->ifm_active |= IFM_1000_T; 1261 break; 1262 } 1263 if (adapter->link_duplex == FULL_DUPLEX) 1264 ifmr->ifm_active |= IFM_FDX; 1265 else 1266 ifmr->ifm_active |= IFM_HDX; 1267 } 1268 EM_UNLOCK(adapter); 1269} 1270 1271/********************************************************************* 1272 * 1273 * Media Ioctl callback 1274 * 1275 * This routine is called when the user changes speed/duplex using 1276 * media/mediopt option with ifconfig. 1277 * 1278 **********************************************************************/ 1279static int 1280em_media_change(struct ifnet *ifp) 1281{ 1282 struct adapter *adapter = ifp->if_softc; 1283 struct ifmedia *ifm = &adapter->media; 1284 1285 INIT_DEBUGOUT("em_media_change: begin"); 1286 1287 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) 1288 return (EINVAL); 1289 1290 EM_LOCK(adapter); 1291 switch (IFM_SUBTYPE(ifm->ifm_media)) { 1292 case IFM_AUTO: 1293 adapter->hw.autoneg = DO_AUTO_NEG; 1294 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT; 1295 break; 1296 case IFM_1000_LX: 1297 case IFM_1000_SX: 1298 case IFM_1000_T: 1299 adapter->hw.autoneg = DO_AUTO_NEG; 1300 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; 1301 break; 1302 case IFM_100_TX: 1303 adapter->hw.autoneg = FALSE; 1304 adapter->hw.autoneg_advertised = 0; 1305 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 1306 adapter->hw.forced_speed_duplex = em_100_full; 1307 else 1308 adapter->hw.forced_speed_duplex = em_100_half; 1309 break; 1310 case IFM_10_T: 1311 adapter->hw.autoneg = FALSE; 1312 adapter->hw.autoneg_advertised = 0; 1313 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 1314 adapter->hw.forced_speed_duplex = em_10_full; 1315 else 1316 adapter->hw.forced_speed_duplex = em_10_half; 1317 break; 1318 default: 1319 device_printf(adapter->dev, "Unsupported media type\n"); 1320 } 1321 1322 /* As the speed/duplex settings my have changed we need to 1323 * reset the PHY. 1324 */ 1325 adapter->hw.phy_reset_disable = FALSE; 1326 1327 em_init_locked(adapter); 1328 EM_UNLOCK(adapter); 1329 1330 return (0); 1331} 1332 1333/********************************************************************* 1334 * 1335 * This routine maps the mbufs to tx descriptors. 1336 * 1337 * return 0 on success, positive on failure 1338 **********************************************************************/ 1339static int 1340em_encap(struct adapter *adapter, struct mbuf **m_headp) 1341{ 1342 struct ifnet *ifp = adapter->ifp; 1343 bus_dma_segment_t segs[EM_MAX_SCATTER]; 1344 bus_dmamap_t map; 1345 struct em_buffer *tx_buffer, *tx_buffer_mapped; 1346 struct em_tx_desc *current_tx_desc; 1347 struct mbuf *m_head; 1348 struct m_tag *mtag; 1349 uint32_t txd_upper, txd_lower, txd_used, txd_saved; 1350 int nsegs, i, j, first, last = 0; 1351 int error, do_tso, tso_desc = 0; 1352 1353 m_head = *m_headp; 1354 current_tx_desc = NULL; 1355 txd_upper = txd_lower = txd_used = txd_saved = 0; 1356 1357#ifdef EM_TSO 1358 do_tso = ((m_head->m_pkthdr.csum_flags & CSUM_TSO) != 0); 1359#else 1360 do_tso = 0; 1361#endif 1362 1363 /* 1364 * Force a cleanup if number of TX descriptors 1365 * available hits the threshold 1366 */ 1367 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) { 1368 em_txeof(adapter); 1369 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) { 1370 adapter->no_tx_desc_avail1++; 1371 return(ENOBUFS); 1372 } 1373 } 1374 1375 /* 1376 * Capture the first descriptor index, 1377 * this descriptor will have the index 1378 * of the EOP which is the only one that 1379 * now gets a DONE bit writeback. 1380 */ 1381 first = adapter->next_avail_tx_desc; 1382 1383 /* Find out if we are in vlan mode */ 1384 mtag = VLAN_OUTPUT_TAG(ifp, m_head); 1385 1386 /* 1387 * When operating in promiscuous mode, hardware encapsulation for 1388 * packets is disabled. This means we have to add the vlan 1389 * encapsulation in the driver, since it will have come down from the 1390 * VLAN layer with a tag instead of a VLAN header. 1391 */ 1392 if (mtag != NULL && adapter->em_insert_vlan_header) { 1393 struct ether_vlan_header *evl; 1394 struct ether_header eh; 1395 1396 m_head = m_pullup(m_head, sizeof(eh)); 1397 if (m_head == NULL) { 1398 *m_headp = NULL; 1399 return (ENOBUFS); 1400 } 1401 eh = *mtod(m_head, struct ether_header *); 1402 M_PREPEND(m_head, sizeof(*evl), M_DONTWAIT); 1403 if (m_head == NULL) { 1404 *m_headp = NULL; 1405 return (ENOBUFS); 1406 } 1407 m_head = m_pullup(m_head, sizeof(*evl)); 1408 if (m_head == NULL) { 1409 *m_headp = NULL; 1410 return (ENOBUFS); 1411 } 1412 evl = mtod(m_head, struct ether_vlan_header *); 1413 bcopy(&eh, evl, sizeof(*evl)); 1414 evl->evl_proto = evl->evl_encap_proto; 1415 evl->evl_encap_proto = htons(ETHERTYPE_VLAN); 1416 evl->evl_tag = htons(VLAN_TAG_VALUE(mtag)); 1417 m_tag_delete(m_head, mtag); 1418 mtag = NULL; 1419 *m_headp = m_head; 1420 } 1421 1422 /* 1423 * TSO workaround: 1424 * If an mbuf is only header we need 1425 * to pull 4 bytes of data into it. 1426 */ 1427 if (do_tso && (m_head->m_len <= M_TSO_LEN)) { 1428 m_head = m_pullup(m_head, M_TSO_LEN + 4); 1429 *m_headp = m_head; 1430 if (m_head == NULL) 1431 return (ENOBUFS); 1432 } 1433 1434 /* 1435 * Map the packet for DMA. 1436 */ 1437 tx_buffer = &adapter->tx_buffer_area[first]; 1438 tx_buffer_mapped = tx_buffer; 1439 map = tx_buffer->map; 1440 error = bus_dmamap_load_mbuf_sg(adapter->txtag, tx_buffer->map, 1441 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); 1442 if (error == EFBIG) { 1443 struct mbuf *m; 1444 1445 m = m_defrag(*m_headp, M_DONTWAIT); 1446 if (m == NULL) { 1447 adapter->mbuf_alloc_failed++; 1448 m_freem(*m_headp); 1449 *m_headp = NULL; 1450 return (ENOBUFS); 1451 } 1452 *m_headp = m; 1453 /* Try it again */ 1454 error = bus_dmamap_load_mbuf_sg(adapter->txtag, tx_buffer->map, 1455 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); 1456 1457 if (error == ENOMEM) { 1458 adapter->no_tx_dma_setup++; 1459 return (error); 1460 } else if (error != 0) { 1461 adapter->no_tx_dma_setup++; 1462 m_freem(*m_headp); 1463 *m_headp = NULL; 1464 return (error); 1465 } 1466 } else if (error == ENOMEM) { 1467 adapter->no_tx_dma_setup++; 1468 return (error); 1469 } else if (error != 0) { 1470 adapter->no_tx_dma_setup++; 1471 m_freem(*m_headp); 1472 *m_headp = NULL; 1473 return (error); 1474 } 1475 1476 /* 1477 * TSO Hardware workaround, if this packet is not 1478 * TSO, and is only a single descriptor long, and 1479 * it follows a TSO burst, then we need to add a 1480 * sentinel descriptor to prevent premature writeback. 1481 */ 1482 if ((do_tso == 0) && (adapter->tx_tso == TRUE)) { 1483 if (nsegs == 1) 1484 tso_desc = TRUE; 1485 adapter->tx_tso = FALSE; 1486 } 1487 1488 if (nsegs > (adapter->num_tx_desc_avail - 2)) { 1489 adapter->no_tx_desc_avail2++; 1490 error = ENOBUFS; 1491 goto encap_fail; 1492 } 1493 1494 /* Do hardware assists */ 1495 if (ifp->if_hwassist > 0) { 1496#ifdef EM_TSO 1497 if (em_tso_setup(adapter, m_head, &txd_upper, &txd_lower)) { 1498 /* we need to make a final sentinel transmit desc */ 1499 tso_desc = TRUE; 1500 } else 1501#endif 1502 em_transmit_checksum_setup(adapter, m_head, 1503 &txd_upper, &txd_lower); 1504 } 1505 1506 i = adapter->next_avail_tx_desc; 1507 if (adapter->pcix_82544) 1508 txd_saved = i; 1509 1510 /* Set up our transmit descriptors */ 1511 for (j = 0; j < nsegs; j++) { 1512 bus_size_t seg_len; 1513 bus_addr_t seg_addr; 1514 /* If adapter is 82544 and on PCIX bus */ 1515 if(adapter->pcix_82544) { 1516 DESC_ARRAY desc_array; 1517 uint32_t array_elements, counter; 1518 /* 1519 * Check the Address and Length combination and 1520 * split the data accordingly 1521 */ 1522 array_elements = em_fill_descriptors(segs[j].ds_addr, 1523 segs[j].ds_len, &desc_array); 1524 for (counter = 0; counter < array_elements; counter++) { 1525 if (txd_used == adapter->num_tx_desc_avail) { 1526 adapter->next_avail_tx_desc = txd_saved; 1527 adapter->no_tx_desc_avail2++; 1528 error = ENOBUFS; 1529 goto encap_fail; 1530 } 1531 tx_buffer = &adapter->tx_buffer_area[i]; 1532 current_tx_desc = &adapter->tx_desc_base[i]; 1533 current_tx_desc->buffer_addr = htole64( 1534 desc_array.descriptor[counter].address); 1535 current_tx_desc->lower.data = htole32( 1536 (adapter->txd_cmd | txd_lower | (uint16_t) 1537 desc_array.descriptor[counter].length)); 1538 current_tx_desc->upper.data = 1539 htole32((txd_upper)); 1540 last = i; 1541 if (++i == adapter->num_tx_desc) 1542 i = 0; 1543 tx_buffer->m_head = NULL; 1544 tx_buffer->next_eop = -1; 1545 txd_used++; 1546 } 1547 } else { 1548 tx_buffer = &adapter->tx_buffer_area[i]; 1549 current_tx_desc = &adapter->tx_desc_base[i]; 1550 seg_addr = htole64(segs[j].ds_addr); 1551 seg_len = segs[j].ds_len; 1552 /* 1553 ** TSO Workaround: 1554 ** If this is the last descriptor, we want to 1555 ** split it so we have a small final sentinel 1556 */ 1557 if (tso_desc && (j == (nsegs -1)) && (seg_len > 8)) { 1558 seg_len -= 4; 1559 current_tx_desc->buffer_addr = seg_addr; 1560 current_tx_desc->lower.data = htole32( 1561 adapter->txd_cmd | txd_lower | seg_len); 1562 current_tx_desc->upper.data = 1563 htole32(txd_upper); 1564 if (++i == adapter->num_tx_desc) 1565 i = 0; 1566 /* Now make the sentinel */ 1567 ++txd_used; /* using an extra txd */ 1568 current_tx_desc = &adapter->tx_desc_base[i]; 1569 tx_buffer = &adapter->tx_buffer_area[i]; 1570 current_tx_desc->buffer_addr = 1571 seg_addr + seg_len; 1572 current_tx_desc->lower.data = htole32( 1573 adapter->txd_cmd | txd_lower | 4); 1574 current_tx_desc->upper.data = 1575 htole32(txd_upper); 1576 last = i; 1577 if (++i == adapter->num_tx_desc) 1578 i = 0; 1579 } else { 1580 current_tx_desc->buffer_addr = seg_addr; 1581 current_tx_desc->lower.data = htole32( 1582 adapter->txd_cmd | txd_lower | seg_len); 1583 current_tx_desc->upper.data = 1584 htole32(txd_upper); 1585 last = i; 1586 if (++i == adapter->num_tx_desc) 1587 i = 0; 1588 } 1589 tx_buffer->m_head = NULL; 1590 tx_buffer->next_eop = -1; 1591 } 1592 } 1593 1594 adapter->next_avail_tx_desc = i; 1595 if (adapter->pcix_82544) 1596 adapter->num_tx_desc_avail -= txd_used; 1597 else { 1598 adapter->num_tx_desc_avail -= nsegs; 1599 if (tso_desc) /* TSO used an extra for sentinel */ 1600 adapter->num_tx_desc_avail -= txd_used; 1601 } 1602 1603 if (mtag != NULL) { 1604 /* Set the vlan id. */ 1605 current_tx_desc->upper.fields.special = 1606 htole16(VLAN_TAG_VALUE(mtag)); 1607 /* Tell hardware to add tag */ 1608 current_tx_desc->lower.data |= 1609 htole32(E1000_TXD_CMD_VLE); 1610 } 1611 1612 tx_buffer->m_head = m_head; 1613 tx_buffer_mapped->map = tx_buffer->map; 1614 tx_buffer->map = map; 1615 bus_dmamap_sync(adapter->txtag, map, BUS_DMASYNC_PREWRITE); 1616 1617 /* 1618 * Last Descriptor of Packet 1619 * needs End Of Packet (EOP) 1620 * and Report Status (RS) 1621 */ 1622 current_tx_desc->lower.data |= 1623 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS); 1624 /* 1625 * Keep track in the first buffer which 1626 * descriptor will be written back 1627 */ 1628 tx_buffer = &adapter->tx_buffer_area[first]; 1629 tx_buffer->next_eop = last; 1630 1631 /* 1632 * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000 1633 * that this frame is available to transmit. 1634 */ 1635 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 1636 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1637 if (adapter->hw.mac_type == em_82547 && 1638 adapter->link_duplex == HALF_DUPLEX) 1639 em_82547_move_tail_locked(adapter); 1640 else { 1641 E1000_WRITE_REG(&adapter->hw, TDT, i); 1642 if (adapter->hw.mac_type == em_82547) 1643 em_82547_update_fifo_head(adapter, 1644 m_head->m_pkthdr.len); 1645 } 1646 1647 return (0); 1648 1649encap_fail: 1650 bus_dmamap_unload(adapter->txtag, tx_buffer->map); 1651 return (error); 1652} 1653 1654/********************************************************************* 1655 * 1656 * 82547 workaround to avoid controller hang in half-duplex environment. 1657 * The workaround is to avoid queuing a large packet that would span 1658 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers 1659 * in this case. We do that only when FIFO is quiescent. 1660 * 1661 **********************************************************************/ 1662static void 1663em_82547_move_tail_locked(struct adapter *adapter) 1664{ 1665 uint16_t hw_tdt; 1666 uint16_t sw_tdt; 1667 struct em_tx_desc *tx_desc; 1668 uint16_t length = 0; 1669 boolean_t eop = 0; 1670 1671 EM_LOCK_ASSERT(adapter); 1672 1673 hw_tdt = E1000_READ_REG(&adapter->hw, TDT); 1674 sw_tdt = adapter->next_avail_tx_desc; 1675 1676 while (hw_tdt != sw_tdt) { 1677 tx_desc = &adapter->tx_desc_base[hw_tdt]; 1678 length += tx_desc->lower.flags.length; 1679 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP; 1680 if (++hw_tdt == adapter->num_tx_desc) 1681 hw_tdt = 0; 1682 1683 if (eop) { 1684 if (em_82547_fifo_workaround(adapter, length)) { 1685 adapter->tx_fifo_wrk_cnt++; 1686 callout_reset(&adapter->tx_fifo_timer, 1, 1687 em_82547_move_tail, adapter); 1688 break; 1689 } 1690 E1000_WRITE_REG(&adapter->hw, TDT, hw_tdt); 1691 em_82547_update_fifo_head(adapter, length); 1692 length = 0; 1693 } 1694 } 1695} 1696 1697static void 1698em_82547_move_tail(void *arg) 1699{ 1700 struct adapter *adapter = arg; 1701 1702 EM_LOCK(adapter); 1703 em_82547_move_tail_locked(adapter); 1704 EM_UNLOCK(adapter); 1705} 1706 1707static int 1708em_82547_fifo_workaround(struct adapter *adapter, int len) 1709{ 1710 int fifo_space, fifo_pkt_len; 1711 1712 fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR); 1713 1714 if (adapter->link_duplex == HALF_DUPLEX) { 1715 fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head; 1716 1717 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) { 1718 if (em_82547_tx_fifo_reset(adapter)) 1719 return (0); 1720 else 1721 return (1); 1722 } 1723 } 1724 1725 return (0); 1726} 1727 1728static void 1729em_82547_update_fifo_head(struct adapter *adapter, int len) 1730{ 1731 int fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR); 1732 1733 /* tx_fifo_head is always 16 byte aligned */ 1734 adapter->tx_fifo_head += fifo_pkt_len; 1735 if (adapter->tx_fifo_head >= adapter->tx_fifo_size) { 1736 adapter->tx_fifo_head -= adapter->tx_fifo_size; 1737 } 1738} 1739 1740 1741static int 1742em_82547_tx_fifo_reset(struct adapter *adapter) 1743{ 1744 uint32_t tctl; 1745 1746 if ((E1000_READ_REG(&adapter->hw, TDT) == 1747 E1000_READ_REG(&adapter->hw, TDH)) && 1748 (E1000_READ_REG(&adapter->hw, TDFT) == 1749 E1000_READ_REG(&adapter->hw, TDFH)) && 1750 (E1000_READ_REG(&adapter->hw, TDFTS) == 1751 E1000_READ_REG(&adapter->hw, TDFHS)) && 1752 (E1000_READ_REG(&adapter->hw, TDFPC) == 0)) { 1753 /* Disable TX unit */ 1754 tctl = E1000_READ_REG(&adapter->hw, TCTL); 1755 E1000_WRITE_REG(&adapter->hw, TCTL, tctl & ~E1000_TCTL_EN); 1756 1757 /* Reset FIFO pointers */ 1758 E1000_WRITE_REG(&adapter->hw, TDFT, adapter->tx_head_addr); 1759 E1000_WRITE_REG(&adapter->hw, TDFH, adapter->tx_head_addr); 1760 E1000_WRITE_REG(&adapter->hw, TDFTS, adapter->tx_head_addr); 1761 E1000_WRITE_REG(&adapter->hw, TDFHS, adapter->tx_head_addr); 1762 1763 /* Re-enable TX unit */ 1764 E1000_WRITE_REG(&adapter->hw, TCTL, tctl); 1765 E1000_WRITE_FLUSH(&adapter->hw); 1766 1767 adapter->tx_fifo_head = 0; 1768 adapter->tx_fifo_reset_cnt++; 1769 1770 return (TRUE); 1771 } 1772 else { 1773 return (FALSE); 1774 } 1775} 1776 1777static void 1778em_set_promisc(struct adapter *adapter) 1779{ 1780 struct ifnet *ifp = adapter->ifp; 1781 uint32_t reg_rctl; 1782 1783 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL); 1784 1785 if (ifp->if_flags & IFF_PROMISC) { 1786 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); 1787 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1788 /* Disable VLAN stripping in promiscous mode 1789 * This enables bridging of vlan tagged frames to occur 1790 * and also allows vlan tags to be seen in tcpdump 1791 */ 1792 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) 1793 em_disable_vlans(adapter); 1794 adapter->em_insert_vlan_header = 1; 1795 } else if (ifp->if_flags & IFF_ALLMULTI) { 1796 reg_rctl |= E1000_RCTL_MPE; 1797 reg_rctl &= ~E1000_RCTL_UPE; 1798 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1799 adapter->em_insert_vlan_header = 0; 1800 } else 1801 adapter->em_insert_vlan_header = 0; 1802} 1803 1804static void 1805em_disable_promisc(struct adapter *adapter) 1806{ 1807 struct ifnet *ifp = adapter->ifp; 1808 uint32_t reg_rctl; 1809 1810 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL); 1811 1812 reg_rctl &= (~E1000_RCTL_UPE); 1813 reg_rctl &= (~E1000_RCTL_MPE); 1814 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1815 1816 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) 1817 em_enable_vlans(adapter); 1818 adapter->em_insert_vlan_header = 0; 1819} 1820 1821 1822/********************************************************************* 1823 * Multicast Update 1824 * 1825 * This routine is called whenever multicast address list is updated. 1826 * 1827 **********************************************************************/ 1828 1829static void 1830em_set_multi(struct adapter *adapter) 1831{ 1832 struct ifnet *ifp = adapter->ifp; 1833 struct ifmultiaddr *ifma; 1834 uint32_t reg_rctl = 0; 1835 uint8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS]; 1836 int mcnt = 0; 1837 1838 IOCTL_DEBUGOUT("em_set_multi: begin"); 1839 1840 if (adapter->hw.mac_type == em_82542_rev2_0) { 1841 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL); 1842 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 1843 em_pci_clear_mwi(&adapter->hw); 1844 reg_rctl |= E1000_RCTL_RST; 1845 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1846 msec_delay(5); 1847 } 1848 1849 IF_ADDR_LOCK(ifp); 1850 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 1851 if (ifma->ifma_addr->sa_family != AF_LINK) 1852 continue; 1853 1854 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) 1855 break; 1856 1857 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr), 1858 &mta[mcnt*ETH_LENGTH_OF_ADDRESS], ETH_LENGTH_OF_ADDRESS); 1859 mcnt++; 1860 } 1861 IF_ADDR_UNLOCK(ifp); 1862 1863 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) { 1864 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL); 1865 reg_rctl |= E1000_RCTL_MPE; 1866 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1867 } else 1868 em_mc_addr_list_update(&adapter->hw, mta, mcnt, 0, 1); 1869 1870 if (adapter->hw.mac_type == em_82542_rev2_0) { 1871 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL); 1872 reg_rctl &= ~E1000_RCTL_RST; 1873 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 1874 msec_delay(5); 1875 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 1876 em_pci_set_mwi(&adapter->hw); 1877 } 1878} 1879 1880 1881/********************************************************************* 1882 * Timer routine 1883 * 1884 * This routine checks for link status and updates statistics. 1885 * 1886 **********************************************************************/ 1887 1888static void 1889em_local_timer(void *arg) 1890{ 1891 struct adapter *adapter = arg; 1892 struct ifnet *ifp = adapter->ifp; 1893 1894 EM_LOCK(adapter); 1895 1896 em_check_for_link(&adapter->hw); 1897 em_update_link_status(adapter); 1898 em_update_stats_counters(adapter); 1899 if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) 1900 em_print_hw_stats(adapter); 1901 em_smartspeed(adapter); 1902 1903 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1904 1905 EM_UNLOCK(adapter); 1906} 1907 1908static void 1909em_update_link_status(struct adapter *adapter) 1910{ 1911 struct ifnet *ifp = adapter->ifp; 1912 device_t dev = adapter->dev; 1913 1914 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) { 1915 if (adapter->link_active == 0) { 1916 em_get_speed_and_duplex(&adapter->hw, 1917 &adapter->link_speed, &adapter->link_duplex); 1918 /* Check if we may set SPEED_MODE bit on PCI-E */ 1919 if ((adapter->link_speed == SPEED_1000) && 1920 ((adapter->hw.mac_type == em_82571) || 1921 (adapter->hw.mac_type == em_82572))) { 1922 int tarc0; 1923 1924 tarc0 = E1000_READ_REG(&adapter->hw, TARC0); 1925 tarc0 |= SPEED_MODE_BIT; 1926 E1000_WRITE_REG(&adapter->hw, TARC0, tarc0); 1927 } 1928 if (bootverbose) 1929 device_printf(dev, "Link is up %d Mbps %s\n", 1930 adapter->link_speed, 1931 ((adapter->link_duplex == FULL_DUPLEX) ? 1932 "Full Duplex" : "Half Duplex")); 1933 adapter->link_active = 1; 1934 adapter->smartspeed = 0; 1935 ifp->if_baudrate = adapter->link_speed * 1000000; 1936 if_link_state_change(ifp, LINK_STATE_UP); 1937 } 1938 } else { 1939 if (adapter->link_active == 1) { 1940 ifp->if_baudrate = adapter->link_speed = 0; 1941 adapter->link_duplex = 0; 1942 if (bootverbose) 1943 device_printf(dev, "Link is Down\n"); 1944 adapter->link_active = 0; 1945 if_link_state_change(ifp, LINK_STATE_DOWN); 1946 } 1947 } 1948} 1949 1950/********************************************************************* 1951 * 1952 * This routine disables all traffic on the adapter by issuing a 1953 * global reset on the MAC and deallocates TX/RX buffers. 1954 * 1955 **********************************************************************/ 1956 1957static void 1958em_stop(void *arg) 1959{ 1960 struct adapter *adapter = arg; 1961 struct ifnet *ifp = adapter->ifp; 1962 1963 EM_LOCK_ASSERT(adapter); 1964 1965 INIT_DEBUGOUT("em_stop: begin"); 1966 1967 em_disable_intr(adapter); 1968 callout_stop(&adapter->timer); 1969 callout_stop(&adapter->tx_fifo_timer); 1970 1971 /* Tell the stack that the interface is no longer active */ 1972 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 1973 em_reset_hw(&adapter->hw); 1974} 1975 1976 1977/********************************************************************* 1978 * 1979 * Determine hardware revision. 1980 * 1981 **********************************************************************/ 1982static void 1983em_identify_hardware(struct adapter *adapter) 1984{ 1985 device_t dev = adapter->dev; 1986 1987 /* Make sure our PCI config space has the necessary stuff set */ 1988 adapter->hw.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2); 1989 if ((adapter->hw.pci_cmd_word & PCIM_CMD_BUSMASTEREN) == 0 && 1990 (adapter->hw.pci_cmd_word & PCIM_CMD_MEMEN)) { 1991 device_printf(dev, "Memory Access and/or Bus Master bits " 1992 "were not set!\n"); 1993 adapter->hw.pci_cmd_word |= 1994 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN); 1995 pci_write_config(dev, PCIR_COMMAND, 1996 adapter->hw.pci_cmd_word, 2); 1997 } 1998 1999 /* Save off the information about this board */ 2000 adapter->hw.vendor_id = pci_get_vendor(dev); 2001 adapter->hw.device_id = pci_get_device(dev); 2002 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1); 2003 adapter->hw.subsystem_vendor_id = 2004 pci_read_config(dev, PCIR_SUBVEND_0, 2); 2005 adapter->hw.subsystem_id = pci_read_config(dev, PCIR_SUBDEV_0, 2); 2006 2007 /* Identify the MAC */ 2008 if (em_set_mac_type(&adapter->hw)) 2009 device_printf(dev, "Unknown MAC Type\n"); 2010 2011 if (adapter->hw.mac_type == em_82541 || 2012 adapter->hw.mac_type == em_82541_rev_2 || 2013 adapter->hw.mac_type == em_82547 || 2014 adapter->hw.mac_type == em_82547_rev_2) 2015 adapter->hw.phy_init_script = TRUE; 2016} 2017 2018static int 2019em_allocate_pci_resources(struct adapter *adapter) 2020{ 2021 device_t dev = adapter->dev; 2022 int val, rid; 2023 2024 rid = PCIR_BAR(0); 2025 adapter->res_memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 2026 &rid, RF_ACTIVE); 2027 if (adapter->res_memory == NULL) { 2028 device_printf(dev, "Unable to allocate bus resource: memory\n"); 2029 return (ENXIO); 2030 } 2031 adapter->osdep.mem_bus_space_tag = 2032 rman_get_bustag(adapter->res_memory); 2033 adapter->osdep.mem_bus_space_handle = 2034 rman_get_bushandle(adapter->res_memory); 2035 adapter->hw.hw_addr = (uint8_t *)&adapter->osdep.mem_bus_space_handle; 2036 2037 if (adapter->hw.mac_type > em_82543) { 2038 /* Figure our where our IO BAR is ? */ 2039 for (rid = PCIR_BAR(0); rid < PCIR_CIS;) { 2040 val = pci_read_config(dev, rid, 4); 2041 if (EM_BAR_TYPE(val) == EM_BAR_TYPE_IO) { 2042 adapter->io_rid = rid; 2043 break; 2044 } 2045 rid += 4; 2046 /* check for 64bit BAR */ 2047 if (EM_BAR_MEM_TYPE(val) == EM_BAR_MEM_TYPE_64BIT) 2048 rid += 4; 2049 } 2050 if (rid >= PCIR_CIS) { 2051 device_printf(dev, "Unable to locate IO BAR\n"); 2052 return (ENXIO); 2053 } 2054 adapter->res_ioport = bus_alloc_resource_any(dev, 2055 SYS_RES_IOPORT, &adapter->io_rid, RF_ACTIVE); 2056 if (adapter->res_ioport == NULL) { 2057 device_printf(dev, "Unable to allocate bus resource: " 2058 "ioport\n"); 2059 return (ENXIO); 2060 } 2061 adapter->hw.io_base = 0; 2062 adapter->osdep.io_bus_space_tag = 2063 rman_get_bustag(adapter->res_ioport); 2064 adapter->osdep.io_bus_space_handle = 2065 rman_get_bushandle(adapter->res_ioport); 2066 } 2067 2068 /* For ICH8 we need to find the flash memory. */ 2069 if (adapter->hw.mac_type == em_ich8lan) { 2070 rid = EM_FLASH; 2071 adapter->flash_mem = bus_alloc_resource_any(dev, 2072 SYS_RES_MEMORY, &rid, RF_ACTIVE); 2073 adapter->osdep.flash_bus_space_tag = 2074 rman_get_bustag(adapter->flash_mem); 2075 adapter->osdep.flash_bus_space_handle = 2076 rman_get_bushandle(adapter->flash_mem); 2077 } 2078 2079 rid = 0x0; 2080 adapter->res_interrupt = bus_alloc_resource_any(dev, 2081 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE); 2082 if (adapter->res_interrupt == NULL) { 2083 device_printf(dev, "Unable to allocate bus resource: " 2084 "interrupt\n"); 2085 return (ENXIO); 2086 } 2087 if (bus_setup_intr(dev, adapter->res_interrupt, 2088 INTR_TYPE_NET | INTR_MPSAFE, 2089 (void (*)(void *)) em_intr, adapter, 2090 &adapter->int_handler_tag)) { 2091 device_printf(dev, "Error registering interrupt handler!\n"); 2092 return(ENXIO); 2093 } 2094 2095 adapter->hw.back = &adapter->osdep; 2096 2097 return (0); 2098} 2099 2100static void 2101em_free_pci_resources(struct adapter *adapter) 2102{ 2103 device_t dev = adapter->dev; 2104 2105 if (adapter->res_interrupt != NULL) { 2106 bus_teardown_intr(dev, adapter->res_interrupt, 2107 adapter->int_handler_tag); 2108 bus_release_resource(dev, SYS_RES_IRQ, 2109 0, adapter->res_interrupt); 2110 } 2111 2112 if (adapter->res_memory != NULL) 2113 bus_release_resource(dev, SYS_RES_MEMORY, 2114 PCIR_BAR(0), adapter->res_memory); 2115 2116 if (adapter->flash_mem != NULL) 2117 bus_release_resource(dev, SYS_RES_MEMORY, 2118 EM_FLASH, adapter->flash_mem); 2119 2120 if (adapter->res_ioport != NULL) 2121 bus_release_resource(dev, SYS_RES_IOPORT, 2122 adapter->io_rid, adapter->res_ioport); 2123} 2124 2125/********************************************************************* 2126 * 2127 * Initialize the hardware to a configuration as specified by the 2128 * adapter structure. The controller is reset, the EEPROM is 2129 * verified, the MAC address is set, then the shared initialization 2130 * routines are called. 2131 * 2132 **********************************************************************/ 2133static int 2134em_hardware_init(struct adapter *adapter) 2135{ 2136 device_t dev = adapter->dev; 2137 uint16_t rx_buffer_size; 2138 2139 INIT_DEBUGOUT("em_hardware_init: begin"); 2140 /* Issue a global reset */ 2141 em_reset_hw(&adapter->hw); 2142 2143 /* When hardware is reset, fifo_head is also reset */ 2144 adapter->tx_fifo_head = 0; 2145 2146 /* Make sure we have a good EEPROM before we read from it */ 2147 if (em_validate_eeprom_checksum(&adapter->hw) < 0) { 2148 device_printf(dev, "The EEPROM Checksum Is Not Valid\n"); 2149 return (EIO); 2150 } 2151 2152 if (em_read_part_num(&adapter->hw, &(adapter->part_num)) < 0) { 2153 device_printf(dev, "EEPROM read error " 2154 "reading part number\n"); 2155 return (EIO); 2156 } 2157 2158 /* Set up smart power down as default off on newer adapters. */ 2159 if (!em_smart_pwr_down && (adapter->hw.mac_type == em_82571 || 2160 adapter->hw.mac_type == em_82572)) { 2161 uint16_t phy_tmp = 0; 2162 2163 /* Speed up time to link by disabling smart power down. */ 2164 em_read_phy_reg(&adapter->hw, 2165 IGP02E1000_PHY_POWER_MGMT, &phy_tmp); 2166 phy_tmp &= ~IGP02E1000_PM_SPD; 2167 em_write_phy_reg(&adapter->hw, 2168 IGP02E1000_PHY_POWER_MGMT, phy_tmp); 2169 } 2170 2171 /* 2172 * These parameters control the automatic generation (Tx) and 2173 * response (Rx) to Ethernet PAUSE frames. 2174 * - High water mark should allow for at least two frames to be 2175 * received after sending an XOFF. 2176 * - Low water mark works best when it is very near the high water mark. 2177 * This allows the receiver to restart by sending XON when it has 2178 * drained a bit. Here we use an arbitary value of 1500 which will 2179 * restart after one full frame is pulled from the buffer. There 2180 * could be several smaller frames in the buffer and if so they will 2181 * not trigger the XON until their total number reduces the buffer 2182 * by 1500. 2183 * - The pause time is fairly large at 1000 x 512ns = 512 usec. 2184 */ 2185 rx_buffer_size = ((E1000_READ_REG(&adapter->hw, PBA) & 0xffff) << 10 ); 2186 2187 adapter->hw.fc_high_water = rx_buffer_size - 2188 roundup2(adapter->hw.max_frame_size, 1024); 2189 adapter->hw.fc_low_water = adapter->hw.fc_high_water - 1500; 2190 if (adapter->hw.mac_type == em_80003es2lan) 2191 adapter->hw.fc_pause_time = 0xFFFF; 2192 else 2193 adapter->hw.fc_pause_time = 0x1000; 2194 adapter->hw.fc_send_xon = TRUE; 2195 adapter->hw.fc = E1000_FC_FULL; 2196 2197 if (em_init_hw(&adapter->hw) < 0) { 2198 device_printf(dev, "Hardware Initialization Failed"); 2199 return (EIO); 2200 } 2201 2202 em_check_for_link(&adapter->hw); 2203 2204 return (0); 2205} 2206 2207/********************************************************************* 2208 * 2209 * Setup networking device structure and register an interface. 2210 * 2211 **********************************************************************/ 2212static void 2213em_setup_interface(device_t dev, struct adapter *adapter) 2214{ 2215 struct ifnet *ifp; 2216 u_char fiber_type = IFM_1000_SX; /* default type */ 2217 2218 INIT_DEBUGOUT("em_setup_interface: begin"); 2219 2220 ifp = adapter->ifp = if_alloc(IFT_ETHER); 2221 if (ifp == NULL) 2222 panic("%s: can not if_alloc()", device_get_nameunit(dev)); 2223 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); 2224 ifp->if_mtu = ETHERMTU; 2225 ifp->if_init = em_init; 2226 ifp->if_softc = adapter; 2227 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 2228 ifp->if_ioctl = em_ioctl; 2229 ifp->if_start = em_start; 2230 ifp->if_watchdog = em_watchdog; 2231 IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1); 2232 ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1; 2233 IFQ_SET_READY(&ifp->if_snd); 2234 2235 ether_ifattach(ifp, adapter->hw.mac_addr); 2236 2237 ifp->if_capabilities = ifp->if_capenable = 0; 2238 2239 if (adapter->hw.mac_type >= em_82543) { 2240 ifp->if_capabilities |= IFCAP_HWCSUM; 2241 ifp->if_capenable |= IFCAP_HWCSUM; 2242 } 2243 2244#ifdef EM_TSO 2245 /* Enable TSO if available */ 2246 if ((adapter->hw.mac_type > em_82544) && 2247 (adapter->hw.mac_type != em_82547)) { 2248 ifp->if_capabilities |= IFCAP_TSO; 2249 ifp->if_capenable |= IFCAP_TSO; 2250 } 2251#endif 2252 2253 /* 2254 * Tell the upper layer(s) we support long frames. 2255 */ 2256 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); 2257 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU; 2258 ifp->if_capenable |= IFCAP_VLAN_MTU; 2259 2260#ifdef DEVICE_POLLING 2261 ifp->if_capabilities |= IFCAP_POLLING; 2262#endif 2263 2264 /* 2265 * Specify the media types supported by this adapter and register 2266 * callbacks to update media and link information 2267 */ 2268 ifmedia_init(&adapter->media, IFM_IMASK, 2269 em_media_change, em_media_status); 2270 if ((adapter->hw.media_type == em_media_type_fiber) || 2271 (adapter->hw.media_type == em_media_type_internal_serdes)) { 2272 if (adapter->hw.mac_type == em_82545) 2273 fiber_type = IFM_1000_LX; 2274 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX, 2275 0, NULL); 2276 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL); 2277 } else { 2278 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL); 2279 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX, 2280 0, NULL); 2281 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX, 2282 0, NULL); 2283 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 2284 0, NULL); 2285 if (adapter->hw.phy_type != em_phy_ife) { 2286 ifmedia_add(&adapter->media, 2287 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL); 2288 ifmedia_add(&adapter->media, 2289 IFM_ETHER | IFM_1000_T, 0, NULL); 2290 } 2291 } 2292 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); 2293 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO); 2294} 2295 2296 2297/********************************************************************* 2298 * 2299 * Workaround for SmartSpeed on 82541 and 82547 controllers 2300 * 2301 **********************************************************************/ 2302static void 2303em_smartspeed(struct adapter *adapter) 2304{ 2305 uint16_t phy_tmp; 2306 2307 if (adapter->link_active || (adapter->hw.phy_type != em_phy_igp) || 2308 adapter->hw.autoneg == 0 || 2309 (adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL) == 0) 2310 return; 2311 2312 if (adapter->smartspeed == 0) { 2313 /* If Master/Slave config fault is asserted twice, 2314 * we assume back-to-back */ 2315 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp); 2316 if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT)) 2317 return; 2318 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp); 2319 if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) { 2320 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp); 2321 if(phy_tmp & CR_1000T_MS_ENABLE) { 2322 phy_tmp &= ~CR_1000T_MS_ENABLE; 2323 em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, 2324 phy_tmp); 2325 adapter->smartspeed++; 2326 if(adapter->hw.autoneg && 2327 !em_phy_setup_autoneg(&adapter->hw) && 2328 !em_read_phy_reg(&adapter->hw, PHY_CTRL, 2329 &phy_tmp)) { 2330 phy_tmp |= (MII_CR_AUTO_NEG_EN | 2331 MII_CR_RESTART_AUTO_NEG); 2332 em_write_phy_reg(&adapter->hw, PHY_CTRL, 2333 phy_tmp); 2334 } 2335 } 2336 } 2337 return; 2338 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) { 2339 /* If still no link, perhaps using 2/3 pair cable */ 2340 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp); 2341 phy_tmp |= CR_1000T_MS_ENABLE; 2342 em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp); 2343 if(adapter->hw.autoneg && 2344 !em_phy_setup_autoneg(&adapter->hw) && 2345 !em_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_tmp)) { 2346 phy_tmp |= (MII_CR_AUTO_NEG_EN | 2347 MII_CR_RESTART_AUTO_NEG); 2348 em_write_phy_reg(&adapter->hw, PHY_CTRL, phy_tmp); 2349 } 2350 } 2351 /* Restart process after EM_SMARTSPEED_MAX iterations */ 2352 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX) 2353 adapter->smartspeed = 0; 2354} 2355 2356 2357/* 2358 * Manage DMA'able memory. 2359 */ 2360static void 2361em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) 2362{ 2363 if (error) 2364 return; 2365 *(bus_addr_t *) arg = segs[0].ds_addr; 2366} 2367 2368static int 2369em_dma_malloc(struct adapter *adapter, bus_size_t size, 2370 struct em_dma_alloc *dma, int mapflags) 2371{ 2372 int error; 2373 2374 error = bus_dma_tag_create(NULL, /* parent */ 2375 EM_DBA_ALIGN, 0, /* alignment, bounds */ 2376 BUS_SPACE_MAXADDR, /* lowaddr */ 2377 BUS_SPACE_MAXADDR, /* highaddr */ 2378 NULL, NULL, /* filter, filterarg */ 2379 size, /* maxsize */ 2380 1, /* nsegments */ 2381 size, /* maxsegsize */ 2382 0, /* flags */ 2383 NULL, /* lockfunc */ 2384 NULL, /* lockarg */ 2385 &dma->dma_tag); 2386 if (error) { 2387 device_printf(adapter->dev, 2388 "%s: bus_dma_tag_create failed: %d\n", 2389 __func__, error); 2390 goto fail_0; 2391 } 2392 2393 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr, 2394 BUS_DMA_NOWAIT, &dma->dma_map); 2395 if (error) { 2396 device_printf(adapter->dev, 2397 "%s: bus_dmamem_alloc(%ju) failed: %d\n", 2398 __func__, (uintmax_t)size, error); 2399 goto fail_2; 2400 } 2401 2402 dma->dma_paddr = 0; 2403 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr, 2404 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT); 2405 if (error || dma->dma_paddr == 0) { 2406 device_printf(adapter->dev, 2407 "%s: bus_dmamap_load failed: %d\n", 2408 __func__, error); 2409 goto fail_3; 2410 } 2411 2412 return (0); 2413 2414fail_3: 2415 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 2416fail_2: 2417 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 2418 bus_dma_tag_destroy(dma->dma_tag); 2419fail_0: 2420 dma->dma_map = NULL; 2421 dma->dma_tag = NULL; 2422 2423 return (error); 2424} 2425 2426static void 2427em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma) 2428{ 2429 if (dma->dma_tag == NULL) 2430 return; 2431 if (dma->dma_map != NULL) { 2432 bus_dmamap_sync(dma->dma_tag, dma->dma_map, 2433 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 2434 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 2435 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 2436 dma->dma_map = NULL; 2437 } 2438 bus_dma_tag_destroy(dma->dma_tag); 2439 dma->dma_tag = NULL; 2440} 2441 2442 2443/********************************************************************* 2444 * 2445 * Allocate memory for tx_buffer structures. The tx_buffer stores all 2446 * the information needed to transmit a packet on the wire. 2447 * 2448 **********************************************************************/ 2449static int 2450em_allocate_transmit_structures(struct adapter *adapter) 2451{ 2452 device_t dev = adapter->dev; 2453 struct em_buffer *tx_buffer; 2454 bus_size_t size, segsize; 2455 int error, i; 2456 2457#ifdef EM_TSO 2458 size = EM_TSO_SIZE; 2459 segsize = PAGE_SIZE; 2460#else 2461 segsize = size = roundup2(adapter->hw.max_frame_size, MCLBYTES); 2462#endif 2463 /* 2464 * Setup DMA descriptor areas. 2465 */ 2466 if ((error = bus_dma_tag_create(NULL, /* parent */ 2467 1, 0, /* alignment, bounds */ 2468 BUS_SPACE_MAXADDR, /* lowaddr */ 2469 BUS_SPACE_MAXADDR, /* highaddr */ 2470 NULL, NULL, /* filter, filterarg */ 2471 size, /* maxsize */ 2472 EM_MAX_SCATTER, /* nsegments */ 2473 segsize, /* maxsegsize */ 2474 0, /* flags */ 2475 NULL, /* lockfunc */ 2476 NULL, /* lockarg */ 2477 &adapter->txtag)) != 0) { 2478 device_printf(dev, "Unable to allocate TX DMA tag\n"); 2479 goto fail; 2480 } 2481 2482 adapter->tx_buffer_area = malloc(sizeof(struct em_buffer) * 2483 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO); 2484 if (adapter->tx_buffer_area == NULL) { 2485 device_printf(dev, "Unable to allocate tx_buffer memory\n"); 2486 error = ENOMEM; 2487 goto fail; 2488 } 2489 2490 tx_buffer = adapter->tx_buffer_area; 2491 for (i = 0; i < adapter->num_tx_desc; i++) { 2492 error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map); 2493 if (error != 0) { 2494 device_printf(dev, "Unable to create TX DMA map\n"); 2495 goto fail; 2496 } 2497 tx_buffer++; 2498 } 2499 2500 return (0); 2501 2502fail: 2503 em_free_transmit_structures(adapter); 2504 return (error); 2505} 2506 2507/********************************************************************* 2508 * 2509 * Initialize transmit structures. 2510 * 2511 **********************************************************************/ 2512static void 2513em_setup_transmit_structures(struct adapter *adapter) 2514{ 2515 struct em_buffer *tx_buffer; 2516 int i; 2517 2518 bzero(adapter->tx_desc_base, 2519 (sizeof(struct em_tx_desc)) * adapter->num_tx_desc); 2520 2521 adapter->next_avail_tx_desc = 0; 2522 adapter->next_tx_to_clean = 0; 2523 2524 /* Free any existing tx buffers. */ 2525 tx_buffer = adapter->tx_buffer_area; 2526 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) { 2527 if (tx_buffer->m_head != NULL) { 2528 bus_dmamap_sync(adapter->txtag, tx_buffer->map, 2529 BUS_DMASYNC_POSTWRITE); 2530 bus_dmamap_unload(adapter->txtag, tx_buffer->map); 2531 m_freem(tx_buffer->m_head); 2532 tx_buffer->m_head = NULL; 2533 } 2534 } 2535 2536 /* Set number of descriptors available */ 2537 adapter->num_tx_desc_avail = adapter->num_tx_desc; 2538 2539 /* Set checksum context */ 2540 adapter->active_checksum_context = OFFLOAD_NONE; 2541 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 2542 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2543} 2544 2545/********************************************************************* 2546 * 2547 * Enable transmit unit. 2548 * 2549 **********************************************************************/ 2550static void 2551em_initialize_transmit_unit(struct adapter *adapter) 2552{ 2553 uint32_t reg_tctl, reg_tipg = 0; 2554 uint64_t bus_addr; 2555 2556 INIT_DEBUGOUT("em_initialize_transmit_unit: begin"); 2557 /* Setup the Base and Length of the Tx Descriptor Ring */ 2558 bus_addr = adapter->txdma.dma_paddr; 2559 E1000_WRITE_REG(&adapter->hw, TDLEN, 2560 adapter->num_tx_desc * sizeof(struct em_tx_desc)); 2561 E1000_WRITE_REG(&adapter->hw, TDBAH, (uint32_t)(bus_addr >> 32)); 2562 E1000_WRITE_REG(&adapter->hw, TDBAL, (uint32_t)bus_addr); 2563 2564 /* Setup the HW Tx Head and Tail descriptor pointers */ 2565 E1000_WRITE_REG(&adapter->hw, TDT, 0); 2566 E1000_WRITE_REG(&adapter->hw, TDH, 0); 2567 2568 HW_DEBUGOUT2("Base = %x, Length = %x\n", 2569 E1000_READ_REG(&adapter->hw, TDBAL), 2570 E1000_READ_REG(&adapter->hw, TDLEN)); 2571 2572 /* Set the default values for the Tx Inter Packet Gap timer */ 2573 switch (adapter->hw.mac_type) { 2574 case em_82542_rev2_0: 2575 case em_82542_rev2_1: 2576 reg_tipg = DEFAULT_82542_TIPG_IPGT; 2577 reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 2578 reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 2579 break; 2580 case em_80003es2lan: 2581 reg_tipg = DEFAULT_82543_TIPG_IPGR1; 2582 reg_tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 << 2583 E1000_TIPG_IPGR2_SHIFT; 2584 break; 2585 default: 2586 if ((adapter->hw.media_type == em_media_type_fiber) || 2587 (adapter->hw.media_type == em_media_type_internal_serdes)) 2588 reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER; 2589 else 2590 reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER; 2591 reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 2592 reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 2593 } 2594 2595 E1000_WRITE_REG(&adapter->hw, TIPG, reg_tipg); 2596 E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay.value); 2597 if(adapter->hw.mac_type >= em_82540) 2598 E1000_WRITE_REG(&adapter->hw, TADV, 2599 adapter->tx_abs_int_delay.value); 2600 2601 /* Program the Transmit Control Register */ 2602 reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN | 2603 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT); 2604 if (adapter->hw.mac_type >= em_82571) 2605 reg_tctl |= E1000_TCTL_MULR; 2606 if (adapter->link_duplex == FULL_DUPLEX) { 2607 reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT; 2608 } else { 2609 reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT; 2610 } 2611 /* This write will effectively turn on the transmit unit. */ 2612 E1000_WRITE_REG(&adapter->hw, TCTL, reg_tctl); 2613 2614 /* Setup Transmit Descriptor Base Settings */ 2615 adapter->txd_cmd = E1000_TXD_CMD_IFCS; 2616 2617 if (adapter->tx_int_delay.value > 0) 2618 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 2619} 2620 2621/********************************************************************* 2622 * 2623 * Free all transmit related data structures. 2624 * 2625 **********************************************************************/ 2626static void 2627em_free_transmit_structures(struct adapter *adapter) 2628{ 2629 struct em_buffer *tx_buffer; 2630 int i; 2631 2632 INIT_DEBUGOUT("free_transmit_structures: begin"); 2633 2634 if (adapter->tx_buffer_area != NULL) { 2635 tx_buffer = adapter->tx_buffer_area; 2636 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) { 2637 if (tx_buffer->m_head != NULL) { 2638 bus_dmamap_sync(adapter->txtag, tx_buffer->map, 2639 BUS_DMASYNC_POSTWRITE); 2640 bus_dmamap_unload(adapter->txtag, 2641 tx_buffer->map); 2642 m_freem(tx_buffer->m_head); 2643 tx_buffer->m_head = NULL; 2644 } else if (tx_buffer->map != NULL) 2645 bus_dmamap_unload(adapter->txtag, 2646 tx_buffer->map); 2647 if (tx_buffer->map != NULL) { 2648 bus_dmamap_destroy(adapter->txtag, 2649 tx_buffer->map); 2650 tx_buffer->map = NULL; 2651 } 2652 } 2653 } 2654 if (adapter->tx_buffer_area != NULL) { 2655 free(adapter->tx_buffer_area, M_DEVBUF); 2656 adapter->tx_buffer_area = NULL; 2657 } 2658 if (adapter->txtag != NULL) { 2659 bus_dma_tag_destroy(adapter->txtag); 2660 adapter->txtag = NULL; 2661 } 2662} 2663 2664/********************************************************************* 2665 * 2666 * The offload context needs to be set when we transfer the first 2667 * packet of a particular protocol (TCP/UDP). We change the 2668 * context only if the protocol type changes. 2669 * 2670 **********************************************************************/ 2671static void 2672em_transmit_checksum_setup(struct adapter *adapter, struct mbuf *mp, 2673 uint32_t *txd_upper, uint32_t *txd_lower) 2674{ 2675 struct em_context_desc *TXD; 2676 struct em_buffer *tx_buffer; 2677 int curr_txd; 2678 2679 if (mp->m_pkthdr.csum_flags) { 2680 2681 if (mp->m_pkthdr.csum_flags & CSUM_TCP) { 2682 *txd_upper = E1000_TXD_POPTS_TXSM << 8; 2683 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 2684 if (adapter->active_checksum_context == OFFLOAD_TCP_IP) 2685 return; 2686 else 2687 adapter->active_checksum_context = 2688 OFFLOAD_TCP_IP; 2689 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) { 2690 *txd_upper = E1000_TXD_POPTS_TXSM << 8; 2691 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 2692 if (adapter->active_checksum_context == OFFLOAD_UDP_IP) 2693 return; 2694 else 2695 adapter->active_checksum_context = 2696 OFFLOAD_UDP_IP; 2697 } else { 2698 *txd_upper = 0; 2699 *txd_lower = 0; 2700 return; 2701 } 2702 } else { 2703 *txd_upper = 0; 2704 *txd_lower = 0; 2705 return; 2706 } 2707 2708 /* If we reach this point, the checksum offload context 2709 * needs to be reset. 2710 */ 2711 curr_txd = adapter->next_avail_tx_desc; 2712 tx_buffer = &adapter->tx_buffer_area[curr_txd]; 2713 TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd]; 2714 2715 TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN; 2716 TXD->lower_setup.ip_fields.ipcso = 2717 ETHER_HDR_LEN + offsetof(struct ip, ip_sum); 2718 TXD->lower_setup.ip_fields.ipcse = 2719 htole16(ETHER_HDR_LEN + sizeof(struct ip) - 1); 2720 2721 TXD->upper_setup.tcp_fields.tucss = 2722 ETHER_HDR_LEN + sizeof(struct ip); 2723 TXD->upper_setup.tcp_fields.tucse = htole16(0); 2724 2725 if (adapter->active_checksum_context == OFFLOAD_TCP_IP) { 2726 TXD->upper_setup.tcp_fields.tucso = 2727 ETHER_HDR_LEN + sizeof(struct ip) + 2728 offsetof(struct tcphdr, th_sum); 2729 } else if (adapter->active_checksum_context == OFFLOAD_UDP_IP) { 2730 TXD->upper_setup.tcp_fields.tucso = 2731 ETHER_HDR_LEN + sizeof(struct ip) + 2732 offsetof(struct udphdr, uh_sum); 2733 } 2734 2735 TXD->tcp_seg_setup.data = htole32(0); 2736 TXD->cmd_and_length = htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT); 2737 2738 tx_buffer->m_head = NULL; 2739 tx_buffer->next_eop = -1; 2740 2741 if (++curr_txd == adapter->num_tx_desc) 2742 curr_txd = 0; 2743 2744 adapter->num_tx_desc_avail--; 2745 adapter->next_avail_tx_desc = curr_txd; 2746} 2747 2748#ifdef EM_TSO 2749/********************************************************************** 2750 * 2751 * Setup work for hardware segmentation offload (TSO) 2752 * 2753 **********************************************************************/ 2754static boolean_t 2755em_tso_setup(struct adapter *adapter, 2756 struct mbuf *mp, 2757 u_int32_t *txd_upper, 2758 u_int32_t *txd_lower) 2759{ 2760 struct em_context_desc *TXD; 2761 struct em_buffer *tx_buffer; 2762 struct ip *ip; 2763 struct tcphdr *th; 2764 int curr_txd, hdr_len, ip_hlen, tcp_hlen; 2765 2766 if (((mp->m_pkthdr.csum_flags & CSUM_TSO) == 0) || 2767 (mp->m_pkthdr.len <= E1000_TX_BUFFER_SIZE)) { 2768 return FALSE; 2769 } 2770 2771 *txd_lower = (E1000_TXD_CMD_DEXT | 2772 E1000_TXD_DTYP_D | 2773 E1000_TXD_CMD_TSE); 2774 2775 *txd_upper = (E1000_TXD_POPTS_IXSM | 2776 E1000_TXD_POPTS_TXSM) << 8; 2777 2778 curr_txd = adapter->next_avail_tx_desc; 2779 tx_buffer = &adapter->tx_buffer_area[curr_txd]; 2780 TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd]; 2781 2782 mp->m_data += sizeof(struct ether_header); 2783 ip = mtod(mp, struct ip *); 2784 ip->ip_len = 0; 2785 ip->ip_sum = 0; 2786 ip_hlen = ip->ip_hl << 2 ; 2787 th = (struct tcphdr *)((caddr_t)ip + ip_hlen); 2788 tcp_hlen = th->th_off << 2; 2789 2790 hdr_len = ETHER_HDR_LEN + ip_hlen + tcp_hlen; 2791 th->th_sum = in_pseudo(ip->ip_src.s_addr, 2792 ip->ip_dst.s_addr, 2793 htons(IPPROTO_TCP)); 2794 2795 mp->m_data -= sizeof(struct ether_header); 2796 TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN; 2797 TXD->lower_setup.ip_fields.ipcso = 2798 ETHER_HDR_LEN + offsetof(struct ip, ip_sum); 2799 TXD->lower_setup.ip_fields.ipcse = 2800 htole16(ETHER_HDR_LEN + ip_hlen - 1); 2801 2802 TXD->upper_setup.tcp_fields.tucss = 2803 ETHER_HDR_LEN + ip_hlen; 2804 TXD->upper_setup.tcp_fields.tucse = 0; 2805 TXD->upper_setup.tcp_fields.tucso = 2806 ETHER_HDR_LEN + ip_hlen + 2807 offsetof(struct tcphdr, th_sum); 2808 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz); 2809 TXD->tcp_seg_setup.fields.hdr_len = hdr_len; 2810 TXD->cmd_and_length = htole32(adapter->txd_cmd | 2811 E1000_TXD_CMD_DEXT | 2812 E1000_TXD_CMD_TSE | 2813 E1000_TXD_CMD_IP | E1000_TXD_CMD_TCP | 2814 (mp->m_pkthdr.len - (hdr_len))); 2815 2816 tx_buffer->m_head = NULL; 2817 tx_buffer->next_eop = -1; 2818 2819 if (++curr_txd == adapter->num_tx_desc) 2820 curr_txd = 0; 2821 2822 adapter->num_tx_desc_avail--; 2823 adapter->next_avail_tx_desc = curr_txd; 2824 adapter->tx_tso = TRUE; 2825 2826 return TRUE; 2827} 2828#endif /* EM_TSO */ 2829 2830/********************************************************************** 2831 * 2832 * Examine each tx_buffer in the used queue. If the hardware is done 2833 * processing the packet then free associated resources. The 2834 * tx_buffer is put back on the free queue. 2835 * 2836 **********************************************************************/ 2837static void 2838em_txeof(struct adapter *adapter) 2839{ 2840 int first, last, done, num_avail; 2841 struct em_buffer *tx_buffer; 2842 struct em_tx_desc *tx_desc, *eop_desc; 2843 struct ifnet *ifp = adapter->ifp; 2844 2845 EM_LOCK_ASSERT(adapter); 2846 2847 if (adapter->num_tx_desc_avail == adapter->num_tx_desc) 2848 return; 2849 2850 num_avail = adapter->num_tx_desc_avail; 2851 first = adapter->next_tx_to_clean; 2852 tx_desc = &adapter->tx_desc_base[first]; 2853 tx_buffer = &adapter->tx_buffer_area[first]; 2854 last = tx_buffer->next_eop; 2855 eop_desc = &adapter->tx_desc_base[last]; 2856 2857 /* 2858 * Now caculate the terminating index 2859 * for the cleanup loop below 2860 */ 2861 if (++last == adapter->num_tx_desc) last = 0; 2862 done = last; 2863 2864 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 2865 BUS_DMASYNC_POSTREAD); 2866 2867 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) { 2868 /* We clean the range of the packet */ 2869 while (first != done) { 2870 tx_desc->upper.data = 0; 2871 tx_desc->lower.data = 0; 2872 num_avail++; 2873 2874 if (tx_buffer->m_head) { 2875 ifp->if_opackets++; 2876 bus_dmamap_sync(adapter->txtag, 2877 tx_buffer->map, 2878 BUS_DMASYNC_POSTWRITE); 2879 bus_dmamap_unload(adapter->txtag, 2880 tx_buffer->map); 2881 2882 m_freem(tx_buffer->m_head); 2883 tx_buffer->m_head = NULL; 2884 } 2885 tx_buffer->next_eop = -1; 2886 2887 if (++first == adapter->num_tx_desc) 2888 first = 0; 2889 2890 tx_buffer = &adapter->tx_buffer_area[first]; 2891 tx_desc = &adapter->tx_desc_base[first]; 2892 } 2893 /* See if we can continue to the next packet */ 2894 last = tx_buffer->next_eop; 2895 if (last != -1) { 2896 eop_desc = &adapter->tx_desc_base[last]; 2897 /* Get new done point */ 2898 if (++last == adapter->num_tx_desc) last = 0; 2899 done = last; 2900 } else 2901 break; 2902 } 2903 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 2904 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2905 2906 adapter->next_tx_to_clean = first; 2907 2908 /* 2909 * If we have enough room, clear IFF_DRV_OACTIVE to tell the stack 2910 * that it is OK to send packets. 2911 * If there are no pending descriptors, clear the timeout. Otherwise, 2912 * if some descriptors have been freed, restart the timeout. 2913 */ 2914 if (num_avail > EM_TX_CLEANUP_THRESHOLD) { 2915 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 2916 if (num_avail == adapter->num_tx_desc) 2917 ifp->if_timer = 0; 2918 else if (num_avail != adapter->num_tx_desc_avail) 2919 ifp->if_timer = EM_TX_TIMEOUT; 2920 } 2921 adapter->num_tx_desc_avail = num_avail; 2922 return; 2923} 2924 2925/********************************************************************* 2926 * 2927 * Get a buffer from system mbuf buffer pool. 2928 * 2929 **********************************************************************/ 2930static int 2931em_get_buf(int i, struct adapter *adapter, struct mbuf *mp) 2932{ 2933 struct ifnet *ifp = adapter->ifp; 2934 bus_dma_segment_t segs[1]; 2935 struct em_buffer *rx_buffer; 2936 int error, nsegs; 2937 2938 if (mp == NULL) { 2939 mp = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); 2940 if (mp == NULL) { 2941 adapter->mbuf_cluster_failed++; 2942 return (ENOBUFS); 2943 } 2944 mp->m_len = mp->m_pkthdr.len = MCLBYTES; 2945 } else { 2946 mp->m_len = mp->m_pkthdr.len = MCLBYTES; 2947 mp->m_data = mp->m_ext.ext_buf; 2948 mp->m_next = NULL; 2949 } 2950 2951 if (ifp->if_mtu <= ETHERMTU) 2952 m_adj(mp, ETHER_ALIGN); 2953 2954 rx_buffer = &adapter->rx_buffer_area[i]; 2955 2956 /* 2957 * Using memory from the mbuf cluster pool, invoke the 2958 * bus_dma machinery to arrange the memory mapping. 2959 */ 2960 error = bus_dmamap_load_mbuf_sg(adapter->rxtag, rx_buffer->map, 2961 mp, segs, &nsegs, 0); 2962 if (error != 0) { 2963 m_free(mp); 2964 return (error); 2965 } 2966 /* If nsegs is wrong then the stack is corrupt. */ 2967 KASSERT(nsegs == 1, ("Too many segments returned!")); 2968 rx_buffer->m_head = mp; 2969 adapter->rx_desc_base[i].buffer_addr = htole64(segs[0].ds_addr); 2970 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD); 2971 2972 return (0); 2973} 2974 2975/********************************************************************* 2976 * 2977 * Allocate memory for rx_buffer structures. Since we use one 2978 * rx_buffer per received packet, the maximum number of rx_buffer's 2979 * that we'll need is equal to the number of receive descriptors 2980 * that we've allocated. 2981 * 2982 **********************************************************************/ 2983static int 2984em_allocate_receive_structures(struct adapter *adapter) 2985{ 2986 device_t dev = adapter->dev; 2987 struct em_buffer *rx_buffer; 2988 int i, error; 2989 2990 adapter->rx_buffer_area = malloc(sizeof(struct em_buffer) * 2991 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT); 2992 if (adapter->rx_buffer_area == NULL) { 2993 device_printf(dev, "Unable to allocate rx_buffer memory\n"); 2994 return (ENOMEM); 2995 } 2996 2997 bzero(adapter->rx_buffer_area, 2998 sizeof(struct em_buffer) * adapter->num_rx_desc); 2999 3000 error = bus_dma_tag_create(NULL, /* parent */ 3001 1, 0, /* alignment, bounds */ 3002 BUS_SPACE_MAXADDR, /* lowaddr */ 3003 BUS_SPACE_MAXADDR, /* highaddr */ 3004 NULL, NULL, /* filter, filterarg */ 3005 MCLBYTES, /* maxsize */ 3006 1, /* nsegments */ 3007 MCLBYTES, /* maxsegsize */ 3008 0, /* flags */ 3009 NULL, /* lockfunc */ 3010 NULL, /* lockarg */ 3011 &adapter->rxtag); 3012 if (error) { 3013 device_printf(dev, "%s: bus_dma_tag_create failed %d\n", 3014 __func__, error); 3015 goto fail; 3016 } 3017 3018 rx_buffer = adapter->rx_buffer_area; 3019 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 3020 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT, 3021 &rx_buffer->map); 3022 if (error) { 3023 device_printf(dev, "%s: bus_dmamap_create failed: %d\n", 3024 __func__, error); 3025 goto fail; 3026 } 3027 } 3028 3029 return (0); 3030 3031fail: 3032 em_free_receive_structures(adapter); 3033 return (error); 3034} 3035 3036/********************************************************************* 3037 * 3038 * Allocate and initialize receive structures. 3039 * 3040 **********************************************************************/ 3041static int 3042em_setup_receive_structures(struct adapter *adapter) 3043{ 3044 struct em_buffer *rx_buffer; 3045 int i, error; 3046 3047 bzero(adapter->rx_desc_base, 3048 (sizeof(struct em_rx_desc)) * adapter->num_rx_desc); 3049 3050 /* Free current RX buffers. */ 3051 rx_buffer = adapter->rx_buffer_area; 3052 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 3053 if (rx_buffer->m_head != NULL) { 3054 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, 3055 BUS_DMASYNC_POSTREAD); 3056 bus_dmamap_unload(adapter->rxtag, rx_buffer->map); 3057 m_freem(rx_buffer->m_head); 3058 rx_buffer->m_head = NULL; 3059 } 3060 } 3061 3062 /* Allocate new ones. */ 3063 for (i = 0; i < adapter->num_rx_desc; i++) { 3064 error = em_get_buf(i, adapter, NULL); 3065 if (error) 3066 return (error); 3067 } 3068 3069 /* Setup our descriptor pointers */ 3070 adapter->next_rx_desc_to_check = 0; 3071 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 3072 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3073 3074 return (0); 3075} 3076 3077/********************************************************************* 3078 * 3079 * Enable receive unit. 3080 * 3081 **********************************************************************/ 3082static void 3083em_initialize_receive_unit(struct adapter *adapter) 3084{ 3085 struct ifnet *ifp = adapter->ifp; 3086 uint64_t bus_addr; 3087 uint32_t reg_rctl; 3088 uint32_t reg_rxcsum; 3089 3090 INIT_DEBUGOUT("em_initialize_receive_unit: begin"); 3091 3092 /* 3093 * Make sure receives are disabled while setting 3094 * up the descriptor ring 3095 */ 3096 E1000_WRITE_REG(&adapter->hw, RCTL, 0); 3097 3098 if(adapter->hw.mac_type >= em_82540) { 3099 E1000_WRITE_REG(&adapter->hw, RADV, 3100 adapter->rx_abs_int_delay.value); 3101 /* 3102 * Set the interrupt throttling rate. Value is calculated 3103 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) 3104 */ 3105#define MAX_INTS_PER_SEC 8000 3106#define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256) 3107 E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR); 3108 } 3109 3110 /* Setup the Base and Length of the Rx Descriptor Ring */ 3111 bus_addr = adapter->rxdma.dma_paddr; 3112 E1000_WRITE_REG(&adapter->hw, RDLEN, adapter->num_rx_desc * 3113 sizeof(struct em_rx_desc)); 3114 E1000_WRITE_REG(&adapter->hw, RDBAH, (uint32_t)(bus_addr >> 32)); 3115 E1000_WRITE_REG(&adapter->hw, RDBAL, (uint32_t)bus_addr); 3116 3117 /* Setup the Receive Control Register */ 3118 reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO | 3119 E1000_RCTL_RDMTS_HALF | 3120 (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT); 3121 3122 if (adapter->hw.tbi_compatibility_on == TRUE) 3123 reg_rctl |= E1000_RCTL_SBP; 3124 3125 3126 switch (adapter->rx_buffer_len) { 3127 default: 3128 case EM_RXBUFFER_2048: 3129 reg_rctl |= E1000_RCTL_SZ_2048; 3130 break; 3131 case EM_RXBUFFER_4096: 3132 reg_rctl |= E1000_RCTL_SZ_4096 | 3133 E1000_RCTL_BSEX | E1000_RCTL_LPE; 3134 break; 3135 case EM_RXBUFFER_8192: 3136 reg_rctl |= E1000_RCTL_SZ_8192 | 3137 E1000_RCTL_BSEX | E1000_RCTL_LPE; 3138 break; 3139 case EM_RXBUFFER_16384: 3140 reg_rctl |= E1000_RCTL_SZ_16384 | 3141 E1000_RCTL_BSEX | E1000_RCTL_LPE; 3142 break; 3143 } 3144 3145 if (ifp->if_mtu > ETHERMTU) 3146 reg_rctl |= E1000_RCTL_LPE; 3147 3148 /* Enable 82543 Receive Checksum Offload for TCP and UDP */ 3149 if ((adapter->hw.mac_type >= em_82543) && 3150 (ifp->if_capenable & IFCAP_RXCSUM)) { 3151 reg_rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM); 3152 reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL); 3153 E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum); 3154 } 3155 3156 /* Enable Receives */ 3157 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl); 3158 /* 3159 * Setup the HW Rx Head and 3160 * Tail Descriptor Pointers 3161 */ 3162 E1000_WRITE_REG(&adapter->hw, RDH, 0); 3163 E1000_WRITE_REG(&adapter->hw, RDT, adapter->num_rx_desc - 1); 3164 3165 return; 3166} 3167 3168/********************************************************************* 3169 * 3170 * Free receive related data structures. 3171 * 3172 **********************************************************************/ 3173static void 3174em_free_receive_structures(struct adapter *adapter) 3175{ 3176 struct em_buffer *rx_buffer; 3177 int i; 3178 3179 INIT_DEBUGOUT("free_receive_structures: begin"); 3180 3181 if (adapter->rx_buffer_area != NULL) { 3182 rx_buffer = adapter->rx_buffer_area; 3183 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 3184 if (rx_buffer->m_head != NULL) { 3185 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, 3186 BUS_DMASYNC_POSTREAD); 3187 bus_dmamap_unload(adapter->rxtag, 3188 rx_buffer->map); 3189 m_freem(rx_buffer->m_head); 3190 rx_buffer->m_head = NULL; 3191 } else if (rx_buffer->map != NULL) 3192 bus_dmamap_unload(adapter->rxtag, 3193 rx_buffer->map); 3194 if (rx_buffer->map != NULL) { 3195 bus_dmamap_destroy(adapter->rxtag, 3196 rx_buffer->map); 3197 rx_buffer->map = NULL; 3198 } 3199 } 3200 } 3201 if (adapter->rx_buffer_area != NULL) { 3202 free(adapter->rx_buffer_area, M_DEVBUF); 3203 adapter->rx_buffer_area = NULL; 3204 } 3205 if (adapter->rxtag != NULL) { 3206 bus_dma_tag_destroy(adapter->rxtag); 3207 adapter->rxtag = NULL; 3208 } 3209} 3210 3211/********************************************************************* 3212 * 3213 * This routine executes in interrupt context. It replenishes 3214 * the mbufs in the descriptor and sends data which has been 3215 * dma'ed into host memory to upper layer. 3216 * 3217 * We loop at most count times if count is > 0, or until done if 3218 * count < 0. 3219 * 3220 *********************************************************************/ 3221static int 3222em_rxeof(struct adapter *adapter, int count) 3223{ 3224 struct ifnet *ifp; 3225 struct mbuf *mp; 3226 uint8_t accept_frame = 0; 3227 uint8_t eop = 0; 3228 uint16_t len, desc_len, prev_len_adj; 3229 int i; 3230 3231 /* Pointer to the receive descriptor being examined. */ 3232 struct em_rx_desc *current_desc; 3233 uint8_t status; 3234 3235 ifp = adapter->ifp; 3236 i = adapter->next_rx_desc_to_check; 3237 current_desc = &adapter->rx_desc_base[i]; 3238 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 3239 BUS_DMASYNC_POSTREAD); 3240 3241 if (!((current_desc->status) & E1000_RXD_STAT_DD)) 3242 return (0); 3243 3244 while ((current_desc->status & E1000_RXD_STAT_DD) && 3245 (count != 0) && 3246 (ifp->if_drv_flags & IFF_DRV_RUNNING)) { 3247 struct mbuf *m = NULL; 3248 3249 mp = adapter->rx_buffer_area[i].m_head; 3250 /* 3251 * Can't defer bus_dmamap_sync(9) because TBI_ACCEPT 3252 * needs to access the last received byte in the mbuf. 3253 */ 3254 bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map, 3255 BUS_DMASYNC_POSTREAD); 3256 3257 accept_frame = 1; 3258 prev_len_adj = 0; 3259 desc_len = le16toh(current_desc->length); 3260 status = current_desc->status; 3261 if (status & E1000_RXD_STAT_EOP) { 3262 count--; 3263 eop = 1; 3264 if (desc_len < ETHER_CRC_LEN) { 3265 len = 0; 3266 prev_len_adj = ETHER_CRC_LEN - desc_len; 3267 } else 3268 len = desc_len - ETHER_CRC_LEN; 3269 } else { 3270 eop = 0; 3271 len = desc_len; 3272 } 3273 3274 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) { 3275 uint8_t last_byte; 3276 uint32_t pkt_len = desc_len; 3277 3278 if (adapter->fmp != NULL) 3279 pkt_len += adapter->fmp->m_pkthdr.len; 3280 3281 last_byte = *(mtod(mp, caddr_t) + desc_len - 1); 3282 if (TBI_ACCEPT(&adapter->hw, status, 3283 current_desc->errors, pkt_len, last_byte)) { 3284 em_tbi_adjust_stats(&adapter->hw, 3285 &adapter->stats, pkt_len, 3286 adapter->hw.mac_addr); 3287 if (len > 0) 3288 len--; 3289 } else 3290 accept_frame = 0; 3291 } 3292 3293 if (accept_frame) { 3294 if (em_get_buf(i, adapter, NULL) == ENOBUFS) { 3295 adapter->dropped_pkts++; 3296 em_get_buf(i, adapter, mp); 3297 if (adapter->fmp != NULL) 3298 m_freem(adapter->fmp); 3299 adapter->fmp = NULL; 3300 adapter->lmp = NULL; 3301 break; 3302 } 3303 3304 /* Assign correct length to the current fragment */ 3305 mp->m_len = len; 3306 3307 if (adapter->fmp == NULL) { 3308 mp->m_pkthdr.len = len; 3309 adapter->fmp = mp; /* Store the first mbuf */ 3310 adapter->lmp = mp; 3311 } else { 3312 /* Chain mbuf's together */ 3313 mp->m_flags &= ~M_PKTHDR; 3314 /* 3315 * Adjust length of previous mbuf in chain if 3316 * we received less than 4 bytes in the last 3317 * descriptor. 3318 */ 3319 if (prev_len_adj > 0) { 3320 adapter->lmp->m_len -= prev_len_adj; 3321 adapter->fmp->m_pkthdr.len -= 3322 prev_len_adj; 3323 } 3324 adapter->lmp->m_next = mp; 3325 adapter->lmp = adapter->lmp->m_next; 3326 adapter->fmp->m_pkthdr.len += len; 3327 } 3328 3329 if (eop) { 3330 adapter->fmp->m_pkthdr.rcvif = ifp; 3331 ifp->if_ipackets++; 3332 em_receive_checksum(adapter, current_desc, 3333 adapter->fmp); 3334#ifndef __NO_STRICT_ALIGNMENT 3335 if (adapter->hw.max_frame_size > 3336 (MCLBYTES - ETHER_ALIGN) && 3337 em_fixup_rx(adapter) != 0) 3338 goto skip; 3339#endif 3340 if (status & E1000_RXD_STAT_VP) 3341 VLAN_INPUT_TAG_NEW(ifp, adapter->fmp, 3342 (le16toh(current_desc->special) & 3343 E1000_RXD_SPC_VLAN_MASK)); 3344#ifndef __NO_STRICT_ALIGNMENT 3345skip: 3346#endif 3347 m = adapter->fmp; 3348 adapter->fmp = NULL; 3349 adapter->lmp = NULL; 3350 } 3351 } else { 3352 adapter->dropped_pkts++; 3353 em_get_buf(i, adapter, mp); 3354 if (adapter->fmp != NULL) 3355 m_freem(adapter->fmp); 3356 adapter->fmp = NULL; 3357 adapter->lmp = NULL; 3358 } 3359 3360 /* Zero out the receive descriptors status. */ 3361 current_desc->status = 0; 3362 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 3363 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3364 3365 /* Advance our pointers to the next descriptor. */ 3366 if (++i == adapter->num_rx_desc) 3367 i = 0; 3368 if (m != NULL) { 3369 adapter->next_rx_desc_to_check = i; 3370 EM_UNLOCK(adapter); 3371 (*ifp->if_input)(ifp, m); 3372 EM_LOCK(adapter); 3373 i = adapter->next_rx_desc_to_check; 3374 } 3375 current_desc = &adapter->rx_desc_base[i]; 3376 } 3377 adapter->next_rx_desc_to_check = i; 3378 3379 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */ 3380 if (--i < 0) 3381 i = adapter->num_rx_desc - 1; 3382 E1000_WRITE_REG(&adapter->hw, RDT, i); 3383 if (!((current_desc->status) & E1000_RXD_STAT_DD)) 3384 return (0); 3385 3386 return (1); 3387} 3388 3389#ifndef __NO_STRICT_ALIGNMENT 3390/* 3391 * When jumbo frames are enabled we should realign entire payload on 3392 * architecures with strict alignment. This is serious design mistake of 8254x 3393 * as it nullifies DMA operations. 8254x just allows RX buffer size to be 3394 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its 3395 * payload. On architecures without strict alignment restrictions 8254x still 3396 * performs unaligned memory access which would reduce the performance too. 3397 * To avoid copying over an entire frame to align, we allocate a new mbuf and 3398 * copy ethernet header to the new mbuf. The new mbuf is prepended into the 3399 * existing mbuf chain. 3400 * 3401 * Be aware, best performance of the 8254x is achived only when jumbo frame is 3402 * not used at all on architectures with strict alignment. 3403 */ 3404static int 3405em_fixup_rx(struct adapter *adapter) 3406{ 3407 struct mbuf *m, *n; 3408 int error; 3409 3410 error = 0; 3411 m = adapter->fmp; 3412 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) { 3413 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len); 3414 m->m_data += ETHER_HDR_LEN; 3415 } else { 3416 MGETHDR(n, M_DONTWAIT, MT_DATA); 3417 if (n != NULL) { 3418 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN); 3419 m->m_data += ETHER_HDR_LEN; 3420 m->m_len -= ETHER_HDR_LEN; 3421 n->m_len = ETHER_HDR_LEN; 3422 M_MOVE_PKTHDR(n, m); 3423 n->m_next = m; 3424 adapter->fmp = n; 3425 } else { 3426 adapter->dropped_pkts++; 3427 m_freem(adapter->fmp); 3428 adapter->fmp = NULL; 3429 error = ENOMEM; 3430 } 3431 } 3432 3433 return (error); 3434} 3435#endif 3436 3437/********************************************************************* 3438 * 3439 * Verify that the hardware indicated that the checksum is valid. 3440 * Inform the stack about the status of checksum so that stack 3441 * doesn't spend time verifying the checksum. 3442 * 3443 *********************************************************************/ 3444static void 3445em_receive_checksum(struct adapter *adapter, 3446 struct em_rx_desc *rx_desc, struct mbuf *mp) 3447{ 3448 /* 82543 or newer only */ 3449 if ((adapter->hw.mac_type < em_82543) || 3450 /* Ignore Checksum bit is set */ 3451 (rx_desc->status & E1000_RXD_STAT_IXSM)) { 3452 mp->m_pkthdr.csum_flags = 0; 3453 return; 3454 } 3455 3456 if (rx_desc->status & E1000_RXD_STAT_IPCS) { 3457 /* Did it pass? */ 3458 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) { 3459 /* IP Checksum Good */ 3460 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED; 3461 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID; 3462 3463 } else { 3464 mp->m_pkthdr.csum_flags = 0; 3465 } 3466 } 3467 3468 if (rx_desc->status & E1000_RXD_STAT_TCPCS) { 3469 /* Did it pass? */ 3470 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) { 3471 mp->m_pkthdr.csum_flags |= 3472 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR); 3473 mp->m_pkthdr.csum_data = htons(0xffff); 3474 } 3475 } 3476} 3477 3478 3479static void 3480em_enable_vlans(struct adapter *adapter) 3481{ 3482 uint32_t ctrl; 3483 3484 E1000_WRITE_REG(&adapter->hw, VET, ETHERTYPE_VLAN); 3485 3486 ctrl = E1000_READ_REG(&adapter->hw, CTRL); 3487 ctrl |= E1000_CTRL_VME; 3488 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); 3489} 3490 3491static void 3492em_disable_vlans(struct adapter *adapter) 3493{ 3494 uint32_t ctrl; 3495 3496 ctrl = E1000_READ_REG(&adapter->hw, CTRL); 3497 ctrl &= ~E1000_CTRL_VME; 3498 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); 3499} 3500 3501static void 3502em_enable_intr(struct adapter *adapter) 3503{ 3504 E1000_WRITE_REG(&adapter->hw, IMS, (IMS_ENABLE_MASK)); 3505} 3506 3507static void 3508em_disable_intr(struct adapter *adapter) 3509{ 3510 /* 3511 * The first version of 82542 had an errata where when link was forced 3512 * it would stay up even up even if the cable was disconnected. 3513 * Sequence errors were used to detect the disconnect and then the 3514 * driver would unforce the link. This code in the in the ISR. For this 3515 * to work correctly the Sequence error interrupt had to be enabled 3516 * all the time. 3517 */ 3518 3519 if (adapter->hw.mac_type == em_82542_rev2_0) 3520 E1000_WRITE_REG(&adapter->hw, IMC, 3521 (0xffffffff & ~E1000_IMC_RXSEQ)); 3522 else 3523 E1000_WRITE_REG(&adapter->hw, IMC, 0xffffffff); 3524} 3525 3526static int 3527em_is_valid_ether_addr(uint8_t *addr) 3528{ 3529 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 }; 3530 3531 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) { 3532 return (FALSE); 3533 } 3534 3535 return (TRUE); 3536} 3537 3538void 3539em_write_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value) 3540{ 3541 pci_write_config(((struct em_osdep *)hw->back)->dev, reg, *value, 2); 3542} 3543 3544void 3545em_read_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value) 3546{ 3547 *value = pci_read_config(((struct em_osdep *)hw->back)->dev, reg, 2); 3548} 3549 3550void 3551em_pci_set_mwi(struct em_hw *hw) 3552{ 3553 pci_write_config(((struct em_osdep *)hw->back)->dev, PCIR_COMMAND, 3554 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE), 2); 3555} 3556 3557void 3558em_pci_clear_mwi(struct em_hw *hw) 3559{ 3560 pci_write_config(((struct em_osdep *)hw->back)->dev, PCIR_COMMAND, 3561 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE), 2); 3562} 3563 3564uint32_t 3565em_io_read(struct em_hw *hw, unsigned long port) 3566{ 3567 struct em_osdep *io = hw->back; 3568 uint32_t ret; 3569 3570 ret = bus_space_read_4(io->io_bus_space_tag, 3571 io->io_bus_space_handle, port); 3572 return (ret); 3573} 3574 3575void 3576em_io_write(struct em_hw *hw, unsigned long port, uint32_t value) 3577{ 3578 struct em_osdep *io = hw->back; 3579 3580 bus_space_write_4(io->io_bus_space_tag, 3581 io->io_bus_space_handle, port, value); 3582 return; 3583} 3584 3585/* 3586 * We may eventually really do this, but its unnecessary 3587 * for now so we just return unsupported. 3588 */ 3589int32_t 3590em_read_pcie_cap_reg(struct em_hw *hw, uint32_t reg, uint16_t *value) 3591{ 3592 return (0); 3593} 3594 3595/********************************************************************* 3596* 82544 Coexistence issue workaround. 3597* There are 2 issues. 3598* 1. Transmit Hang issue. 3599* To detect this issue, following equation can be used... 3600* SIZE[3:0] + ADDR[2:0] = SUM[3:0]. 3601* If SUM[3:0] is in between 1 to 4, we will have this issue. 3602* 3603* 2. DAC issue. 3604* To detect this issue, following equation can be used... 3605* SIZE[3:0] + ADDR[2:0] = SUM[3:0]. 3606* If SUM[3:0] is in between 9 to c, we will have this issue. 3607* 3608* 3609* WORKAROUND: 3610* Make sure we do not have ending address 3611* as 1,2,3,4(Hang) or 9,a,b,c (DAC) 3612* 3613*************************************************************************/ 3614static uint32_t 3615em_fill_descriptors (bus_addr_t address, uint32_t length, 3616 PDESC_ARRAY desc_array) 3617{ 3618 /* Since issue is sensitive to length and address.*/ 3619 /* Let us first check the address...*/ 3620 uint32_t safe_terminator; 3621 if (length <= 4) { 3622 desc_array->descriptor[0].address = address; 3623 desc_array->descriptor[0].length = length; 3624 desc_array->elements = 1; 3625 return (desc_array->elements); 3626 } 3627 safe_terminator = (uint32_t)((((uint32_t)address & 0x7) + 3628 (length & 0xF)) & 0xF); 3629 /* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */ 3630 if (safe_terminator == 0 || 3631 (safe_terminator > 4 && 3632 safe_terminator < 9) || 3633 (safe_terminator > 0xC && 3634 safe_terminator <= 0xF)) { 3635 desc_array->descriptor[0].address = address; 3636 desc_array->descriptor[0].length = length; 3637 desc_array->elements = 1; 3638 return (desc_array->elements); 3639 } 3640 3641 desc_array->descriptor[0].address = address; 3642 desc_array->descriptor[0].length = length - 4; 3643 desc_array->descriptor[1].address = address + (length - 4); 3644 desc_array->descriptor[1].length = 4; 3645 desc_array->elements = 2; 3646 return (desc_array->elements); 3647} 3648 3649/********************************************************************** 3650 * 3651 * Update the board statistics counters. 3652 * 3653 **********************************************************************/ 3654static void 3655em_update_stats_counters(struct adapter *adapter) 3656{ 3657 struct ifnet *ifp; 3658 3659 if(adapter->hw.media_type == em_media_type_copper || 3660 (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)) { 3661 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, SYMERRS); 3662 adapter->stats.sec += E1000_READ_REG(&adapter->hw, SEC); 3663 } 3664 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, CRCERRS); 3665 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, MPC); 3666 adapter->stats.scc += E1000_READ_REG(&adapter->hw, SCC); 3667 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, ECOL); 3668 3669 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, MCC); 3670 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, LATECOL); 3671 adapter->stats.colc += E1000_READ_REG(&adapter->hw, COLC); 3672 adapter->stats.dc += E1000_READ_REG(&adapter->hw, DC); 3673 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, RLEC); 3674 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, XONRXC); 3675 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, XONTXC); 3676 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, XOFFRXC); 3677 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, XOFFTXC); 3678 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, FCRUC); 3679 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, PRC64); 3680 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, PRC127); 3681 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, PRC255); 3682 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, PRC511); 3683 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, PRC1023); 3684 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, PRC1522); 3685 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, GPRC); 3686 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, BPRC); 3687 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, MPRC); 3688 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, GPTC); 3689 3690 /* For the 64-bit byte counters the low dword must be read first. */ 3691 /* Both registers clear on the read of the high dword */ 3692 3693 adapter->stats.gorcl += E1000_READ_REG(&adapter->hw, GORCL); 3694 adapter->stats.gorch += E1000_READ_REG(&adapter->hw, GORCH); 3695 adapter->stats.gotcl += E1000_READ_REG(&adapter->hw, GOTCL); 3696 adapter->stats.gotch += E1000_READ_REG(&adapter->hw, GOTCH); 3697 3698 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, RNBC); 3699 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, RUC); 3700 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, RFC); 3701 adapter->stats.roc += E1000_READ_REG(&adapter->hw, ROC); 3702 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, RJC); 3703 3704 adapter->stats.torl += E1000_READ_REG(&adapter->hw, TORL); 3705 adapter->stats.torh += E1000_READ_REG(&adapter->hw, TORH); 3706 adapter->stats.totl += E1000_READ_REG(&adapter->hw, TOTL); 3707 adapter->stats.toth += E1000_READ_REG(&adapter->hw, TOTH); 3708 3709 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, TPR); 3710 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, TPT); 3711 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, PTC64); 3712 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, PTC127); 3713 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, PTC255); 3714 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, PTC511); 3715 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, PTC1023); 3716 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, PTC1522); 3717 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, MPTC); 3718 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, BPTC); 3719 3720 if (adapter->hw.mac_type >= em_82543) { 3721 adapter->stats.algnerrc += 3722 E1000_READ_REG(&adapter->hw, ALGNERRC); 3723 adapter->stats.rxerrc += 3724 E1000_READ_REG(&adapter->hw, RXERRC); 3725 adapter->stats.tncrs += 3726 E1000_READ_REG(&adapter->hw, TNCRS); 3727 adapter->stats.cexterr += 3728 E1000_READ_REG(&adapter->hw, CEXTERR); 3729 adapter->stats.tsctc += 3730 E1000_READ_REG(&adapter->hw, TSCTC); 3731 adapter->stats.tsctfc += 3732 E1000_READ_REG(&adapter->hw, TSCTFC); 3733 } 3734 ifp = adapter->ifp; 3735 3736 ifp->if_collisions = adapter->stats.colc; 3737 3738 /* Rx Errors */ 3739 ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc + 3740 adapter->stats.crcerrs + adapter->stats.algnerrc + 3741 adapter->stats.ruc + adapter->stats.roc + 3742 adapter->stats.mpc + adapter->stats.cexterr; 3743 3744 /* Tx Errors */ 3745 ifp->if_oerrors = adapter->stats.ecol + 3746 adapter->stats.latecol + adapter->watchdog_events; 3747} 3748 3749 3750/********************************************************************** 3751 * 3752 * This routine is called only when em_display_debug_stats is enabled. 3753 * This routine provides a way to take a look at important statistics 3754 * maintained by the driver and hardware. 3755 * 3756 **********************************************************************/ 3757static void 3758em_print_debug_info(struct adapter *adapter) 3759{ 3760 device_t dev = adapter->dev; 3761 uint8_t *hw_addr = adapter->hw.hw_addr; 3762 3763 device_printf(dev, "Adapter hardware address = %p \n", hw_addr); 3764 device_printf(dev, "CTRL = 0x%x RCTL = 0x%x \n", 3765 E1000_READ_REG(&adapter->hw, CTRL), 3766 E1000_READ_REG(&adapter->hw, RCTL)); 3767 device_printf(dev, "Packet buffer = Tx=%dk Rx=%dk \n", 3768 ((E1000_READ_REG(&adapter->hw, PBA) & 0xffff0000) >> 16),\ 3769 (E1000_READ_REG(&adapter->hw, PBA) & 0xffff) ); 3770 device_printf(dev, "Flow control watermarks high = %d low = %d\n", 3771 adapter->hw.fc_high_water, 3772 adapter->hw.fc_low_water); 3773 device_printf(dev, "tx_int_delay = %d, tx_abs_int_delay = %d\n", 3774 E1000_READ_REG(&adapter->hw, TIDV), 3775 E1000_READ_REG(&adapter->hw, TADV)); 3776 device_printf(dev, "rx_int_delay = %d, rx_abs_int_delay = %d\n", 3777 E1000_READ_REG(&adapter->hw, RDTR), 3778 E1000_READ_REG(&adapter->hw, RADV)); 3779 device_printf(dev, "fifo workaround = %lld, fifo_reset_count = %lld\n", 3780 (long long)adapter->tx_fifo_wrk_cnt, 3781 (long long)adapter->tx_fifo_reset_cnt); 3782 device_printf(dev, "hw tdh = %d, hw tdt = %d\n", 3783 E1000_READ_REG(&adapter->hw, TDH), 3784 E1000_READ_REG(&adapter->hw, TDT)); 3785 device_printf(dev, "Num Tx descriptors avail = %d\n", 3786 adapter->num_tx_desc_avail); 3787 device_printf(dev, "Tx Descriptors not avail1 = %ld\n", 3788 adapter->no_tx_desc_avail1); 3789 device_printf(dev, "Tx Descriptors not avail2 = %ld\n", 3790 adapter->no_tx_desc_avail2); 3791 device_printf(dev, "Std mbuf failed = %ld\n", 3792 adapter->mbuf_alloc_failed); 3793 device_printf(dev, "Std mbuf cluster failed = %ld\n", 3794 adapter->mbuf_cluster_failed); 3795 device_printf(dev, "Driver dropped packets = %ld\n", 3796 adapter->dropped_pkts); 3797} 3798 3799static void 3800em_print_hw_stats(struct adapter *adapter) 3801{ 3802 device_t dev = adapter->dev; 3803 3804 device_printf(dev, "Excessive collisions = %lld\n", 3805 (long long)adapter->stats.ecol); 3806#if (DEBUG_HW > 0) /* Dont output these errors normally */ 3807 device_printf(dev, "Symbol errors = %lld\n", 3808 (long long)adapter->stats.symerrs); 3809#endif 3810 device_printf(dev, "Sequence errors = %lld\n", 3811 (long long)adapter->stats.sec); 3812 device_printf(dev, "Defer count = %lld\n", 3813 (long long)adapter->stats.dc); 3814 device_printf(dev, "Missed Packets = %lld\n", 3815 (long long)adapter->stats.mpc); 3816 device_printf(dev, "Receive No Buffers = %lld\n", 3817 (long long)adapter->stats.rnbc); 3818 /* RLEC is inaccurate on some hardware, calculate our own. */ 3819 device_printf(dev, "Receive Length Errors = %lld\n", 3820 ((long long)adapter->stats.roc + (long long)adapter->stats.ruc)); 3821 device_printf(dev, "Receive errors = %lld\n", 3822 (long long)adapter->stats.rxerrc); 3823 device_printf(dev, "Crc errors = %lld\n", 3824 (long long)adapter->stats.crcerrs); 3825 device_printf(dev, "Alignment errors = %lld\n", 3826 (long long)adapter->stats.algnerrc); 3827 device_printf(dev, "Carrier extension errors = %lld\n", 3828 (long long)adapter->stats.cexterr); 3829 device_printf(dev, "RX overruns = %ld\n", adapter->rx_overruns); 3830 device_printf(dev, "watchdog timeouts = %ld\n", 3831 adapter->watchdog_events); 3832 device_printf(dev, "XON Rcvd = %lld\n", 3833 (long long)adapter->stats.xonrxc); 3834 device_printf(dev, "XON Xmtd = %lld\n", 3835 (long long)adapter->stats.xontxc); 3836 device_printf(dev, "XOFF Rcvd = %lld\n", 3837 (long long)adapter->stats.xoffrxc); 3838 device_printf(dev, "XOFF Xmtd = %lld\n", 3839 (long long)adapter->stats.xofftxc); 3840 device_printf(dev, "Good Packets Rcvd = %lld\n", 3841 (long long)adapter->stats.gprc); 3842 device_printf(dev, "Good Packets Xmtd = %lld\n", 3843 (long long)adapter->stats.gptc); 3844#ifdef EM_TSO 3845 device_printf(dev, "TSO Contexts Xmtd = %lld\n", 3846 (long long)adapter->stats.tsctc); 3847 device_printf(dev, "TSO Contexts Failed = %lld\n", 3848 (long long)adapter->stats.tsctfc); 3849#endif 3850} 3851 3852static int 3853em_sysctl_debug_info(SYSCTL_HANDLER_ARGS) 3854{ 3855 struct adapter *adapter; 3856 int error; 3857 int result; 3858 3859 result = -1; 3860 error = sysctl_handle_int(oidp, &result, 0, req); 3861 3862 if (error || !req->newptr) 3863 return (error); 3864 3865 if (result == 1) { 3866 adapter = (struct adapter *)arg1; 3867 em_print_debug_info(adapter); 3868 } 3869 3870 return (error); 3871} 3872 3873 3874static int 3875em_sysctl_stats(SYSCTL_HANDLER_ARGS) 3876{ 3877 struct adapter *adapter; 3878 int error; 3879 int result; 3880 3881 result = -1; 3882 error = sysctl_handle_int(oidp, &result, 0, req); 3883 3884 if (error || !req->newptr) 3885 return (error); 3886 3887 if (result == 1) { 3888 adapter = (struct adapter *)arg1; 3889 em_print_hw_stats(adapter); 3890 } 3891 3892 return (error); 3893} 3894 3895static int 3896em_sysctl_int_delay(SYSCTL_HANDLER_ARGS) 3897{ 3898 struct em_int_delay_info *info; 3899 struct adapter *adapter; 3900 uint32_t regval; 3901 int error; 3902 int usecs; 3903 int ticks; 3904 3905 info = (struct em_int_delay_info *)arg1; 3906 usecs = info->value; 3907 error = sysctl_handle_int(oidp, &usecs, 0, req); 3908 if (error != 0 || req->newptr == NULL) 3909 return (error); 3910 if (usecs < 0 || usecs > E1000_TICKS_TO_USECS(65535)) 3911 return (EINVAL); 3912 info->value = usecs; 3913 ticks = E1000_USECS_TO_TICKS(usecs); 3914 3915 adapter = info->adapter; 3916 3917 EM_LOCK(adapter); 3918 regval = E1000_READ_OFFSET(&adapter->hw, info->offset); 3919 regval = (regval & ~0xffff) | (ticks & 0xffff); 3920 /* Handle a few special cases. */ 3921 switch (info->offset) { 3922 case E1000_RDTR: 3923 case E1000_82542_RDTR: 3924 regval |= E1000_RDT_FPDB; 3925 break; 3926 case E1000_TIDV: 3927 case E1000_82542_TIDV: 3928 if (ticks == 0) { 3929 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE; 3930 /* Don't write 0 into the TIDV register. */ 3931 regval++; 3932 } else 3933 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 3934 break; 3935 } 3936 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval); 3937 EM_UNLOCK(adapter); 3938 return (0); 3939} 3940 3941static void 3942em_add_int_delay_sysctl(struct adapter *adapter, const char *name, 3943 const char *description, struct em_int_delay_info *info, 3944 int offset, int value) 3945{ 3946 info->adapter = adapter; 3947 info->offset = offset; 3948 info->value = value; 3949 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev), 3950 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), 3951 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, 3952 info, 0, em_sysctl_int_delay, "I", description); 3953} 3954