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