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