root/dev/pci/if_em.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. em_probe
  2. em_attach
  3. em_power
  4. em_shutdown
  5. em_start
  6. em_ioctl
  7. em_watchdog
  8. em_init
  9. em_intr
  10. em_media_status
  11. em_media_change
  12. em_encap
  13. em_82547_move_tail_locked
  14. em_82547_move_tail
  15. em_82547_fifo_workaround
  16. em_82547_update_fifo_head
  17. em_82547_tx_fifo_reset
  18. em_set_promisc
  19. em_set_multi
  20. em_local_timer
  21. em_update_link_status
  22. em_stop
  23. em_identify_hardware
  24. em_allocate_pci_resources
  25. em_free_pci_resources
  26. em_hardware_init
  27. em_setup_interface
  28. em_smartspeed
  29. em_dma_malloc
  30. em_dma_free
  31. em_allocate_transmit_structures
  32. em_setup_transmit_structures
  33. em_initialize_transmit_unit
  34. em_free_transmit_structures
  35. em_transmit_checksum_setup
  36. em_txeof
  37. em_get_buf
  38. em_allocate_receive_structures
  39. em_setup_receive_structures
  40. em_initialize_receive_unit
  41. em_free_receive_structures
  42. em_rxeof
  43. em_receive_checksum
  44. em_enable_intr
  45. em_disable_intr
  46. em_is_valid_ether_addr
  47. em_write_pci_cfg
  48. em_read_pci_cfg
  49. em_pci_set_mwi
  50. em_pci_clear_mwi
  51. em_read_pcie_cap_reg
  52. em_fill_descriptors
  53. em_update_stats_counters
  54. em_print_hw_stats

    1 /**************************************************************************
    2 
    3 Copyright (c) 2001-2003, Intel Corporation
    4 All rights reserved.
    5 
    6 Redistribution and use in source and binary forms, with or without
    7 modification, are permitted provided that the following conditions are met:
    8 
    9  1. Redistributions of source code must retain the above copyright notice,
   10     this list of conditions and the following disclaimer.
   11 
   12  2. Redistributions in binary form must reproduce the above copyright
   13     notice, this list of conditions and the following disclaimer in the
   14     documentation and/or other materials provided with the distribution.
   15 
   16  3. Neither the name of the Intel Corporation nor the names of its
   17     contributors may be used to endorse or promote products derived from
   18     this software without specific prior written permission.
   19 
   20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   30 POSSIBILITY OF SUCH DAMAGE.
   31 
   32 ***************************************************************************/
   33 
   34 /* $OpenBSD: if_em.c,v 1.172 2007/05/31 01:04:57 henning Exp $ */
   35 /* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */
   36 
   37 #include <dev/pci/if_em.h>
   38 
   39 /*********************************************************************
   40  *  Set this to one to display debug statistics
   41  *********************************************************************/
   42 int             em_display_debug_stats = 0;
   43 
   44 /*********************************************************************
   45  *  Driver version
   46  *********************************************************************/
   47 
   48 char em_driver_version[] = "6.2.9";
   49 
   50 /*********************************************************************
   51  *  PCI Device ID Table
   52  *********************************************************************/
   53 const struct pci_matchid em_devices[] = {
   54         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80003ES2LAN_CPR_DPT },
   55         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80003ES2LAN_SDS_DPT },
   56         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80003ES2LAN_CPR_SPT },
   57         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_80003ES2LAN_SDS_SPT },
   58         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM },
   59         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EM_LOM },
   60         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP },
   61         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LOM },
   62         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82540EP_LP },
   63         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI },
   64         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541EI_MOBILE },
   65         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER },
   66         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541ER_LOM },
   67         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI },
   68         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI_LF },
   69         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82541GI_MOBILE },
   70         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82542 },
   71         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_COPPER },
   72         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82543GC_FIBER },
   73         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_COPPER },
   74         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544EI_FIBER },
   75         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_COPPER },
   76         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82544GC_LOM },
   77         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_COPPER },
   78         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545EM_FIBER },
   79         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_COPPER },
   80         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_FIBER },
   81         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82545GM_SERDES },
   82         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_COPPER },
   83         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_FIBER },
   84         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546EB_QUAD_CPR },
   85         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_COPPER },
   86         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_FIBER },
   87         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_PCIE },
   88         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_CPR },
   89         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_QUAD_CPR_K },
   90         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_SERDES },
   91         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82546GB_2 },
   92         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI },
   93         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547EI_MOBILE },
   94         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82547GI },
   95         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_AF },
   96         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_AT },
   97         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_COPPER },
   98         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_FIBER },
   99         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_CPR },
  100         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_CPR_LP },
  101         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_QUAD_FBR },
  102         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82571EB_SERDES },
  103         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_COPPER },
  104         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_FIBER },
  105         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI_SERDES },
  106         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82572EI },
  107         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E },
  108         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E_IAMT },
  109         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573E_PM },
  110         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573L },
  111         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573L_PL_1 },
  112         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573L_PL_2 },
  113         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82573V_PM },
  114         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IGP_M_AMT },
  115         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IGP_AMT },
  116         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IGP_C },
  117         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IFE },
  118         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IFE_G },
  119         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IFE_GT },
  120         { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_ICH8_IGP_M }
  121 };
  122 
  123 /*********************************************************************
  124  *  Function prototypes
  125  *********************************************************************/
  126 int  em_probe(struct device *, void *, void *);
  127 void em_attach(struct device *, struct device *, void *);
  128 void em_shutdown(void *);
  129 int  em_intr(void *);
  130 void em_power(int, void *);
  131 void em_start(struct ifnet *);
  132 int  em_ioctl(struct ifnet *, u_long, caddr_t);
  133 void em_watchdog(struct ifnet *);
  134 void em_init(void *);
  135 void em_stop(void *);
  136 void em_media_status(struct ifnet *, struct ifmediareq *);
  137 int  em_media_change(struct ifnet *);
  138 void em_identify_hardware(struct em_softc *);
  139 int  em_allocate_pci_resources(struct em_softc *);
  140 void em_free_pci_resources(struct em_softc *);
  141 void em_local_timer(void *);
  142 int  em_hardware_init(struct em_softc *);
  143 void em_setup_interface(struct em_softc *);
  144 int  em_setup_transmit_structures(struct em_softc *);
  145 void em_initialize_transmit_unit(struct em_softc *);
  146 int  em_setup_receive_structures(struct em_softc *);
  147 void em_initialize_receive_unit(struct em_softc *);
  148 void em_enable_intr(struct em_softc *);
  149 void em_disable_intr(struct em_softc *);
  150 void em_free_transmit_structures(struct em_softc *);
  151 void em_free_receive_structures(struct em_softc *);
  152 void em_update_stats_counters(struct em_softc *);
  153 void em_txeof(struct em_softc *);
  154 int  em_allocate_receive_structures(struct em_softc *);
  155 int  em_allocate_transmit_structures(struct em_softc *);
  156 void em_rxeof(struct em_softc *, int);
  157 void em_receive_checksum(struct em_softc *, struct em_rx_desc *,
  158                          struct mbuf *);
  159 #ifdef EM_CSUM_OFFLOAD
  160 void em_transmit_checksum_setup(struct em_softc *, struct mbuf *,
  161                                 u_int32_t *, u_int32_t *);
  162 #endif
  163 void em_set_promisc(struct em_softc *);
  164 void em_set_multi(struct em_softc *);
  165 void em_print_hw_stats(struct em_softc *);
  166 void em_update_link_status(struct em_softc *);
  167 int  em_get_buf(struct em_softc *, int);
  168 int  em_encap(struct em_softc *, struct mbuf *);
  169 void em_smartspeed(struct em_softc *);
  170 int  em_82547_fifo_workaround(struct em_softc *, int);
  171 void em_82547_update_fifo_head(struct em_softc *, int);
  172 int  em_82547_tx_fifo_reset(struct em_softc *);
  173 void em_82547_move_tail(void *arg);
  174 void em_82547_move_tail_locked(struct em_softc *);
  175 int  em_dma_malloc(struct em_softc *, bus_size_t, struct em_dma_alloc *,
  176                    int);
  177 void em_dma_free(struct em_softc *, struct em_dma_alloc *);
  178 int  em_is_valid_ether_addr(u_int8_t *);
  179 u_int32_t em_fill_descriptors(u_int64_t address, u_int32_t length,
  180                               PDESC_ARRAY desc_array);
  181 
  182 /*********************************************************************
  183  *  OpenBSD Device Interface Entry Points
  184  *********************************************************************/
  185 
  186 struct cfattach em_ca = {
  187         sizeof(struct em_softc), em_probe, em_attach
  188 };
  189 
  190 struct cfdriver em_cd = {
  191         0, "em", DV_IFNET
  192 };
  193 
  194 static int em_smart_pwr_down = FALSE;
  195 
  196 /*********************************************************************
  197  *  Device identification routine
  198  *
  199  *  em_probe determines if the driver should be loaded on
  200  *  adapter based on PCI vendor/device id of the adapter.
  201  *
  202  *  return 0 on no match, positive on match
  203  *********************************************************************/
  204 
  205 int
  206 em_probe(struct device *parent, void *match, void *aux)
  207 {
  208         INIT_DEBUGOUT("em_probe: begin");
  209 
  210         return (pci_matchbyid((struct pci_attach_args *)aux, em_devices,
  211             sizeof(em_devices)/sizeof(em_devices[0])));
  212 }
  213 
  214 /*********************************************************************
  215  *  Device initialization routine
  216  *
  217  *  The attach entry point is called when the driver is being loaded.
  218  *  This routine identifies the type of hardware, allocates all resources
  219  *  and initializes the hardware.
  220  *
  221  *********************************************************************/
  222 
  223 void 
  224 em_attach(struct device *parent, struct device *self, void *aux)
  225 {
  226         struct pci_attach_args *pa = aux;
  227         struct em_softc *sc;
  228         int             tsize, rsize;
  229 
  230         INIT_DEBUGOUT("em_attach: begin");
  231 
  232         sc = (struct em_softc *)self;
  233         sc->osdep.em_pa = *pa;
  234 
  235         timeout_set(&sc->timer_handle, em_local_timer, sc);
  236         timeout_set(&sc->tx_fifo_timer_handle, em_82547_move_tail, sc);
  237 
  238         /* Determine hardware revision */
  239         em_identify_hardware(sc);
  240 
  241         /* Parameters (to be read from user) */
  242         sc->num_tx_desc = EM_MIN_TXD;
  243         sc->num_rx_desc = EM_MIN_RXD;
  244         sc->tx_int_delay = EM_TIDV;
  245         sc->tx_abs_int_delay = EM_TADV;
  246         sc->rx_int_delay = EM_RDTR;
  247         sc->rx_abs_int_delay = EM_RADV;
  248         sc->hw.autoneg = DO_AUTO_NEG;
  249         sc->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT;
  250         sc->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
  251         sc->hw.tbi_compatibility_en = TRUE;
  252         sc->rx_buffer_len = EM_RXBUFFER_2048;
  253 
  254         sc->hw.phy_init_script = 1;
  255         sc->hw.phy_reset_disable = FALSE;
  256 
  257 #ifndef EM_MASTER_SLAVE
  258         sc->hw.master_slave = em_ms_hw_default;
  259 #else
  260         sc->hw.master_slave = EM_MASTER_SLAVE;
  261 #endif
  262 
  263         /*
  264          * This controls when hardware reports transmit completion
  265          * status.   
  266          */
  267         sc->hw.report_tx_early = 1;
  268 
  269         if (em_allocate_pci_resources(sc)) {
  270                 printf("%s: Allocation of PCI resources failed\n",
  271                     sc->sc_dv.dv_xname);
  272                 goto err_pci;
  273         }
  274 
  275         /* Initialize eeprom parameters */
  276         em_init_eeprom_params(&sc->hw);
  277 
  278         /*
  279          * Set the max frame size assuming standard Ethernet
  280          * sized frames.
  281          */
  282         switch (sc->hw.mac_type) {
  283                 case em_82573:
  284                 {
  285                         uint16_t        eeprom_data = 0;
  286 
  287                         /*
  288                          * 82573 only supports Jumbo frames
  289                          * if ASPM is disabled.
  290                          */
  291                         em_read_eeprom(&sc->hw, EEPROM_INIT_3GIO_3,
  292                             1, &eeprom_data);
  293                         if (eeprom_data & EEPROM_WORD1A_ASPM_MASK) {
  294                                 sc->hw.max_frame_size = ETHER_MAX_LEN;
  295                                 break;
  296                         }
  297                         /* Allow Jumbo frames - FALLTHROUGH */
  298                 }
  299                 case em_82571:
  300                 case em_82572:
  301                 case em_80003es2lan:    /* Limit Jumbo Frame size */
  302                         sc->hw.max_frame_size = 9234;
  303                         break;
  304                 case em_ich8lan:
  305                         /* ICH8 does not support jumbo frames */
  306                         sc->hw.max_frame_size = ETHER_MAX_LEN;
  307                         break;
  308                 default:
  309                         sc->hw.max_frame_size =
  310                             MAX_JUMBO_FRAME_SIZE;
  311         }
  312 
  313         sc->hw.min_frame_size = 
  314             ETHER_MIN_LEN + ETHER_CRC_LEN;
  315 
  316         if (sc->hw.mac_type >= em_82544)
  317             tsize = EM_ROUNDUP(sc->num_tx_desc * sizeof(struct em_tx_desc),
  318                 EM_MAX_TXD * sizeof(struct em_tx_desc));
  319         else
  320             tsize = EM_ROUNDUP(sc->num_tx_desc * sizeof(struct em_tx_desc),
  321                 EM_MAX_TXD_82543 * sizeof(struct em_tx_desc));
  322         tsize = EM_ROUNDUP(tsize, PAGE_SIZE);
  323 
  324         /* Allocate Transmit Descriptor ring */
  325         if (em_dma_malloc(sc, tsize, &sc->txdma, BUS_DMA_NOWAIT)) {
  326                 printf("%s: Unable to allocate tx_desc memory\n", 
  327                        sc->sc_dv.dv_xname);
  328                 goto err_tx_desc;
  329         }
  330         sc->tx_desc_base = (struct em_tx_desc *)sc->txdma.dma_vaddr;
  331 
  332         rsize = EM_ROUNDUP(sc->num_rx_desc * sizeof(struct em_rx_desc),
  333             EM_MAX_RXD * sizeof(struct em_rx_desc));
  334         rsize = EM_ROUNDUP(rsize, PAGE_SIZE);
  335 
  336         /* Allocate Receive Descriptor ring */
  337         if (em_dma_malloc(sc, rsize, &sc->rxdma, BUS_DMA_NOWAIT)) {
  338                 printf("%s: Unable to allocate rx_desc memory\n",
  339                        sc->sc_dv.dv_xname);
  340                 goto err_rx_desc;
  341         }
  342         sc->rx_desc_base = (struct em_rx_desc *) sc->rxdma.dma_vaddr;
  343 
  344         /* Initialize the hardware */
  345         if (em_hardware_init(sc)) {
  346                 printf("%s: Unable to initialize the hardware\n",
  347                        sc->sc_dv.dv_xname);
  348                 goto err_hw_init;
  349         }
  350 
  351         /* Copy the permanent MAC address out of the EEPROM */
  352         if (em_read_mac_addr(&sc->hw) < 0) {
  353                 printf("%s: EEPROM read error while reading mac address\n",
  354                        sc->sc_dv.dv_xname);
  355                 goto err_mac_addr;
  356         }
  357 
  358         if (!em_is_valid_ether_addr(sc->hw.mac_addr)) {
  359                 printf("%s: Invalid mac address\n", sc->sc_dv.dv_xname);
  360                 goto err_mac_addr;
  361         }
  362 
  363         bcopy(sc->hw.mac_addr, sc->interface_data.ac_enaddr,
  364               ETHER_ADDR_LEN);
  365 
  366         /* Setup OS specific network interface */
  367         em_setup_interface(sc);
  368 
  369         /* Initialize statistics */
  370         em_clear_hw_cntrs(&sc->hw);
  371         em_update_stats_counters(sc);
  372         sc->hw.get_link_status = 1;
  373         em_update_link_status(sc);
  374 
  375         printf(", address %s\n", ether_sprintf(sc->interface_data.ac_enaddr));
  376 
  377         /* Indicate SOL/IDER usage */
  378         if (em_check_phy_reset_block(&sc->hw))
  379                 printf("%s: PHY reset is blocked due to SOL/IDER session.\n",
  380                     sc->sc_dv.dv_xname);
  381 
  382         /* Identify 82544 on PCI-X */
  383         em_get_bus_info(&sc->hw);
  384         if (sc->hw.bus_type == em_bus_type_pcix &&
  385             sc->hw.mac_type == em_82544)
  386                 sc->pcix_82544 = TRUE;
  387         else
  388                 sc->pcix_82544 = FALSE;
  389         INIT_DEBUGOUT("em_attach: end");
  390         sc->sc_powerhook = powerhook_establish(em_power, sc);
  391         sc->sc_shutdownhook = shutdownhook_establish(em_shutdown, sc);
  392         return;
  393 
  394 err_mac_addr:
  395 err_hw_init:
  396         em_dma_free(sc, &sc->rxdma);
  397 err_rx_desc:
  398         em_dma_free(sc, &sc->txdma);
  399 err_tx_desc:
  400 err_pci:
  401         em_free_pci_resources(sc);
  402 }
  403 
  404 void
  405 em_power(int why, void *arg)
  406 {
  407         struct em_softc *sc = (struct em_softc *)arg;
  408         struct ifnet *ifp;
  409 
  410         if (why == PWR_RESUME) {
  411                 ifp = &sc->interface_data.ac_if;
  412                 if (ifp->if_flags & IFF_UP)
  413                         em_init(sc);
  414         }
  415 }
  416 
  417 /*********************************************************************
  418  *
  419  *  Shutdown entry point
  420  *
  421  **********************************************************************/ 
  422 
  423 void
  424 em_shutdown(void *arg)
  425 {
  426         struct em_softc *sc = arg;
  427 
  428         em_stop(sc);
  429 }
  430 
  431 /*********************************************************************
  432  *  Transmit entry point
  433  *
  434  *  em_start is called by the stack to initiate a transmit.
  435  *  The driver will remain in this routine as long as there are
  436  *  packets to transmit and transmit resources are available.
  437  *  In case resources are not available stack is notified and
  438  *  the packet is requeued.
  439  **********************************************************************/
  440 
  441 void
  442 em_start(struct ifnet *ifp)
  443 {
  444         struct mbuf    *m_head;
  445         struct em_softc *sc = ifp->if_softc;
  446 
  447         if ((ifp->if_flags & (IFF_OACTIVE | IFF_RUNNING)) != IFF_RUNNING)
  448                 return;
  449 
  450         if (!sc->link_active)
  451                 return;
  452 
  453         for (;;) {
  454                 IFQ_POLL(&ifp->if_snd, m_head);
  455 
  456                 if (m_head == NULL)
  457                         break;
  458 
  459                 if (em_encap(sc, m_head)) {
  460                         ifp->if_flags |= IFF_OACTIVE;
  461                         break;
  462                 }
  463 
  464                 IFQ_DEQUEUE(&ifp->if_snd, m_head);
  465 
  466 #if NBPFILTER > 0
  467                 /* Send a copy of the frame to the BPF listener */
  468                 if (ifp->if_bpf)
  469                         bpf_mtap(ifp->if_bpf, m_head, BPF_DIRECTION_OUT);
  470 #endif
  471 
  472                 /* Set timeout in case hardware has problems transmitting */
  473                 ifp->if_timer = EM_TX_TIMEOUT;
  474         }       
  475 }
  476 
  477 /*********************************************************************
  478  *  Ioctl entry point
  479  *
  480  *  em_ioctl is called when the user wants to configure the
  481  *  interface.
  482  *
  483  *  return 0 on success, positive on failure
  484  **********************************************************************/
  485 
  486 int
  487 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
  488 {
  489         int             error = 0;
  490         struct ifreq   *ifr = (struct ifreq *) data;
  491         struct ifaddr  *ifa = (struct ifaddr *)data;
  492         struct em_softc *sc = ifp->if_softc;
  493         int s;
  494 
  495         s = splnet();
  496 
  497         if ((error = ether_ioctl(ifp, &sc->interface_data, command, data)) > 0) {
  498                 splx(s);
  499                 return (error);
  500         }
  501 
  502         switch (command) {
  503         case SIOCSIFADDR:
  504                 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFADDR (Set Interface "
  505                                "Addr)");
  506                 if (!(ifp->if_flags & IFF_UP)) {
  507                         ifp->if_flags |= IFF_UP;
  508                         em_init(sc);
  509                 }
  510 #ifdef INET
  511                 if (ifa->ifa_addr->sa_family == AF_INET)
  512                         arp_ifinit(&sc->interface_data, ifa);
  513 #endif /* INET */
  514                 break;
  515         case SIOCSIFMTU:
  516                 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
  517                 if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ifp->if_hardmtu)
  518                         error = EINVAL;
  519                 else if (ifp->if_mtu != ifr->ifr_mtu)
  520                         ifp->if_mtu = ifr->ifr_mtu;
  521                 break;
  522         case SIOCSIFFLAGS:
  523                 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
  524                 if (ifp->if_flags & IFF_UP) {
  525                         /*
  526                          * If only the PROMISC or ALLMULTI flag changes, then
  527                          * don't do a full re-init of the chip, just update
  528                          * the Rx filter.
  529                          */
  530                         if ((ifp->if_flags & IFF_RUNNING) &&
  531                             ((ifp->if_flags ^ sc->if_flags) &
  532                              (IFF_ALLMULTI | IFF_PROMISC)) != 0) {
  533                                 em_set_promisc(sc);
  534                         } else {
  535                                 if (!(ifp->if_flags & IFF_RUNNING))
  536                                         em_init(sc);
  537                         }
  538                 } else {
  539                         if (ifp->if_flags & IFF_RUNNING)
  540                                 em_stop(sc);
  541                 }
  542                 sc->if_flags = ifp->if_flags;
  543                 break;
  544         case SIOCADDMULTI:
  545         case SIOCDELMULTI:
  546                 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
  547                 error = (command == SIOCADDMULTI)
  548                         ? ether_addmulti(ifr, &sc->interface_data)
  549                         : ether_delmulti(ifr, &sc->interface_data);
  550 
  551                 if (error == ENETRESET) {
  552                         if (ifp->if_flags & IFF_RUNNING) {
  553                                 em_disable_intr(sc);
  554                                 em_set_multi(sc);
  555                                 if (sc->hw.mac_type == em_82542_rev2_0)
  556                                         em_initialize_receive_unit(sc);
  557                                 em_enable_intr(sc);
  558                         }
  559                         error = 0;
  560                 }
  561                 break;
  562         case SIOCSIFMEDIA:
  563                 /* Check SOL/IDER usage */
  564                 if (em_check_phy_reset_block(&sc->hw)) {
  565                         printf("%s: Media change is blocked due to SOL/IDER session.\n",
  566                             sc->sc_dv.dv_xname);
  567                         break;
  568                 }
  569         case SIOCGIFMEDIA:
  570                 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFMEDIA (Get/Set Interface Media)");
  571                 error = ifmedia_ioctl(ifp, ifr, &sc->media, command);
  572                 break;
  573         default:
  574                 IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%x)", (int)command);
  575                 error = ENOTTY;
  576         }
  577 
  578         splx(s);
  579         return (error);
  580 }
  581 
  582 /*********************************************************************
  583  *  Watchdog entry point
  584  *
  585  *  This routine is called whenever hardware quits transmitting.
  586  *
  587  **********************************************************************/
  588 
  589 void
  590 em_watchdog(struct ifnet *ifp)
  591 {
  592         struct em_softc *sc = ifp->if_softc;
  593 
  594         /* If we are in this routine because of pause frames, then
  595          * don't reset the hardware.
  596          */
  597         if (E1000_READ_REG(&sc->hw, STATUS) & E1000_STATUS_TXOFF) {
  598                 ifp->if_timer = EM_TX_TIMEOUT;
  599                 return;
  600         }
  601 
  602         printf("%s: watchdog timeout -- resetting\n", sc->sc_dv.dv_xname);
  603 
  604         em_init(sc);
  605 
  606         sc->watchdog_events++;
  607 }
  608 
  609 /*********************************************************************
  610  *  Init entry point
  611  *
  612  *  This routine is used in two ways. It is used by the stack as
  613  *  init entry point in network interface structure. It is also used
  614  *  by the driver as a hw/sw initialization routine to get to a
  615  *  consistent state.
  616  *
  617  **********************************************************************/
  618 
  619 void
  620 em_init(void *arg)
  621 {
  622         struct em_softc *sc = arg;
  623         struct ifnet   *ifp = &sc->interface_data.ac_if;
  624         uint32_t        pba;
  625         int s;
  626 
  627         s = splnet();
  628 
  629         INIT_DEBUGOUT("em_init: begin");
  630 
  631         em_stop(sc);
  632 
  633         if (ifp->if_flags & IFF_UP) {
  634                 if (sc->hw.mac_type >= em_82544)
  635                     sc->num_tx_desc = EM_MAX_TXD;
  636                 else
  637                     sc->num_tx_desc = EM_MAX_TXD_82543;
  638                 sc->num_rx_desc = EM_MAX_RXD;
  639         } else {
  640                 sc->num_tx_desc = EM_MIN_TXD;
  641                 sc->num_rx_desc = EM_MIN_RXD;
  642         }
  643         IFQ_SET_MAXLEN(&ifp->if_snd, sc->num_tx_desc - 1);
  644 
  645         /*
  646          * Packet Buffer Allocation (PBA)
  647          * Writing PBA sets the receive portion of the buffer
  648          * the remainder is used for the transmit buffer.
  649          *
  650          * Devices before the 82547 had a Packet Buffer of 64K.
  651          *   Default allocation: PBA=48K for Rx, leaving 16K for Tx.
  652          * After the 82547 the buffer was reduced to 40K.
  653          *   Default allocation: PBA=30K for Rx, leaving 10K for Tx.
  654          *   Note: default does not leave enough room for Jumbo Frame >10k.
  655          */
  656         switch (sc->hw.mac_type) {
  657         case em_82547:
  658         case em_82547_rev_2: /* 82547: Total Packet Buffer is 40K */
  659                 if (sc->hw.max_frame_size > EM_RXBUFFER_8192)
  660                         pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */
  661                 else
  662                         pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */
  663                 sc->tx_fifo_head = 0;
  664                 sc->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT;
  665                 sc->tx_fifo_size = (E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT;
  666                 break;
  667         case em_82571:
  668         case em_82572: /* Total Packet Buffer on these is 48k */
  669         case em_80003es2lan:
  670                 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
  671                 break;
  672         case em_82573: /* 82573: Total Packet Buffer is 32K */
  673                 /* Jumbo frames not supported */
  674                 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
  675                 break;
  676         case em_ich8lan:
  677                 pba = E1000_PBA_8K;
  678                 break;
  679         default:
  680                 /* Devices before 82547 had a Packet Buffer of 64K.   */
  681                 if (sc->hw.max_frame_size > EM_RXBUFFER_8192)
  682                         pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
  683                 else
  684                         pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
  685         }
  686         INIT_DEBUGOUT1("em_init: pba=%dK",pba);
  687         E1000_WRITE_REG(&sc->hw, PBA, pba);
  688 
  689         /* Get the latest mac address, User can use a LAA */
  690         bcopy(sc->interface_data.ac_enaddr, sc->hw.mac_addr,
  691               ETHER_ADDR_LEN);
  692 
  693         /* Initialize the hardware */
  694         if (em_hardware_init(sc)) {
  695                 printf("%s: Unable to initialize the hardware\n", 
  696                        sc->sc_dv.dv_xname);
  697                 splx(s);
  698                 return;
  699         }
  700         em_update_link_status(sc);
  701 
  702         /* Prepare transmit descriptors and buffers */
  703         if (em_setup_transmit_structures(sc)) {
  704                 printf("%s: Could not setup transmit structures\n", 
  705                        sc->sc_dv.dv_xname);
  706                 em_stop(sc);
  707                 splx(s);
  708                 return;
  709         }
  710         em_initialize_transmit_unit(sc);
  711 
  712         /* Setup Multicast table */
  713         em_set_multi(sc);
  714 
  715         /* Prepare receive descriptors and buffers */
  716         if (em_setup_receive_structures(sc)) {
  717                 printf("%s: Could not setup receive structures\n", 
  718                        sc->sc_dv.dv_xname);
  719                 em_stop(sc);
  720                 splx(s);
  721                 return;
  722         }
  723         em_initialize_receive_unit(sc);
  724 
  725         /* Don't lose promiscuous settings */
  726         em_set_promisc(sc);
  727 
  728         ifp->if_flags |= IFF_RUNNING;
  729         ifp->if_flags &= ~IFF_OACTIVE;
  730 
  731         timeout_add(&sc->timer_handle, hz);
  732         em_clear_hw_cntrs(&sc->hw);
  733         em_enable_intr(sc);
  734 
  735         /* Don't reset the phy next time init gets called */
  736         sc->hw.phy_reset_disable = TRUE;
  737 
  738         splx(s);
  739 }
  740 
  741 /*********************************************************************
  742  *
  743  *  Interrupt Service routine
  744  *
  745  **********************************************************************/
  746 int 
  747 em_intr(void *arg)
  748 {
  749         struct em_softc  *sc = arg;
  750         struct ifnet    *ifp;
  751         u_int32_t       reg_icr, test_icr;
  752         int claimed = 0;
  753 
  754         ifp = &sc->interface_data.ac_if;
  755 
  756         for (;;) {
  757                 test_icr = reg_icr = E1000_READ_REG(&sc->hw, ICR);
  758                 if (sc->hw.mac_type >= em_82571)
  759                         test_icr = (reg_icr & E1000_ICR_INT_ASSERTED);
  760                 if (!test_icr)
  761                         break;
  762 
  763                 claimed = 1;
  764 
  765                 if (ifp->if_flags & IFF_RUNNING) {
  766                         em_rxeof(sc, -1);
  767                         em_txeof(sc);
  768                 }
  769 
  770                 /* Link status change */
  771                 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
  772                         timeout_del(&sc->timer_handle);
  773                         sc->hw.get_link_status = 1;
  774                         em_check_for_link(&sc->hw);
  775                         em_update_link_status(sc);
  776                         timeout_add(&sc->timer_handle, hz); 
  777                 }
  778 
  779                 if (reg_icr & E1000_ICR_RXO)
  780                         sc->rx_overruns++;
  781         }
  782 
  783         if (ifp->if_flags & IFF_RUNNING && !IFQ_IS_EMPTY(&ifp->if_snd))
  784                 em_start(ifp);
  785 
  786         return (claimed);
  787 }
  788 
  789 /*********************************************************************
  790  *
  791  *  Media Ioctl callback
  792  *
  793  *  This routine is called whenever the user queries the status of
  794  *  the interface using ifconfig.
  795  *
  796  **********************************************************************/
  797 void
  798 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
  799 {
  800         struct em_softc *sc = ifp->if_softc;
  801         u_char fiber_type = IFM_1000_SX;
  802         u_int16_t ar, lpar, gsr;
  803 
  804         INIT_DEBUGOUT("em_media_status: begin");
  805 
  806         em_check_for_link(&sc->hw);
  807         em_update_link_status(sc);
  808 
  809         ifmr->ifm_status = IFM_AVALID;
  810         ifmr->ifm_active = IFM_ETHER;
  811 
  812         if (!sc->link_active) {
  813                 ifmr->ifm_active |= IFM_NONE;
  814                 return;
  815         }
  816 
  817         ifmr->ifm_status |= IFM_ACTIVE;
  818 
  819         if (sc->hw.media_type == em_media_type_fiber ||
  820             sc->hw.media_type == em_media_type_internal_serdes) {
  821                 if (sc->hw.mac_type == em_82545)
  822                         fiber_type = IFM_1000_LX;
  823                 ifmr->ifm_active |= fiber_type | IFM_FDX;
  824         } else {
  825                 switch (sc->link_speed) {
  826                 case 10:
  827                         ifmr->ifm_active |= IFM_10_T;
  828                         break;
  829                 case 100:
  830                         ifmr->ifm_active |= IFM_100_TX;
  831                         break;
  832                 case 1000:
  833                         ifmr->ifm_active |= IFM_1000_T;
  834                         break;
  835                 }
  836 
  837                 if (sc->link_duplex == FULL_DUPLEX)
  838                         ifmr->ifm_active |= IFM_FDX;
  839                 else
  840                         ifmr->ifm_active |= IFM_HDX;
  841 
  842                 if (ifmr->ifm_active & IFM_FDX) {
  843                         em_read_phy_reg(&sc->hw, PHY_AUTONEG_ADV, &ar);
  844                         em_read_phy_reg(&sc->hw, PHY_LP_ABILITY, &lpar);
  845 
  846                         if ((ar & NWAY_AR_PAUSE) && (lpar & NWAY_LPAR_PAUSE))
  847                                 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_TXPAUSE |
  848                                                     IFM_ETH_RXPAUSE;
  849                         else if (!(ar & NWAY_AR_PAUSE) && (ar & NWAY_AR_ASM_DIR) &&
  850                             (lpar & NWAY_LPAR_PAUSE) && (lpar & NWAY_LPAR_ASM_DIR))
  851                                 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_TXPAUSE;
  852                         else if ((ar & NWAY_AR_PAUSE) && (ar & NWAY_AR_ASM_DIR) &&
  853                             !(lpar & NWAY_LPAR_PAUSE) && (lpar & NWAY_LPAR_ASM_DIR))
  854                                 ifmr->ifm_active |= IFM_FLOW | IFM_ETH_RXPAUSE;
  855                 }
  856 
  857                 if (IFM_SUBTYPE(ifmr->ifm_active) == IFM_1000_T) {
  858                         em_read_phy_reg(&sc->hw, PHY_1000T_STATUS, &gsr);
  859                         if (gsr & SR_1000T_MS_CONFIG_RES)
  860                                 ifmr->ifm_active |= IFM_ETH_MASTER;
  861                 }
  862         }
  863 }
  864 
  865 /*********************************************************************
  866  *
  867  *  Media Ioctl callback
  868  *
  869  *  This routine is called when the user changes speed/duplex using
  870  *  media/mediopt option with ifconfig.
  871  *
  872  **********************************************************************/
  873 int
  874 em_media_change(struct ifnet *ifp)
  875 {
  876         struct em_softc *sc = ifp->if_softc;
  877         struct ifmedia  *ifm = &sc->media;
  878 
  879         INIT_DEBUGOUT("em_media_change: begin");
  880 
  881         if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
  882                 return (EINVAL);
  883 
  884         switch (IFM_SUBTYPE(ifm->ifm_media)) {
  885         case IFM_AUTO:
  886                 sc->hw.autoneg = DO_AUTO_NEG;
  887                 sc->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
  888                 break;
  889         case IFM_1000_LX:
  890         case IFM_1000_SX:
  891         case IFM_1000_T:
  892                 sc->hw.autoneg = DO_AUTO_NEG;
  893                 sc->hw.autoneg_advertised = ADVERTISE_1000_FULL;
  894                 break;
  895         case IFM_100_TX:
  896                 sc->hw.autoneg = FALSE;
  897                 sc->hw.autoneg_advertised = 0;
  898                 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
  899                         sc->hw.forced_speed_duplex = em_100_full;
  900                 else
  901                         sc->hw.forced_speed_duplex = em_100_half;
  902                 break;
  903         case IFM_10_T:
  904                 sc->hw.autoneg = FALSE;
  905                 sc->hw.autoneg_advertised = 0;
  906                 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
  907                         sc->hw.forced_speed_duplex = em_10_full;
  908                 else
  909                         sc->hw.forced_speed_duplex = em_10_half;
  910                 break;
  911         default:
  912                 printf("%s: Unsupported media type\n", sc->sc_dv.dv_xname);
  913         }
  914 
  915         /*
  916          * As the speed/duplex settings may have changed we need to
  917          * reset the PHY.
  918          */
  919         sc->hw.phy_reset_disable = FALSE;
  920 
  921         em_init(sc);
  922 
  923         return (0);
  924 }
  925 
  926 /*********************************************************************
  927  *
  928  *  This routine maps the mbufs to tx descriptors.
  929  *
  930  *  return 0 on success, positive on failure
  931  **********************************************************************/
  932 int
  933 em_encap(struct em_softc *sc, struct mbuf *m_head)
  934 {
  935         u_int32_t       txd_upper;
  936         u_int32_t       txd_lower, txd_used = 0, txd_saved = 0;
  937         int             i, j, first, error = 0, last = 0;
  938         bus_dmamap_t    map;
  939 
  940         /* For 82544 Workaround */
  941         DESC_ARRAY              desc_array;
  942         u_int32_t               array_elements;
  943         u_int32_t               counter;
  944 
  945         struct em_buffer   *tx_buffer, *tx_buffer_mapped;
  946         struct em_tx_desc *current_tx_desc = NULL;
  947 
  948         /*
  949          * Force a cleanup if number of TX descriptors
  950          * available hits the threshold
  951          */
  952         if (sc->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
  953                 em_txeof(sc);
  954                 /* Now do we at least have a minimal? */
  955                 if (sc->num_tx_desc_avail <= EM_TX_OP_THRESHOLD) {
  956                         sc->no_tx_desc_avail1++;
  957                         return (ENOBUFS);
  958                 }
  959         }
  960 
  961         /*
  962          * Map the packet for DMA.
  963          *
  964          * Capture the first descriptor index,
  965          * this descriptor will have the index
  966          * of the EOP which is the only one that
  967          * no gets a DONE bit writeback.
  968          */
  969         first = sc->next_avail_tx_desc;
  970         tx_buffer = &sc->tx_buffer_area[first];
  971         tx_buffer_mapped = tx_buffer;
  972         map = tx_buffer->map;
  973 
  974         error = bus_dmamap_load_mbuf(sc->txtag, map, m_head, BUS_DMA_NOWAIT);
  975         if (error != 0) {
  976                 sc->no_tx_dma_setup++;
  977                 return (error);
  978         }
  979         EM_KASSERT(map->dm_nsegs!= 0, ("em_encap: empty packet"));
  980 
  981         if (map->dm_nsegs > sc->num_tx_desc_avail - 2)
  982                 goto fail;
  983 
  984 #ifdef EM_CSUM_OFFLOAD
  985         if (sc->hw.mac_type >= em_82543)
  986                 em_transmit_checksum_setup(sc, m_head, &txd_upper, &txd_lower);
  987         else
  988                 txd_upper = txd_lower = 0;
  989 #else
  990         txd_upper = txd_lower = 0;
  991 #endif
  992 
  993         i = sc->next_avail_tx_desc;
  994         if (sc->pcix_82544)
  995                 txd_saved = i;
  996 
  997         for (j = 0; j < map->dm_nsegs; j++) {
  998                 /* If sc is 82544 and on PCI-X bus */
  999                 if (sc->pcix_82544) {
 1000                         /*
 1001                          * Check the Address and Length combination and
 1002                          * split the data accordingly
 1003                          */
 1004                         array_elements = em_fill_descriptors(map->dm_segs[j].ds_addr,
 1005                                                              map->dm_segs[j].ds_len,
 1006                                                              &desc_array);
 1007                         for (counter = 0; counter < array_elements; counter++) {
 1008                                 if (txd_used == sc->num_tx_desc_avail) {
 1009                                         sc->next_avail_tx_desc = txd_saved;
 1010                                         goto fail;
 1011                                 }
 1012                                 tx_buffer = &sc->tx_buffer_area[i];
 1013                                 current_tx_desc = &sc->tx_desc_base[i];
 1014                                 current_tx_desc->buffer_addr = htole64(
 1015                                         desc_array.descriptor[counter].address);
 1016                                 current_tx_desc->lower.data = htole32(
 1017                                         (sc->txd_cmd | txd_lower |
 1018                                          (u_int16_t)desc_array.descriptor[counter].length));
 1019                                 current_tx_desc->upper.data = htole32((txd_upper));
 1020                                 last = i;
 1021                                 if (++i == sc->num_tx_desc)
 1022                                         i = 0;
 1023 
 1024                                 tx_buffer->m_head = NULL;
 1025                                 tx_buffer->next_eop = -1;
 1026                                 txd_used++;
 1027                         }
 1028                 } else {
 1029                         tx_buffer = &sc->tx_buffer_area[i];
 1030                         current_tx_desc = &sc->tx_desc_base[i];
 1031 
 1032                         current_tx_desc->buffer_addr = htole64(map->dm_segs[j].ds_addr);
 1033                         current_tx_desc->lower.data = htole32(
 1034                                 sc->txd_cmd | txd_lower | map->dm_segs[j].ds_len);
 1035                         current_tx_desc->upper.data = htole32(txd_upper);
 1036                         last = i;
 1037                         if (++i == sc->num_tx_desc)
 1038                                 i = 0;
 1039 
 1040                         tx_buffer->m_head = NULL;
 1041                         tx_buffer->next_eop = -1;
 1042                 }
 1043         }
 1044 
 1045         sc->next_avail_tx_desc = i;
 1046         if (sc->pcix_82544)
 1047                 sc->num_tx_desc_avail -= txd_used;
 1048         else
 1049                 sc->num_tx_desc_avail -= map->dm_nsegs;
 1050 
 1051         tx_buffer->m_head = m_head;
 1052         tx_buffer_mapped->map = tx_buffer->map;
 1053         tx_buffer->map = map;
 1054         bus_dmamap_sync(sc->txtag, map, 0, map->dm_mapsize,
 1055             BUS_DMASYNC_PREWRITE);
 1056 
 1057         /* 
 1058          * Last Descriptor of Packet
 1059          * needs End Of Packet (EOP)
 1060          * and Report Status (RS)
 1061          */
 1062         current_tx_desc->lower.data |=
 1063             htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS);
 1064 
 1065         /*
 1066          * Keep track in the first buffer which
 1067          * descriptor will be written back
 1068          */
 1069         tx_buffer = &sc->tx_buffer_area[first];
 1070         tx_buffer->next_eop = last;
 1071 
 1072         /* 
 1073          * Advance the Transmit Descriptor Tail (Tdt),
 1074          * this tells the E1000 that this frame is
 1075          * available to transmit.
 1076          */
 1077         bus_dmamap_sync(sc->txdma.dma_tag, sc->txdma.dma_map, 0,
 1078             sc->txdma.dma_map->dm_mapsize,
 1079             BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 1080         if (sc->hw.mac_type == em_82547 &&
 1081             sc->link_duplex == HALF_DUPLEX) {
 1082                 em_82547_move_tail_locked(sc);
 1083         } else {
 1084                 E1000_WRITE_REG(&sc->hw, TDT, i);
 1085                 if (sc->hw.mac_type == em_82547)
 1086                         em_82547_update_fifo_head(sc, m_head->m_pkthdr.len);
 1087         }
 1088 
 1089         return (0);
 1090 
 1091 fail:
 1092         sc->no_tx_desc_avail2++;
 1093         bus_dmamap_unload(sc->txtag, map);
 1094         return (ENOBUFS);
 1095 }
 1096 
 1097 /*********************************************************************
 1098  *
 1099  * 82547 workaround to avoid controller hang in half-duplex environment.
 1100  * The workaround is to avoid queuing a large packet that would span
 1101  * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
 1102  * in this case. We do that only when FIFO is quiescent.
 1103  *
 1104  **********************************************************************/
 1105 void
 1106 em_82547_move_tail_locked(struct em_softc *sc)
 1107 {
 1108         uint16_t hw_tdt;
 1109         uint16_t sw_tdt;
 1110         struct em_tx_desc *tx_desc;
 1111         uint16_t length = 0;
 1112         boolean_t eop = 0;
 1113 
 1114         hw_tdt = E1000_READ_REG(&sc->hw, TDT);
 1115         sw_tdt = sc->next_avail_tx_desc;
 1116 
 1117         while (hw_tdt != sw_tdt) {
 1118                 tx_desc = &sc->tx_desc_base[hw_tdt];
 1119                 length += tx_desc->lower.flags.length;
 1120                 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
 1121                 if (++hw_tdt == sc->num_tx_desc)
 1122                         hw_tdt = 0;
 1123 
 1124                 if (eop) {
 1125                         if (em_82547_fifo_workaround(sc, length)) {
 1126                                 sc->tx_fifo_wrk_cnt++;
 1127                                 timeout_add(&sc->tx_fifo_timer_handle, 1);
 1128                                 break;
 1129                         }
 1130                         E1000_WRITE_REG(&sc->hw, TDT, hw_tdt);
 1131                         em_82547_update_fifo_head(sc, length);
 1132                         length = 0;
 1133                 }
 1134         }
 1135 }
 1136 
 1137 void
 1138 em_82547_move_tail(void *arg)
 1139 {
 1140         struct em_softc *sc = arg;
 1141         int s;
 1142 
 1143         s = splnet();
 1144         em_82547_move_tail_locked(sc);
 1145         splx(s);
 1146 }
 1147 
 1148 int
 1149 em_82547_fifo_workaround(struct em_softc *sc, int len)
 1150 {
 1151         int fifo_space, fifo_pkt_len;
 1152 
 1153         fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
 1154 
 1155         if (sc->link_duplex == HALF_DUPLEX) {
 1156                 fifo_space = sc->tx_fifo_size - sc->tx_fifo_head;
 1157 
 1158                 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
 1159                         if (em_82547_tx_fifo_reset(sc))
 1160                                 return (0);
 1161                         else
 1162                                 return (1);
 1163                 }
 1164         }
 1165 
 1166         return (0);
 1167 }
 1168 
 1169 void
 1170 em_82547_update_fifo_head(struct em_softc *sc, int len)
 1171 {
 1172         int fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
 1173 
 1174         /* tx_fifo_head is always 16 byte aligned */
 1175         sc->tx_fifo_head += fifo_pkt_len;
 1176         if (sc->tx_fifo_head >= sc->tx_fifo_size)
 1177                 sc->tx_fifo_head -= sc->tx_fifo_size;
 1178 }
 1179 
 1180 int
 1181 em_82547_tx_fifo_reset(struct em_softc *sc)
 1182 {
 1183         uint32_t tctl;
 1184 
 1185         if ((E1000_READ_REG(&sc->hw, TDT) ==
 1186              E1000_READ_REG(&sc->hw, TDH)) &&
 1187             (E1000_READ_REG(&sc->hw, TDFT) ==
 1188              E1000_READ_REG(&sc->hw, TDFH)) &&
 1189             (E1000_READ_REG(&sc->hw, TDFTS) ==
 1190              E1000_READ_REG(&sc->hw, TDFHS)) &&
 1191             (E1000_READ_REG(&sc->hw, TDFPC) == 0)) {
 1192 
 1193                 /* Disable TX unit */
 1194                 tctl = E1000_READ_REG(&sc->hw, TCTL);
 1195                 E1000_WRITE_REG(&sc->hw, TCTL, tctl & ~E1000_TCTL_EN);
 1196 
 1197                 /* Reset FIFO pointers */
 1198                 E1000_WRITE_REG(&sc->hw, TDFT, sc->tx_head_addr);
 1199                 E1000_WRITE_REG(&sc->hw, TDFH, sc->tx_head_addr);
 1200                 E1000_WRITE_REG(&sc->hw, TDFTS, sc->tx_head_addr);
 1201                 E1000_WRITE_REG(&sc->hw, TDFHS, sc->tx_head_addr);
 1202 
 1203                 /* Re-enable TX unit */
 1204                 E1000_WRITE_REG(&sc->hw, TCTL, tctl);
 1205                 E1000_WRITE_FLUSH(&sc->hw);
 1206 
 1207                 sc->tx_fifo_head = 0;
 1208                 sc->tx_fifo_reset_cnt++;
 1209 
 1210                 return (TRUE);
 1211         } else
 1212                 return (FALSE);
 1213 }
 1214 
 1215 void
 1216 em_set_promisc(struct em_softc *sc)
 1217 {
 1218         u_int32_t       reg_rctl;
 1219         struct ifnet   *ifp = &sc->interface_data.ac_if;
 1220 
 1221         reg_rctl = E1000_READ_REG(&sc->hw, RCTL);
 1222 
 1223         if (ifp->if_flags & IFF_PROMISC) {
 1224                 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
 1225         } else if (ifp->if_flags & IFF_ALLMULTI) {
 1226                 reg_rctl |= E1000_RCTL_MPE;
 1227                 reg_rctl &= ~E1000_RCTL_UPE;
 1228         } else {
 1229                 reg_rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
 1230         }
 1231         E1000_WRITE_REG(&sc->hw, RCTL, reg_rctl);
 1232 }
 1233 
 1234 /*********************************************************************
 1235  *  Multicast Update
 1236  *
 1237  *  This routine is called whenever multicast address list is updated.
 1238  *
 1239  **********************************************************************/
 1240 
 1241 void
 1242 em_set_multi(struct em_softc *sc)
 1243 {
 1244         u_int32_t reg_rctl = 0;
 1245         u_int8_t  mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
 1246         int mcnt = 0;
 1247         struct ifnet *ifp = &sc->interface_data.ac_if;
 1248         struct arpcom *ac = &sc->interface_data;
 1249         struct ether_multi *enm;
 1250         struct ether_multistep step;
 1251 
 1252         IOCTL_DEBUGOUT("em_set_multi: begin");
 1253 
 1254         if (sc->hw.mac_type == em_82542_rev2_0) {
 1255                 reg_rctl = E1000_READ_REG(&sc->hw, RCTL);
 1256                 if (sc->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
 1257                         em_pci_clear_mwi(&sc->hw);
 1258                 reg_rctl |= E1000_RCTL_RST;
 1259                 E1000_WRITE_REG(&sc->hw, RCTL, reg_rctl);
 1260                 msec_delay(5);
 1261         }
 1262         ETHER_FIRST_MULTI(step, ac, enm);
 1263         while (enm != NULL) {
 1264                 if (bcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
 1265                         ifp->if_flags |= IFF_ALLMULTI;
 1266                         mcnt = MAX_NUM_MULTICAST_ADDRESSES;
 1267                 }
 1268                 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
 1269                         break;
 1270                 bcopy(enm->enm_addrlo, &mta[mcnt*ETH_LENGTH_OF_ADDRESS],
 1271                       ETH_LENGTH_OF_ADDRESS);
 1272                 mcnt++;
 1273                 ETHER_NEXT_MULTI(step, enm);
 1274         }
 1275 
 1276         if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
 1277                 reg_rctl = E1000_READ_REG(&sc->hw, RCTL);
 1278                 reg_rctl |= E1000_RCTL_MPE;
 1279                 E1000_WRITE_REG(&sc->hw, RCTL, reg_rctl);
 1280         } else
 1281                 em_mc_addr_list_update(&sc->hw, mta, mcnt, 0, 1);
 1282 
 1283         if (sc->hw.mac_type == em_82542_rev2_0) {
 1284                 reg_rctl = E1000_READ_REG(&sc->hw, RCTL);
 1285                 reg_rctl &= ~E1000_RCTL_RST;
 1286                 E1000_WRITE_REG(&sc->hw, RCTL, reg_rctl);
 1287                 msec_delay(5);
 1288                 if (sc->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
 1289                         em_pci_set_mwi(&sc->hw);
 1290         }
 1291 }
 1292 
 1293 /*********************************************************************
 1294  *  Timer routine
 1295  *
 1296  *  This routine checks for link status and updates statistics.
 1297  *
 1298  **********************************************************************/
 1299 
 1300 void
 1301 em_local_timer(void *arg)
 1302 {
 1303         struct ifnet   *ifp;
 1304         struct em_softc *sc = arg;
 1305         int s;
 1306 
 1307         ifp = &sc->interface_data.ac_if;
 1308 
 1309         s = splnet();
 1310 
 1311         em_check_for_link(&sc->hw);
 1312         em_update_link_status(sc);
 1313         em_update_stats_counters(sc);   
 1314         if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING)
 1315                 em_print_hw_stats(sc);
 1316         em_smartspeed(sc);
 1317 
 1318         timeout_add(&sc->timer_handle, hz);
 1319 
 1320         splx(s);
 1321 }
 1322 
 1323 void
 1324 em_update_link_status(struct em_softc *sc)
 1325 {
 1326         struct ifnet *ifp = &sc->interface_data.ac_if;
 1327 
 1328         if (E1000_READ_REG(&sc->hw, STATUS) & E1000_STATUS_LU) {
 1329                 if (sc->link_active == 0) {
 1330                         em_get_speed_and_duplex(&sc->hw,
 1331                                                 &sc->link_speed,
 1332                                                 &sc->link_duplex);
 1333                         /* Check if we may set SPEED_MODE bit on PCI-E */
 1334                         if ((sc->link_speed == SPEED_1000) &&
 1335                             ((sc->hw.mac_type == em_82571) ||
 1336                             (sc->hw.mac_type == em_82572))) {
 1337                                 int tarc0;
 1338 
 1339                                 tarc0 = E1000_READ_REG(&sc->hw, TARC0);
 1340                                 tarc0 |= SPEED_MODE_BIT;
 1341                                 E1000_WRITE_REG(&sc->hw, TARC0, tarc0);
 1342                         }
 1343                         sc->link_active = 1;
 1344                         sc->smartspeed = 0;
 1345                         ifp->if_baudrate = sc->link_speed * 1000000;
 1346                         if (sc->link_duplex == FULL_DUPLEX)
 1347                                 ifp->if_link_state = LINK_STATE_FULL_DUPLEX;
 1348                         else if (sc->link_duplex == HALF_DUPLEX)
 1349                                 ifp->if_link_state = LINK_STATE_HALF_DUPLEX;
 1350                         else
 1351                                 ifp->if_link_state = LINK_STATE_UP;
 1352                         if_link_state_change(ifp);
 1353                 }
 1354         } else {
 1355                 if (sc->link_active == 1) {
 1356                         ifp->if_baudrate = sc->link_speed = 0;
 1357                         sc->link_duplex = 0;
 1358                         sc->link_active = 0;
 1359                         ifp->if_link_state = LINK_STATE_DOWN;
 1360                         if_link_state_change(ifp);
 1361                 }
 1362         }
 1363 }
 1364 
 1365 /*********************************************************************
 1366  *
 1367  *  This routine disables all traffic on the adapter by issuing a
 1368  *  global reset on the MAC and deallocates TX/RX buffers. 
 1369  *
 1370  **********************************************************************/
 1371 
 1372 void
 1373 em_stop(void *arg)
 1374 {
 1375         struct ifnet   *ifp;
 1376         struct em_softc *sc = arg;
 1377         ifp = &sc->interface_data.ac_if;
 1378 
 1379         INIT_DEBUGOUT("em_stop: begin");
 1380         em_disable_intr(sc);
 1381         em_reset_hw(&sc->hw);
 1382         timeout_del(&sc->timer_handle);
 1383         timeout_del(&sc->tx_fifo_timer_handle);
 1384 
 1385         /* Tell the stack that the interface is no longer active */
 1386         ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
 1387 
 1388         em_free_transmit_structures(sc);
 1389         em_free_receive_structures(sc);
 1390 }
 1391 
 1392 /*********************************************************************
 1393  *
 1394  *  Determine hardware revision.
 1395  *
 1396  **********************************************************************/
 1397 void
 1398 em_identify_hardware(struct em_softc *sc)
 1399 {
 1400         u_int32_t reg;
 1401         struct pci_attach_args *pa = &sc->osdep.em_pa;
 1402 
 1403         /* Make sure our PCI config space has the necessary stuff set */
 1404         sc->hw.pci_cmd_word = pci_conf_read(pa->pa_pc, pa->pa_tag,
 1405                                             PCI_COMMAND_STATUS_REG);
 1406 
 1407         /* Save off the information about this board */
 1408         sc->hw.vendor_id = PCI_VENDOR(pa->pa_id);
 1409         sc->hw.device_id = PCI_PRODUCT(pa->pa_id);
 1410 
 1411         reg = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_CLASS_REG);
 1412         sc->hw.revision_id = PCI_REVISION(reg);
 1413 
 1414         reg = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_SUBSYS_ID_REG);
 1415         sc->hw.subsystem_vendor_id = PCI_VENDOR(reg);
 1416         sc->hw.subsystem_id = PCI_PRODUCT(reg);
 1417 
 1418         /* Identify the MAC */
 1419         if (em_set_mac_type(&sc->hw))
 1420                 printf("%s: Unknown MAC Type\n", sc->sc_dv.dv_xname);
 1421 
 1422         if (sc->hw.mac_type == em_82541 ||
 1423             sc->hw.mac_type == em_82541_rev_2 ||
 1424             sc->hw.mac_type == em_82547 ||
 1425             sc->hw.mac_type == em_82547_rev_2)
 1426                 sc->hw.phy_init_script = TRUE;
 1427 }
 1428 
 1429 int
 1430 em_allocate_pci_resources(struct em_softc *sc)
 1431 {
 1432         int             val, rid;
 1433         pci_intr_handle_t       ih;
 1434         const char              *intrstr = NULL;
 1435         struct pci_attach_args *pa = &sc->osdep.em_pa;
 1436         pci_chipset_tag_t       pc = pa->pa_pc;
 1437 
 1438         val = pci_conf_read(pa->pa_pc, pa->pa_tag, EM_MMBA);
 1439         if (PCI_MAPREG_TYPE(val) != PCI_MAPREG_TYPE_MEM) {
 1440                 printf(": mmba is not mem space\n");
 1441                 return (ENXIO);
 1442         }
 1443         if (pci_mapreg_map(pa, EM_MMBA, PCI_MAPREG_MEM_TYPE(val), 0,
 1444             &sc->osdep.mem_bus_space_tag, &sc->osdep.mem_bus_space_handle,
 1445             &sc->osdep.em_membase, &sc->osdep.em_memsize, 0)) {
 1446                 printf(": cannot find mem space\n");
 1447                 return (ENXIO);
 1448         }
 1449 
 1450         if (sc->hw.mac_type > em_82543) {
 1451                 /* Figure out where our I/O BAR is ? */
 1452                 for (rid = PCI_MAPREG_START; rid < PCI_MAPREG_END;) {
 1453                         val = pci_conf_read(pa->pa_pc, pa->pa_tag, rid);
 1454                         if (PCI_MAPREG_TYPE(val) == PCI_MAPREG_TYPE_IO) {
 1455                                 sc->io_rid = rid;
 1456                                 break;
 1457                         }
 1458                         rid += 4;
 1459                         if (PCI_MAPREG_MEM_TYPE(val) ==
 1460                             PCI_MAPREG_MEM_TYPE_64BIT)
 1461                                 rid += 4;       /* skip high bits, too */
 1462                 }
 1463 
 1464                 if (pci_mapreg_map(pa, rid, PCI_MAPREG_TYPE_IO, 0,
 1465                     &sc->osdep.io_bus_space_tag, &sc->osdep.io_bus_space_handle,
 1466                     &sc->osdep.em_iobase, &sc->osdep.em_iosize, 0)) {
 1467                         printf(": cannot find i/o space\n");
 1468                         return (ENXIO);
 1469                 }
 1470 
 1471                 sc->hw.io_base = 0;
 1472         }
 1473 
 1474         /* for ICH8 we need to find the flash memory */
 1475         if (sc->hw.mac_type == em_ich8lan) {
 1476                 val = pci_conf_read(pa->pa_pc, pa->pa_tag, EM_FLASH);
 1477                 if (PCI_MAPREG_TYPE(val) != PCI_MAPREG_TYPE_MEM) {
 1478                         printf(": flash is not mem space\n");
 1479                         return (ENXIO);
 1480                 }
 1481 
 1482                 if (pci_mapreg_map(pa, EM_FLASH, PCI_MAPREG_MEM_TYPE(val), 0,
 1483                     &sc->osdep.flash_bus_space_tag, &sc->osdep.flash_bus_space_handle,
 1484                     &sc->osdep.em_flashbase, &sc->osdep.em_flashsize, 0)) {
 1485                         printf(": cannot find mem space\n");
 1486                         return (ENXIO);
 1487                 }
 1488         }
 1489 
 1490         if (pci_intr_map(pa, &ih)) {
 1491                 printf(": couldn't map interrupt\n");
 1492                 return (ENXIO);
 1493         }
 1494 
 1495         sc->hw.back = &sc->osdep;
 1496 
 1497         intrstr = pci_intr_string(pc, ih);
 1498         sc->sc_intrhand = pci_intr_establish(pc, ih, IPL_NET, em_intr, sc,
 1499                                               sc->sc_dv.dv_xname);
 1500         if (sc->sc_intrhand == NULL) {
 1501                 printf(": couldn't establish interrupt");
 1502                 if (intrstr != NULL)
 1503                         printf(" at %s", intrstr);
 1504                 printf("\n");
 1505                 return (ENXIO);
 1506         }
 1507         printf(": %s", intrstr);
 1508 
 1509         return (0);
 1510 }
 1511 
 1512 void
 1513 em_free_pci_resources(struct em_softc *sc)
 1514 {
 1515         struct pci_attach_args *pa = &sc->osdep.em_pa;
 1516         pci_chipset_tag_t       pc = pa->pa_pc;
 1517 
 1518         if (sc->sc_intrhand)
 1519                 pci_intr_disestablish(pc, sc->sc_intrhand);
 1520         sc->sc_intrhand = 0;
 1521 
 1522         if (sc->osdep.em_flashbase)
 1523                 bus_space_unmap(sc->osdep.flash_bus_space_tag, sc->osdep.flash_bus_space_handle,
 1524                                 sc->osdep.em_flashsize);
 1525         sc->osdep.em_flashbase = 0;
 1526 
 1527         if (sc->osdep.em_iobase)
 1528                 bus_space_unmap(sc->osdep.io_bus_space_tag, sc->osdep.io_bus_space_handle,
 1529                                 sc->osdep.em_iosize);
 1530         sc->osdep.em_iobase = 0;
 1531 
 1532         if (sc->osdep.em_membase)
 1533                 bus_space_unmap(sc->osdep.mem_bus_space_tag, sc->osdep.mem_bus_space_handle,
 1534                                 sc->osdep.em_memsize);
 1535         sc->osdep.em_membase = 0;
 1536 }
 1537 
 1538 /*********************************************************************
 1539  *
 1540  *  Initialize the hardware to a configuration as specified by the
 1541  *  em_softc structure. The controller is reset, the EEPROM is
 1542  *  verified, the MAC address is set, then the shared initialization
 1543  *  routines are called.
 1544  *
 1545  **********************************************************************/
 1546 int
 1547 em_hardware_init(struct em_softc *sc)
 1548 {
 1549         u_int16_t rx_buffer_size;
 1550 
 1551         INIT_DEBUGOUT("em_hardware_init: begin");
 1552         /* Issue a global reset */
 1553         em_reset_hw(&sc->hw);
 1554 
 1555         /* When hardware is reset, fifo_head is also reset */
 1556         sc->tx_fifo_head = 0;
 1557 
 1558         /* Make sure we have a good EEPROM before we read from it */
 1559         if (em_validate_eeprom_checksum(&sc->hw) < 0) {
 1560                 /*
 1561                  * Some PCIe parts fail the first check due to
 1562                  * the link being in sleep state, call it again,
 1563                  * if it fails a second time its a real issue.
 1564                  */
 1565                 if (em_validate_eeprom_checksum(&sc->hw) < 0) {
 1566                         printf("%s: The EEPROM Checksum Is Not Valid\n",
 1567                                sc->sc_dv.dv_xname);
 1568                         return (EIO);
 1569                 }
 1570         }
 1571 
 1572         if (em_read_part_num(&sc->hw, &(sc->part_num)) < 0) {
 1573                 printf("%s: EEPROM read error while reading part number\n",
 1574                        sc->sc_dv.dv_xname);
 1575                 return (EIO);
 1576         }
 1577 
 1578         /* Set up smart power down as default off on newer adapters */
 1579         if (!em_smart_pwr_down &&
 1580              (sc->hw.mac_type == em_82571 ||
 1581               sc->hw.mac_type == em_82572)) {
 1582                 uint16_t phy_tmp = 0;
 1583 
 1584                 /* Speed up time to link by disabling smart power down */
 1585                 em_read_phy_reg(&sc->hw, IGP02E1000_PHY_POWER_MGMT, &phy_tmp);
 1586                 phy_tmp &= ~IGP02E1000_PM_SPD;
 1587                 em_write_phy_reg(&sc->hw, IGP02E1000_PHY_POWER_MGMT, phy_tmp);
 1588         }
 1589 
 1590         /*
 1591          * These parameters control the automatic generation (Tx) and 
 1592          * response (Rx) to Ethernet PAUSE frames.
 1593          * - High water mark should allow for at least two frames to be
 1594          *   received after sending an XOFF.
 1595          * - Low water mark works best when it is very near the high water mark.
 1596          *   This allows the receiver to restart by sending XON when it has
 1597          *   drained a bit.  Here we use an arbitary value of 1500 which will
 1598          *   restart after one full frame is pulled from the buffer.  There
 1599          *   could be several smaller frames in the buffer and if so they will
 1600          *   not trigger the XON until their total number reduces the buffer
 1601          *   by 1500.
 1602          * - The pause time is fairly large at 1000 x 512ns = 512 usec.
 1603          */
 1604         rx_buffer_size = ((E1000_READ_REG(&sc->hw, PBA) & 0xffff) << 10 );
 1605 
 1606         sc->hw.fc_high_water = rx_buffer_size -
 1607             EM_ROUNDUP(sc->hw.max_frame_size, 1024);
 1608         sc->hw.fc_low_water = sc->hw.fc_high_water - 1500;
 1609         if (sc->hw.mac_type == em_80003es2lan)
 1610                 sc->hw.fc_pause_time = 0xFFFF;
 1611         else
 1612                 sc->hw.fc_pause_time = 1000;
 1613         sc->hw.fc_send_xon = TRUE;
 1614         sc->hw.fc = E1000_FC_FULL;
 1615 
 1616         if (em_init_hw(&sc->hw) < 0) {
 1617                 printf("%s: Hardware Initialization Failed",
 1618                        sc->sc_dv.dv_xname);
 1619                 return (EIO);
 1620         }
 1621 
 1622         em_check_for_link(&sc->hw);
 1623 
 1624         return (0);
 1625 }
 1626 
 1627 /*********************************************************************
 1628  *
 1629  *  Setup networking device structure and register an interface.
 1630  *
 1631  **********************************************************************/
 1632 void
 1633 em_setup_interface(struct em_softc *sc)
 1634 {
 1635         struct ifnet   *ifp;
 1636         u_char fiber_type = IFM_1000_SX;
 1637 
 1638         INIT_DEBUGOUT("em_setup_interface: begin");
 1639 
 1640         ifp = &sc->interface_data.ac_if;
 1641         strlcpy(ifp->if_xname, sc->sc_dv.dv_xname, IFNAMSIZ);
 1642         ifp->if_softc = sc;
 1643         ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 1644         ifp->if_ioctl = em_ioctl;
 1645         ifp->if_start = em_start;
 1646         ifp->if_watchdog = em_watchdog;
 1647         ifp->if_hardmtu =
 1648                 sc->hw.max_frame_size - ETHER_HDR_LEN - ETHER_CRC_LEN;
 1649         IFQ_SET_MAXLEN(&ifp->if_snd, sc->num_tx_desc - 1);
 1650         IFQ_SET_READY(&ifp->if_snd);
 1651 
 1652         ifp->if_capabilities = IFCAP_VLAN_MTU;
 1653 
 1654 #ifdef EM_CSUM_OFFLOAD
 1655         if (sc->hw.mac_type >= em_82543)
 1656                 ifp->if_capabilities |= IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4;
 1657 #endif
 1658 
 1659         /* 
 1660          * Specify the media types supported by this adapter and register
 1661          * callbacks to update media and link information
 1662          */
 1663         ifmedia_init(&sc->media, IFM_IMASK, em_media_change,
 1664                      em_media_status);
 1665         if (sc->hw.media_type == em_media_type_fiber ||
 1666             sc->hw.media_type == em_media_type_internal_serdes) {
 1667                 if (sc->hw.mac_type == em_82545)
 1668                         fiber_type = IFM_1000_LX;
 1669                 ifmedia_add(&sc->media, IFM_ETHER | fiber_type | IFM_FDX, 
 1670                             0, NULL);
 1671                 ifmedia_add(&sc->media, IFM_ETHER | fiber_type, 
 1672                             0, NULL);
 1673         } else {
 1674                 ifmedia_add(&sc->media, IFM_ETHER | IFM_10_T, 0, NULL);
 1675                 ifmedia_add(&sc->media, IFM_ETHER | IFM_10_T | IFM_FDX, 
 1676                             0, NULL);
 1677                 ifmedia_add(&sc->media, IFM_ETHER | IFM_100_TX, 
 1678                             0, NULL);
 1679                 ifmedia_add(&sc->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 
 1680                             0, NULL);
 1681                 if (sc->hw.phy_type != em_phy_ife) {
 1682                         ifmedia_add(&sc->media, IFM_ETHER | IFM_1000_T | IFM_FDX, 
 1683                                     0, NULL);
 1684                         ifmedia_add(&sc->media, IFM_ETHER | IFM_1000_T, 0, NULL);
 1685                 }
 1686         }
 1687         ifmedia_add(&sc->media, IFM_ETHER | IFM_AUTO, 0, NULL);
 1688         ifmedia_set(&sc->media, IFM_ETHER | IFM_AUTO);
 1689 
 1690         if_attach(ifp);
 1691         ether_ifattach(ifp);
 1692 }
 1693 
 1694 
 1695 /*********************************************************************
 1696  *
 1697  *  Workaround for SmartSpeed on 82541 and 82547 controllers
 1698  *
 1699  **********************************************************************/        
 1700 void
 1701 em_smartspeed(struct em_softc *sc)
 1702 {
 1703         uint16_t phy_tmp;
 1704  
 1705         if (sc->link_active || (sc->hw.phy_type != em_phy_igp) || 
 1706             !sc->hw.autoneg || !(sc->hw.autoneg_advertised & ADVERTISE_1000_FULL))
 1707                 return;
 1708 
 1709         if (sc->smartspeed == 0) {
 1710                 /* If Master/Slave config fault is asserted twice,
 1711                  * we assume back-to-back */
 1712                 em_read_phy_reg(&sc->hw, PHY_1000T_STATUS, &phy_tmp);
 1713                 if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT))
 1714                         return;
 1715                 em_read_phy_reg(&sc->hw, PHY_1000T_STATUS, &phy_tmp);
 1716                 if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
 1717                         em_read_phy_reg(&sc->hw, PHY_1000T_CTRL,
 1718                                         &phy_tmp);
 1719                         if (phy_tmp & CR_1000T_MS_ENABLE) {
 1720                                 phy_tmp &= ~CR_1000T_MS_ENABLE;
 1721                                 em_write_phy_reg(&sc->hw,
 1722                                                     PHY_1000T_CTRL, phy_tmp);
 1723                                 sc->smartspeed++;
 1724                                 if (sc->hw.autoneg &&
 1725                                     !em_phy_setup_autoneg(&sc->hw) &&
 1726                                     !em_read_phy_reg(&sc->hw, PHY_CTRL,
 1727                                                        &phy_tmp)) {
 1728                                         phy_tmp |= (MII_CR_AUTO_NEG_EN |  
 1729                                                     MII_CR_RESTART_AUTO_NEG);
 1730                                         em_write_phy_reg(&sc->hw,
 1731                                                          PHY_CTRL, phy_tmp);
 1732                                 }
 1733                         }
 1734                 }
 1735                 return;
 1736         } else if (sc->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
 1737                 /* If still no link, perhaps using 2/3 pair cable */
 1738                 em_read_phy_reg(&sc->hw, PHY_1000T_CTRL, &phy_tmp);
 1739                 phy_tmp |= CR_1000T_MS_ENABLE;
 1740                 em_write_phy_reg(&sc->hw, PHY_1000T_CTRL, phy_tmp);
 1741                 if (sc->hw.autoneg &&
 1742                     !em_phy_setup_autoneg(&sc->hw) &&
 1743                     !em_read_phy_reg(&sc->hw, PHY_CTRL, &phy_tmp)) {
 1744                         phy_tmp |= (MII_CR_AUTO_NEG_EN |
 1745                                     MII_CR_RESTART_AUTO_NEG);
 1746                         em_write_phy_reg(&sc->hw, PHY_CTRL, phy_tmp);
 1747                 }
 1748         }
 1749         /* Restart process after EM_SMARTSPEED_MAX iterations */
 1750         if (sc->smartspeed++ == EM_SMARTSPEED_MAX)
 1751                 sc->smartspeed = 0;
 1752 }
 1753 
 1754 /*
 1755  * Manage DMA'able memory.
 1756  */
 1757 int
 1758 em_dma_malloc(struct em_softc *sc, bus_size_t size,
 1759     struct em_dma_alloc *dma, int mapflags)
 1760 {
 1761         int r;
 1762 
 1763         dma->dma_tag = sc->osdep.em_pa.pa_dmat;
 1764         r = bus_dmamap_create(dma->dma_tag, size, 1,
 1765             size, 0, BUS_DMA_NOWAIT, &dma->dma_map);
 1766         if (r != 0) {
 1767                 printf("%s: em_dma_malloc: bus_dmamap_create failed; "
 1768                         "error %u\n", sc->sc_dv.dv_xname, r);
 1769                 goto fail_0;
 1770         }
 1771 
 1772         r = bus_dmamem_alloc(dma->dma_tag, size, PAGE_SIZE, 0, &dma->dma_seg,
 1773             1, &dma->dma_nseg, BUS_DMA_NOWAIT);
 1774         if (r != 0) {
 1775                 printf("%s: em_dma_malloc: bus_dmammem_alloc failed; "
 1776                         "size %lu, error %d\n", sc->sc_dv.dv_xname,
 1777                         (unsigned long)size, r);
 1778                 goto fail_1;
 1779         }
 1780 
 1781         r = bus_dmamem_map(dma->dma_tag, &dma->dma_seg, dma->dma_nseg, size,
 1782             &dma->dma_vaddr, BUS_DMA_NOWAIT);
 1783         if (r != 0) {
 1784                 printf("%s: em_dma_malloc: bus_dmammem_map failed; "
 1785                         "size %lu, error %d\n", sc->sc_dv.dv_xname,
 1786                         (unsigned long)size, r);
 1787                 goto fail_2;
 1788         }
 1789 
 1790         r = bus_dmamap_load(sc->osdep.em_pa.pa_dmat, dma->dma_map,
 1791                             dma->dma_vaddr,
 1792                             size,
 1793                             NULL,
 1794                             mapflags | BUS_DMA_NOWAIT);
 1795         if (r != 0) {
 1796                 printf("%s: em_dma_malloc: bus_dmamap_load failed; "
 1797                         "error %u\n", sc->sc_dv.dv_xname, r);
 1798                 goto fail_3;
 1799         }
 1800 
 1801         dma->dma_size = size;
 1802         return (0);
 1803 
 1804 fail_3:
 1805         bus_dmamem_unmap(dma->dma_tag, dma->dma_vaddr, size);
 1806 fail_2:
 1807         bus_dmamem_free(dma->dma_tag, &dma->dma_seg, dma->dma_nseg);
 1808 fail_1:
 1809         bus_dmamap_destroy(dma->dma_tag, dma->dma_map);
 1810 fail_0:
 1811         dma->dma_map = NULL;
 1812         dma->dma_tag = NULL;
 1813 
 1814         return (r);
 1815 }
 1816 
 1817 void
 1818 em_dma_free(struct em_softc *sc, struct em_dma_alloc *dma)
 1819 {
 1820         if (dma->dma_tag == NULL)
 1821                 return;
 1822 
 1823         if (dma->dma_map != NULL) {
 1824                 bus_dmamap_sync(dma->dma_tag, dma->dma_map, 0,
 1825                     dma->dma_map->dm_mapsize,
 1826                     BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 1827                 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
 1828                 bus_dmamem_unmap(dma->dma_tag, dma->dma_vaddr, dma->dma_size);
 1829                 bus_dmamem_free(dma->dma_tag, &dma->dma_seg, dma->dma_nseg);
 1830                 bus_dmamap_destroy(dma->dma_tag, dma->dma_map);
 1831         }
 1832         dma->dma_tag = NULL;
 1833 }
 1834 
 1835 /*********************************************************************
 1836  *
 1837  *  Allocate memory for tx_buffer structures. The tx_buffer stores all
 1838  *  the information needed to transmit a packet on the wire.
 1839  *
 1840  **********************************************************************/
 1841 int
 1842 em_allocate_transmit_structures(struct em_softc *sc)
 1843 {
 1844         if (!(sc->tx_buffer_area =
 1845               (struct em_buffer *) malloc(sizeof(struct em_buffer) *
 1846                                              sc->num_tx_desc, M_DEVBUF,
 1847                                              M_NOWAIT))) {
 1848                 printf("%s: Unable to allocate tx_buffer memory\n", 
 1849                        sc->sc_dv.dv_xname);
 1850                 return (ENOMEM);
 1851         }
 1852 
 1853         bzero(sc->tx_buffer_area,
 1854               sizeof(struct em_buffer) * sc->num_tx_desc);
 1855 
 1856         return (0);
 1857 }
 1858 
 1859 /*********************************************************************
 1860  *
 1861  *  Allocate and initialize transmit structures. 
 1862  *
 1863  **********************************************************************/
 1864 int
 1865 em_setup_transmit_structures(struct em_softc *sc)
 1866 {
 1867         struct  em_buffer *tx_buffer;
 1868         int error, i;
 1869 
 1870         if ((error = em_allocate_transmit_structures(sc)) != 0)
 1871                 goto fail;
 1872 
 1873         bzero((void *) sc->tx_desc_base,
 1874               (sizeof(struct em_tx_desc)) * sc->num_tx_desc);
 1875 
 1876         sc->txtag = sc->osdep.em_pa.pa_dmat;
 1877 
 1878         tx_buffer = sc->tx_buffer_area;
 1879         for (i = 0; i < sc->num_tx_desc; i++) {
 1880                 error = bus_dmamap_create(sc->txtag, MAX_JUMBO_FRAME_SIZE,
 1881                             EM_MAX_SCATTER, MAX_JUMBO_FRAME_SIZE, 0,
 1882                             BUS_DMA_NOWAIT, &tx_buffer->map);
 1883                 if (error != 0) {
 1884                         printf("%s: Unable to create TX DMA map\n",
 1885                             sc->sc_dv.dv_xname);
 1886                         goto fail;
 1887                 }
 1888                 tx_buffer++;
 1889         }
 1890 
 1891         sc->next_avail_tx_desc = 0;
 1892         sc->next_tx_to_clean = 0;
 1893 
 1894         /* Set number of descriptors available */
 1895         sc->num_tx_desc_avail = sc->num_tx_desc;
 1896 
 1897         /* Set checksum context */
 1898         sc->active_checksum_context = OFFLOAD_NONE;
 1899         bus_dmamap_sync(sc->txdma.dma_tag, sc->txdma.dma_map, 0,
 1900             sc->txdma.dma_size, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 1901 
 1902         return (0);
 1903 
 1904 fail:
 1905         em_free_transmit_structures(sc);
 1906         return (error);
 1907 }
 1908 
 1909 /*********************************************************************
 1910  *
 1911  *  Enable transmit unit.
 1912  *
 1913  **********************************************************************/
 1914 void
 1915 em_initialize_transmit_unit(struct em_softc *sc)
 1916 {
 1917         u_int32_t       reg_tctl, reg_tipg = 0;
 1918         u_int64_t       bus_addr;
 1919 
 1920         INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
 1921 
 1922         /* Setup the Base and Length of the Tx Descriptor Ring */
 1923         bus_addr = sc->txdma.dma_map->dm_segs[0].ds_addr;
 1924         E1000_WRITE_REG(&sc->hw, TDLEN, 
 1925                         sc->num_tx_desc *
 1926                         sizeof(struct em_tx_desc));
 1927         E1000_WRITE_REG(&sc->hw, TDBAH, (u_int32_t)(bus_addr >> 32));
 1928         E1000_WRITE_REG(&sc->hw, TDBAL, (u_int32_t)bus_addr);
 1929 
 1930         /* Setup the HW Tx Head and Tail descriptor pointers */
 1931         E1000_WRITE_REG(&sc->hw, TDT, 0);
 1932         E1000_WRITE_REG(&sc->hw, TDH, 0);
 1933 
 1934         HW_DEBUGOUT2("Base = %x, Length = %x\n", 
 1935                      E1000_READ_REG(&sc->hw, TDBAL),
 1936                      E1000_READ_REG(&sc->hw, TDLEN));
 1937 
 1938         /* Set the default values for the Tx Inter Packet Gap timer */
 1939         switch (sc->hw.mac_type) {
 1940         case em_82542_rev2_0:
 1941         case em_82542_rev2_1:
 1942                 reg_tipg = DEFAULT_82542_TIPG_IPGT;
 1943                 reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 1944                 reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 1945                 break;
 1946         case em_80003es2lan:
 1947                 reg_tipg = DEFAULT_82543_TIPG_IPGR1;
 1948                 reg_tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 1949                 break;
 1950         default:
 1951                 if (sc->hw.media_type == em_media_type_fiber ||
 1952                     sc->hw.media_type == em_media_type_internal_serdes)
 1953                         reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
 1954                 else
 1955                         reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
 1956                 reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 1957                 reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 1958         }
 1959 
 1960         E1000_WRITE_REG(&sc->hw, TIPG, reg_tipg);
 1961         E1000_WRITE_REG(&sc->hw, TIDV, sc->tx_int_delay);
 1962         if (sc->hw.mac_type >= em_82540)
 1963                 E1000_WRITE_REG(&sc->hw, TADV, sc->tx_abs_int_delay);
 1964 
 1965         /* Program the Transmit Control Register */
 1966         reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
 1967                    (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
 1968         if (sc->hw.mac_type >= em_82571)
 1969                 reg_tctl |= E1000_TCTL_MULR;
 1970         if (sc->link_duplex == FULL_DUPLEX)
 1971                 reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
 1972         else
 1973                 reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
 1974         /* This write will effectively turn on the transmit unit */
 1975         E1000_WRITE_REG(&sc->hw, TCTL, reg_tctl);
 1976 
 1977         /* Setup Transmit Descriptor Base Settings */   
 1978         sc->txd_cmd = E1000_TXD_CMD_IFCS;
 1979 
 1980         if (sc->tx_int_delay > 0)
 1981                 sc->txd_cmd |= E1000_TXD_CMD_IDE;
 1982 }
 1983 
 1984 /*********************************************************************
 1985  *
 1986  *  Free all transmit related data structures.
 1987  *
 1988  **********************************************************************/
 1989 void
 1990 em_free_transmit_structures(struct em_softc *sc)
 1991 {
 1992         struct em_buffer   *tx_buffer;
 1993         int             i;
 1994 
 1995         INIT_DEBUGOUT("free_transmit_structures: begin");
 1996 
 1997         if (sc->tx_buffer_area != NULL) {
 1998                 tx_buffer = sc->tx_buffer_area;
 1999                 for (i = 0; i < sc->num_tx_desc; i++, tx_buffer++) {
 2000                         if (tx_buffer->map != NULL &&
 2001                             tx_buffer->map->dm_nsegs > 0) {
 2002                                 bus_dmamap_sync(sc->txtag, tx_buffer->map,
 2003                                     0, tx_buffer->map->dm_mapsize,
 2004                                     BUS_DMASYNC_POSTWRITE);
 2005                                 bus_dmamap_unload(sc->txtag,
 2006                                     tx_buffer->map);
 2007                         }
 2008                         if (tx_buffer->m_head != NULL) {
 2009                                 m_freem(tx_buffer->m_head);
 2010                                 tx_buffer->m_head = NULL;
 2011                         }
 2012                         if (tx_buffer->map != NULL) {
 2013                                 bus_dmamap_destroy(sc->txtag,
 2014                                     tx_buffer->map);
 2015                                 tx_buffer->map = NULL;
 2016                         }
 2017                 }
 2018         }
 2019         if (sc->tx_buffer_area != NULL) {
 2020                 free(sc->tx_buffer_area, M_DEVBUF);
 2021                 sc->tx_buffer_area = NULL;
 2022         }
 2023         if (sc->txtag != NULL)
 2024                 sc->txtag = NULL;
 2025 }
 2026 
 2027 #ifdef EM_CSUM_OFFLOAD
 2028 /*********************************************************************
 2029  *
 2030  *  The offload context needs to be set when we transfer the first
 2031  *  packet of a particular protocol (TCP/UDP). We change the
 2032  *  context only if the protocol type changes.
 2033  *
 2034  **********************************************************************/
 2035 void
 2036 em_transmit_checksum_setup(struct em_softc *sc, struct mbuf *mp,
 2037     u_int32_t *txd_upper, u_int32_t *txd_lower)
 2038 {
 2039         struct em_context_desc *TXD;
 2040         struct em_buffer *tx_buffer;
 2041         int curr_txd;
 2042 
 2043         if (mp->m_pkthdr.csum_flags) {
 2044                 if (mp->m_pkthdr.csum_flags & M_TCPV4_CSUM_OUT) {
 2045                         *txd_upper = E1000_TXD_POPTS_TXSM << 8;
 2046                         *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
 2047                         if (sc->active_checksum_context == OFFLOAD_TCP_IP)
 2048                                 return;
 2049                         else
 2050                                 sc->active_checksum_context = OFFLOAD_TCP_IP;
 2051                 } else if (mp->m_pkthdr.csum_flags & M_UDPV4_CSUM_OUT) {
 2052                         *txd_upper = E1000_TXD_POPTS_TXSM << 8;
 2053                         *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
 2054                         if (sc->active_checksum_context == OFFLOAD_UDP_IP)
 2055                                 return;
 2056                         else
 2057                                 sc->active_checksum_context = OFFLOAD_UDP_IP;
 2058                 } else {
 2059                         *txd_upper = 0;
 2060                         *txd_lower = 0;
 2061                         return;
 2062                 }
 2063         } else {
 2064                 *txd_upper = 0;
 2065                 *txd_lower = 0;
 2066                 return;
 2067         }
 2068 
 2069         /* If we reach this point, the checksum offload context
 2070          * needs to be reset.
 2071          */
 2072         curr_txd = sc->next_avail_tx_desc;
 2073         tx_buffer = &sc->tx_buffer_area[curr_txd];
 2074         TXD = (struct em_context_desc *) &sc->tx_desc_base[curr_txd];
 2075 
 2076         TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN;
 2077         TXD->lower_setup.ip_fields.ipcso = 
 2078             ETHER_HDR_LEN + offsetof(struct ip, ip_sum);
 2079         TXD->lower_setup.ip_fields.ipcse = 
 2080             htole16(ETHER_HDR_LEN + sizeof(struct ip) - 1);
 2081 
 2082         TXD->upper_setup.tcp_fields.tucss = 
 2083             ETHER_HDR_LEN + sizeof(struct ip);
 2084         TXD->upper_setup.tcp_fields.tucse = htole16(0);
 2085 
 2086         if (sc->active_checksum_context == OFFLOAD_TCP_IP) {
 2087                 TXD->upper_setup.tcp_fields.tucso = 
 2088                     ETHER_HDR_LEN + sizeof(struct ip) + 
 2089                     offsetof(struct tcphdr, th_sum);
 2090         } else if (sc->active_checksum_context == OFFLOAD_UDP_IP) {
 2091                 TXD->upper_setup.tcp_fields.tucso = 
 2092                     ETHER_HDR_LEN + sizeof(struct ip) + 
 2093                     offsetof(struct udphdr, uh_sum);
 2094         }
 2095 
 2096         TXD->tcp_seg_setup.data = htole32(0);
 2097         TXD->cmd_and_length = htole32(sc->txd_cmd | E1000_TXD_CMD_DEXT);
 2098 
 2099         tx_buffer->m_head = NULL;
 2100         tx_buffer->next_eop = -1;
 2101 
 2102         if (++curr_txd == sc->num_tx_desc)
 2103                 curr_txd = 0;
 2104 
 2105         sc->num_tx_desc_avail--;
 2106         sc->next_avail_tx_desc = curr_txd;
 2107 }
 2108 #endif /* EM_CSUM_OFFLOAD */
 2109 
 2110 /**********************************************************************
 2111  *
 2112  *  Examine each tx_buffer in the used queue. If the hardware is done
 2113  *  processing the packet then free associated resources. The
 2114  *  tx_buffer is put back on the free queue. 
 2115  *
 2116  **********************************************************************/
 2117 void
 2118 em_txeof(struct em_softc *sc)
 2119 {
 2120         int first, last, done, num_avail;
 2121         struct em_buffer *tx_buffer;
 2122         struct em_tx_desc   *tx_desc, *eop_desc;
 2123         struct ifnet   *ifp = &sc->interface_data.ac_if;
 2124 
 2125         if (sc->num_tx_desc_avail == sc->num_tx_desc)
 2126                 return;
 2127 
 2128         num_avail = sc->num_tx_desc_avail;
 2129         first = sc->next_tx_to_clean;
 2130         tx_desc = &sc->tx_desc_base[first];
 2131         tx_buffer = &sc->tx_buffer_area[first];
 2132         last = tx_buffer->next_eop;
 2133         eop_desc = &sc->tx_desc_base[last];
 2134 
 2135         /*
 2136          * What this does is get the index of the
 2137          * first descriptor AFTER the EOP of the 
 2138          * first packet, that way we can do the
 2139          * simple comparison on the inner while loop.
 2140          */
 2141         if (++last == sc->num_tx_desc)
 2142                 last = 0;
 2143         done = last;
 2144 
 2145         bus_dmamap_sync(sc->txdma.dma_tag, sc->txdma.dma_map, 0,
 2146             sc->txdma.dma_map->dm_mapsize, BUS_DMASYNC_POSTREAD);
 2147         while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
 2148                 /* We clean the range of the packet */
 2149                 while (first != done) {
 2150                         tx_desc->upper.data = 0;
 2151                         tx_desc->lower.data = 0;
 2152                         num_avail++;
 2153 
 2154                         if (tx_buffer->m_head != NULL) {
 2155                                 ifp->if_opackets++;
 2156                                 if (tx_buffer->map->dm_nsegs > 0) {
 2157                                         bus_dmamap_sync(sc->txtag,
 2158                                             tx_buffer->map, 0,
 2159                                             tx_buffer->map->dm_mapsize,
 2160                                             BUS_DMASYNC_POSTWRITE);
 2161                                         bus_dmamap_unload(sc->txtag,
 2162                                             tx_buffer->map);
 2163                                 }
 2164                                 m_freem(tx_buffer->m_head);
 2165                                 tx_buffer->m_head = NULL;
 2166                         }
 2167                         tx_buffer->next_eop = -1;
 2168 
 2169                         if (++first == sc->num_tx_desc)
 2170                                 first = 0;
 2171 
 2172                         tx_buffer = &sc->tx_buffer_area[first];
 2173                         tx_desc = &sc->tx_desc_base[first];
 2174                 }
 2175                 /* See if we can continue to the next packet */
 2176                 last = tx_buffer->next_eop;
 2177                 if (last != -1) {
 2178                         eop_desc = &sc->tx_desc_base[last];
 2179                         /* Get new done point */
 2180                         if (++last == sc->num_tx_desc)
 2181                                 last = 0;
 2182                         done = last;
 2183                 } else
 2184                         break;
 2185         }
 2186         bus_dmamap_sync(sc->txdma.dma_tag, sc->txdma.dma_map, 0,
 2187             sc->txdma.dma_map->dm_mapsize,
 2188             BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 2189 
 2190         sc->next_tx_to_clean = first;
 2191 
 2192         /*
 2193          * If we have enough room, clear IFF_OACTIVE to tell the stack
 2194          * that it is OK to send packets.
 2195          * If there are no pending descriptors, clear the timeout. Otherwise,
 2196          * if some descriptors have been freed, restart the timeout.
 2197          */
 2198         if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
 2199                 ifp->if_flags &= ~IFF_OACTIVE;
 2200                 /* All clean, turn off the timer */
 2201                 if (num_avail == sc->num_tx_desc)
 2202                         ifp->if_timer = 0;
 2203                 /* Some cleaned, reset the timer */
 2204                 else if (num_avail != sc->num_tx_desc_avail)
 2205                         ifp->if_timer = EM_TX_TIMEOUT;
 2206         }
 2207         sc->num_tx_desc_avail = num_avail;
 2208 }
 2209 
 2210 /*********************************************************************
 2211  *
 2212  *  Get a buffer from system mbuf buffer pool.
 2213  *
 2214  **********************************************************************/
 2215 int
 2216 em_get_buf(struct em_softc *sc, int i)
 2217 {
 2218         struct mbuf    *m;
 2219         bus_dmamap_t    map;
 2220         struct em_buffer *rx_buffer;
 2221         int error;
 2222 
 2223         MGETHDR(m, M_DONTWAIT, MT_DATA);
 2224         if (m == NULL) {
 2225                 sc->mbuf_alloc_failed++;
 2226                 return (ENOBUFS);
 2227         }
 2228         MCLGET(m, M_DONTWAIT);
 2229         if ((m->m_flags & M_EXT) == 0) {
 2230                 m_freem(m);
 2231                 sc->mbuf_cluster_failed++;
 2232                 return (ENOBUFS);
 2233         }
 2234         m->m_len = m->m_pkthdr.len = MCLBYTES;
 2235 
 2236         if (sc->hw.max_frame_size <= (MCLBYTES - ETHER_ALIGN))
 2237                 m_adj(m, ETHER_ALIGN);
 2238 
 2239         /*
 2240          * Using memory from the mbuf cluster pool, invoke the
 2241          * bus_dma machinery to arrange the memory mapping.
 2242          */
 2243         error = bus_dmamap_load_mbuf(sc->rxtag, sc->rx_sparemap,
 2244             m, BUS_DMA_NOWAIT);
 2245         if (error) {
 2246                 m_free(m);
 2247                 return (error);
 2248         }
 2249 
 2250         rx_buffer = &sc->rx_buffer_area[i];
 2251         if (rx_buffer->m_head != NULL)
 2252                 bus_dmamap_unload(sc->rxtag, rx_buffer->map);
 2253 
 2254         map = rx_buffer->map;
 2255         rx_buffer->map = sc->rx_sparemap;
 2256         sc->rx_sparemap = map;
 2257 
 2258         bus_dmamap_sync(sc->rxtag, rx_buffer->map, 0,
 2259             rx_buffer->map->dm_mapsize, BUS_DMASYNC_PREREAD);
 2260 
 2261         rx_buffer->m_head = m;
 2262 
 2263         sc->rx_desc_base[i].buffer_addr = htole64(rx_buffer->map->dm_segs[0].ds_addr);
 2264 
 2265         return (0);
 2266 }
 2267 
 2268 /*********************************************************************
 2269  *
 2270  *  Allocate memory for rx_buffer structures. Since we use one 
 2271  *  rx_buffer per received packet, the maximum number of rx_buffer's 
 2272  *  that we'll need is equal to the number of receive descriptors 
 2273  *  that we've allocated.
 2274  *
 2275  **********************************************************************/
 2276 int
 2277 em_allocate_receive_structures(struct em_softc *sc)
 2278 {
 2279         int             i, error;
 2280         struct em_buffer *rx_buffer;
 2281 
 2282         if (!(sc->rx_buffer_area =
 2283               (struct em_buffer *) malloc(sizeof(struct em_buffer) *
 2284                                              sc->num_rx_desc, M_DEVBUF,
 2285                                              M_NOWAIT))) {
 2286                 printf("%s: Unable to allocate rx_buffer memory\n", 
 2287                        sc->sc_dv.dv_xname);
 2288                 return (ENOMEM);
 2289         }
 2290 
 2291         bzero(sc->rx_buffer_area,
 2292               sizeof(struct em_buffer) * sc->num_rx_desc);
 2293 
 2294         sc->rxtag = sc->osdep.em_pa.pa_dmat;
 2295 
 2296         error = bus_dmamap_create(sc->rxtag, MCLBYTES, 1, MCLBYTES,
 2297                     0, BUS_DMA_NOWAIT, &sc->rx_sparemap);
 2298         if (error != 0) {
 2299                 printf("%s: em_allocate_receive_structures: "
 2300                     "bus_dmamap_create failed; error %u\n",
 2301                     sc->sc_dv.dv_xname, error);
 2302                 goto fail;
 2303         }
 2304 
 2305         rx_buffer = sc->rx_buffer_area;
 2306         for (i = 0; i < sc->num_rx_desc; i++, rx_buffer++) {
 2307                 error = bus_dmamap_create(sc->rxtag, MCLBYTES, 1,
 2308                                         MCLBYTES, 0, BUS_DMA_NOWAIT,
 2309                                         &rx_buffer->map);
 2310                 if (error != 0) {
 2311                         printf("%s: em_allocate_receive_structures: "
 2312                             "bus_dmamap_create failed; error %u\n",
 2313                             sc->sc_dv.dv_xname, error);
 2314                         goto fail;
 2315                 }
 2316         }
 2317 
 2318         for (i = 0; i < sc->num_rx_desc; i++) {
 2319                 error = em_get_buf(sc, i);
 2320                 if (error != 0)
 2321                         goto fail;
 2322         }
 2323         bus_dmamap_sync(sc->rxdma.dma_tag, sc->rxdma.dma_map, 0,
 2324             sc->rxdma.dma_map->dm_mapsize,
 2325             BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 2326 
 2327         return (0);
 2328 
 2329 fail:
 2330         em_free_receive_structures(sc);
 2331         return (error);
 2332 }
 2333 
 2334 /*********************************************************************
 2335  *
 2336  *  Allocate and initialize receive structures.
 2337  *  
 2338  **********************************************************************/
 2339 int
 2340 em_setup_receive_structures(struct em_softc *sc)
 2341 {
 2342         bzero((void *) sc->rx_desc_base,
 2343             (sizeof(struct em_rx_desc)) * sc->num_rx_desc);
 2344 
 2345         if (em_allocate_receive_structures(sc))
 2346                 return (ENOMEM);
 2347 
 2348         /* Setup our descriptor pointers */
 2349         sc->next_rx_desc_to_check = 0;
 2350         return (0);
 2351 }
 2352 
 2353 /*********************************************************************
 2354  *
 2355  *  Enable receive unit.
 2356  *  
 2357  **********************************************************************/
 2358 void
 2359 em_initialize_receive_unit(struct em_softc *sc)
 2360 {
 2361         u_int32_t       reg_rctl;
 2362         u_int32_t       reg_rxcsum;
 2363         struct ifnet    *ifp;
 2364         u_int64_t       bus_addr;
 2365 
 2366         INIT_DEBUGOUT("em_initialize_receive_unit: begin");
 2367         ifp = &sc->interface_data.ac_if;
 2368 
 2369         /* Make sure receives are disabled while setting up the descriptor ring */
 2370         E1000_WRITE_REG(&sc->hw, RCTL, 0);
 2371 
 2372         /* Set the Receive Delay Timer Register */
 2373         E1000_WRITE_REG(&sc->hw, RDTR, 
 2374                         sc->rx_int_delay | E1000_RDT_FPDB);
 2375 
 2376         if (sc->hw.mac_type >= em_82540) {
 2377                 E1000_WRITE_REG(&sc->hw, RADV, sc->rx_abs_int_delay);
 2378 
 2379                 /* Set the interrupt throttling rate.  Value is calculated
 2380                  * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
 2381                 E1000_WRITE_REG(&sc->hw, ITR, DEFAULT_ITR);
 2382         }
 2383 
 2384         /* Setup the Base and Length of the Rx Descriptor Ring */
 2385         bus_addr = sc->rxdma.dma_map->dm_segs[0].ds_addr;
 2386         E1000_WRITE_REG(&sc->hw, RDLEN, sc->num_rx_desc *
 2387                         sizeof(struct em_rx_desc));
 2388         E1000_WRITE_REG(&sc->hw, RDBAH, (u_int32_t)(bus_addr >> 32));
 2389         E1000_WRITE_REG(&sc->hw, RDBAL, (u_int32_t)bus_addr);
 2390 
 2391         /* Setup the Receive Control Register */
 2392         reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
 2393             E1000_RCTL_RDMTS_HALF |
 2394             (sc->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
 2395 
 2396         if (sc->hw.tbi_compatibility_on == TRUE)
 2397                 reg_rctl |= E1000_RCTL_SBP;
 2398 
 2399         switch (sc->rx_buffer_len) {
 2400         default:
 2401         case EM_RXBUFFER_2048:
 2402                 reg_rctl |= E1000_RCTL_SZ_2048;
 2403                 break;
 2404         case EM_RXBUFFER_4096:
 2405                 reg_rctl |= E1000_RCTL_SZ_4096|E1000_RCTL_BSEX|E1000_RCTL_LPE;
 2406                 break;            
 2407         case EM_RXBUFFER_8192:
 2408                 reg_rctl |= E1000_RCTL_SZ_8192|E1000_RCTL_BSEX|E1000_RCTL_LPE;
 2409                 break;
 2410         case EM_RXBUFFER_16384:
 2411                 reg_rctl |= E1000_RCTL_SZ_16384|E1000_RCTL_BSEX|E1000_RCTL_LPE;
 2412                 break;
 2413         }
 2414 
 2415         if (sc->hw.max_frame_size != ETHER_MAX_LEN)
 2416                 reg_rctl |= E1000_RCTL_LPE;
 2417 
 2418         /* Enable 82543 Receive Checksum Offload for TCP and UDP */
 2419         if (sc->hw.mac_type >= em_82543) {
 2420                 reg_rxcsum = E1000_READ_REG(&sc->hw, RXCSUM);
 2421                 reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
 2422                 E1000_WRITE_REG(&sc->hw, RXCSUM, reg_rxcsum);
 2423         }
 2424 
 2425         /* Enable Receives */
 2426         E1000_WRITE_REG(&sc->hw, RCTL, reg_rctl);
 2427 
 2428         /* Setup the HW Rx Head and Tail Descriptor Pointers */
 2429         E1000_WRITE_REG(&sc->hw, RDH, 0);
 2430         E1000_WRITE_REG(&sc->hw, RDT, sc->num_rx_desc - 1);
 2431 }
 2432 
 2433 /*********************************************************************
 2434  *
 2435  *  Free receive related data structures.
 2436  *
 2437  **********************************************************************/
 2438 void
 2439 em_free_receive_structures(struct em_softc *sc)
 2440 {
 2441         struct em_buffer   *rx_buffer;
 2442         int             i;
 2443 
 2444         INIT_DEBUGOUT("free_receive_structures: begin");
 2445 
 2446         if (sc->rx_sparemap) {
 2447                 bus_dmamap_destroy(sc->rxtag, sc->rx_sparemap);
 2448                 sc->rx_sparemap = NULL;
 2449         }
 2450         if (sc->rx_buffer_area != NULL) {
 2451                 rx_buffer = sc->rx_buffer_area;
 2452                 for (i = 0; i < sc->num_rx_desc; i++, rx_buffer++) {
 2453                         if (rx_buffer->map != NULL &&
 2454                             rx_buffer->map->dm_nsegs > 0) {
 2455                                 bus_dmamap_sync(sc->rxtag, rx_buffer->map,
 2456                                     0, rx_buffer->map->dm_mapsize,
 2457                                     BUS_DMASYNC_POSTREAD);
 2458                                 bus_dmamap_unload(sc->rxtag,
 2459                                     rx_buffer->map);
 2460                         }
 2461                         if (rx_buffer->m_head != NULL) {
 2462                                 m_freem(rx_buffer->m_head);
 2463                                 rx_buffer->m_head = NULL;
 2464                         }
 2465                         if (rx_buffer->map != NULL) {
 2466                                 bus_dmamap_destroy(sc->rxtag,
 2467                                     rx_buffer->map);
 2468                                 rx_buffer->map = NULL;
 2469                         }
 2470                 }
 2471         }
 2472         if (sc->rx_buffer_area != NULL) {
 2473                 free(sc->rx_buffer_area, M_DEVBUF);
 2474                 sc->rx_buffer_area = NULL;
 2475         }
 2476         if (sc->rxtag != NULL)
 2477                 sc->rxtag = NULL;
 2478 }
 2479 
 2480 /*********************************************************************
 2481  *
 2482  *  This routine executes in interrupt context. It replenishes
 2483  *  the mbufs in the descriptor and sends data which has been
 2484  *  dma'ed into host memory to upper layer.
 2485  *
 2486  *  We loop at most count times if count is > 0, or until done if
 2487  *  count < 0.
 2488  *
 2489  *********************************************************************/
 2490 void
 2491 em_rxeof(struct em_softc *sc, int count)
 2492 {
 2493         struct ifnet        *ifp;
 2494         struct mbuf         *mp;
 2495         u_int8_t            accept_frame = 0;
 2496         u_int8_t            eop = 0;
 2497         u_int16_t           len, desc_len, prev_len_adj;
 2498         int                 i;
 2499 
 2500         /* Pointer to the receive descriptor being examined. */
 2501         struct em_rx_desc   *current_desc;
 2502         u_int8_t            status;
 2503 
 2504         ifp = &sc->interface_data.ac_if;
 2505         i = sc->next_rx_desc_to_check;
 2506         current_desc = &sc->rx_desc_base[i];
 2507         bus_dmamap_sync(sc->rxdma.dma_tag, sc->rxdma.dma_map, 0,
 2508             sc->rxdma.dma_map->dm_mapsize, BUS_DMASYNC_POSTREAD);
 2509 
 2510         if (!((current_desc->status) & E1000_RXD_STAT_DD))
 2511                 return;
 2512 
 2513         while ((current_desc->status & E1000_RXD_STAT_DD) &&
 2514             (count != 0) &&
 2515             (ifp->if_flags & IFF_RUNNING)) {
 2516                 struct mbuf *m = NULL;
 2517 
 2518                 mp = sc->rx_buffer_area[i].m_head;
 2519                 /*
 2520                  * Can't defer bus_dmamap_sync(9) because TBI_ACCEPT
 2521                  * needs to access the last received byte in the mbuf.
 2522                  */
 2523                 bus_dmamap_sync(sc->rxtag, sc->rx_buffer_area[i].map,
 2524                     0, sc->rx_buffer_area[i].map->dm_mapsize,
 2525                     BUS_DMASYNC_POSTREAD);
 2526 
 2527                 accept_frame = 1;
 2528                 prev_len_adj = 0;
 2529                 desc_len = letoh16(current_desc->length);
 2530                 status = current_desc->status;
 2531                 if (status & E1000_RXD_STAT_EOP) {
 2532                         count--;
 2533                         eop = 1;
 2534                         if (desc_len < ETHER_CRC_LEN) {
 2535                                 len = 0;
 2536                                 prev_len_adj = ETHER_CRC_LEN - desc_len;
 2537                         } else
 2538                                 len = desc_len - ETHER_CRC_LEN;
 2539                 } else {
 2540                         eop = 0;
 2541                         len = desc_len;
 2542                 }
 2543 
 2544                 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
 2545                         u_int8_t last_byte;
 2546                         u_int32_t pkt_len = desc_len;
 2547 
 2548                         if (sc->fmp != NULL)
 2549                                 pkt_len += sc->fmp->m_pkthdr.len; 
 2550 
 2551                         last_byte = *(mtod(mp, caddr_t) + desc_len - 1);
 2552                         if (TBI_ACCEPT(&sc->hw, status, current_desc->errors,
 2553                                        pkt_len, last_byte)) {
 2554                                 em_tbi_adjust_stats(&sc->hw, 
 2555                                                     &sc->stats, 
 2556                                                     pkt_len, 
 2557                                                     sc->hw.mac_addr);
 2558                                 if (len > 0)
 2559                                         len--;
 2560                         } else
 2561                                 accept_frame = 0;
 2562                 }
 2563 
 2564                 if (accept_frame) {
 2565                         if (em_get_buf(sc, i) != 0) {
 2566                                 sc->dropped_pkts++;
 2567                                 goto discard;
 2568                         }
 2569 
 2570                         /* Assign correct length to the current fragment */
 2571                         mp->m_len = len;
 2572 
 2573 #ifdef __STRICT_ALIGNMENT
 2574                         /*
 2575                          * The Ethernet payload is not 32-bit aligned when
 2576                          * Jumbo packets are enabled, so on architectures with
 2577                          * strict alignment we need to shift the entire packet
 2578                          * ETHER_ALIGN bytes. Ugh.
 2579                          */
 2580                         if (sc->hw.max_frame_size > (MCLBYTES - ETHER_ALIGN)) {
 2581                                 unsigned char tmp_align_buf[ETHER_ALIGN];
 2582                                 int tmp_align_buf_len = 0;
 2583 
 2584                                 if (prev_len_adj > sc->align_buf_len)
 2585                                         prev_len_adj -= sc->align_buf_len;
 2586                                 else
 2587                                         prev_len_adj = 0;
 2588 
 2589                                 if (mp->m_len > (MCLBYTES - ETHER_ALIGN)) {
 2590                                         bcopy(mp->m_data +
 2591                                             (MCLBYTES - ETHER_ALIGN),
 2592                                             &tmp_align_buf,
 2593                                             ETHER_ALIGN);
 2594                                         tmp_align_buf_len = mp->m_len -
 2595                                             (MCLBYTES - ETHER_ALIGN);
 2596                                         mp->m_len -= ETHER_ALIGN;
 2597                                 } 
 2598 
 2599                                 if (mp->m_len) {
 2600                                         bcopy(mp->m_data,
 2601                                             mp->m_data + ETHER_ALIGN,
 2602                                             mp->m_len);
 2603                                         if (!sc->align_buf_len)
 2604                                                 mp->m_data += ETHER_ALIGN;
 2605                                 }
 2606 
 2607                                 if (sc->align_buf_len) {
 2608                                         mp->m_len += sc->align_buf_len;
 2609                                         bcopy(&sc->align_buf,
 2610                                             mp->m_data,
 2611                                             sc->align_buf_len);
 2612                                 }
 2613 
 2614                                 if (tmp_align_buf_len) 
 2615                                         bcopy(&tmp_align_buf,
 2616                                             &sc->align_buf,
 2617                                             tmp_align_buf_len);
 2618                                 sc->align_buf_len = tmp_align_buf_len;
 2619                         }
 2620 #endif /* __STRICT_ALIGNMENT */
 2621 
 2622                         if (sc->fmp == NULL) {
 2623                                 mp->m_pkthdr.len = mp->m_len;
 2624                                 sc->fmp = mp;    /* Store the first mbuf */
 2625                                 sc->lmp = mp;
 2626                         } else {
 2627                                 /* Chain mbuf's together */
 2628                                 mp->m_flags &= ~M_PKTHDR;
 2629                                 /*
 2630                                  * Adjust length of previous mbuf in chain if we
 2631                                  * received less than 4 bytes in the last descriptor.
 2632                                  */
 2633                                 if (prev_len_adj > 0) {
 2634                                         sc->lmp->m_len -= prev_len_adj;
 2635                                         sc->fmp->m_pkthdr.len -= prev_len_adj;
 2636                                 }
 2637                                 sc->lmp->m_next = mp;
 2638                                 sc->lmp = sc->lmp->m_next;
 2639                                 sc->fmp->m_pkthdr.len += mp->m_len;
 2640                         }
 2641 
 2642                         if (eop) {
 2643                                 sc->fmp->m_pkthdr.rcvif = ifp;
 2644                                 ifp->if_ipackets++;
 2645                                 em_receive_checksum(sc, current_desc,
 2646                                             sc->fmp);
 2647                                 m = sc->fmp;
 2648                                 sc->fmp = NULL;
 2649                                 sc->lmp = NULL;
 2650                         }
 2651                 } else {
 2652                         sc->dropped_pkts++;
 2653 discard:
 2654                         /* Reuse loaded DMA map and just update mbuf chain */
 2655                         mp = sc->rx_buffer_area[i].m_head;
 2656                         mp->m_len = mp->m_pkthdr.len = MCLBYTES;
 2657                         mp->m_data = mp->m_ext.ext_buf;
 2658                         mp->m_next = NULL;
 2659                         if (sc->hw.max_frame_size <= (MCLBYTES - ETHER_ALIGN))
 2660                                 m_adj(mp, ETHER_ALIGN);
 2661                         if (sc->fmp != NULL) {
 2662                                 m_freem(sc->fmp);
 2663                                 sc->fmp = NULL;
 2664                                 sc->lmp = NULL;
 2665                         }
 2666                         m = NULL;
 2667                 }
 2668 
 2669                 /* Zero out the receive descriptors status. */
 2670                 current_desc->status = 0;
 2671                 bus_dmamap_sync(sc->rxdma.dma_tag, sc->rxdma.dma_map, 0,
 2672                     sc->rxdma.dma_map->dm_mapsize,
 2673                     BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 2674 
 2675                 /* Advance our pointers to the next descriptor. */
 2676                 if (++i == sc->num_rx_desc)
 2677                         i = 0;
 2678                 if (m != NULL) {
 2679                         sc->next_rx_desc_to_check = i;
 2680 
 2681 #if NBPFILTER > 0
 2682                         /*
 2683                          * Handle BPF listeners. Let the BPF
 2684                          * user see the packet.
 2685                          */
 2686                         if (ifp->if_bpf)
 2687                                 bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
 2688 #endif
 2689 
 2690                         ether_input_mbuf(ifp, m);
 2691 
 2692                         i = sc->next_rx_desc_to_check;
 2693                 }
 2694                 current_desc = &sc->rx_desc_base[i];
 2695         }
 2696         sc->next_rx_desc_to_check = i;
 2697 
 2698         /* Advance the E1000's Receive Queue #0  "Tail Pointer". */
 2699         if (--i < 0)
 2700                 i = sc->num_rx_desc - 1;
 2701         E1000_WRITE_REG(&sc->hw, RDT, i);
 2702 }
 2703 
 2704 /*********************************************************************
 2705  *
 2706  *  Verify that the hardware indicated that the checksum is valid. 
 2707  *  Inform the stack about the status of checksum so that stack
 2708  *  doesn't spend time verifying the checksum.
 2709  *
 2710  *********************************************************************/
 2711 void
 2712 em_receive_checksum(struct em_softc *sc, struct em_rx_desc *rx_desc,
 2713     struct mbuf *mp)
 2714 {
 2715         /* 82543 or newer only */
 2716         if ((sc->hw.mac_type < em_82543) ||
 2717             /* Ignore Checksum bit is set */
 2718             (rx_desc->status & E1000_RXD_STAT_IXSM)) {
 2719                 mp->m_pkthdr.csum_flags = 0;
 2720                 return;
 2721         }
 2722 
 2723         if (rx_desc->status & E1000_RXD_STAT_IPCS) {
 2724                 /* Did it pass? */
 2725                 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
 2726                         /* IP Checksum Good */
 2727                         mp->m_pkthdr.csum_flags = M_IPV4_CSUM_IN_OK;
 2728 
 2729                 } else
 2730                         mp->m_pkthdr.csum_flags = 0;
 2731         }
 2732 
 2733         if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
 2734                 /* Did it pass? */        
 2735                 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE))
 2736                         mp->m_pkthdr.csum_flags |=
 2737                                 M_TCP_CSUM_IN_OK | M_UDP_CSUM_IN_OK;
 2738         }
 2739 }
 2740 
 2741 void
 2742 em_enable_intr(struct em_softc *sc)
 2743 {
 2744         E1000_WRITE_REG(&sc->hw, IMS, (IMS_ENABLE_MASK));
 2745 }
 2746 
 2747 void
 2748 em_disable_intr(struct em_softc *sc)
 2749 {
 2750         /*
 2751          * The first version of 82542 had an errata where when link
 2752          * was forced it would stay up even if the cable was disconnected
 2753          * Sequence errors were used to detect the disconnect and then
 2754          * the driver would unforce the link.  This code is in the ISR.
 2755          * For this to work correctly the Sequence error interrupt had
 2756          * to be enabled all the time.
 2757          */
 2758 
 2759         if (sc->hw.mac_type == em_82542_rev2_0)
 2760                 E1000_WRITE_REG(&sc->hw, IMC, (0xffffffff & ~E1000_IMC_RXSEQ));
 2761         else
 2762                 E1000_WRITE_REG(&sc->hw, IMC, 0xffffffff);
 2763 }
 2764 
 2765 int
 2766 em_is_valid_ether_addr(u_int8_t *addr)
 2767 {
 2768         const char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
 2769 
 2770         if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN)))
 2771                 return (FALSE);
 2772 
 2773         return (TRUE);
 2774 }
 2775 
 2776 void
 2777 em_write_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value)
 2778 {
 2779         struct pci_attach_args *pa = &((struct em_osdep *)hw->back)->em_pa;
 2780         pci_chipset_tag_t pc = pa->pa_pc;
 2781         /* Should we do read/mask/write...?  16 vs 32 bit!!! */
 2782         pci_conf_write(pc, pa->pa_tag, reg, *value);
 2783 }
 2784 
 2785 void
 2786 em_read_pci_cfg(struct em_hw *hw, uint32_t reg, uint16_t *value)
 2787 {
 2788         struct pci_attach_args *pa = &((struct em_osdep *)hw->back)->em_pa;
 2789         pci_chipset_tag_t pc = pa->pa_pc;
 2790         *value = pci_conf_read(pc, pa->pa_tag, reg);
 2791 }
 2792 
 2793 void
 2794 em_pci_set_mwi(struct em_hw *hw)
 2795 {
 2796         struct pci_attach_args *pa = &((struct em_osdep *)hw->back)->em_pa;
 2797         pci_chipset_tag_t pc = pa->pa_pc;
 2798         /* Should we do read/mask/write...?  16 vs 32 bit!!! */
 2799         pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
 2800                 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE));
 2801 }
 2802 
 2803 void
 2804 em_pci_clear_mwi(struct em_hw *hw)
 2805 {
 2806         struct pci_attach_args *pa = &((struct em_osdep *)hw->back)->em_pa;
 2807         pci_chipset_tag_t pc = pa->pa_pc;
 2808         /* Should we do read/mask/write...?  16 vs 32 bit!!! */
 2809         pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
 2810                 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE));
 2811 }
 2812 
 2813 int32_t
 2814 em_read_pcie_cap_reg(struct em_hw *hw, uint32_t reg, uint16_t *value)
 2815 {
 2816         struct pci_attach_args *pa = &((struct em_osdep *)hw->back)->em_pa;
 2817         int32_t rc;
 2818         u_int16_t pectl;
 2819 
 2820         /* find the PCIe link width and set max read request to 4KB */
 2821         if (pci_get_capability(pa->pa_pc, pa->pa_tag, PCI_CAP_PCIEXPRESS,
 2822             NULL, NULL) != 0) {
 2823                 em_read_pci_cfg(hw, reg + 0x12, value);
 2824 
 2825                 em_read_pci_cfg(hw, reg + 0x8, &pectl);
 2826                 pectl = (pectl & ~0x7000) | (5 << 12);
 2827                 em_write_pci_cfg(hw, reg + 0x8, &pectl);
 2828                 rc = 0;
 2829         } else
 2830                 rc = -1;
 2831 
 2832         return (rc);
 2833 }
 2834 
 2835 /*********************************************************************
 2836 * 82544 Coexistence issue workaround.
 2837 *    There are 2 issues.
 2838 *       1. Transmit Hang issue.
 2839 *    To detect this issue, following equation can be used...
 2840 *          SIZE[3:0] + ADDR[2:0] = SUM[3:0].
 2841 *          If SUM[3:0] is in between 1 to 4, we will have this issue.
 2842 *
 2843 *       2. DAC issue.
 2844 *    To detect this issue, following equation can be used...
 2845 *          SIZE[3:0] + ADDR[2:0] = SUM[3:0].
 2846 *          If SUM[3:0] is in between 9 to c, we will have this issue.
 2847 *
 2848 *
 2849 *    WORKAROUND:
 2850 *          Make sure we do not have ending address as 1,2,3,4(Hang) or 9,a,b,c (DAC)
 2851 *
 2852 *** *********************************************************************/
 2853 u_int32_t
 2854 em_fill_descriptors(u_int64_t address, u_int32_t length,
 2855     PDESC_ARRAY desc_array)
 2856 {
 2857         /* Since issue is sensitive to length and address.*/
 2858         /* Let us first check the address...*/
 2859         u_int32_t safe_terminator;
 2860         if (length <= 4) {
 2861                 desc_array->descriptor[0].address = address;
 2862                 desc_array->descriptor[0].length = length;
 2863                 desc_array->elements = 1;
 2864                 return desc_array->elements;
 2865         }
 2866         safe_terminator = (u_int32_t)((((u_int32_t)address & 0x7) + (length & 0xF)) & 0xF);
 2867         /* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */
 2868         if (safe_terminator == 0   ||
 2869         (safe_terminator > 4   &&
 2870         safe_terminator < 9)   ||
 2871         (safe_terminator > 0xC &&
 2872         safe_terminator <= 0xF)) {
 2873                 desc_array->descriptor[0].address = address;
 2874                 desc_array->descriptor[0].length = length;
 2875                 desc_array->elements = 1;
 2876                 return desc_array->elements;
 2877         }
 2878 
 2879         desc_array->descriptor[0].address = address;
 2880         desc_array->descriptor[0].length = length - 4;
 2881         desc_array->descriptor[1].address = address + (length - 4);
 2882         desc_array->descriptor[1].length = 4;
 2883         desc_array->elements = 2;
 2884         return desc_array->elements;
 2885 }
 2886 
 2887 /**********************************************************************
 2888  *
 2889  *  Update the board statistics counters. 
 2890  *
 2891  **********************************************************************/
 2892 void
 2893 em_update_stats_counters(struct em_softc *sc)
 2894 {
 2895         struct ifnet   *ifp;
 2896 
 2897         if (sc->hw.media_type == em_media_type_copper ||
 2898             (E1000_READ_REG(&sc->hw, STATUS) & E1000_STATUS_LU)) {
 2899                 sc->stats.symerrs += E1000_READ_REG(&sc->hw, SYMERRS);
 2900                 sc->stats.sec += E1000_READ_REG(&sc->hw, SEC);
 2901         }
 2902         sc->stats.crcerrs += E1000_READ_REG(&sc->hw, CRCERRS);
 2903         sc->stats.mpc += E1000_READ_REG(&sc->hw, MPC);
 2904         sc->stats.scc += E1000_READ_REG(&sc->hw, SCC);
 2905         sc->stats.ecol += E1000_READ_REG(&sc->hw, ECOL);
 2906 
 2907         sc->stats.mcc += E1000_READ_REG(&sc->hw, MCC);
 2908         sc->stats.latecol += E1000_READ_REG(&sc->hw, LATECOL);
 2909         sc->stats.colc += E1000_READ_REG(&sc->hw, COLC);
 2910         sc->stats.dc += E1000_READ_REG(&sc->hw, DC);
 2911         sc->stats.rlec += E1000_READ_REG(&sc->hw, RLEC);
 2912         sc->stats.xonrxc += E1000_READ_REG(&sc->hw, XONRXC);
 2913         sc->stats.xontxc += E1000_READ_REG(&sc->hw, XONTXC);
 2914         sc->stats.xoffrxc += E1000_READ_REG(&sc->hw, XOFFRXC);
 2915         sc->stats.xofftxc += E1000_READ_REG(&sc->hw, XOFFTXC);
 2916         sc->stats.fcruc += E1000_READ_REG(&sc->hw, FCRUC);
 2917         sc->stats.prc64 += E1000_READ_REG(&sc->hw, PRC64);
 2918         sc->stats.prc127 += E1000_READ_REG(&sc->hw, PRC127);
 2919         sc->stats.prc255 += E1000_READ_REG(&sc->hw, PRC255);
 2920         sc->stats.prc511 += E1000_READ_REG(&sc->hw, PRC511);
 2921         sc->stats.prc1023 += E1000_READ_REG(&sc->hw, PRC1023);
 2922         sc->stats.prc1522 += E1000_READ_REG(&sc->hw, PRC1522);
 2923         sc->stats.gprc += E1000_READ_REG(&sc->hw, GPRC);
 2924         sc->stats.bprc += E1000_READ_REG(&sc->hw, BPRC);
 2925         sc->stats.mprc += E1000_READ_REG(&sc->hw, MPRC);
 2926         sc->stats.gptc += E1000_READ_REG(&sc->hw, GPTC);
 2927 
 2928         /* For the 64-bit byte counters the low dword must be read first. */
 2929         /* Both registers clear on the read of the high dword */
 2930 
 2931         sc->stats.gorcl += E1000_READ_REG(&sc->hw, GORCL); 
 2932         sc->stats.gorch += E1000_READ_REG(&sc->hw, GORCH);
 2933         sc->stats.gotcl += E1000_READ_REG(&sc->hw, GOTCL);
 2934         sc->stats.gotch += E1000_READ_REG(&sc->hw, GOTCH);
 2935 
 2936         sc->stats.rnbc += E1000_READ_REG(&sc->hw, RNBC);
 2937         sc->stats.ruc += E1000_READ_REG(&sc->hw, RUC);
 2938         sc->stats.rfc += E1000_READ_REG(&sc->hw, RFC);
 2939         sc->stats.roc += E1000_READ_REG(&sc->hw, ROC);
 2940         sc->stats.rjc += E1000_READ_REG(&sc->hw, RJC);
 2941 
 2942         sc->stats.torl += E1000_READ_REG(&sc->hw, TORL);
 2943         sc->stats.torh += E1000_READ_REG(&sc->hw, TORH);
 2944         sc->stats.totl += E1000_READ_REG(&sc->hw, TOTL);
 2945         sc->stats.toth += E1000_READ_REG(&sc->hw, TOTH);
 2946 
 2947         sc->stats.tpr += E1000_READ_REG(&sc->hw, TPR);
 2948         sc->stats.tpt += E1000_READ_REG(&sc->hw, TPT);
 2949         sc->stats.ptc64 += E1000_READ_REG(&sc->hw, PTC64);
 2950         sc->stats.ptc127 += E1000_READ_REG(&sc->hw, PTC127);
 2951         sc->stats.ptc255 += E1000_READ_REG(&sc->hw, PTC255);
 2952         sc->stats.ptc511 += E1000_READ_REG(&sc->hw, PTC511);
 2953         sc->stats.ptc1023 += E1000_READ_REG(&sc->hw, PTC1023);
 2954         sc->stats.ptc1522 += E1000_READ_REG(&sc->hw, PTC1522);
 2955         sc->stats.mptc += E1000_READ_REG(&sc->hw, MPTC);
 2956         sc->stats.bptc += E1000_READ_REG(&sc->hw, BPTC);
 2957 
 2958         if (sc->hw.mac_type >= em_82543) {
 2959                 sc->stats.algnerrc += 
 2960                 E1000_READ_REG(&sc->hw, ALGNERRC);
 2961                 sc->stats.rxerrc += 
 2962                 E1000_READ_REG(&sc->hw, RXERRC);
 2963                 sc->stats.tncrs += 
 2964                 E1000_READ_REG(&sc->hw, TNCRS);
 2965                 sc->stats.cexterr += 
 2966                 E1000_READ_REG(&sc->hw, CEXTERR);
 2967                 sc->stats.tsctc += 
 2968                 E1000_READ_REG(&sc->hw, TSCTC);
 2969                 sc->stats.tsctfc += 
 2970                 E1000_READ_REG(&sc->hw, TSCTFC);
 2971         }
 2972         ifp = &sc->interface_data.ac_if;
 2973 
 2974         /* Fill out the OS statistics structure */
 2975         ifp->if_collisions = sc->stats.colc;
 2976 
 2977         /* Rx Errors */
 2978         ifp->if_ierrors =
 2979             sc->dropped_pkts +
 2980             sc->stats.rxerrc +
 2981             sc->stats.crcerrs +
 2982             sc->stats.algnerrc +
 2983             sc->stats.ruc + sc->stats.roc +
 2984             sc->stats.mpc + sc->stats.cexterr +
 2985             sc->rx_overruns;
 2986 
 2987         /* Tx Errors */
 2988         ifp->if_oerrors = sc->stats.ecol + sc->stats.latecol +
 2989             sc->watchdog_events;
 2990 }
 2991 
 2992 /**********************************************************************
 2993  *
 2994  *  This routine is called only when em_display_debug_stats is enabled.
 2995  *  This routine provides a way to take a look at important statistics
 2996  *  maintained by the driver and hardware.
 2997  *
 2998  **********************************************************************/
 2999 void
 3000 em_print_hw_stats(struct em_softc *sc)
 3001 {
 3002         const char * const unit = sc->sc_dv.dv_xname;
 3003 
 3004         printf("%s: Excessive collisions = %lld\n", unit,
 3005                 (long long)sc->stats.ecol);
 3006         printf("%s: Symbol errors = %lld\n", unit,
 3007                 (long long)sc->stats.symerrs);
 3008         printf("%s: Sequence errors = %lld\n", unit,
 3009                 (long long)sc->stats.sec);
 3010         printf("%s: Defer count = %lld\n", unit,
 3011                 (long long)sc->stats.dc);
 3012 
 3013         printf("%s: Missed Packets = %lld\n", unit,
 3014                 (long long)sc->stats.mpc);
 3015         printf("%s: Receive No Buffers = %lld\n", unit,
 3016                 (long long)sc->stats.rnbc);
 3017         /* RLEC is inaccurate on some hardware, calculate our own */
 3018         printf("%s: Receive Length Errors = %lld\n", unit,
 3019                 ((long long)sc->stats.roc +
 3020                 (long long)sc->stats.ruc));
 3021         printf("%s: Receive errors = %lld\n", unit,
 3022                 (long long)sc->stats.rxerrc);
 3023         printf("%s: Crc errors = %lld\n", unit,
 3024                 (long long)sc->stats.crcerrs);
 3025         printf("%s: Alignment errors = %lld\n", unit,
 3026                 (long long)sc->stats.algnerrc);
 3027         printf("%s: Carrier extension errors = %lld\n", unit,
 3028                 (long long)sc->stats.cexterr);
 3029 
 3030         printf("%s: RX overruns = %ld\n", unit,
 3031                 sc->rx_overruns);
 3032         printf("%s: watchdog timeouts = %ld\n", unit,
 3033                 sc->watchdog_events);
 3034 
 3035         printf("%s: XON Rcvd = %lld\n", unit,
 3036                 (long long)sc->stats.xonrxc);
 3037         printf("%s: XON Xmtd = %lld\n", unit,
 3038                 (long long)sc->stats.xontxc);
 3039         printf("%s: XOFF Rcvd = %lld\n", unit,
 3040                 (long long)sc->stats.xoffrxc);
 3041         printf("%s: XOFF Xmtd = %lld\n", unit,
 3042                 (long long)sc->stats.xofftxc);
 3043 
 3044         printf("%s: Good Packets Rcvd = %lld\n", unit,
 3045                 (long long)sc->stats.gprc);
 3046         printf("%s: Good Packets Xmtd = %lld\n", unit,
 3047                 (long long)sc->stats.gptc);
 3048 }

/* [<][>][^][v][top][bottom][index][help] */