The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/em/if_em.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 8a29e2b09b1da0a33fefeea0cadd4280


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.