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 if (!(ifp->if_flags & IFF_NOARP)) 1208 arp_ifinit(ifp, ifa); 1209 } else 1210 #endif 1211 error = ether_ioctl(ifp, command, data); 1212 break; 1213 case SIOCSIFMTU: 1214 { 1215 int max_frame_size; 1216 u16 eeprom_data = 0; 1217 1218 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)"); 1219 1220 EM_CORE_LOCK(adapter); 1221 switch (adapter->hw.mac.type) { 1222 case e1000_82573: 1223 /* 1224 * 82573 only supports jumbo frames 1225 * if ASPM is disabled. 1226 */ 1227 e1000_read_nvm(&adapter->hw, 1228 NVM_INIT_3GIO_3, 1, &eeprom_data); 1229 if (eeprom_data & NVM_WORD1A_ASPM_MASK) { 1230 max_frame_size = ETHER_MAX_LEN; 1231 break; 1232 } 1233 /* Allow Jumbo frames - fall thru */ 1234 case e1000_82571: 1235 case e1000_82572: 1236 case e1000_ich9lan: 1237 case e1000_ich10lan: 1238 case e1000_82574: 1239 case e1000_80003es2lan: /* Limit Jumbo Frame size */ 1240 max_frame_size = 9234; 1241 break; 1242 /* Adapters that do not support jumbo frames */ 1243 case e1000_82542: 1244 case e1000_82583: 1245 case e1000_ich8lan: 1246 max_frame_size = ETHER_MAX_LEN; 1247 break; 1248 default: 1249 max_frame_size = MAX_JUMBO_FRAME_SIZE; 1250 } 1251 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN - 1252 ETHER_CRC_LEN) { 1253 EM_CORE_UNLOCK(adapter); 1254 error = EINVAL; 1255 break; 1256 } 1257 1258 ifp->if_mtu = ifr->ifr_mtu; 1259 adapter->max_frame_size = 1260 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; 1261 em_init_locked(adapter); 1262 EM_CORE_UNLOCK(adapter); 1263 break; 1264 } 1265 case SIOCSIFFLAGS: 1266 IOCTL_DEBUGOUT("ioctl rcv'd:\ 1267 SIOCSIFFLAGS (Set Interface Flags)"); 1268 EM_CORE_LOCK(adapter); 1269 if (ifp->if_flags & IFF_UP) { 1270 if ((ifp->if_drv_flags & IFF_DRV_RUNNING)) { 1271 if ((ifp->if_flags ^ adapter->if_flags) & 1272 (IFF_PROMISC | IFF_ALLMULTI)) { 1273 em_disable_promisc(adapter); 1274 em_set_promisc(adapter); 1275 } 1276 } else 1277 em_init_locked(adapter); 1278 } else 1279 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1280 EM_TX_LOCK(adapter); 1281 em_stop(adapter); 1282 EM_TX_UNLOCK(adapter); 1283 } 1284 adapter->if_flags = ifp->if_flags; 1285 EM_CORE_UNLOCK(adapter); 1286 break; 1287 case SIOCADDMULTI: 1288 case SIOCDELMULTI: 1289 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI"); 1290 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1291 EM_CORE_LOCK(adapter); 1292 em_disable_intr(adapter); 1293 em_set_multi(adapter); 1294 if (adapter->hw.mac.type == e1000_82542 && 1295 adapter->hw.revision_id == E1000_REVISION_2) { 1296 em_initialize_receive_unit(adapter); 1297 } 1298 #ifdef DEVICE_POLLING 1299 if (!(ifp->if_capenable & IFCAP_POLLING)) 1300 #endif 1301 em_enable_intr(adapter); 1302 EM_CORE_UNLOCK(adapter); 1303 } 1304 break; 1305 case SIOCSIFMEDIA: 1306 /* Check SOL/IDER usage */ 1307 EM_CORE_LOCK(adapter); 1308 if (e1000_check_reset_block(&adapter->hw)) { 1309 EM_CORE_UNLOCK(adapter); 1310 device_printf(adapter->dev, "Media change is" 1311 " blocked due to SOL/IDER session.\n"); 1312 break; 1313 } 1314 EM_CORE_UNLOCK(adapter); 1315 case SIOCGIFMEDIA: 1316 IOCTL_DEBUGOUT("ioctl rcv'd: \ 1317 SIOCxIFMEDIA (Get/Set Interface Media)"); 1318 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command); 1319 break; 1320 case SIOCSIFCAP: 1321 { 1322 int mask, reinit; 1323 1324 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)"); 1325 reinit = 0; 1326 mask = ifr->ifr_reqcap ^ ifp->if_capenable; 1327 #ifdef DEVICE_POLLING 1328 if (mask & IFCAP_POLLING) { 1329 if (ifr->ifr_reqcap & IFCAP_POLLING) { 1330 error = ether_poll_register(em_poll, ifp); 1331 if (error) 1332 return (error); 1333 EM_CORE_LOCK(adapter); 1334 em_disable_intr(adapter); 1335 ifp->if_capenable |= IFCAP_POLLING; 1336 EM_CORE_UNLOCK(adapter); 1337 } else { 1338 error = ether_poll_deregister(ifp); 1339 /* Enable interrupt even in error case */ 1340 EM_CORE_LOCK(adapter); 1341 em_enable_intr(adapter); 1342 ifp->if_capenable &= ~IFCAP_POLLING; 1343 EM_CORE_UNLOCK(adapter); 1344 } 1345 } 1346 #endif 1347 if (mask & IFCAP_HWCSUM) { 1348 ifp->if_capenable ^= IFCAP_HWCSUM; 1349 reinit = 1; 1350 } 1351 #if __FreeBSD_version >= 700000 1352 if (mask & IFCAP_TSO4) { 1353 ifp->if_capenable ^= IFCAP_TSO4; 1354 reinit = 1; 1355 } 1356 #endif 1357 1358 if (mask & IFCAP_VLAN_HWTAGGING) { 1359 ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; 1360 reinit = 1; 1361 } 1362 if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING)) 1363 em_init(adapter); 1364 #if __FreeBSD_version >= 700000 1365 VLAN_CAPABILITIES(ifp); 1366 #endif 1367 break; 1368 } 1369 1370 default: 1371 error = ether_ioctl(ifp, command, data); 1372 break; 1373 } 1374 1375 return (error); 1376 } 1377 1378 /********************************************************************* 1379 * Watchdog timer: 1380 * 1381 * This routine is called from the local timer every second. 1382 * As long as transmit descriptors are being cleaned the value 1383 * is non-zero and we do nothing. Reaching 0 indicates a tx hang 1384 * and we then reset the device. 1385 * 1386 **********************************************************************/ 1387 1388 static void 1389 em_watchdog(struct adapter *adapter) 1390 { 1391 1392 EM_CORE_LOCK_ASSERT(adapter); 1393 1394 /* 1395 ** The timer is set to 5 every time start queues a packet. 1396 ** Then txeof keeps resetting it as long as it cleans at 1397 ** least one descriptor. 1398 ** Finally, anytime all descriptors are clean the timer is 1399 ** set to 0. 1400 */ 1401 EM_TX_LOCK(adapter); 1402 if ((adapter->watchdog_timer == 0) || (--adapter->watchdog_timer)) { 1403 EM_TX_UNLOCK(adapter); 1404 return; 1405 } 1406 1407 /* If we are in this routine because of pause frames, then 1408 * don't reset the hardware. 1409 */ 1410 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) & 1411 E1000_STATUS_TXOFF) { 1412 adapter->watchdog_timer = EM_TX_TIMEOUT; 1413 EM_TX_UNLOCK(adapter); 1414 return; 1415 } 1416 1417 if (e1000_check_for_link(&adapter->hw) == 0) 1418 device_printf(adapter->dev, "watchdog timeout -- resetting\n"); 1419 adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 1420 adapter->watchdog_events++; 1421 EM_TX_UNLOCK(adapter); 1422 1423 em_init_locked(adapter); 1424 } 1425 1426 /********************************************************************* 1427 * Init entry point 1428 * 1429 * This routine is used in two ways. It is used by the stack as 1430 * init entry point in network interface structure. It is also used 1431 * by the driver as a hw/sw initialization routine to get to a 1432 * consistent state. 1433 * 1434 * return 0 on success, positive on failure 1435 **********************************************************************/ 1436 1437 static void 1438 em_init_locked(struct adapter *adapter) 1439 { 1440 struct ifnet *ifp = adapter->ifp; 1441 device_t dev = adapter->dev; 1442 u32 pba; 1443 1444 INIT_DEBUGOUT("em_init: begin"); 1445 1446 EM_CORE_LOCK_ASSERT(adapter); 1447 1448 EM_TX_LOCK(adapter); 1449 em_stop(adapter); 1450 EM_TX_UNLOCK(adapter); 1451 1452 /* 1453 * Packet Buffer Allocation (PBA) 1454 * Writing PBA sets the receive portion of the buffer 1455 * the remainder is used for the transmit buffer. 1456 * 1457 * Devices before the 82547 had a Packet Buffer of 64K. 1458 * Default allocation: PBA=48K for Rx, leaving 16K for Tx. 1459 * After the 82547 the buffer was reduced to 40K. 1460 * Default allocation: PBA=30K for Rx, leaving 10K for Tx. 1461 * Note: default does not leave enough room for Jumbo Frame >10k. 1462 */ 1463 switch (adapter->hw.mac.type) { 1464 case e1000_82547: 1465 case e1000_82547_rev_2: /* 82547: Total Packet Buffer is 40K */ 1466 if (adapter->max_frame_size > 8192) 1467 pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */ 1468 else 1469 pba = E1000_PBA_30K; /* 30K for Rx, 10K for Tx */ 1470 adapter->tx_fifo_head = 0; 1471 adapter->tx_head_addr = pba << EM_TX_HEAD_ADDR_SHIFT; 1472 adapter->tx_fifo_size = 1473 (E1000_PBA_40K - pba) << EM_PBA_BYTES_SHIFT; 1474 break; 1475 /* Total Packet Buffer on these is 48K */ 1476 case e1000_82571: 1477 case e1000_82572: 1478 case e1000_80003es2lan: 1479 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */ 1480 break; 1481 case e1000_82573: /* 82573: Total Packet Buffer is 32K */ 1482 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */ 1483 break; 1484 case e1000_82574: 1485 case e1000_82583: 1486 pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */ 1487 break; 1488 case e1000_ich9lan: 1489 case e1000_ich10lan: 1490 case e1000_ich8lan: 1491 pba = E1000_PBA_8K; 1492 break; 1493 default: 1494 /* Devices before 82547 had a Packet Buffer of 64K. */ 1495 if (adapter->max_frame_size > 8192) 1496 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */ 1497 else 1498 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */ 1499 } 1500 1501 INIT_DEBUGOUT1("em_init: pba=%dK",pba); 1502 E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba); 1503 1504 /* Get the latest mac address, User can use a LAA */ 1505 bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr, 1506 ETHER_ADDR_LEN); 1507 1508 /* Put the address into the Receive Address Array */ 1509 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); 1510 1511 /* 1512 * With the 82571 adapter, RAR[0] may be overwritten 1513 * when the other port is reset, we make a duplicate 1514 * in RAR[14] for that eventuality, this assures 1515 * the interface continues to function. 1516 */ 1517 if (adapter->hw.mac.type == e1000_82571) { 1518 e1000_set_laa_state_82571(&adapter->hw, TRUE); 1519 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 1520 E1000_RAR_ENTRIES - 1); 1521 } 1522 1523 /* Initialize the hardware */ 1524 if (em_hardware_init(adapter)) { 1525 device_printf(dev, "Unable to initialize the hardware\n"); 1526 return; 1527 } 1528 em_update_link_status(adapter); 1529 1530 /* Setup VLAN support, basic and offload if available */ 1531 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN); 1532 1533 #if __FreeBSD_version < 700029 1534 if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) { 1535 u32 ctrl; 1536 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL); 1537 ctrl |= E1000_CTRL_VME; 1538 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl); 1539 } 1540 #else 1541 /* Use real VLAN Filter support */ 1542 em_setup_vlan_hw_support(adapter); 1543 #endif 1544 1545 /* Set hardware offload abilities */ 1546 ifp->if_hwassist = 0; 1547 if (adapter->hw.mac.type >= e1000_82543) { 1548 if (ifp->if_capenable & IFCAP_TXCSUM) 1549 ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP); 1550 #if __FreeBSD_version >= 700000 1551 if (ifp->if_capenable & IFCAP_TSO4) 1552 ifp->if_hwassist |= CSUM_TSO; 1553 #endif 1554 } 1555 1556 /* Configure for OS presence */ 1557 em_init_manageability(adapter); 1558 1559 /* Prepare transmit descriptors and buffers */ 1560 em_setup_transmit_structures(adapter); 1561 em_initialize_transmit_unit(adapter); 1562 1563 /* Setup Multicast table */ 1564 em_set_multi(adapter); 1565 1566 /* Prepare receive descriptors and buffers */ 1567 if (em_setup_receive_structures(adapter)) { 1568 device_printf(dev, "Could not setup receive structures\n"); 1569 EM_TX_LOCK(adapter); 1570 em_stop(adapter); 1571 EM_TX_UNLOCK(adapter); 1572 return; 1573 } 1574 em_initialize_receive_unit(adapter); 1575 1576 /* Don't lose promiscuous settings */ 1577 em_set_promisc(adapter); 1578 1579 ifp->if_drv_flags |= IFF_DRV_RUNNING; 1580 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 1581 1582 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1583 e1000_clear_hw_cntrs_base_generic(&adapter->hw); 1584 1585 /* MSI/X configuration for 82574 */ 1586 if (adapter->hw.mac.type == e1000_82574) { 1587 int tmp; 1588 tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 1589 tmp |= E1000_CTRL_EXT_PBA_CLR; 1590 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp); 1591 /* 1592 ** Set the IVAR - interrupt vector routing. 1593 ** Each nibble represents a vector, high bit 1594 ** is enable, other 3 bits are the MSIX table 1595 ** entry, we map RXQ0 to 0, TXQ0 to 1, and 1596 ** Link (other) to 2, hence the magic number. 1597 */ 1598 E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908); 1599 } 1600 1601 #ifdef DEVICE_POLLING 1602 /* 1603 * Only enable interrupts if we are not polling, make sure 1604 * they are off otherwise. 1605 */ 1606 if (ifp->if_capenable & IFCAP_POLLING) 1607 em_disable_intr(adapter); 1608 else 1609 #endif /* DEVICE_POLLING */ 1610 em_enable_intr(adapter); 1611 1612 /* Don't reset the phy next time init gets called */ 1613 adapter->hw.phy.reset_disable = TRUE; 1614 } 1615 1616 static void 1617 em_init(void *arg) 1618 { 1619 struct adapter *adapter = arg; 1620 1621 EM_CORE_LOCK(adapter); 1622 em_init_locked(adapter); 1623 EM_CORE_UNLOCK(adapter); 1624 } 1625 1626 1627 #ifdef DEVICE_POLLING 1628 /********************************************************************* 1629 * 1630 * Legacy polling routine 1631 * 1632 *********************************************************************/ 1633 static int 1634 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) 1635 { 1636 struct adapter *adapter = ifp->if_softc; 1637 u32 reg_icr, rx_done = 0; 1638 1639 EM_CORE_LOCK(adapter); 1640 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 1641 EM_CORE_UNLOCK(adapter); 1642 return (rx_done); 1643 } 1644 1645 if (cmd == POLL_AND_CHECK_STATUS) { 1646 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1647 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1648 callout_stop(&adapter->timer); 1649 adapter->hw.mac.get_link_status = 1; 1650 em_update_link_status(adapter); 1651 callout_reset(&adapter->timer, hz, 1652 em_local_timer, adapter); 1653 } 1654 } 1655 EM_CORE_UNLOCK(adapter); 1656 1657 rx_done = em_rxeof(adapter, count); 1658 1659 EM_TX_LOCK(adapter); 1660 em_txeof(adapter); 1661 #if __FreeBSD_version >= 800000 1662 if (!drbr_empty(ifp, adapter->br)) 1663 em_mq_start_locked(ifp, NULL); 1664 #else 1665 if (!IFQ_DRV_IS_EMPTY(&ifp->snd)) 1666 em_start_locked(ifp); 1667 #endif 1668 EM_TX_UNLOCK(adapter); 1669 return (rx_done); 1670 } 1671 #endif /* DEVICE_POLLING */ 1672 1673 #ifdef EM_LEGACY_IRQ 1674 /********************************************************************* 1675 * 1676 * Legacy Interrupt Service routine 1677 * 1678 *********************************************************************/ 1679 1680 static void 1681 em_intr(void *arg) 1682 { 1683 struct adapter *adapter = arg; 1684 struct ifnet *ifp = adapter->ifp; 1685 u32 reg_icr; 1686 1687 1688 if (ifp->if_capenable & IFCAP_POLLING) 1689 return; 1690 1691 EM_CORE_LOCK(adapter); 1692 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1693 if (reg_icr & E1000_ICR_RXO) 1694 adapter->rx_overruns++; 1695 if ((reg_icr == 0xffffffff) || (reg_icr == 0)|| 1696 (adapter->hw.mac.type >= e1000_82571 && 1697 (reg_icr & E1000_ICR_INT_ASSERTED) == 0)) 1698 goto out; 1699 1700 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) 1701 goto out; 1702 1703 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1704 callout_stop(&adapter->timer); 1705 adapter->hw.mac.get_link_status = 1; 1706 em_update_link_status(adapter); 1707 /* Deal with TX cruft when link lost */ 1708 em_tx_purge(adapter); 1709 callout_reset(&adapter->timer, hz, 1710 em_local_timer, adapter); 1711 goto out; 1712 } 1713 1714 EM_TX_LOCK(adapter); 1715 em_txeof(adapter); 1716 em_rxeof(adapter, -1); 1717 em_txeof(adapter); 1718 if (ifp->if_drv_flags & IFF_DRV_RUNNING && 1719 !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) 1720 em_start_locked(ifp); 1721 EM_TX_UNLOCK(adapter); 1722 1723 out: 1724 EM_CORE_UNLOCK(adapter); 1725 return; 1726 } 1727 1728 #else /* EM_FAST_IRQ, then fast interrupt routines only */ 1729 1730 static void 1731 em_handle_link(void *context, int pending) 1732 { 1733 struct adapter *adapter = context; 1734 struct ifnet *ifp = adapter->ifp; 1735 1736 if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) 1737 return; 1738 1739 EM_CORE_LOCK(adapter); 1740 callout_stop(&adapter->timer); 1741 em_update_link_status(adapter); 1742 /* Deal with TX cruft when link lost */ 1743 em_tx_purge(adapter); 1744 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 1745 EM_CORE_UNLOCK(adapter); 1746 } 1747 1748 1749 /* Combined RX/TX handler, used by Legacy and MSI */ 1750 static void 1751 em_handle_rxtx(void *context, int pending) 1752 { 1753 struct adapter *adapter = context; 1754 struct ifnet *ifp = adapter->ifp; 1755 1756 1757 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1758 if (em_rxeof(adapter, adapter->rx_process_limit) != 0) 1759 taskqueue_enqueue(adapter->tq, &adapter->rxtx_task); 1760 EM_TX_LOCK(adapter); 1761 em_txeof(adapter); 1762 1763 #if __FreeBSD_version >= 800000 1764 if (!drbr_empty(ifp, adapter->br)) 1765 em_mq_start_locked(ifp, NULL); 1766 #else 1767 if (!IFQ_DRV_IS_EMPTY(&ifp->snd)) 1768 em_start_locked(ifp); 1769 #endif 1770 EM_TX_UNLOCK(adapter); 1771 } 1772 1773 em_enable_intr(adapter); 1774 } 1775 1776 /********************************************************************* 1777 * 1778 * Fast Legacy/MSI Combined Interrupt Service routine 1779 * 1780 *********************************************************************/ 1781 #if __FreeBSD_version < 700000 1782 #define FILTER_STRAY 1783 #define FILTER_HANDLED 1784 static void 1785 #else 1786 static int 1787 #endif 1788 em_irq_fast(void *arg) 1789 { 1790 struct adapter *adapter = arg; 1791 struct ifnet *ifp; 1792 u32 reg_icr; 1793 1794 ifp = adapter->ifp; 1795 1796 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1797 1798 /* Hot eject? */ 1799 if (reg_icr == 0xffffffff) 1800 return FILTER_STRAY; 1801 1802 /* Definitely not our interrupt. */ 1803 if (reg_icr == 0x0) 1804 return FILTER_STRAY; 1805 1806 /* 1807 * Starting with the 82571 chip, bit 31 should be used to 1808 * determine whether the interrupt belongs to us. 1809 */ 1810 if (adapter->hw.mac.type >= e1000_82571 && 1811 (reg_icr & E1000_ICR_INT_ASSERTED) == 0) 1812 return FILTER_STRAY; 1813 1814 /* 1815 * Mask interrupts until the taskqueue is finished running. This is 1816 * cheap, just assume that it is needed. This also works around the 1817 * MSI message reordering errata on certain systems. 1818 */ 1819 em_disable_intr(adapter); 1820 taskqueue_enqueue(adapter->tq, &adapter->rxtx_task); 1821 1822 /* Link status change */ 1823 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1824 adapter->hw.mac.get_link_status = 1; 1825 taskqueue_enqueue(taskqueue_fast, &adapter->link_task); 1826 } 1827 1828 if (reg_icr & E1000_ICR_RXO) 1829 adapter->rx_overruns++; 1830 return FILTER_HANDLED; 1831 } 1832 1833 /********************************************************************* 1834 * 1835 * MSIX Interrupt Service Routines 1836 * 1837 **********************************************************************/ 1838 #define EM_MSIX_TX 0x00040000 1839 #define EM_MSIX_RX 0x00010000 1840 #define EM_MSIX_LINK 0x00100000 1841 1842 static void 1843 em_msix_tx(void *arg) 1844 { 1845 struct adapter *adapter = arg; 1846 struct ifnet *ifp = adapter->ifp; 1847 1848 ++adapter->tx_irq; 1849 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1850 EM_TX_LOCK(adapter); 1851 em_txeof(adapter); 1852 EM_TX_UNLOCK(adapter); 1853 taskqueue_enqueue(adapter->tq, &adapter->tx_task); 1854 } 1855 /* Reenable this interrupt */ 1856 E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_TX); 1857 return; 1858 } 1859 1860 /********************************************************************* 1861 * 1862 * MSIX RX Interrupt Service routine 1863 * 1864 **********************************************************************/ 1865 1866 static void 1867 em_msix_rx(void *arg) 1868 { 1869 struct adapter *adapter = arg; 1870 struct ifnet *ifp = adapter->ifp; 1871 1872 ++adapter->rx_irq; 1873 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && 1874 (em_rxeof(adapter, adapter->rx_process_limit) != 0)) 1875 taskqueue_enqueue(adapter->tq, &adapter->rx_task); 1876 /* Reenable this interrupt */ 1877 E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_RX); 1878 return; 1879 } 1880 1881 /********************************************************************* 1882 * 1883 * MSIX Link Fast Interrupt Service routine 1884 * 1885 **********************************************************************/ 1886 1887 static void 1888 em_msix_link(void *arg) 1889 { 1890 struct adapter *adapter = arg; 1891 u32 reg_icr; 1892 1893 ++adapter->link_irq; 1894 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); 1895 1896 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { 1897 adapter->hw.mac.get_link_status = 1; 1898 taskqueue_enqueue(taskqueue_fast, &adapter->link_task); 1899 } 1900 E1000_WRITE_REG(&adapter->hw, E1000_IMS, 1901 EM_MSIX_LINK | E1000_IMS_LSC); 1902 return; 1903 } 1904 1905 static void 1906 em_handle_rx(void *context, int pending) 1907 { 1908 struct adapter *adapter = context; 1909 struct ifnet *ifp = adapter->ifp; 1910 1911 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && 1912 (em_rxeof(adapter, adapter->rx_process_limit) != 0)) 1913 taskqueue_enqueue(adapter->tq, &adapter->rx_task); 1914 1915 } 1916 1917 static void 1918 em_handle_tx(void *context, int pending) 1919 { 1920 struct adapter *adapter = context; 1921 struct ifnet *ifp = adapter->ifp; 1922 1923 if (ifp->if_drv_flags & IFF_DRV_RUNNING) { 1924 if (!EM_TX_TRYLOCK(adapter)) 1925 return; 1926 em_txeof(adapter); 1927 #if __FreeBSD_version >= 800000 1928 if (!drbr_empty(ifp, adapter->br)) 1929 em_mq_start_locked(ifp, NULL); 1930 #else 1931 if (!IFQ_DRV_IS_EMPTY(&ifp->snd)) 1932 em_start_locked(ifp); 1933 #endif 1934 EM_TX_UNLOCK(adapter); 1935 } 1936 } 1937 #endif /* EM_FAST_IRQ */ 1938 1939 /********************************************************************* 1940 * 1941 * Media Ioctl callback 1942 * 1943 * This routine is called whenever the user queries the status of 1944 * the interface using ifconfig. 1945 * 1946 **********************************************************************/ 1947 static void 1948 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) 1949 { 1950 struct adapter *adapter = ifp->if_softc; 1951 u_char fiber_type = IFM_1000_SX; 1952 1953 INIT_DEBUGOUT("em_media_status: begin"); 1954 1955 EM_CORE_LOCK(adapter); 1956 em_update_link_status(adapter); 1957 1958 ifmr->ifm_status = IFM_AVALID; 1959 ifmr->ifm_active = IFM_ETHER; 1960 1961 if (!adapter->link_active) { 1962 EM_CORE_UNLOCK(adapter); 1963 return; 1964 } 1965 1966 ifmr->ifm_status |= IFM_ACTIVE; 1967 1968 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 1969 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) { 1970 if (adapter->hw.mac.type == e1000_82545) 1971 fiber_type = IFM_1000_LX; 1972 ifmr->ifm_active |= fiber_type | IFM_FDX; 1973 } else { 1974 switch (adapter->link_speed) { 1975 case 10: 1976 ifmr->ifm_active |= IFM_10_T; 1977 break; 1978 case 100: 1979 ifmr->ifm_active |= IFM_100_TX; 1980 break; 1981 case 1000: 1982 ifmr->ifm_active |= IFM_1000_T; 1983 break; 1984 } 1985 if (adapter->link_duplex == FULL_DUPLEX) 1986 ifmr->ifm_active |= IFM_FDX; 1987 else 1988 ifmr->ifm_active |= IFM_HDX; 1989 } 1990 EM_CORE_UNLOCK(adapter); 1991 } 1992 1993 /********************************************************************* 1994 * 1995 * Media Ioctl callback 1996 * 1997 * This routine is called when the user changes speed/duplex using 1998 * media/mediopt option with ifconfig. 1999 * 2000 **********************************************************************/ 2001 static int 2002 em_media_change(struct ifnet *ifp) 2003 { 2004 struct adapter *adapter = ifp->if_softc; 2005 struct ifmedia *ifm = &adapter->media; 2006 2007 INIT_DEBUGOUT("em_media_change: begin"); 2008 2009 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) 2010 return (EINVAL); 2011 2012 EM_CORE_LOCK(adapter); 2013 switch (IFM_SUBTYPE(ifm->ifm_media)) { 2014 case IFM_AUTO: 2015 adapter->hw.mac.autoneg = DO_AUTO_NEG; 2016 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT; 2017 break; 2018 case IFM_1000_LX: 2019 case IFM_1000_SX: 2020 case IFM_1000_T: 2021 adapter->hw.mac.autoneg = DO_AUTO_NEG; 2022 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL; 2023 break; 2024 case IFM_100_TX: 2025 adapter->hw.mac.autoneg = FALSE; 2026 adapter->hw.phy.autoneg_advertised = 0; 2027 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 2028 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL; 2029 else 2030 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF; 2031 break; 2032 case IFM_10_T: 2033 adapter->hw.mac.autoneg = FALSE; 2034 adapter->hw.phy.autoneg_advertised = 0; 2035 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) 2036 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL; 2037 else 2038 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF; 2039 break; 2040 default: 2041 device_printf(adapter->dev, "Unsupported media type\n"); 2042 } 2043 2044 /* As the speed/duplex settings my have changed we need to 2045 * reset the PHY. 2046 */ 2047 adapter->hw.phy.reset_disable = FALSE; 2048 2049 em_init_locked(adapter); 2050 EM_CORE_UNLOCK(adapter); 2051 2052 return (0); 2053 } 2054 2055 /********************************************************************* 2056 * 2057 * This routine maps the mbufs to tx descriptors. 2058 * 2059 * return 0 on success, positive on failure 2060 **********************************************************************/ 2061 2062 static int 2063 em_xmit(struct adapter *adapter, struct mbuf **m_headp) 2064 { 2065 bus_dma_segment_t segs[EM_MAX_SCATTER]; 2066 bus_dmamap_t map; 2067 struct em_buffer *tx_buffer, *tx_buffer_mapped; 2068 struct e1000_tx_desc *ctxd = NULL; 2069 struct mbuf *m_head; 2070 u32 txd_upper, txd_lower, txd_used, txd_saved; 2071 int nsegs, i, j, first, last = 0; 2072 int error, do_tso, tso_desc = 0; 2073 #if __FreeBSD_version < 700000 2074 struct m_tag *mtag; 2075 #endif 2076 m_head = *m_headp; 2077 txd_upper = txd_lower = txd_used = txd_saved = 0; 2078 2079 #if __FreeBSD_version >= 700000 2080 do_tso = ((m_head->m_pkthdr.csum_flags & CSUM_TSO) != 0); 2081 #else 2082 do_tso = 0; 2083 #endif 2084 2085 /* 2086 * Force a cleanup if number of TX descriptors 2087 * available hits the threshold 2088 */ 2089 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) { 2090 em_txeof(adapter); 2091 /* Now do we at least have a minimal? */ 2092 if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD) { 2093 adapter->no_tx_desc_avail1++; 2094 return (ENOBUFS); 2095 } 2096 } 2097 2098 2099 /* 2100 * TSO workaround: 2101 * If an mbuf is only header we need 2102 * to pull 4 bytes of data into it. 2103 */ 2104 if (do_tso && (m_head->m_len <= M_TSO_LEN)) { 2105 m_head = m_pullup(m_head, M_TSO_LEN + 4); 2106 *m_headp = m_head; 2107 if (m_head == NULL) 2108 return (ENOBUFS); 2109 } 2110 2111 /* 2112 * Map the packet for DMA 2113 * 2114 * Capture the first descriptor index, 2115 * this descriptor will have the index 2116 * of the EOP which is the only one that 2117 * now gets a DONE bit writeback. 2118 */ 2119 first = adapter->next_avail_tx_desc; 2120 tx_buffer = &adapter->tx_buffer_area[first]; 2121 tx_buffer_mapped = tx_buffer; 2122 map = tx_buffer->map; 2123 2124 error = bus_dmamap_load_mbuf_sg(adapter->txtag, map, 2125 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); 2126 2127 /* 2128 * There are two types of errors we can (try) to handle: 2129 * - EFBIG means the mbuf chain was too long and bus_dma ran 2130 * out of segments. Defragment the mbuf chain and try again. 2131 * - ENOMEM means bus_dma could not obtain enough bounce buffers 2132 * at this point in time. Defer sending and try again later. 2133 * All other errors, in particular EINVAL, are fatal and prevent the 2134 * mbuf chain from ever going through. Drop it and report error. 2135 */ 2136 if (error == EFBIG) { 2137 struct mbuf *m; 2138 2139 m = m_defrag(*m_headp, M_DONTWAIT); 2140 if (m == NULL) { 2141 adapter->mbuf_alloc_failed++; 2142 m_freem(*m_headp); 2143 *m_headp = NULL; 2144 return (ENOBUFS); 2145 } 2146 *m_headp = m; 2147 2148 /* Try it again */ 2149 error = bus_dmamap_load_mbuf_sg(adapter->txtag, map, 2150 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); 2151 2152 if (error) { 2153 adapter->no_tx_dma_setup++; 2154 m_freem(*m_headp); 2155 *m_headp = NULL; 2156 return (error); 2157 } 2158 } else if (error != 0) { 2159 adapter->no_tx_dma_setup++; 2160 return (error); 2161 } 2162 2163 /* 2164 * TSO Hardware workaround, if this packet is not 2165 * TSO, and is only a single descriptor long, and 2166 * it follows a TSO burst, then we need to add a 2167 * sentinel descriptor to prevent premature writeback. 2168 */ 2169 if ((do_tso == 0) && (adapter->tx_tso == TRUE)) { 2170 if (nsegs == 1) 2171 tso_desc = TRUE; 2172 adapter->tx_tso = FALSE; 2173 } 2174 2175 if (nsegs > (adapter->num_tx_desc_avail - 2)) { 2176 adapter->no_tx_desc_avail2++; 2177 bus_dmamap_unload(adapter->txtag, map); 2178 return (ENOBUFS); 2179 } 2180 m_head = *m_headp; 2181 2182 /* Do hardware assists */ 2183 #if __FreeBSD_version >= 700000 2184 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) { 2185 error = em_tso_setup(adapter, m_head, &txd_upper, &txd_lower); 2186 if (error != TRUE) 2187 return (ENXIO); /* something foobar */ 2188 /* we need to make a final sentinel transmit desc */ 2189 tso_desc = TRUE; 2190 } else 2191 #endif 2192 if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD) 2193 em_transmit_checksum_setup(adapter, m_head, 2194 &txd_upper, &txd_lower); 2195 2196 i = adapter->next_avail_tx_desc; 2197 if (adapter->pcix_82544) 2198 txd_saved = i; 2199 2200 /* Set up our transmit descriptors */ 2201 for (j = 0; j < nsegs; j++) { 2202 bus_size_t seg_len; 2203 bus_addr_t seg_addr; 2204 /* If adapter is 82544 and on PCIX bus */ 2205 if(adapter->pcix_82544) { 2206 DESC_ARRAY desc_array; 2207 u32 array_elements, counter; 2208 /* 2209 * Check the Address and Length combination and 2210 * split the data accordingly 2211 */ 2212 array_elements = em_fill_descriptors(segs[j].ds_addr, 2213 segs[j].ds_len, &desc_array); 2214 for (counter = 0; counter < array_elements; counter++) { 2215 if (txd_used == adapter->num_tx_desc_avail) { 2216 adapter->next_avail_tx_desc = txd_saved; 2217 adapter->no_tx_desc_avail2++; 2218 bus_dmamap_unload(adapter->txtag, map); 2219 return (ENOBUFS); 2220 } 2221 tx_buffer = &adapter->tx_buffer_area[i]; 2222 ctxd = &adapter->tx_desc_base[i]; 2223 ctxd->buffer_addr = htole64( 2224 desc_array.descriptor[counter].address); 2225 ctxd->lower.data = htole32( 2226 (adapter->txd_cmd | txd_lower | (u16) 2227 desc_array.descriptor[counter].length)); 2228 ctxd->upper.data = 2229 htole32((txd_upper)); 2230 last = i; 2231 if (++i == adapter->num_tx_desc) 2232 i = 0; 2233 tx_buffer->m_head = NULL; 2234 tx_buffer->next_eop = -1; 2235 txd_used++; 2236 } 2237 } else { 2238 tx_buffer = &adapter->tx_buffer_area[i]; 2239 ctxd = &adapter->tx_desc_base[i]; 2240 seg_addr = segs[j].ds_addr; 2241 seg_len = segs[j].ds_len; 2242 /* 2243 ** TSO Workaround: 2244 ** If this is the last descriptor, we want to 2245 ** split it so we have a small final sentinel 2246 */ 2247 if (tso_desc && (j == (nsegs -1)) && (seg_len > 8)) { 2248 seg_len -= 4; 2249 ctxd->buffer_addr = htole64(seg_addr); 2250 ctxd->lower.data = htole32( 2251 adapter->txd_cmd | txd_lower | seg_len); 2252 ctxd->upper.data = 2253 htole32(txd_upper); 2254 if (++i == adapter->num_tx_desc) 2255 i = 0; 2256 /* Now make the sentinel */ 2257 ++txd_used; /* using an extra txd */ 2258 ctxd = &adapter->tx_desc_base[i]; 2259 tx_buffer = &adapter->tx_buffer_area[i]; 2260 ctxd->buffer_addr = 2261 htole64(seg_addr + seg_len); 2262 ctxd->lower.data = htole32( 2263 adapter->txd_cmd | txd_lower | 4); 2264 ctxd->upper.data = 2265 htole32(txd_upper); 2266 last = i; 2267 if (++i == adapter->num_tx_desc) 2268 i = 0; 2269 } else { 2270 ctxd->buffer_addr = htole64(seg_addr); 2271 ctxd->lower.data = htole32( 2272 adapter->txd_cmd | txd_lower | seg_len); 2273 ctxd->upper.data = 2274 htole32(txd_upper); 2275 last = i; 2276 if (++i == adapter->num_tx_desc) 2277 i = 0; 2278 } 2279 tx_buffer->m_head = NULL; 2280 tx_buffer->next_eop = -1; 2281 } 2282 } 2283 2284 adapter->next_avail_tx_desc = i; 2285 if (adapter->pcix_82544) 2286 adapter->num_tx_desc_avail -= txd_used; 2287 else { 2288 adapter->num_tx_desc_avail -= nsegs; 2289 if (tso_desc) /* TSO used an extra for sentinel */ 2290 adapter->num_tx_desc_avail -= txd_used; 2291 } 2292 2293 /* 2294 ** Handle VLAN tag, this is the 2295 ** biggest difference between 2296 ** 6.x and 7 2297 */ 2298 #if __FreeBSD_version < 700000 2299 /* Find out if we are in vlan mode. */ 2300 mtag = VLAN_OUTPUT_TAG(ifp, m_head); 2301 if (mtag != NULL) { 2302 ctxd->upper.fields.special = 2303 htole16(VLAN_TAG_VALUE(mtag)); 2304 #else /* FreeBSD 7 */ 2305 if (m_head->m_flags & M_VLANTAG) { 2306 /* Set the vlan id. */ 2307 ctxd->upper.fields.special = 2308 htole16(m_head->m_pkthdr.ether_vtag); 2309 #endif 2310 /* Tell hardware to add tag */ 2311 ctxd->lower.data |= htole32(E1000_TXD_CMD_VLE); 2312 } 2313 2314 tx_buffer->m_head = m_head; 2315 tx_buffer_mapped->map = tx_buffer->map; 2316 tx_buffer->map = map; 2317 bus_dmamap_sync(adapter->txtag, map, BUS_DMASYNC_PREWRITE); 2318 2319 /* 2320 * Last Descriptor of Packet 2321 * needs End Of Packet (EOP) 2322 * and Report Status (RS) 2323 */ 2324 ctxd->lower.data |= 2325 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS); 2326 /* 2327 * Keep track in the first buffer which 2328 * descriptor will be written back 2329 */ 2330 tx_buffer = &adapter->tx_buffer_area[first]; 2331 tx_buffer->next_eop = last; 2332 2333 /* 2334 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000 2335 * that this frame is available to transmit. 2336 */ 2337 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 2338 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 2339 if (adapter->hw.mac.type == e1000_82547 && 2340 adapter->link_duplex == HALF_DUPLEX) 2341 em_82547_move_tail(adapter); 2342 else { 2343 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), i); 2344 if (adapter->hw.mac.type == e1000_82547) 2345 em_82547_update_fifo_head(adapter, 2346 m_head->m_pkthdr.len); 2347 } 2348 2349 return (0); 2350 } 2351 2352 /********************************************************************* 2353 * 2354 * 82547 workaround to avoid controller hang in half-duplex environment. 2355 * The workaround is to avoid queuing a large packet that would span 2356 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers 2357 * in this case. We do that only when FIFO is quiescent. 2358 * 2359 **********************************************************************/ 2360 static void 2361 em_82547_move_tail(void *arg) 2362 { 2363 struct adapter *adapter = arg; 2364 struct e1000_tx_desc *tx_desc; 2365 u16 hw_tdt, sw_tdt, length = 0; 2366 bool eop = 0; 2367 2368 EM_TX_LOCK_ASSERT(adapter); 2369 2370 hw_tdt = E1000_READ_REG(&adapter->hw, E1000_TDT(0)); 2371 sw_tdt = adapter->next_avail_tx_desc; 2372 2373 while (hw_tdt != sw_tdt) { 2374 tx_desc = &adapter->tx_desc_base[hw_tdt]; 2375 length += tx_desc->lower.flags.length; 2376 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP; 2377 if (++hw_tdt == adapter->num_tx_desc) 2378 hw_tdt = 0; 2379 2380 if (eop) { 2381 if (em_82547_fifo_workaround(adapter, length)) { 2382 adapter->tx_fifo_wrk_cnt++; 2383 callout_reset(&adapter->tx_fifo_timer, 1, 2384 em_82547_move_tail, adapter); 2385 break; 2386 } 2387 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), hw_tdt); 2388 em_82547_update_fifo_head(adapter, length); 2389 length = 0; 2390 } 2391 } 2392 } 2393 2394 static int 2395 em_82547_fifo_workaround(struct adapter *adapter, int len) 2396 { 2397 int fifo_space, fifo_pkt_len; 2398 2399 fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR); 2400 2401 if (adapter->link_duplex == HALF_DUPLEX) { 2402 fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head; 2403 2404 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) { 2405 if (em_82547_tx_fifo_reset(adapter)) 2406 return (0); 2407 else 2408 return (1); 2409 } 2410 } 2411 2412 return (0); 2413 } 2414 2415 static void 2416 em_82547_update_fifo_head(struct adapter *adapter, int len) 2417 { 2418 int fifo_pkt_len = roundup2(len + EM_FIFO_HDR, EM_FIFO_HDR); 2419 2420 /* tx_fifo_head is always 16 byte aligned */ 2421 adapter->tx_fifo_head += fifo_pkt_len; 2422 if (adapter->tx_fifo_head >= adapter->tx_fifo_size) { 2423 adapter->tx_fifo_head -= adapter->tx_fifo_size; 2424 } 2425 } 2426 2427 2428 static int 2429 em_82547_tx_fifo_reset(struct adapter *adapter) 2430 { 2431 u32 tctl; 2432 2433 if ((E1000_READ_REG(&adapter->hw, E1000_TDT(0)) == 2434 E1000_READ_REG(&adapter->hw, E1000_TDH(0))) && 2435 (E1000_READ_REG(&adapter->hw, E1000_TDFT) == 2436 E1000_READ_REG(&adapter->hw, E1000_TDFH)) && 2437 (E1000_READ_REG(&adapter->hw, E1000_TDFTS) == 2438 E1000_READ_REG(&adapter->hw, E1000_TDFHS)) && 2439 (E1000_READ_REG(&adapter->hw, E1000_TDFPC) == 0)) { 2440 /* Disable TX unit */ 2441 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL); 2442 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, 2443 tctl & ~E1000_TCTL_EN); 2444 2445 /* Reset FIFO pointers */ 2446 E1000_WRITE_REG(&adapter->hw, E1000_TDFT, 2447 adapter->tx_head_addr); 2448 E1000_WRITE_REG(&adapter->hw, E1000_TDFH, 2449 adapter->tx_head_addr); 2450 E1000_WRITE_REG(&adapter->hw, E1000_TDFTS, 2451 adapter->tx_head_addr); 2452 E1000_WRITE_REG(&adapter->hw, E1000_TDFHS, 2453 adapter->tx_head_addr); 2454 2455 /* Re-enable TX unit */ 2456 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl); 2457 E1000_WRITE_FLUSH(&adapter->hw); 2458 2459 adapter->tx_fifo_head = 0; 2460 adapter->tx_fifo_reset_cnt++; 2461 2462 return (TRUE); 2463 } 2464 else { 2465 return (FALSE); 2466 } 2467 } 2468 2469 static void 2470 em_set_promisc(struct adapter *adapter) 2471 { 2472 struct ifnet *ifp = adapter->ifp; 2473 u32 reg_rctl; 2474 2475 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2476 2477 if (ifp->if_flags & IFF_PROMISC) { 2478 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); 2479 /* Turn this on if you want to see bad packets */ 2480 if (em_debug_sbp) 2481 reg_rctl |= E1000_RCTL_SBP; 2482 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2483 } else if (ifp->if_flags & IFF_ALLMULTI) { 2484 reg_rctl |= E1000_RCTL_MPE; 2485 reg_rctl &= ~E1000_RCTL_UPE; 2486 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2487 } 2488 } 2489 2490 static void 2491 em_disable_promisc(struct adapter *adapter) 2492 { 2493 u32 reg_rctl; 2494 2495 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2496 2497 reg_rctl &= (~E1000_RCTL_UPE); 2498 reg_rctl &= (~E1000_RCTL_MPE); 2499 reg_rctl &= (~E1000_RCTL_SBP); 2500 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2501 } 2502 2503 2504 /********************************************************************* 2505 * Multicast Update 2506 * 2507 * This routine is called whenever multicast address list is updated. 2508 * 2509 **********************************************************************/ 2510 2511 static void 2512 em_set_multi(struct adapter *adapter) 2513 { 2514 struct ifnet *ifp = adapter->ifp; 2515 struct ifmultiaddr *ifma; 2516 u32 reg_rctl = 0; 2517 u8 *mta; /* Multicast array memory */ 2518 int mcnt = 0; 2519 2520 IOCTL_DEBUGOUT("em_set_multi: begin"); 2521 2522 if (adapter->hw.mac.type == e1000_82542 && 2523 adapter->hw.revision_id == E1000_REVISION_2) { 2524 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2525 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 2526 e1000_pci_clear_mwi(&adapter->hw); 2527 reg_rctl |= E1000_RCTL_RST; 2528 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2529 msec_delay(5); 2530 } 2531 2532 /* Allocate temporary memory to setup array */ 2533 mta = malloc(sizeof(u8) * 2534 (ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES), 2535 M_DEVBUF, M_NOWAIT | M_ZERO); 2536 if (mta == NULL) 2537 panic("em_set_multi memory failure\n"); 2538 2539 if_maddr_rlock(ifp); 2540 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { 2541 if (ifma->ifma_addr->sa_family != AF_LINK) 2542 continue; 2543 2544 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) 2545 break; 2546 2547 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr), 2548 &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN); 2549 mcnt++; 2550 } 2551 if_maddr_runlock(ifp); 2552 2553 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) { 2554 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2555 reg_rctl |= E1000_RCTL_MPE; 2556 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2557 } else 2558 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt); 2559 2560 if (adapter->hw.mac.type == e1000_82542 && 2561 adapter->hw.revision_id == E1000_REVISION_2) { 2562 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 2563 reg_rctl &= ~E1000_RCTL_RST; 2564 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl); 2565 msec_delay(5); 2566 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) 2567 e1000_pci_set_mwi(&adapter->hw); 2568 } 2569 free(mta, M_DEVBUF); 2570 } 2571 2572 2573 /********************************************************************* 2574 * Timer routine 2575 * 2576 * This routine checks for link status and updates statistics. 2577 * 2578 **********************************************************************/ 2579 2580 static void 2581 em_local_timer(void *arg) 2582 { 2583 struct adapter *adapter = arg; 2584 struct ifnet *ifp = adapter->ifp; 2585 2586 EM_CORE_LOCK_ASSERT(adapter); 2587 2588 taskqueue_enqueue(adapter->tq, 2589 &adapter->rxtx_task); 2590 em_update_link_status(adapter); 2591 em_update_stats_counters(adapter); 2592 2593 /* Reset LAA into RAR[0] on 82571 */ 2594 if (e1000_get_laa_state_82571(&adapter->hw) == TRUE) 2595 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); 2596 2597 if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) 2598 em_print_hw_stats(adapter); 2599 2600 em_smartspeed(adapter); 2601 2602 /* 2603 * Each second we check the watchdog to 2604 * protect against hardware hangs. 2605 */ 2606 em_watchdog(adapter); 2607 2608 callout_reset(&adapter->timer, hz, em_local_timer, adapter); 2609 2610 } 2611 2612 static void 2613 em_update_link_status(struct adapter *adapter) 2614 { 2615 struct e1000_hw *hw = &adapter->hw; 2616 struct ifnet *ifp = adapter->ifp; 2617 device_t dev = adapter->dev; 2618 u32 link_check = 0; 2619 2620 /* Get the cached link value or read phy for real */ 2621 switch (hw->phy.media_type) { 2622 case e1000_media_type_copper: 2623 if (hw->mac.get_link_status) { 2624 /* Do the work to read phy */ 2625 e1000_check_for_link(hw); 2626 link_check = !hw->mac.get_link_status; 2627 if (link_check) /* ESB2 fix */ 2628 e1000_cfg_on_link_up(hw); 2629 } else 2630 link_check = TRUE; 2631 break; 2632 case e1000_media_type_fiber: 2633 e1000_check_for_link(hw); 2634 link_check = (E1000_READ_REG(hw, E1000_STATUS) & 2635 E1000_STATUS_LU); 2636 break; 2637 case e1000_media_type_internal_serdes: 2638 e1000_check_for_link(hw); 2639 link_check = adapter->hw.mac.serdes_has_link; 2640 break; 2641 default: 2642 case e1000_media_type_unknown: 2643 break; 2644 } 2645 2646 /* Now check for a transition */ 2647 if (link_check && (adapter->link_active == 0)) { 2648 e1000_get_speed_and_duplex(hw, &adapter->link_speed, 2649 &adapter->link_duplex); 2650 /* Check if we must disable SPEED_MODE bit on PCI-E */ 2651 if ((adapter->link_speed != SPEED_1000) && 2652 ((hw->mac.type == e1000_82571) || 2653 (hw->mac.type == e1000_82572))) { 2654 int tarc0; 2655 tarc0 = E1000_READ_REG(hw, E1000_TARC(0)); 2656 tarc0 &= ~SPEED_MODE_BIT; 2657 E1000_WRITE_REG(hw, E1000_TARC(0), tarc0); 2658 } 2659 if (bootverbose) 2660 device_printf(dev, "Link is up %d Mbps %s\n", 2661 adapter->link_speed, 2662 ((adapter->link_duplex == FULL_DUPLEX) ? 2663 "Full Duplex" : "Half Duplex")); 2664 adapter->link_active = 1; 2665 adapter->smartspeed = 0; 2666 ifp->if_baudrate = adapter->link_speed * 1000000; 2667 if_link_state_change(ifp, LINK_STATE_UP); 2668 } else if (!link_check && (adapter->link_active == 1)) { 2669 ifp->if_baudrate = adapter->link_speed = 0; 2670 adapter->link_duplex = 0; 2671 if (bootverbose) 2672 device_printf(dev, "Link is Down\n"); 2673 adapter->link_active = 0; 2674 /* Link down, disable watchdog */ 2675 adapter->watchdog_timer = FALSE; 2676 if_link_state_change(ifp, LINK_STATE_DOWN); 2677 } 2678 } 2679 2680 /********************************************************************* 2681 * 2682 * This routine disables all traffic on the adapter by issuing a 2683 * global reset on the MAC and deallocates TX/RX buffers. 2684 * 2685 * This routine should always be called with BOTH the CORE 2686 * and TX locks. 2687 **********************************************************************/ 2688 2689 static void 2690 em_stop(void *arg) 2691 { 2692 struct adapter *adapter = arg; 2693 struct ifnet *ifp = adapter->ifp; 2694 2695 EM_CORE_LOCK_ASSERT(adapter); 2696 EM_TX_LOCK_ASSERT(adapter); 2697 2698 INIT_DEBUGOUT("em_stop: begin"); 2699 2700 em_disable_intr(adapter); 2701 callout_stop(&adapter->timer); 2702 callout_stop(&adapter->tx_fifo_timer); 2703 2704 /* Tell the stack that the interface is no longer active */ 2705 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); 2706 2707 e1000_reset_hw(&adapter->hw); 2708 if (adapter->hw.mac.type >= e1000_82544) 2709 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0); 2710 } 2711 2712 2713 /********************************************************************* 2714 * 2715 * Determine hardware revision. 2716 * 2717 **********************************************************************/ 2718 static void 2719 em_identify_hardware(struct adapter *adapter) 2720 { 2721 device_t dev = adapter->dev; 2722 2723 /* Make sure our PCI config space has the necessary stuff set */ 2724 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2); 2725 if (!((adapter->hw.bus.pci_cmd_word & PCIM_CMD_BUSMASTEREN) && 2726 (adapter->hw.bus.pci_cmd_word & PCIM_CMD_MEMEN))) { 2727 device_printf(dev, "Memory Access and/or Bus Master bits " 2728 "were not set!\n"); 2729 adapter->hw.bus.pci_cmd_word |= 2730 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN); 2731 pci_write_config(dev, PCIR_COMMAND, 2732 adapter->hw.bus.pci_cmd_word, 2); 2733 } 2734 2735 /* Save off the information about this board */ 2736 adapter->hw.vendor_id = pci_get_vendor(dev); 2737 adapter->hw.device_id = pci_get_device(dev); 2738 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1); 2739 adapter->hw.subsystem_vendor_id = 2740 pci_read_config(dev, PCIR_SUBVEND_0, 2); 2741 adapter->hw.subsystem_device_id = 2742 pci_read_config(dev, PCIR_SUBDEV_0, 2); 2743 2744 /* Do Shared Code Init and Setup */ 2745 if (e1000_set_mac_type(&adapter->hw)) { 2746 device_printf(dev, "Setup init failure\n"); 2747 return; 2748 } 2749 } 2750 2751 static int 2752 em_allocate_pci_resources(struct adapter *adapter) 2753 { 2754 device_t dev = adapter->dev; 2755 int val, rid, error = E1000_SUCCESS; 2756 2757 rid = PCIR_BAR(0); 2758 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 2759 &rid, RF_ACTIVE); 2760 if (adapter->memory == NULL) { 2761 device_printf(dev, "Unable to allocate bus resource: memory\n"); 2762 return (ENXIO); 2763 } 2764 adapter->osdep.mem_bus_space_tag = 2765 rman_get_bustag(adapter->memory); 2766 adapter->osdep.mem_bus_space_handle = 2767 rman_get_bushandle(adapter->memory); 2768 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle; 2769 2770 /* Only older adapters use IO mapping */ 2771 if ((adapter->hw.mac.type > e1000_82543) && 2772 (adapter->hw.mac.type < e1000_82571)) { 2773 /* Figure our where our IO BAR is ? */ 2774 for (rid = PCIR_BAR(0); rid < PCIR_CIS;) { 2775 val = pci_read_config(dev, rid, 4); 2776 if (EM_BAR_TYPE(val) == EM_BAR_TYPE_IO) { 2777 adapter->io_rid = rid; 2778 break; 2779 } 2780 rid += 4; 2781 /* check for 64bit BAR */ 2782 if (EM_BAR_MEM_TYPE(val) == EM_BAR_MEM_TYPE_64BIT) 2783 rid += 4; 2784 } 2785 if (rid >= PCIR_CIS) { 2786 device_printf(dev, "Unable to locate IO BAR\n"); 2787 return (ENXIO); 2788 } 2789 adapter->ioport = bus_alloc_resource_any(dev, 2790 SYS_RES_IOPORT, &adapter->io_rid, RF_ACTIVE); 2791 if (adapter->ioport == NULL) { 2792 device_printf(dev, "Unable to allocate bus resource: " 2793 "ioport\n"); 2794 return (ENXIO); 2795 } 2796 adapter->hw.io_base = 0; 2797 adapter->osdep.io_bus_space_tag = 2798 rman_get_bustag(adapter->ioport); 2799 adapter->osdep.io_bus_space_handle = 2800 rman_get_bushandle(adapter->ioport); 2801 } 2802 2803 /* 2804 ** Init the resource arrays 2805 ** used by MSIX setup 2806 */ 2807 for (int i = 0; i < 3; i++) { 2808 adapter->rid[i] = i + 1; /* MSI/X RID starts at 1 */ 2809 adapter->tag[i] = NULL; 2810 adapter->res[i] = NULL; 2811 } 2812 2813 /* 2814 * Setup MSI/X or MSI if PCI Express 2815 */ 2816 if (em_enable_msi) 2817 adapter->msi = em_setup_msix(adapter); 2818 2819 adapter->hw.back = &adapter->osdep; 2820 2821 return (error); 2822 } 2823 2824 /********************************************************************* 2825 * 2826 * Setup the Legacy or MSI Interrupt handler 2827 * 2828 **********************************************************************/ 2829 int 2830 em_allocate_legacy(struct adapter *adapter) 2831 { 2832 device_t dev = adapter->dev; 2833 int error; 2834 2835 /* Manually turn off all interrupts */ 2836 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 2837 2838 /* Legacy RID is 0 */ 2839 if (adapter->msi == 0) 2840 adapter->rid[0] = 0; 2841 2842 /* We allocate a single interrupt resource */ 2843 adapter->res[0] = bus_alloc_resource_any(dev, 2844 SYS_RES_IRQ, &adapter->rid[0], RF_SHAREABLE | RF_ACTIVE); 2845 if (adapter->res[0] == NULL) { 2846 device_printf(dev, "Unable to allocate bus resource: " 2847 "interrupt\n"); 2848 return (ENXIO); 2849 } 2850 2851 #ifdef EM_LEGACY_IRQ 2852 /* We do Legacy setup */ 2853 if ((error = bus_setup_intr(dev, adapter->res[0], 2854 #if __FreeBSD_version > 700000 2855 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_intr, adapter, 2856 #else /* 6.X */ 2857 INTR_TYPE_NET | INTR_MPSAFE, em_intr, adapter, 2858 #endif 2859 &adapter->tag[0])) != 0) { 2860 device_printf(dev, "Failed to register interrupt handler"); 2861 return (error); 2862 } 2863 2864 #else /* FAST_IRQ */ 2865 /* 2866 * Try allocating a fast interrupt and the associated deferred 2867 * processing contexts. 2868 */ 2869 TASK_INIT(&adapter->rxtx_task, 0, em_handle_rxtx, adapter); 2870 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter); 2871 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT, 2872 taskqueue_thread_enqueue, &adapter->tq); 2873 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq", 2874 device_get_nameunit(adapter->dev)); 2875 #if __FreeBSD_version < 700000 2876 if ((error = bus_setup_intr(dev, adapter->res[0], 2877 INTR_TYPE_NET | INTR_FAST, em_irq_fast, adapter, 2878 #else 2879 if ((error = bus_setup_intr(dev, adapter->res[0], 2880 INTR_TYPE_NET, em_irq_fast, NULL, adapter, 2881 #endif 2882 &adapter->tag[0])) != 0) { 2883 device_printf(dev, "Failed to register fast interrupt " 2884 "handler: %d\n", error); 2885 taskqueue_free(adapter->tq); 2886 adapter->tq = NULL; 2887 return (error); 2888 } 2889 #endif /* EM_LEGACY_IRQ */ 2890 2891 return (0); 2892 } 2893 2894 /********************************************************************* 2895 * 2896 * Setup the MSIX Interrupt handlers 2897 * This is not really Multiqueue, rather 2898 * its just multiple interrupt vectors. 2899 * 2900 **********************************************************************/ 2901 int 2902 em_allocate_msix(struct adapter *adapter) 2903 { 2904 device_t dev = adapter->dev; 2905 int error; 2906 2907 /* Make sure all interrupts are disabled */ 2908 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 2909 2910 /* First get the resources */ 2911 for (int i = 0; i < adapter->msi; i++) { 2912 adapter->res[i] = bus_alloc_resource_any(dev, 2913 SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE); 2914 if (adapter->res[i] == NULL) { 2915 device_printf(dev, 2916 "Unable to allocate bus resource: " 2917 "MSIX Interrupt\n"); 2918 return (ENXIO); 2919 } 2920 } 2921 2922 /* 2923 * Now allocate deferred processing contexts. 2924 */ 2925 TASK_INIT(&adapter->rx_task, 0, em_handle_rx, adapter); 2926 TASK_INIT(&adapter->tx_task, 0, em_handle_tx, adapter); 2927 /* 2928 * Handle compatibility for msi case for deferral due to 2929 * trylock failure 2930 */ 2931 TASK_INIT(&adapter->rxtx_task, 0, em_handle_tx, adapter); 2932 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter); 2933 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT, 2934 taskqueue_thread_enqueue, &adapter->tq); 2935 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq", 2936 device_get_nameunit(adapter->dev)); 2937 2938 /* 2939 * And setup the interrupt handlers 2940 */ 2941 2942 /* First slot to RX */ 2943 if ((error = bus_setup_intr(dev, adapter->res[0], 2944 #if __FreeBSD_version > 700000 2945 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx, adapter, 2946 #else /* 6.X */ 2947 INTR_TYPE_NET | INTR_MPSAFE, em_msix_rx, adapter, 2948 #endif 2949 &adapter->tag[0])) != 0) { 2950 device_printf(dev, "Failed to register RX handler"); 2951 return (error); 2952 } 2953 2954 /* Next TX */ 2955 if ((error = bus_setup_intr(dev, adapter->res[1], 2956 #if __FreeBSD_version > 700000 2957 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx, adapter, 2958 #else /* 6.X */ 2959 INTR_TYPE_NET | INTR_MPSAFE, em_msix_tx, adapter, 2960 #endif 2961 &adapter->tag[1])) != 0) { 2962 device_printf(dev, "Failed to register TX handler"); 2963 return (error); 2964 } 2965 2966 /* And Link */ 2967 if ((error = bus_setup_intr(dev, adapter->res[2], 2968 #if __FreeBSD_version > 700000 2969 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_link, adapter, 2970 #else /* 6.X */ 2971 INTR_TYPE_NET | INTR_MPSAFE, em_msix_link, adapter, 2972 #endif 2973 &adapter->tag[2])) != 0) { 2974 device_printf(dev, "Failed to register TX handler"); 2975 return (error); 2976 } 2977 2978 return (0); 2979 } 2980 2981 2982 static void 2983 em_free_pci_resources(struct adapter *adapter) 2984 { 2985 device_t dev = adapter->dev; 2986 2987 /* Make sure the for loop below runs once */ 2988 if (adapter->msi == 0) 2989 adapter->msi = 1; 2990 2991 /* 2992 * First release all the interrupt resources: 2993 * notice that since these are just kept 2994 * in an array we can do the same logic 2995 * whether its MSIX or just legacy. 2996 */ 2997 for (int i = 0; i < adapter->msi; i++) { 2998 if (adapter->tag[i] != NULL) { 2999 bus_teardown_intr(dev, adapter->res[i], 3000 adapter->tag[i]); 3001 adapter->tag[i] = NULL; 3002 } 3003 if (adapter->res[i] != NULL) { 3004 bus_release_resource(dev, SYS_RES_IRQ, 3005 adapter->rid[i], adapter->res[i]); 3006 } 3007 } 3008 3009 if (adapter->msi) 3010 pci_release_msi(dev); 3011 3012 if (adapter->msix != NULL) 3013 bus_release_resource(dev, SYS_RES_MEMORY, 3014 PCIR_BAR(EM_MSIX_BAR), adapter->msix); 3015 3016 if (adapter->memory != NULL) 3017 bus_release_resource(dev, SYS_RES_MEMORY, 3018 PCIR_BAR(0), adapter->memory); 3019 3020 if (adapter->flash != NULL) 3021 bus_release_resource(dev, SYS_RES_MEMORY, 3022 EM_FLASH, adapter->flash); 3023 3024 if (adapter->ioport != NULL) 3025 bus_release_resource(dev, SYS_RES_IOPORT, 3026 adapter->io_rid, adapter->ioport); 3027 } 3028 3029 /* 3030 * Setup MSI or MSI/X 3031 */ 3032 static int 3033 em_setup_msix(struct adapter *adapter) 3034 { 3035 device_t dev = adapter->dev; 3036 int val = 0; 3037 3038 if (adapter->hw.mac.type < e1000_82571) 3039 return (0); 3040 3041 /* Setup MSI/X for Hartwell */ 3042 if (adapter->hw.mac.type == e1000_82574) { 3043 /* Map the MSIX BAR */ 3044 int rid = PCIR_BAR(EM_MSIX_BAR); 3045 adapter->msix = bus_alloc_resource_any(dev, 3046 SYS_RES_MEMORY, &rid, RF_ACTIVE); 3047 if (!adapter->msix) { 3048 /* May not be enabled */ 3049 device_printf(adapter->dev, 3050 "Unable to map MSIX table \n"); 3051 goto msi; 3052 } 3053 val = pci_msix_count(dev); 3054 /* 3055 ** 82574 can be configured for 5 but 3056 ** we limit use to 3. 3057 */ 3058 if (val > 3) val = 3; 3059 if ((val) && pci_alloc_msix(dev, &val) == 0) { 3060 device_printf(adapter->dev,"Using MSIX interrupts\n"); 3061 return (val); 3062 } 3063 } 3064 msi: 3065 val = pci_msi_count(dev); 3066 if (val == 1 && pci_alloc_msi(dev, &val) == 0) { 3067 adapter->msi = 1; 3068 device_printf(adapter->dev,"Using MSI interrupt\n"); 3069 return (val); 3070 } 3071 return (0); 3072 } 3073 3074 /********************************************************************* 3075 * 3076 * Initialize the hardware to a configuration 3077 * as specified by the adapter structure. 3078 * 3079 **********************************************************************/ 3080 static int 3081 em_hardware_init(struct adapter *adapter) 3082 { 3083 device_t dev = adapter->dev; 3084 u16 rx_buffer_size; 3085 3086 INIT_DEBUGOUT("em_hardware_init: begin"); 3087 3088 /* Issue a global reset */ 3089 e1000_reset_hw(&adapter->hw); 3090 3091 /* Get control from any management/hw control */ 3092 if (((adapter->hw.mac.type == e1000_82573) || 3093 (adapter->hw.mac.type == e1000_82583) || 3094 (adapter->hw.mac.type == e1000_ich8lan) || 3095 (adapter->hw.mac.type == e1000_ich10lan) || 3096 (adapter->hw.mac.type == e1000_ich9lan)) && 3097 e1000_check_mng_mode(&adapter->hw)) 3098 em_get_hw_control(adapter); 3099 3100 /* When hardware is reset, fifo_head is also reset */ 3101 adapter->tx_fifo_head = 0; 3102 3103 /* Set up smart power down as default off on newer adapters. */ 3104 if (!em_smart_pwr_down && (adapter->hw.mac.type == e1000_82571 || 3105 adapter->hw.mac.type == e1000_82572)) { 3106 u16 phy_tmp = 0; 3107 3108 /* Speed up time to link by disabling smart power down. */ 3109 e1000_read_phy_reg(&adapter->hw, 3110 IGP02E1000_PHY_POWER_MGMT, &phy_tmp); 3111 phy_tmp &= ~IGP02E1000_PM_SPD; 3112 e1000_write_phy_reg(&adapter->hw, 3113 IGP02E1000_PHY_POWER_MGMT, phy_tmp); 3114 } 3115 3116 /* 3117 * These parameters control the automatic generation (Tx) and 3118 * response (Rx) to Ethernet PAUSE frames. 3119 * - High water mark should allow for at least two frames to be 3120 * received after sending an XOFF. 3121 * - Low water mark works best when it is very near the high water mark. 3122 * This allows the receiver to restart by sending XON when it has 3123 * drained a bit. Here we use an arbitary value of 1500 which will 3124 * restart after one full frame is pulled from the buffer. There 3125 * could be several smaller frames in the buffer and if so they will 3126 * not trigger the XON until their total number reduces the buffer 3127 * by 1500. 3128 * - The pause time is fairly large at 1000 x 512ns = 512 usec. 3129 */ 3130 rx_buffer_size = ((E1000_READ_REG(&adapter->hw, E1000_PBA) & 3131 0xffff) << 10 ); 3132 3133 adapter->hw.fc.high_water = rx_buffer_size - 3134 roundup2(adapter->max_frame_size, 1024); 3135 adapter->hw.fc.low_water = adapter->hw.fc.high_water - 1500; 3136 3137 if (adapter->hw.mac.type == e1000_80003es2lan) 3138 adapter->hw.fc.pause_time = 0xFFFF; 3139 else 3140 adapter->hw.fc.pause_time = EM_FC_PAUSE_TIME; 3141 adapter->hw.fc.send_xon = TRUE; 3142 3143 /* Set Flow control, use the tunable location if sane */ 3144 if ((em_fc_setting >= 0) || (em_fc_setting < 4)) 3145 adapter->hw.fc.requested_mode = em_fc_setting; 3146 else 3147 adapter->hw.fc.requested_mode = e1000_fc_none; 3148 3149 3150 if (e1000_init_hw(&adapter->hw) < 0) { 3151 device_printf(dev, "Hardware Initialization Failed\n"); 3152 return (EIO); 3153 } 3154 3155 e1000_check_for_link(&adapter->hw); 3156 3157 return (0); 3158 } 3159 3160 /********************************************************************* 3161 * 3162 * Setup networking device structure and register an interface. 3163 * 3164 **********************************************************************/ 3165 static void 3166 em_setup_interface(device_t dev, struct adapter *adapter) 3167 { 3168 struct ifnet *ifp; 3169 3170 INIT_DEBUGOUT("em_setup_interface: begin"); 3171 3172 ifp = adapter->ifp = if_alloc(IFT_ETHER); 3173 if (ifp == NULL) 3174 panic("%s: can not if_alloc()", device_get_nameunit(dev)); 3175 if_initname(ifp, device_get_name(dev), device_get_unit(dev)); 3176 ifp->if_mtu = ETHERMTU; 3177 ifp->if_init = em_init; 3178 ifp->if_softc = adapter; 3179 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; 3180 ifp->if_ioctl = em_ioctl; 3181 ifp->if_start = em_start; 3182 IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1); 3183 ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1; 3184 IFQ_SET_READY(&ifp->if_snd); 3185 3186 ether_ifattach(ifp, adapter->hw.mac.addr); 3187 3188 ifp->if_capabilities = ifp->if_capenable = 0; 3189 3190 #if __FreeBSD_version >= 800000 3191 /* Multiqueue tx functions */ 3192 ifp->if_transmit = em_mq_start; 3193 ifp->if_qflush = em_qflush; 3194 adapter->br = buf_ring_alloc(4096, M_DEVBUF, M_WAITOK, &adapter->tx_mtx); 3195 #endif 3196 if (adapter->hw.mac.type >= e1000_82543) { 3197 int version_cap; 3198 #if __FreeBSD_version < 700000 3199 version_cap = IFCAP_HWCSUM; 3200 #else 3201 version_cap = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM; 3202 #endif 3203 ifp->if_capabilities |= version_cap; 3204 ifp->if_capenable |= version_cap; 3205 } 3206 3207 #if __FreeBSD_version >= 700000 3208 /* Identify TSO capable adapters */ 3209 if ((adapter->hw.mac.type > e1000_82544) && 3210 (adapter->hw.mac.type != e1000_82547)) 3211 ifp->if_capabilities |= IFCAP_TSO4; 3212 /* 3213 * By default only enable on PCI-E, this 3214 * can be overriden by ifconfig. 3215 */ 3216 if (adapter->hw.mac.type >= e1000_82571) 3217 ifp->if_capenable |= IFCAP_TSO4; 3218 #endif 3219 3220 /* 3221 * Tell the upper layer(s) we support long frames. 3222 */ 3223 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); 3224 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU; 3225 ifp->if_capenable |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU; 3226 3227 #ifdef DEVICE_POLLING 3228 ifp->if_capabilities |= IFCAP_POLLING; 3229 #endif 3230 3231 /* 3232 * Specify the media types supported by this adapter and register 3233 * callbacks to update media and link information 3234 */ 3235 ifmedia_init(&adapter->media, IFM_IMASK, 3236 em_media_change, em_media_status); 3237 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 3238 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) { 3239 u_char fiber_type = IFM_1000_SX; /* default type */ 3240 3241 if (adapter->hw.mac.type == e1000_82545) 3242 fiber_type = IFM_1000_LX; 3243 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX, 3244 0, NULL); 3245 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL); 3246 } else { 3247 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL); 3248 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX, 3249 0, NULL); 3250 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX, 3251 0, NULL); 3252 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 3253 0, NULL); 3254 if (adapter->hw.phy.type != e1000_phy_ife) { 3255 ifmedia_add(&adapter->media, 3256 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL); 3257 ifmedia_add(&adapter->media, 3258 IFM_ETHER | IFM_1000_T, 0, NULL); 3259 } 3260 } 3261 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); 3262 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO); 3263 } 3264 3265 3266 /********************************************************************* 3267 * 3268 * Workaround for SmartSpeed on 82541 and 82547 controllers 3269 * 3270 **********************************************************************/ 3271 static void 3272 em_smartspeed(struct adapter *adapter) 3273 { 3274 u16 phy_tmp; 3275 3276 if (adapter->link_active || (adapter->hw.phy.type != e1000_phy_igp) || 3277 adapter->hw.mac.autoneg == 0 || 3278 (adapter->hw.phy.autoneg_advertised & ADVERTISE_1000_FULL) == 0) 3279 return; 3280 3281 if (adapter->smartspeed == 0) { 3282 /* If Master/Slave config fault is asserted twice, 3283 * we assume back-to-back */ 3284 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp); 3285 if (!(phy_tmp & SR_1000T_MS_CONFIG_FAULT)) 3286 return; 3287 e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp); 3288 if (phy_tmp & SR_1000T_MS_CONFIG_FAULT) { 3289 e1000_read_phy_reg(&adapter->hw, 3290 PHY_1000T_CTRL, &phy_tmp); 3291 if(phy_tmp & CR_1000T_MS_ENABLE) { 3292 phy_tmp &= ~CR_1000T_MS_ENABLE; 3293 e1000_write_phy_reg(&adapter->hw, 3294 PHY_1000T_CTRL, phy_tmp); 3295 adapter->smartspeed++; 3296 if(adapter->hw.mac.autoneg && 3297 !e1000_phy_setup_autoneg(&adapter->hw) && 3298 !e1000_read_phy_reg(&adapter->hw, 3299 PHY_CONTROL, &phy_tmp)) { 3300 phy_tmp |= (MII_CR_AUTO_NEG_EN | 3301 MII_CR_RESTART_AUTO_NEG); 3302 e1000_write_phy_reg(&adapter->hw, 3303 PHY_CONTROL, phy_tmp); 3304 } 3305 } 3306 } 3307 return; 3308 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) { 3309 /* If still no link, perhaps using 2/3 pair cable */ 3310 e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp); 3311 phy_tmp |= CR_1000T_MS_ENABLE; 3312 e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp); 3313 if(adapter->hw.mac.autoneg && 3314 !e1000_phy_setup_autoneg(&adapter->hw) && 3315 !e1000_read_phy_reg(&adapter->hw, PHY_CONTROL, &phy_tmp)) { 3316 phy_tmp |= (MII_CR_AUTO_NEG_EN | 3317 MII_CR_RESTART_AUTO_NEG); 3318 e1000_write_phy_reg(&adapter->hw, PHY_CONTROL, phy_tmp); 3319 } 3320 } 3321 /* Restart process after EM_SMARTSPEED_MAX iterations */ 3322 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX) 3323 adapter->smartspeed = 0; 3324 } 3325 3326 3327 /* 3328 * Manage DMA'able memory. 3329 */ 3330 static void 3331 em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) 3332 { 3333 if (error) 3334 return; 3335 *(bus_addr_t *) arg = segs[0].ds_addr; 3336 } 3337 3338 static int 3339 em_dma_malloc(struct adapter *adapter, bus_size_t size, 3340 struct em_dma_alloc *dma, int mapflags) 3341 { 3342 int error; 3343 3344 #if __FreeBSD_version >= 700000 3345 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */ 3346 #else 3347 error = bus_dma_tag_create(NULL, /* parent */ 3348 #endif 3349 EM_DBA_ALIGN, 0, /* alignment, bounds */ 3350 BUS_SPACE_MAXADDR, /* lowaddr */ 3351 BUS_SPACE_MAXADDR, /* highaddr */ 3352 NULL, NULL, /* filter, filterarg */ 3353 size, /* maxsize */ 3354 1, /* nsegments */ 3355 size, /* maxsegsize */ 3356 0, /* flags */ 3357 NULL, /* lockfunc */ 3358 NULL, /* lockarg */ 3359 &dma->dma_tag); 3360 if (error) { 3361 device_printf(adapter->dev, 3362 "%s: bus_dma_tag_create failed: %d\n", 3363 __func__, error); 3364 goto fail_0; 3365 } 3366 3367 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr, 3368 BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map); 3369 if (error) { 3370 device_printf(adapter->dev, 3371 "%s: bus_dmamem_alloc(%ju) failed: %d\n", 3372 __func__, (uintmax_t)size, error); 3373 goto fail_2; 3374 } 3375 3376 dma->dma_paddr = 0; 3377 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr, 3378 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT); 3379 if (error || dma->dma_paddr == 0) { 3380 device_printf(adapter->dev, 3381 "%s: bus_dmamap_load failed: %d\n", 3382 __func__, error); 3383 goto fail_3; 3384 } 3385 3386 return (0); 3387 3388 fail_3: 3389 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 3390 fail_2: 3391 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 3392 bus_dma_tag_destroy(dma->dma_tag); 3393 fail_0: 3394 dma->dma_map = NULL; 3395 dma->dma_tag = NULL; 3396 3397 return (error); 3398 } 3399 3400 static void 3401 em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma) 3402 { 3403 if (dma->dma_tag == NULL) 3404 return; 3405 if (dma->dma_map != NULL) { 3406 bus_dmamap_sync(dma->dma_tag, dma->dma_map, 3407 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); 3408 bus_dmamap_unload(dma->dma_tag, dma->dma_map); 3409 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map); 3410 dma->dma_map = NULL; 3411 } 3412 bus_dma_tag_destroy(dma->dma_tag); 3413 dma->dma_tag = NULL; 3414 } 3415 3416 3417 /********************************************************************* 3418 * 3419 * Allocate memory for tx_buffer structures. The tx_buffer stores all 3420 * the information needed to transmit a packet on the wire. 3421 * 3422 **********************************************************************/ 3423 static int 3424 em_allocate_transmit_structures(struct adapter *adapter) 3425 { 3426 device_t dev = adapter->dev; 3427 struct em_buffer *tx_buffer; 3428 int error; 3429 3430 /* 3431 * Create DMA tags for tx descriptors 3432 */ 3433 #if __FreeBSD_version >= 700000 3434 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */ 3435 #else 3436 if ((error = bus_dma_tag_create(NULL, /* parent */ 3437 #endif 3438 1, 0, /* alignment, bounds */ 3439 BUS_SPACE_MAXADDR, /* lowaddr */ 3440 BUS_SPACE_MAXADDR, /* highaddr */ 3441 NULL, NULL, /* filter, filterarg */ 3442 EM_TSO_SIZE, /* maxsize */ 3443 EM_MAX_SCATTER, /* nsegments */ 3444 EM_TSO_SEG_SIZE, /* maxsegsize */ 3445 0, /* flags */ 3446 NULL, /* lockfunc */ 3447 NULL, /* lockarg */ 3448 &adapter->txtag)) != 0) { 3449 device_printf(dev, "Unable to allocate TX DMA tag\n"); 3450 goto fail; 3451 } 3452 3453 adapter->tx_buffer_area = malloc(sizeof(struct em_buffer) * 3454 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO); 3455 if (adapter->tx_buffer_area == NULL) { 3456 device_printf(dev, "Unable to allocate tx_buffer memory\n"); 3457 error = ENOMEM; 3458 goto fail; 3459 } 3460 3461 /* Create the descriptor buffer dma maps */ 3462 for (int i = 0; i < adapter->num_tx_desc; i++) { 3463 tx_buffer = &adapter->tx_buffer_area[i]; 3464 error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map); 3465 if (error != 0) { 3466 device_printf(dev, "Unable to create TX DMA map\n"); 3467 goto fail; 3468 } 3469 tx_buffer->next_eop = -1; 3470 } 3471 3472 return (0); 3473 fail: 3474 em_free_transmit_structures(adapter); 3475 return (error); 3476 } 3477 3478 /********************************************************************* 3479 * 3480 * (Re)Initialize transmit structures. 3481 * 3482 **********************************************************************/ 3483 static void 3484 em_setup_transmit_structures(struct adapter *adapter) 3485 { 3486 struct em_buffer *tx_buffer; 3487 3488 /* Clear the old ring contents */ 3489 bzero(adapter->tx_desc_base, 3490 (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc); 3491 3492 /* Free any existing TX buffers */ 3493 for (int i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) { 3494 tx_buffer = &adapter->tx_buffer_area[i]; 3495 bus_dmamap_sync(adapter->txtag, tx_buffer->map, 3496 BUS_DMASYNC_POSTWRITE); 3497 bus_dmamap_unload(adapter->txtag, tx_buffer->map); 3498 m_freem(tx_buffer->m_head); 3499 tx_buffer->m_head = NULL; 3500 tx_buffer->next_eop = -1; 3501 } 3502 3503 /* Reset state */ 3504 adapter->next_avail_tx_desc = 0; 3505 adapter->next_tx_to_clean = 0; 3506 adapter->num_tx_desc_avail = adapter->num_tx_desc; 3507 3508 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 3509 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 3510 3511 return; 3512 } 3513 3514 /********************************************************************* 3515 * 3516 * Enable transmit unit. 3517 * 3518 **********************************************************************/ 3519 static void 3520 em_initialize_transmit_unit(struct adapter *adapter) 3521 { 3522 u32 tctl, tarc, tipg = 0; 3523 u64 bus_addr; 3524 3525 INIT_DEBUGOUT("em_initialize_transmit_unit: begin"); 3526 /* Setup the Base and Length of the Tx Descriptor Ring */ 3527 bus_addr = adapter->txdma.dma_paddr; 3528 E1000_WRITE_REG(&adapter->hw, E1000_TDLEN(0), 3529 adapter->num_tx_desc * sizeof(struct e1000_tx_desc)); 3530 E1000_WRITE_REG(&adapter->hw, E1000_TDBAH(0), 3531 (u32)(bus_addr >> 32)); 3532 E1000_WRITE_REG(&adapter->hw, E1000_TDBAL(0), 3533 (u32)bus_addr); 3534 /* Setup the HW Tx Head and Tail descriptor pointers */ 3535 E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), 0); 3536 E1000_WRITE_REG(&adapter->hw, E1000_TDH(0), 0); 3537 3538 HW_DEBUGOUT2("Base = %x, Length = %x\n", 3539 E1000_READ_REG(&adapter->hw, E1000_TDBAL(0)), 3540 E1000_READ_REG(&adapter->hw, E1000_TDLEN(0))); 3541 3542 /* Set the default values for the Tx Inter Packet Gap timer */ 3543 switch (adapter->hw.mac.type) { 3544 case e1000_82542: 3545 tipg = DEFAULT_82542_TIPG_IPGT; 3546 tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 3547 tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 3548 break; 3549 case e1000_80003es2lan: 3550 tipg = DEFAULT_82543_TIPG_IPGR1; 3551 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 << 3552 E1000_TIPG_IPGR2_SHIFT; 3553 break; 3554 default: 3555 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) || 3556 (adapter->hw.phy.media_type == 3557 e1000_media_type_internal_serdes)) 3558 tipg = DEFAULT_82543_TIPG_IPGT_FIBER; 3559 else 3560 tipg = DEFAULT_82543_TIPG_IPGT_COPPER; 3561 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT; 3562 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; 3563 } 3564 3565 E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg); 3566 E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value); 3567 if(adapter->hw.mac.type >= e1000_82540) 3568 E1000_WRITE_REG(&adapter->hw, E1000_TADV, 3569 adapter->tx_abs_int_delay.value); 3570 3571 if ((adapter->hw.mac.type == e1000_82571) || 3572 (adapter->hw.mac.type == e1000_82572)) { 3573 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0)); 3574 tarc |= SPEED_MODE_BIT; 3575 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc); 3576 } else if (adapter->hw.mac.type == e1000_80003es2lan) { 3577 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0)); 3578 tarc |= 1; 3579 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc); 3580 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1)); 3581 tarc |= 1; 3582 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc); 3583 } 3584 3585 /* Program the Transmit Control Register */ 3586 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL); 3587 tctl &= ~E1000_TCTL_CT; 3588 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN | 3589 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT)); 3590 3591 if (adapter->hw.mac.type >= e1000_82571) 3592 tctl |= E1000_TCTL_MULR; 3593 3594 /* This write will effectively turn on the transmit unit. */ 3595 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl); 3596 3597 /* Setup Transmit Descriptor Base Settings */ 3598 adapter->txd_cmd = E1000_TXD_CMD_IFCS; 3599 3600 if (adapter->tx_int_delay.value > 0) 3601 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 3602 } 3603 3604 /********************************************************************* 3605 * 3606 * Free all transmit related data structures. 3607 * 3608 **********************************************************************/ 3609 static void 3610 em_free_transmit_structures(struct adapter *adapter) 3611 { 3612 struct em_buffer *tx_buffer; 3613 3614 INIT_DEBUGOUT("free_transmit_structures: begin"); 3615 3616 if (adapter->tx_buffer_area != NULL) { 3617 for (int i = 0; i < adapter->num_tx_desc; i++) { 3618 tx_buffer = &adapter->tx_buffer_area[i]; 3619 if (tx_buffer->m_head != NULL) { 3620 bus_dmamap_sync(adapter->txtag, tx_buffer->map, 3621 BUS_DMASYNC_POSTWRITE); 3622 bus_dmamap_unload(adapter->txtag, 3623 tx_buffer->map); 3624 m_freem(tx_buffer->m_head); 3625 tx_buffer->m_head = NULL; 3626 } else if (tx_buffer->map != NULL) 3627 bus_dmamap_unload(adapter->txtag, 3628 tx_buffer->map); 3629 if (tx_buffer->map != NULL) { 3630 bus_dmamap_destroy(adapter->txtag, 3631 tx_buffer->map); 3632 tx_buffer->map = NULL; 3633 } 3634 } 3635 } 3636 if (adapter->tx_buffer_area != NULL) { 3637 free(adapter->tx_buffer_area, M_DEVBUF); 3638 adapter->tx_buffer_area = NULL; 3639 } 3640 if (adapter->txtag != NULL) { 3641 bus_dma_tag_destroy(adapter->txtag); 3642 adapter->txtag = NULL; 3643 } 3644 #if __FreeBSD_version >= 800000 3645 if (adapter->br != NULL) 3646 buf_ring_free(adapter->br, M_DEVBUF); 3647 #endif 3648 } 3649 3650 /********************************************************************* 3651 * 3652 * The offload context needs to be set when we transfer the first 3653 * packet of a particular protocol (TCP/UDP). This routine has been 3654 * enhanced to deal with inserted VLAN headers, and IPV6 (not complete) 3655 * 3656 * Added back the old method of keeping the current context type 3657 * and not setting if unnecessary, as this is reported to be a 3658 * big performance win. -jfv 3659 **********************************************************************/ 3660 static void 3661 em_transmit_checksum_setup(struct adapter *adapter, struct mbuf *mp, 3662 u32 *txd_upper, u32 *txd_lower) 3663 { 3664 struct e1000_context_desc *TXD = NULL; 3665 struct em_buffer *tx_buffer; 3666 struct ether_vlan_header *eh; 3667 struct ip *ip = NULL; 3668 struct ip6_hdr *ip6; 3669 int curr_txd, ehdrlen; 3670 u32 cmd, hdr_len, ip_hlen; 3671 u16 etype; 3672 u8 ipproto; 3673 3674 3675 cmd = hdr_len = ipproto = 0; 3676 curr_txd = adapter->next_avail_tx_desc; 3677 3678 /* 3679 * Determine where frame payload starts. 3680 * Jump over vlan headers if already present, 3681 * helpful for QinQ too. 3682 */ 3683 eh = mtod(mp, struct ether_vlan_header *); 3684 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) { 3685 etype = ntohs(eh->evl_proto); 3686 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN; 3687 } else { 3688 etype = ntohs(eh->evl_encap_proto); 3689 ehdrlen = ETHER_HDR_LEN; 3690 } 3691 3692 /* 3693 * We only support TCP/UDP for IPv4 and IPv6 for the moment. 3694 * TODO: Support SCTP too when it hits the tree. 3695 */ 3696 switch (etype) { 3697 case ETHERTYPE_IP: 3698 ip = (struct ip *)(mp->m_data + ehdrlen); 3699 ip_hlen = ip->ip_hl << 2; 3700 3701 /* Setup of IP header checksum. */ 3702 if (mp->m_pkthdr.csum_flags & CSUM_IP) { 3703 /* 3704 * Start offset for header checksum calculation. 3705 * End offset for header checksum calculation. 3706 * Offset of place to put the checksum. 3707 */ 3708 TXD = (struct e1000_context_desc *) 3709 &adapter->tx_desc_base[curr_txd]; 3710 TXD->lower_setup.ip_fields.ipcss = ehdrlen; 3711 TXD->lower_setup.ip_fields.ipcse = 3712 htole16(ehdrlen + ip_hlen); 3713 TXD->lower_setup.ip_fields.ipcso = 3714 ehdrlen + offsetof(struct ip, ip_sum); 3715 cmd |= E1000_TXD_CMD_IP; 3716 *txd_upper |= E1000_TXD_POPTS_IXSM << 8; 3717 } 3718 3719 if (mp->m_len < ehdrlen + ip_hlen) 3720 return; /* failure */ 3721 3722 hdr_len = ehdrlen + ip_hlen; 3723 ipproto = ip->ip_p; 3724 3725 break; 3726 case ETHERTYPE_IPV6: 3727 ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen); 3728 ip_hlen = sizeof(struct ip6_hdr); /* XXX: No header stacking. */ 3729 3730 if (mp->m_len < ehdrlen + ip_hlen) 3731 return; /* failure */ 3732 3733 /* IPv6 doesn't have a header checksum. */ 3734 3735 hdr_len = ehdrlen + ip_hlen; 3736 ipproto = ip6->ip6_nxt; 3737 3738 break; 3739 default: 3740 *txd_upper = 0; 3741 *txd_lower = 0; 3742 return; 3743 } 3744 3745 switch (ipproto) { 3746 case IPPROTO_TCP: 3747 if (mp->m_pkthdr.csum_flags & CSUM_TCP) { 3748 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 3749 *txd_upper |= E1000_TXD_POPTS_TXSM << 8; 3750 /* no need for context if already set */ 3751 if (adapter->last_hw_offload == CSUM_TCP) 3752 return; 3753 adapter->last_hw_offload = CSUM_TCP; 3754 /* 3755 * Start offset for payload checksum calculation. 3756 * End offset for payload checksum calculation. 3757 * Offset of place to put the checksum. 3758 */ 3759 TXD = (struct e1000_context_desc *) 3760 &adapter->tx_desc_base[curr_txd]; 3761 TXD->upper_setup.tcp_fields.tucss = hdr_len; 3762 TXD->upper_setup.tcp_fields.tucse = htole16(0); 3763 TXD->upper_setup.tcp_fields.tucso = 3764 hdr_len + offsetof(struct tcphdr, th_sum); 3765 cmd |= E1000_TXD_CMD_TCP; 3766 } 3767 break; 3768 case IPPROTO_UDP: 3769 { 3770 if (mp->m_pkthdr.csum_flags & CSUM_UDP) { 3771 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D; 3772 *txd_upper |= E1000_TXD_POPTS_TXSM << 8; 3773 /* no need for context if already set */ 3774 if (adapter->last_hw_offload == CSUM_UDP) 3775 return; 3776 adapter->last_hw_offload = CSUM_UDP; 3777 /* 3778 * Start offset for header checksum calculation. 3779 * End offset for header checksum calculation. 3780 * Offset of place to put the checksum. 3781 */ 3782 TXD = (struct e1000_context_desc *) 3783 &adapter->tx_desc_base[curr_txd]; 3784 TXD->upper_setup.tcp_fields.tucss = hdr_len; 3785 TXD->upper_setup.tcp_fields.tucse = htole16(0); 3786 TXD->upper_setup.tcp_fields.tucso = 3787 hdr_len + offsetof(struct udphdr, uh_sum); 3788 } 3789 /* Fall Thru */ 3790 } 3791 default: 3792 break; 3793 } 3794 3795 TXD->tcp_seg_setup.data = htole32(0); 3796 TXD->cmd_and_length = 3797 htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd); 3798 tx_buffer = &adapter->tx_buffer_area[curr_txd]; 3799 tx_buffer->m_head = NULL; 3800 tx_buffer->next_eop = -1; 3801 3802 if (++curr_txd == adapter->num_tx_desc) 3803 curr_txd = 0; 3804 3805 adapter->num_tx_desc_avail--; 3806 adapter->next_avail_tx_desc = curr_txd; 3807 } 3808 3809 3810 #if __FreeBSD_version >= 700000 3811 /********************************************************************** 3812 * 3813 * Setup work for hardware segmentation offload (TSO) 3814 * 3815 **********************************************************************/ 3816 static bool 3817 em_tso_setup(struct adapter *adapter, struct mbuf *mp, u32 *txd_upper, 3818 u32 *txd_lower) 3819 { 3820 struct e1000_context_desc *TXD; 3821 struct em_buffer *tx_buffer; 3822 struct ether_vlan_header *eh; 3823 struct ip *ip; 3824 struct ip6_hdr *ip6; 3825 struct tcphdr *th; 3826 int curr_txd, ehdrlen, hdr_len, ip_hlen, isip6; 3827 u16 etype; 3828 3829 /* 3830 * This function could/should be extended to support IP/IPv6 3831 * fragmentation as well. But as they say, one step at a time. 3832 */ 3833 3834 /* 3835 * Determine where frame payload starts. 3836 * Jump over vlan headers if already present, 3837 * helpful for QinQ too. 3838 */ 3839 eh = mtod(mp, struct ether_vlan_header *); 3840 if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) { 3841 etype = ntohs(eh->evl_proto); 3842 ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN; 3843 } else { 3844 etype = ntohs(eh->evl_encap_proto); 3845 ehdrlen = ETHER_HDR_LEN; 3846 } 3847 3848 /* Ensure we have at least the IP+TCP header in the first mbuf. */ 3849 if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr)) 3850 return FALSE; /* -1 */ 3851 3852 /* 3853 * We only support TCP for IPv4 and IPv6 (notyet) for the moment. 3854 * TODO: Support SCTP too when it hits the tree. 3855 */ 3856 switch (etype) { 3857 case ETHERTYPE_IP: 3858 isip6 = 0; 3859 ip = (struct ip *)(mp->m_data + ehdrlen); 3860 if (ip->ip_p != IPPROTO_TCP) 3861 return FALSE; /* 0 */ 3862 ip->ip_len = 0; 3863 ip->ip_sum = 0; 3864 ip_hlen = ip->ip_hl << 2; 3865 if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr)) 3866 return FALSE; /* -1 */ 3867 th = (struct tcphdr *)((caddr_t)ip + ip_hlen); 3868 #if 1 3869 th->th_sum = in_pseudo(ip->ip_src.s_addr, 3870 ip->ip_dst.s_addr, htons(IPPROTO_TCP)); 3871 #else 3872 th->th_sum = mp->m_pkthdr.csum_data; 3873 #endif 3874 break; 3875 case ETHERTYPE_IPV6: 3876 isip6 = 1; 3877 return FALSE; /* Not supported yet. */ 3878 ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen); 3879 if (ip6->ip6_nxt != IPPROTO_TCP) 3880 return FALSE; /* 0 */ 3881 ip6->ip6_plen = 0; 3882 ip_hlen = sizeof(struct ip6_hdr); /* XXX: no header stacking. */ 3883 if (mp->m_len < ehdrlen + ip_hlen + sizeof(struct tcphdr)) 3884 return FALSE; /* -1 */ 3885 th = (struct tcphdr *)((caddr_t)ip6 + ip_hlen); 3886 #if 0 3887 th->th_sum = in6_pseudo(ip6->ip6_src, ip->ip6_dst, 3888 htons(IPPROTO_TCP)); /* XXX: function notyet. */ 3889 #else 3890 th->th_sum = mp->m_pkthdr.csum_data; 3891 #endif 3892 break; 3893 default: 3894 return FALSE; 3895 } 3896 hdr_len = ehdrlen + ip_hlen + (th->th_off << 2); 3897 3898 *txd_lower = (E1000_TXD_CMD_DEXT | /* Extended descr type */ 3899 E1000_TXD_DTYP_D | /* Data descr type */ 3900 E1000_TXD_CMD_TSE); /* Do TSE on this packet */ 3901 3902 /* IP and/or TCP header checksum calculation and insertion. */ 3903 *txd_upper = ((isip6 ? 0 : E1000_TXD_POPTS_IXSM) | 3904 E1000_TXD_POPTS_TXSM) << 8; 3905 3906 curr_txd = adapter->next_avail_tx_desc; 3907 tx_buffer = &adapter->tx_buffer_area[curr_txd]; 3908 TXD = (struct e1000_context_desc *) &adapter->tx_desc_base[curr_txd]; 3909 3910 /* IPv6 doesn't have a header checksum. */ 3911 if (!isip6) { 3912 /* 3913 * Start offset for header checksum calculation. 3914 * End offset for header checksum calculation. 3915 * Offset of place put the checksum. 3916 */ 3917 TXD->lower_setup.ip_fields.ipcss = ehdrlen; 3918 TXD->lower_setup.ip_fields.ipcse = 3919 htole16(ehdrlen + ip_hlen - 1); 3920 TXD->lower_setup.ip_fields.ipcso = 3921 ehdrlen + offsetof(struct ip, ip_sum); 3922 } 3923 /* 3924 * Start offset for payload checksum calculation. 3925 * End offset for payload checksum calculation. 3926 * Offset of place to put the checksum. 3927 */ 3928 TXD->upper_setup.tcp_fields.tucss = 3929 ehdrlen + ip_hlen; 3930 TXD->upper_setup.tcp_fields.tucse = 0; 3931 TXD->upper_setup.tcp_fields.tucso = 3932 ehdrlen + ip_hlen + offsetof(struct tcphdr, th_sum); 3933 /* 3934 * Payload size per packet w/o any headers. 3935 * Length of all headers up to payload. 3936 */ 3937 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz); 3938 TXD->tcp_seg_setup.fields.hdr_len = hdr_len; 3939 3940 TXD->cmd_and_length = htole32(adapter->txd_cmd | 3941 E1000_TXD_CMD_DEXT | /* Extended descr */ 3942 E1000_TXD_CMD_TSE | /* TSE context */ 3943 (isip6 ? 0 : E1000_TXD_CMD_IP) | /* Do IP csum */ 3944 E1000_TXD_CMD_TCP | /* Do TCP checksum */ 3945 (mp->m_pkthdr.len - (hdr_len))); /* Total len */ 3946 3947 tx_buffer->m_head = NULL; 3948 tx_buffer->next_eop = -1; 3949 3950 if (++curr_txd == adapter->num_tx_desc) 3951 curr_txd = 0; 3952 3953 adapter->num_tx_desc_avail--; 3954 adapter->next_avail_tx_desc = curr_txd; 3955 adapter->tx_tso = TRUE; 3956 3957 return TRUE; 3958 } 3959 3960 #endif /* __FreeBSD_version >= 700000 */ 3961 3962 /********************************************************************** 3963 * 3964 * Examine each tx_buffer in the used queue. If the hardware is done 3965 * processing the packet then free associated resources. The 3966 * tx_buffer is put back on the free queue. 3967 * 3968 **********************************************************************/ 3969 static void 3970 em_txeof(struct adapter *adapter) 3971 { 3972 int first, last, done, num_avail; 3973 u32 cleaned = 0; 3974 struct em_buffer *tx_buffer; 3975 struct e1000_tx_desc *tx_desc, *eop_desc; 3976 struct ifnet *ifp = adapter->ifp; 3977 3978 EM_TX_LOCK_ASSERT(adapter); 3979 3980 if (adapter->num_tx_desc_avail == adapter->num_tx_desc) 3981 return; 3982 3983 num_avail = adapter->num_tx_desc_avail; 3984 first = adapter->next_tx_to_clean; 3985 tx_desc = &adapter->tx_desc_base[first]; 3986 tx_buffer = &adapter->tx_buffer_area[first]; 3987 last = tx_buffer->next_eop; 3988 eop_desc = &adapter->tx_desc_base[last]; 3989 3990 /* 3991 * What this does is get the index of the 3992 * first descriptor AFTER the EOP of the 3993 * first packet, that way we can do the 3994 * simple comparison on the inner while loop. 3995 */ 3996 if (++last == adapter->num_tx_desc) 3997 last = 0; 3998 done = last; 3999 4000 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 4001 BUS_DMASYNC_POSTREAD); 4002 4003 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) { 4004 /* We clean the range of the packet */ 4005 while (first != done) { 4006 tx_desc->upper.data = 0; 4007 tx_desc->lower.data = 0; 4008 tx_desc->buffer_addr = 0; 4009 ++num_avail; ++cleaned; 4010 4011 if (tx_buffer->m_head) { 4012 ifp->if_opackets++; 4013 bus_dmamap_sync(adapter->txtag, 4014 tx_buffer->map, 4015 BUS_DMASYNC_POSTWRITE); 4016 bus_dmamap_unload(adapter->txtag, 4017 tx_buffer->map); 4018 4019 m_freem(tx_buffer->m_head); 4020 tx_buffer->m_head = NULL; 4021 } 4022 tx_buffer->next_eop = -1; 4023 4024 if (++first == adapter->num_tx_desc) 4025 first = 0; 4026 4027 tx_buffer = &adapter->tx_buffer_area[first]; 4028 tx_desc = &adapter->tx_desc_base[first]; 4029 } 4030 /* See if we can continue to the next packet */ 4031 last = tx_buffer->next_eop; 4032 if (last != -1) { 4033 eop_desc = &adapter->tx_desc_base[last]; 4034 /* Get new done point */ 4035 if (++last == adapter->num_tx_desc) last = 0; 4036 done = last; 4037 } else 4038 break; 4039 } 4040 bus_dmamap_sync(adapter->txdma.dma_tag, adapter->txdma.dma_map, 4041 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 4042 4043 adapter->next_tx_to_clean = first; 4044 4045 /* 4046 * If we have enough room, clear IFF_DRV_OACTIVE to 4047 * tell the stack that it is OK to send packets. 4048 * If there are no pending descriptors, clear the timeout. 4049 */ 4050 if (num_avail > EM_TX_CLEANUP_THRESHOLD) { 4051 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 4052 if (num_avail == adapter->num_tx_desc) { 4053 adapter->watchdog_timer = 0; 4054 adapter->num_tx_desc_avail = num_avail; 4055 return; 4056 } 4057 } 4058 4059 /* If any descriptors cleaned, reset the watchdog */ 4060 if (cleaned) 4061 adapter->watchdog_timer = EM_TX_TIMEOUT; 4062 adapter->num_tx_desc_avail = num_avail; 4063 return; 4064 } 4065 4066 /********************************************************************* 4067 * 4068 * When Link is lost sometimes there is work still in the TX ring 4069 * which will result in a watchdog, rather than allow that do an 4070 * attempted cleanup and then reinit here. Note that this has been 4071 * seens mostly with fiber adapters. 4072 * 4073 **********************************************************************/ 4074 static void 4075 em_tx_purge(struct adapter *adapter) 4076 { 4077 if ((!adapter->link_active) && (adapter->watchdog_timer)) { 4078 EM_TX_LOCK(adapter); 4079 em_txeof(adapter); 4080 EM_TX_UNLOCK(adapter); 4081 if (adapter->watchdog_timer) { /* Still not clean? */ 4082 adapter->watchdog_timer = 0; 4083 em_init_locked(adapter); 4084 } 4085 } 4086 } 4087 4088 /********************************************************************* 4089 * 4090 * Get a buffer from system mbuf buffer pool. 4091 * 4092 **********************************************************************/ 4093 static int 4094 em_get_buf(struct adapter *adapter, int i) 4095 { 4096 struct mbuf *m; 4097 bus_dma_segment_t segs[1]; 4098 bus_dmamap_t map; 4099 struct em_buffer *rx_buffer; 4100 int error, nsegs; 4101 4102 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); 4103 if (m == NULL) { 4104 adapter->mbuf_cluster_failed++; 4105 return (ENOBUFS); 4106 } 4107 m->m_len = m->m_pkthdr.len = MCLBYTES; 4108 4109 if (adapter->max_frame_size <= (MCLBYTES - ETHER_ALIGN)) 4110 m_adj(m, ETHER_ALIGN); 4111 4112 /* 4113 * Using memory from the mbuf cluster pool, invoke the 4114 * bus_dma machinery to arrange the memory mapping. 4115 */ 4116 error = bus_dmamap_load_mbuf_sg(adapter->rxtag, 4117 adapter->rx_sparemap, m, segs, &nsegs, BUS_DMA_NOWAIT); 4118 if (error != 0) { 4119 m_free(m); 4120 return (error); 4121 } 4122 4123 /* If nsegs is wrong then the stack is corrupt. */ 4124 KASSERT(nsegs == 1, ("Too many segments returned!")); 4125 4126 rx_buffer = &adapter->rx_buffer_area[i]; 4127 if (rx_buffer->m_head != NULL) 4128 bus_dmamap_unload(adapter->rxtag, rx_buffer->map); 4129 4130 map = rx_buffer->map; 4131 rx_buffer->map = adapter->rx_sparemap; 4132 adapter->rx_sparemap = map; 4133 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD); 4134 rx_buffer->m_head = m; 4135 4136 adapter->rx_desc_base[i].buffer_addr = htole64(segs[0].ds_addr); 4137 return (0); 4138 } 4139 4140 /********************************************************************* 4141 * 4142 * Allocate memory for rx_buffer structures. Since we use one 4143 * rx_buffer per received packet, the maximum number of rx_buffer's 4144 * that we'll need is equal to the number of receive descriptors 4145 * that we've allocated. 4146 * 4147 **********************************************************************/ 4148 static int 4149 em_allocate_receive_structures(struct adapter *adapter) 4150 { 4151 device_t dev = adapter->dev; 4152 struct em_buffer *rx_buffer; 4153 int i, error; 4154 4155 adapter->rx_buffer_area = malloc(sizeof(struct em_buffer) * 4156 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO); 4157 if (adapter->rx_buffer_area == NULL) { 4158 device_printf(dev, "Unable to allocate rx_buffer memory\n"); 4159 return (ENOMEM); 4160 } 4161 4162 #if __FreeBSD_version >= 700000 4163 error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */ 4164 #else 4165 error = bus_dma_tag_create(NULL, /* parent */ 4166 #endif 4167 1, 0, /* alignment, bounds */ 4168 BUS_SPACE_MAXADDR, /* lowaddr */ 4169 BUS_SPACE_MAXADDR, /* highaddr */ 4170 NULL, NULL, /* filter, filterarg */ 4171 MCLBYTES, /* maxsize */ 4172 1, /* nsegments */ 4173 MCLBYTES, /* maxsegsize */ 4174 0, /* flags */ 4175 NULL, /* lockfunc */ 4176 NULL, /* lockarg */ 4177 &adapter->rxtag); 4178 if (error) { 4179 device_printf(dev, "%s: bus_dma_tag_create failed %d\n", 4180 __func__, error); 4181 goto fail; 4182 } 4183 4184 /* Create the spare map (used by getbuf) */ 4185 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT, 4186 &adapter->rx_sparemap); 4187 if (error) { 4188 device_printf(dev, "%s: bus_dmamap_create failed: %d\n", 4189 __func__, error); 4190 goto fail; 4191 } 4192 4193 rx_buffer = adapter->rx_buffer_area; 4194 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 4195 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT, 4196 &rx_buffer->map); 4197 if (error) { 4198 device_printf(dev, "%s: bus_dmamap_create failed: %d\n", 4199 __func__, error); 4200 goto fail; 4201 } 4202 } 4203 4204 return (0); 4205 4206 fail: 4207 em_free_receive_structures(adapter); 4208 return (error); 4209 } 4210 4211 /********************************************************************* 4212 * 4213 * (Re)initialize receive structures. 4214 * 4215 **********************************************************************/ 4216 static int 4217 em_setup_receive_structures(struct adapter *adapter) 4218 { 4219 struct em_buffer *rx_buffer; 4220 int i, error; 4221 4222 /* Reset descriptor ring */ 4223 bzero(adapter->rx_desc_base, 4224 (sizeof(struct e1000_rx_desc)) * adapter->num_rx_desc); 4225 4226 /* Free current RX buffers. */ 4227 rx_buffer = adapter->rx_buffer_area; 4228 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 4229 if (rx_buffer->m_head != NULL) { 4230 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, 4231 BUS_DMASYNC_POSTREAD); 4232 bus_dmamap_unload(adapter->rxtag, rx_buffer->map); 4233 m_freem(rx_buffer->m_head); 4234 rx_buffer->m_head = NULL; 4235 } 4236 } 4237 4238 /* Allocate new ones. */ 4239 for (i = 0; i < adapter->num_rx_desc; i++) { 4240 error = em_get_buf(adapter, i); 4241 if (error) 4242 return (error); 4243 } 4244 4245 /* Setup our descriptor pointers */ 4246 adapter->next_rx_desc_to_check = 0; 4247 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 4248 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 4249 4250 return (0); 4251 } 4252 4253 /********************************************************************* 4254 * 4255 * Enable receive unit. 4256 * 4257 **********************************************************************/ 4258 #define MAX_INTS_PER_SEC 8000 4259 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256) 4260 4261 static void 4262 em_initialize_receive_unit(struct adapter *adapter) 4263 { 4264 struct ifnet *ifp = adapter->ifp; 4265 u64 bus_addr; 4266 u32 rctl, rxcsum; 4267 4268 INIT_DEBUGOUT("em_initialize_receive_unit: begin"); 4269 4270 /* 4271 * Make sure receives are disabled while setting 4272 * up the descriptor ring 4273 */ 4274 rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL); 4275 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl & ~E1000_RCTL_EN); 4276 4277 if (adapter->hw.mac.type >= e1000_82540) { 4278 E1000_WRITE_REG(&adapter->hw, E1000_RADV, 4279 adapter->rx_abs_int_delay.value); 4280 /* 4281 * Set the interrupt throttling rate. Value is calculated 4282 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) 4283 */ 4284 E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR); 4285 } 4286 4287 /* 4288 ** When using MSIX interrupts we need to throttle 4289 ** using the EITR register (82574 only) 4290 */ 4291 if (adapter->msix) 4292 for (int i = 0; i < 4; i++) 4293 E1000_WRITE_REG(&adapter->hw, 4294 E1000_EITR_82574(i), DEFAULT_ITR); 4295 4296 /* Disable accelerated ackknowledge */ 4297 if (adapter->hw.mac.type == e1000_82574) 4298 E1000_WRITE_REG(&adapter->hw, 4299 E1000_RFCTL, E1000_RFCTL_ACK_DIS); 4300 4301 /* Setup the Base and Length of the Rx Descriptor Ring */ 4302 bus_addr = adapter->rxdma.dma_paddr; 4303 E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0), 4304 adapter->num_rx_desc * sizeof(struct e1000_rx_desc)); 4305 E1000_WRITE_REG(&adapter->hw, E1000_RDBAH(0), 4306 (u32)(bus_addr >> 32)); 4307 E1000_WRITE_REG(&adapter->hw, E1000_RDBAL(0), 4308 (u32)bus_addr); 4309 4310 /* Setup the Receive Control Register */ 4311 rctl &= ~(3 << E1000_RCTL_MO_SHIFT); 4312 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO | 4313 E1000_RCTL_RDMTS_HALF | 4314 (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT); 4315 4316 /* Make sure VLAN Filters are off */ 4317 rctl &= ~E1000_RCTL_VFE; 4318 4319 if (e1000_tbi_sbp_enabled_82543(&adapter->hw)) 4320 rctl |= E1000_RCTL_SBP; 4321 else 4322 rctl &= ~E1000_RCTL_SBP; 4323 4324 switch (adapter->rx_buffer_len) { 4325 default: 4326 case 2048: 4327 rctl |= E1000_RCTL_SZ_2048; 4328 break; 4329 case 4096: 4330 rctl |= E1000_RCTL_SZ_4096 | 4331 E1000_RCTL_BSEX | E1000_RCTL_LPE; 4332 break; 4333 case 8192: 4334 rctl |= E1000_RCTL_SZ_8192 | 4335 E1000_RCTL_BSEX | E1000_RCTL_LPE; 4336 break; 4337 case 16384: 4338 rctl |= E1000_RCTL_SZ_16384 | 4339 E1000_RCTL_BSEX | E1000_RCTL_LPE; 4340 break; 4341 } 4342 4343 if (ifp->if_mtu > ETHERMTU) 4344 rctl |= E1000_RCTL_LPE; 4345 else 4346 rctl &= ~E1000_RCTL_LPE; 4347 4348 /* Enable 82543 Receive Checksum Offload for TCP and UDP */ 4349 if ((adapter->hw.mac.type >= e1000_82543) && 4350 (ifp->if_capenable & IFCAP_RXCSUM)) { 4351 rxcsum = E1000_READ_REG(&adapter->hw, E1000_RXCSUM); 4352 rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL); 4353 E1000_WRITE_REG(&adapter->hw, E1000_RXCSUM, rxcsum); 4354 } 4355 4356 /* 4357 ** XXX TEMPORARY WORKAROUND: on some systems with 82573 4358 ** long latencies are observed, like Lenovo X60. This 4359 ** change eliminates the problem, but since having positive 4360 ** values in RDTR is a known source of problems on other 4361 ** platforms another solution is being sought. 4362 */ 4363 if (adapter->hw.mac.type == e1000_82573) 4364 E1000_WRITE_REG(&adapter->hw, E1000_RDTR, 0x20); 4365 4366 /* Enable Receives */ 4367 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl); 4368 4369 /* 4370 * Setup the HW Rx Head and 4371 * Tail Descriptor Pointers 4372 */ 4373 E1000_WRITE_REG(&adapter->hw, E1000_RDH(0), 0); 4374 E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), adapter->num_rx_desc - 1); 4375 4376 return; 4377 } 4378 4379 /********************************************************************* 4380 * 4381 * Free receive related data structures. 4382 * 4383 **********************************************************************/ 4384 static void 4385 em_free_receive_structures(struct adapter *adapter) 4386 { 4387 struct em_buffer *rx_buffer; 4388 int i; 4389 4390 INIT_DEBUGOUT("free_receive_structures: begin"); 4391 4392 if (adapter->rx_sparemap) { 4393 bus_dmamap_destroy(adapter->rxtag, adapter->rx_sparemap); 4394 adapter->rx_sparemap = NULL; 4395 } 4396 4397 /* Cleanup any existing buffers */ 4398 if (adapter->rx_buffer_area != NULL) { 4399 rx_buffer = adapter->rx_buffer_area; 4400 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { 4401 if (rx_buffer->m_head != NULL) { 4402 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, 4403 BUS_DMASYNC_POSTREAD); 4404 bus_dmamap_unload(adapter->rxtag, 4405 rx_buffer->map); 4406 m_freem(rx_buffer->m_head); 4407 rx_buffer->m_head = NULL; 4408 } else if (rx_buffer->map != NULL) 4409 bus_dmamap_unload(adapter->rxtag, 4410 rx_buffer->map); 4411 if (rx_buffer->map != NULL) { 4412 bus_dmamap_destroy(adapter->rxtag, 4413 rx_buffer->map); 4414 rx_buffer->map = NULL; 4415 } 4416 } 4417 } 4418 4419 if (adapter->rx_buffer_area != NULL) { 4420 free(adapter->rx_buffer_area, M_DEVBUF); 4421 adapter->rx_buffer_area = NULL; 4422 } 4423 4424 if (adapter->rxtag != NULL) { 4425 bus_dma_tag_destroy(adapter->rxtag); 4426 adapter->rxtag = NULL; 4427 } 4428 } 4429 4430 /********************************************************************* 4431 * 4432 * This routine executes in interrupt context. It replenishes 4433 * the mbufs in the descriptor and sends data which has been 4434 * dma'ed into host memory to upper layer. 4435 * 4436 * We loop at most count times if count is > 0, or until done if 4437 * count < 0. 4438 * 4439 * For polling we also now return the number of cleaned packets 4440 *********************************************************************/ 4441 static int 4442 em_rxeof(struct adapter *adapter, int count) 4443 { 4444 struct ifnet *ifp = adapter->ifp;; 4445 struct mbuf *mp; 4446 u8 status, accept_frame = 0, eop = 0; 4447 u16 len, desc_len, prev_len_adj; 4448 int i, rx_sent = 0; 4449 struct e1000_rx_desc *current_desc; 4450 4451 EM_RX_LOCK(adapter); 4452 i = adapter->next_rx_desc_to_check; 4453 current_desc = &adapter->rx_desc_base[i]; 4454 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 4455 BUS_DMASYNC_POSTREAD); 4456 4457 if (!((current_desc->status) & E1000_RXD_STAT_DD)) { 4458 EM_RX_UNLOCK(adapter); 4459 return (rx_sent); 4460 } 4461 4462 while ((current_desc->status & E1000_RXD_STAT_DD) && 4463 (count != 0) && 4464 (ifp->if_drv_flags & IFF_DRV_RUNNING)) { 4465 struct mbuf *m = NULL; 4466 4467 mp = adapter->rx_buffer_area[i].m_head; 4468 /* 4469 * Can't defer bus_dmamap_sync(9) because TBI_ACCEPT 4470 * needs to access the last received byte in the mbuf. 4471 */ 4472 bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map, 4473 BUS_DMASYNC_POSTREAD); 4474 4475 accept_frame = 1; 4476 prev_len_adj = 0; 4477 desc_len = le16toh(current_desc->length); 4478 status = current_desc->status; 4479 if (status & E1000_RXD_STAT_EOP) { 4480 count--; 4481 eop = 1; 4482 if (desc_len < ETHER_CRC_LEN) { 4483 len = 0; 4484 prev_len_adj = ETHER_CRC_LEN - desc_len; 4485 } else 4486 len = desc_len - ETHER_CRC_LEN; 4487 } else { 4488 eop = 0; 4489 len = desc_len; 4490 } 4491 4492 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) { 4493 u8 last_byte; 4494 u32 pkt_len = desc_len; 4495 4496 if (adapter->fmp != NULL) 4497 pkt_len += adapter->fmp->m_pkthdr.len; 4498 4499 last_byte = *(mtod(mp, caddr_t) + desc_len - 1); 4500 if (TBI_ACCEPT(&adapter->hw, status, 4501 current_desc->errors, pkt_len, last_byte, 4502 adapter->min_frame_size, adapter->max_frame_size)) { 4503 e1000_tbi_adjust_stats_82543(&adapter->hw, 4504 &adapter->stats, pkt_len, 4505 adapter->hw.mac.addr, 4506 adapter->max_frame_size); 4507 if (len > 0) 4508 len--; 4509 } else 4510 accept_frame = 0; 4511 } 4512 4513 if (accept_frame) { 4514 if (em_get_buf(adapter, i) != 0) { 4515 ifp->if_iqdrops++; 4516 goto discard; 4517 } 4518 4519 /* Assign correct length to the current fragment */ 4520 mp->m_len = len; 4521 4522 if (adapter->fmp == NULL) { 4523 mp->m_pkthdr.len = len; 4524 adapter->fmp = mp; /* Store the first mbuf */ 4525 adapter->lmp = mp; 4526 } else { 4527 /* Chain mbuf's together */ 4528 mp->m_flags &= ~M_PKTHDR; 4529 /* 4530 * Adjust length of previous mbuf in chain if 4531 * we received less than 4 bytes in the last 4532 * descriptor. 4533 */ 4534 if (prev_len_adj > 0) { 4535 adapter->lmp->m_len -= prev_len_adj; 4536 adapter->fmp->m_pkthdr.len -= 4537 prev_len_adj; 4538 } 4539 adapter->lmp->m_next = mp; 4540 adapter->lmp = adapter->lmp->m_next; 4541 adapter->fmp->m_pkthdr.len += len; 4542 } 4543 4544 if (eop) { 4545 adapter->fmp->m_pkthdr.rcvif = ifp; 4546 ifp->if_ipackets++; 4547 em_receive_checksum(adapter, current_desc, 4548 adapter->fmp); 4549 #ifndef __NO_STRICT_ALIGNMENT 4550 if (adapter->max_frame_size > 4551 (MCLBYTES - ETHER_ALIGN) && 4552 em_fixup_rx(adapter) != 0) 4553 goto skip; 4554 #endif 4555 if (status & E1000_RXD_STAT_VP) { 4556 #if __FreeBSD_version < 700000 4557 VLAN_INPUT_TAG_NEW(ifp, adapter->fmp, 4558 (le16toh(current_desc->special) & 4559 E1000_RXD_SPC_VLAN_MASK)); 4560 #else 4561 adapter->fmp->m_pkthdr.ether_vtag = 4562 (le16toh(current_desc->special) & 4563 E1000_RXD_SPC_VLAN_MASK); 4564 adapter->fmp->m_flags |= M_VLANTAG; 4565 #endif 4566 } 4567 #ifndef __NO_STRICT_ALIGNMENT 4568 skip: 4569 #endif 4570 m = adapter->fmp; 4571 adapter->fmp = NULL; 4572 adapter->lmp = NULL; 4573 } 4574 } else { 4575 ifp->if_ierrors++; 4576 discard: 4577 /* Reuse loaded DMA map and just update mbuf chain */ 4578 mp = adapter->rx_buffer_area[i].m_head; 4579 mp->m_len = mp->m_pkthdr.len = MCLBYTES; 4580 mp->m_data = mp->m_ext.ext_buf; 4581 mp->m_next = NULL; 4582 if (adapter->max_frame_size <= 4583 (MCLBYTES - ETHER_ALIGN)) 4584 m_adj(mp, ETHER_ALIGN); 4585 if (adapter->fmp != NULL) { 4586 m_freem(adapter->fmp); 4587 adapter->fmp = NULL; 4588 adapter->lmp = NULL; 4589 } 4590 m = NULL; 4591 } 4592 4593 /* Zero out the receive descriptors status. */ 4594 current_desc->status = 0; 4595 bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map, 4596 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 4597 4598 /* Advance our pointers to the next descriptor. */ 4599 if (++i == adapter->num_rx_desc) 4600 i = 0; 4601 /* Call into the stack */ 4602 if (m != NULL) { 4603 adapter->next_rx_desc_to_check = i; 4604 EM_RX_UNLOCK(adapter); 4605 (*ifp->if_input)(ifp, m); 4606 EM_RX_LOCK(adapter); 4607 rx_sent++; 4608 i = adapter->next_rx_desc_to_check; 4609 } 4610 current_desc = &adapter->rx_desc_base[i]; 4611 } 4612 adapter->next_rx_desc_to_check = i; 4613 4614 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */ 4615 if (--i < 0) 4616 i = adapter->num_rx_desc - 1; 4617 E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), i); 4618 EM_RX_UNLOCK(adapter); 4619 return (rx_sent); 4620 } 4621 4622 #ifndef __NO_STRICT_ALIGNMENT 4623 /* 4624 * When jumbo frames are enabled we should realign entire payload on 4625 * architecures with strict alignment. This is serious design mistake of 8254x 4626 * as it nullifies DMA operations. 8254x just allows RX buffer size to be 4627 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its 4628 * payload. On architecures without strict alignment restrictions 8254x still 4629 * performs unaligned memory access which would reduce the performance too. 4630 * To avoid copying over an entire frame to align, we allocate a new mbuf and 4631 * copy ethernet header to the new mbuf. The new mbuf is prepended into the 4632 * existing mbuf chain. 4633 * 4634 * Be aware, best performance of the 8254x is achived only when jumbo frame is 4635 * not used at all on architectures with strict alignment. 4636 */ 4637 static int 4638 em_fixup_rx(struct adapter *adapter) 4639 { 4640 struct mbuf *m, *n; 4641 int error; 4642 4643 error = 0; 4644 m = adapter->fmp; 4645 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) { 4646 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len); 4647 m->m_data += ETHER_HDR_LEN; 4648 } else { 4649 MGETHDR(n, M_DONTWAIT, MT_DATA); 4650 if (n != NULL) { 4651 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN); 4652 m->m_data += ETHER_HDR_LEN; 4653 m->m_len -= ETHER_HDR_LEN; 4654 n->m_len = ETHER_HDR_LEN; 4655 M_MOVE_PKTHDR(n, m); 4656 n->m_next = m; 4657 adapter->fmp = n; 4658 } else { 4659 adapter->dropped_pkts++; 4660 m_freem(adapter->fmp); 4661 adapter->fmp = NULL; 4662 error = ENOMEM; 4663 } 4664 } 4665 4666 return (error); 4667 } 4668 #endif 4669 4670 /********************************************************************* 4671 * 4672 * Verify that the hardware indicated that the checksum is valid. 4673 * Inform the stack about the status of checksum so that stack 4674 * doesn't spend time verifying the checksum. 4675 * 4676 *********************************************************************/ 4677 static void 4678 em_receive_checksum(struct adapter *adapter, 4679 struct e1000_rx_desc *rx_desc, struct mbuf *mp) 4680 { 4681 /* 82543 or newer only */ 4682 if ((adapter->hw.mac.type < e1000_82543) || 4683 /* Ignore Checksum bit is set */ 4684 (rx_desc->status & E1000_RXD_STAT_IXSM)) { 4685 mp->m_pkthdr.csum_flags = 0; 4686 return; 4687 } 4688 4689 if (rx_desc->status & E1000_RXD_STAT_IPCS) { 4690 /* Did it pass? */ 4691 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) { 4692 /* IP Checksum Good */ 4693 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED; 4694 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID; 4695 4696 } else { 4697 mp->m_pkthdr.csum_flags = 0; 4698 } 4699 } 4700 4701 if (rx_desc->status & E1000_RXD_STAT_TCPCS) { 4702 /* Did it pass? */ 4703 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) { 4704 mp->m_pkthdr.csum_flags |= 4705 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR); 4706 mp->m_pkthdr.csum_data = htons(0xffff); 4707 } 4708 } 4709 } 4710 4711 #if __FreeBSD_version >= 700029 4712 /* 4713 * This routine is run via an vlan 4714 * config EVENT 4715 */ 4716 static void 4717 em_register_vlan(void *arg, struct ifnet *ifp, u16 vtag) 4718 { 4719 struct adapter *adapter = ifp->if_softc; 4720 u32 index, bit; 4721 4722 if (ifp->if_softc != arg) /* Not our event */ 4723 return; 4724 4725 if ((vtag == 0) || (vtag > 4095)) /* Invalid ID */ 4726 return; 4727 4728 index = (vtag >> 5) & 0x7F; 4729 bit = vtag & 0x1F; 4730 em_shadow_vfta[index] |= (1 << bit); 4731 ++adapter->num_vlans; 4732 /* Re-init to load the changes */ 4733 em_init(adapter); 4734 } 4735 4736 /* 4737 * This routine is run via an vlan 4738 * unconfig EVENT 4739 */ 4740 static void 4741 em_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag) 4742 { 4743 struct adapter *adapter = ifp->if_softc; 4744 u32 index, bit; 4745 4746 if (ifp->if_softc != arg) 4747 return; 4748 4749 if ((vtag == 0) || (vtag > 4095)) /* Invalid */ 4750 return; 4751 4752 index = (vtag >> 5) & 0x7F; 4753 bit = vtag & 0x1F; 4754 em_shadow_vfta[index] &= ~(1 << bit); 4755 --adapter->num_vlans; 4756 /* Re-init to load the changes */ 4757 em_init(adapter); 4758 } 4759 4760 static void 4761 em_setup_vlan_hw_support(struct adapter *adapter) 4762 { 4763 struct e1000_hw *hw = &adapter->hw; 4764 u32 reg; 4765 4766 /* 4767 ** We get here thru init_locked, meaning 4768 ** a soft reset, this has already cleared 4769 ** the VFTA and other state, so if there 4770 ** have been no vlan's registered do nothing. 4771 */ 4772 if (adapter->num_vlans == 0) 4773 return; 4774 4775 /* 4776 ** A soft reset zero's out the VFTA, so 4777 ** we need to repopulate it now. 4778 */ 4779 for (int i = 0; i < EM_VFTA_SIZE; i++) 4780 if (em_shadow_vfta[i] != 0) 4781 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, 4782 i, em_shadow_vfta[i]); 4783 4784 reg = E1000_READ_REG(hw, E1000_CTRL); 4785 reg |= E1000_CTRL_VME; 4786 E1000_WRITE_REG(hw, E1000_CTRL, reg); 4787 4788 /* Enable the Filter Table */ 4789 reg = E1000_READ_REG(hw, E1000_RCTL); 4790 reg &= ~E1000_RCTL_CFIEN; 4791 reg |= E1000_RCTL_VFE; 4792 E1000_WRITE_REG(hw, E1000_RCTL, reg); 4793 4794 /* Update the frame size */ 4795 E1000_WRITE_REG(&adapter->hw, E1000_RLPML, 4796 adapter->max_frame_size + VLAN_TAG_SIZE); 4797 } 4798 #endif 4799 4800 static void 4801 em_enable_intr(struct adapter *adapter) 4802 { 4803 struct e1000_hw *hw = &adapter->hw; 4804 u32 ims_mask = IMS_ENABLE_MASK; 4805 4806 if (adapter->msix) { 4807 E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK); 4808 ims_mask |= EM_MSIX_MASK; 4809 } 4810 E1000_WRITE_REG(hw, E1000_IMS, ims_mask); 4811 } 4812 4813 static void 4814 em_disable_intr(struct adapter *adapter) 4815 { 4816 struct e1000_hw *hw = &adapter->hw; 4817 4818 if (adapter->msix) 4819 E1000_WRITE_REG(hw, EM_EIAC, 0); 4820 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); 4821 } 4822 4823 /* 4824 * Bit of a misnomer, what this really means is 4825 * to enable OS management of the system... aka 4826 * to disable special hardware management features 4827 */ 4828 static void 4829 em_init_manageability(struct adapter *adapter) 4830 { 4831 /* A shared code workaround */ 4832 #define E1000_82542_MANC2H E1000_MANC2H 4833 if (adapter->has_manage) { 4834 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H); 4835 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC); 4836 4837 /* disable hardware interception of ARP */ 4838 manc &= ~(E1000_MANC_ARP_EN); 4839 4840 /* enable receiving management packets to the host */ 4841 if (adapter->hw.mac.type >= e1000_82571) { 4842 manc |= E1000_MANC_EN_MNG2HOST; 4843 #define E1000_MNG2HOST_PORT_623 (1 << 5) 4844 #define E1000_MNG2HOST_PORT_664 (1 << 6) 4845 manc2h |= E1000_MNG2HOST_PORT_623; 4846 manc2h |= E1000_MNG2HOST_PORT_664; 4847 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h); 4848 } 4849 4850 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc); 4851 } 4852 } 4853 4854 /* 4855 * Give control back to hardware management 4856 * controller if there is one. 4857 */ 4858 static void 4859 em_release_manageability(struct adapter *adapter) 4860 { 4861 if (adapter->has_manage) { 4862 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC); 4863 4864 /* re-enable hardware interception of ARP */ 4865 manc |= E1000_MANC_ARP_EN; 4866 4867 if (adapter->hw.mac.type >= e1000_82571) 4868 manc &= ~E1000_MANC_EN_MNG2HOST; 4869 4870 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc); 4871 } 4872 } 4873 4874 /* 4875 * em_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit. 4876 * For ASF and Pass Through versions of f/w this means that 4877 * the driver is loaded. For AMT version (only with 82573) 4878 * of the f/w this means that the network i/f is open. 4879 * 4880 */ 4881 static void 4882 em_get_hw_control(struct adapter *adapter) 4883 { 4884 u32 ctrl_ext, swsm; 4885 4886 /* Let firmware know the driver has taken over */ 4887 switch (adapter->hw.mac.type) { 4888 case e1000_82573: 4889 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM); 4890 E1000_WRITE_REG(&adapter->hw, E1000_SWSM, 4891 swsm | E1000_SWSM_DRV_LOAD); 4892 break; 4893 case e1000_82571: 4894 case e1000_82572: 4895 case e1000_80003es2lan: 4896 case e1000_ich8lan: 4897 case e1000_ich9lan: 4898 case e1000_ich10lan: 4899 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 4900 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, 4901 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD); 4902 break; 4903 default: 4904 break; 4905 } 4906 } 4907 4908 /* 4909 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit. 4910 * For ASF and Pass Through versions of f/w this means that the 4911 * driver is no longer loaded. For AMT version (only with 82573) i 4912 * of the f/w this means that the network i/f is closed. 4913 * 4914 */ 4915 static void 4916 em_release_hw_control(struct adapter *adapter) 4917 { 4918 u32 ctrl_ext, swsm; 4919 4920 /* Let firmware taken over control of h/w */ 4921 switch (adapter->hw.mac.type) { 4922 case e1000_82573: 4923 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM); 4924 E1000_WRITE_REG(&adapter->hw, E1000_SWSM, 4925 swsm & ~E1000_SWSM_DRV_LOAD); 4926 break; 4927 case e1000_82571: 4928 case e1000_82572: 4929 case e1000_80003es2lan: 4930 case e1000_ich8lan: 4931 case e1000_ich9lan: 4932 case e1000_ich10lan: 4933 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); 4934 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, 4935 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD); 4936 break; 4937 default: 4938 break; 4939 4940 } 4941 } 4942 4943 static int 4944 em_is_valid_ether_addr(u8 *addr) 4945 { 4946 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 }; 4947 4948 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) { 4949 return (FALSE); 4950 } 4951 4952 return (TRUE); 4953 } 4954 4955 /* 4956 * Enable PCI Wake On Lan capability 4957 */ 4958 void 4959 em_enable_wakeup(device_t dev) 4960 { 4961 u16 cap, status; 4962 u8 id; 4963 4964 /* First find the capabilities pointer*/ 4965 cap = pci_read_config(dev, PCIR_CAP_PTR, 2); 4966 /* Read the PM Capabilities */ 4967 id = pci_read_config(dev, cap, 1); 4968 if (id != PCIY_PMG) /* Something wrong */ 4969 return; 4970 /* OK, we have the power capabilities, so 4971 now get the status register */ 4972 cap += PCIR_POWER_STATUS; 4973 status = pci_read_config(dev, cap, 2); 4974 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; 4975 pci_write_config(dev, cap, status, 2); 4976 return; 4977 } 4978 4979 4980 /********************************************************************* 4981 * 82544 Coexistence issue workaround. 4982 * There are 2 issues. 4983 * 1. Transmit Hang issue. 4984 * To detect this issue, following equation can be used... 4985 * SIZE[3:0] + ADDR[2:0] = SUM[3:0]. 4986 * If SUM[3:0] is in between 1 to 4, we will have this issue. 4987 * 4988 * 2. DAC issue. 4989 * To detect this issue, following equation can be used... 4990 * SIZE[3:0] + ADDR[2:0] = SUM[3:0]. 4991 * If SUM[3:0] is in between 9 to c, we will have this issue. 4992 * 4993 * 4994 * WORKAROUND: 4995 * Make sure we do not have ending address 4996 * as 1,2,3,4(Hang) or 9,a,b,c (DAC) 4997 * 4998 *************************************************************************/ 4999 static u32 5000 em_fill_descriptors (bus_addr_t address, u32 length, 5001 PDESC_ARRAY desc_array) 5002 { 5003 u32 safe_terminator; 5004 5005 /* Since issue is sensitive to length and address.*/ 5006 /* Let us first check the address...*/ 5007 if (length <= 4) { 5008 desc_array->descriptor[0].address = address; 5009 desc_array->descriptor[0].length = length; 5010 desc_array->elements = 1; 5011 return (desc_array->elements); 5012 } 5013 safe_terminator = (u32)((((u32)address & 0x7) + 5014 (length & 0xF)) & 0xF); 5015 /* if it does not fall between 0x1 to 0x4 and 0x9 to 0xC then return */ 5016 if (safe_terminator == 0 || 5017 (safe_terminator > 4 && 5018 safe_terminator < 9) || 5019 (safe_terminator > 0xC && 5020 safe_terminator <= 0xF)) { 5021 desc_array->descriptor[0].address = address; 5022 desc_array->descriptor[0].length = length; 5023 desc_array->elements = 1; 5024 return (desc_array->elements); 5025 } 5026 5027 desc_array->descriptor[0].address = address; 5028 desc_array->descriptor[0].length = length - 4; 5029 desc_array->descriptor[1].address = address + (length - 4); 5030 desc_array->descriptor[1].length = 4; 5031 desc_array->elements = 2; 5032 return (desc_array->elements); 5033 } 5034 5035 /********************************************************************** 5036 * 5037 * Update the board statistics counters. 5038 * 5039 **********************************************************************/ 5040 static void 5041 em_update_stats_counters(struct adapter *adapter) 5042 { 5043 struct ifnet *ifp; 5044 5045 if(adapter->hw.phy.media_type == e1000_media_type_copper || 5046 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) { 5047 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS); 5048 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC); 5049 } 5050 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS); 5051 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC); 5052 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC); 5053 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL); 5054 5055 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC); 5056 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL); 5057 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC); 5058 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC); 5059 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC); 5060 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC); 5061 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC); 5062 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC); 5063 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC); 5064 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC); 5065 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64); 5066 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127); 5067 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255); 5068 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511); 5069 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023); 5070 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522); 5071 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC); 5072 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC); 5073 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC); 5074 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC); 5075 5076 /* For the 64-bit byte counters the low dword must be read first. */ 5077 /* Both registers clear on the read of the high dword */ 5078 5079 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH); 5080 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH); 5081 5082 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC); 5083 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC); 5084 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC); 5085 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC); 5086 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC); 5087 5088 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH); 5089 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH); 5090 5091 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR); 5092 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT); 5093 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64); 5094 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127); 5095 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255); 5096 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511); 5097 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023); 5098 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522); 5099 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC); 5100 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC); 5101 5102 if (adapter->hw.mac.type >= e1000_82543) { 5103 adapter->stats.algnerrc += 5104 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC); 5105 adapter->stats.rxerrc += 5106 E1000_READ_REG(&adapter->hw, E1000_RXERRC); 5107 adapter->stats.tncrs += 5108 E1000_READ_REG(&adapter->hw, E1000_TNCRS); 5109 adapter->stats.cexterr += 5110 E1000_READ_REG(&adapter->hw, E1000_CEXTERR); 5111 adapter->stats.tsctc += 5112 E1000_READ_REG(&adapter->hw, E1000_TSCTC); 5113 adapter->stats.tsctfc += 5114 E1000_READ_REG(&adapter->hw, E1000_TSCTFC); 5115 } 5116 ifp = adapter->ifp; 5117 5118 ifp->if_collisions = adapter->stats.colc; 5119 5120 /* Rx Errors */ 5121 ifp->if_ierrors = adapter->dropped_pkts + adapter->stats.rxerrc + 5122 adapter->stats.crcerrs + adapter->stats.algnerrc + 5123 adapter->stats.ruc + adapter->stats.roc + 5124 adapter->stats.mpc + adapter->stats.cexterr; 5125 5126 /* Tx Errors */ 5127 ifp->if_oerrors = adapter->stats.ecol + 5128 adapter->stats.latecol + adapter->watchdog_events; 5129 } 5130 5131 5132 /********************************************************************** 5133 * 5134 * This routine is called only when em_display_debug_stats is enabled. 5135 * This routine provides a way to take a look at important statistics 5136 * maintained by the driver and hardware. 5137 * 5138 **********************************************************************/ 5139 static void 5140 em_print_debug_info(struct adapter *adapter) 5141 { 5142 device_t dev = adapter->dev; 5143 u8 *hw_addr = adapter->hw.hw_addr; 5144 5145 device_printf(dev, "Adapter hardware address = %p \n", hw_addr); 5146 device_printf(dev, "CTRL = 0x%x RCTL = 0x%x \n", 5147 E1000_READ_REG(&adapter->hw, E1000_CTRL), 5148 E1000_READ_REG(&adapter->hw, E1000_RCTL)); 5149 device_printf(dev, "Packet buffer = Tx=%dk Rx=%dk \n", 5150 ((E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff0000) >> 16),\ 5151 (E1000_READ_REG(&adapter->hw, E1000_PBA) & 0xffff) ); 5152 device_printf(dev, "Flow control watermarks high = %d low = %d\n", 5153 adapter->hw.fc.high_water, 5154 adapter->hw.fc.low_water); 5155 device_printf(dev, "tx_int_delay = %d, tx_abs_int_delay = %d\n", 5156 E1000_READ_REG(&adapter->hw, E1000_TIDV), 5157 E1000_READ_REG(&adapter->hw, E1000_TADV)); 5158 device_printf(dev, "rx_int_delay = %d, rx_abs_int_delay = %d\n", 5159 E1000_READ_REG(&adapter->hw, E1000_RDTR), 5160 E1000_READ_REG(&adapter->hw, E1000_RADV)); 5161 device_printf(dev, "fifo workaround = %lld, fifo_reset_count = %lld\n", 5162 (long long)adapter->tx_fifo_wrk_cnt, 5163 (long long)adapter->tx_fifo_reset_cnt); 5164 device_printf(dev, "hw tdh = %d, hw tdt = %d\n", 5165 E1000_READ_REG(&adapter->hw, E1000_TDH(0)), 5166 E1000_READ_REG(&adapter->hw, E1000_TDT(0))); 5167 device_printf(dev, "hw rdh = %d, hw rdt = %d\n", 5168 E1000_READ_REG(&adapter->hw, E1000_RDH(0)), 5169 E1000_READ_REG(&adapter->hw, E1000_RDT(0))); 5170 device_printf(dev, "Num Tx descriptors avail = %d\n", 5171 adapter->num_tx_desc_avail); 5172 device_printf(dev, "Tx Descriptors not avail1 = %ld\n", 5173 adapter->no_tx_desc_avail1); 5174 device_printf(dev, "Tx Descriptors not avail2 = %ld\n", 5175 adapter->no_tx_desc_avail2); 5176 device_printf(dev, "Std mbuf failed = %ld\n", 5177 adapter->mbuf_alloc_failed); 5178 device_printf(dev, "Std mbuf cluster failed = %ld\n", 5179 adapter->mbuf_cluster_failed); 5180 device_printf(dev, "Driver dropped packets = %ld\n", 5181 adapter->dropped_pkts); 5182 device_printf(dev, "Driver tx dma failure in encap = %ld\n", 5183 adapter->no_tx_dma_setup); 5184 } 5185 5186 static void 5187 em_print_hw_stats(struct adapter *adapter) 5188 { 5189 device_t dev = adapter->dev; 5190 5191 device_printf(dev, "Excessive collisions = %lld\n", 5192 (long long)adapter->stats.ecol); 5193 #if (DEBUG_HW > 0) /* Dont output these errors normally */ 5194 device_printf(dev, "Symbol errors = %lld\n", 5195 (long long)adapter->stats.symerrs); 5196 #endif 5197 device_printf(dev, "Sequence errors = %lld\n", 5198 (long long)adapter->stats.sec); 5199 device_printf(dev, "Defer count = %lld\n", 5200 (long long)adapter->stats.dc); 5201 device_printf(dev, "Missed Packets = %lld\n", 5202 (long long)adapter->stats.mpc); 5203 device_printf(dev, "Receive No Buffers = %lld\n", 5204 (long long)adapter->stats.rnbc); 5205 /* RLEC is inaccurate on some hardware, calculate our own. */ 5206 device_printf(dev, "Receive Length Errors = %lld\n", 5207 ((long long)adapter->stats.roc + (long long)adapter->stats.ruc)); 5208 device_printf(dev, "Receive errors = %lld\n", 5209 (long long)adapter->stats.rxerrc); 5210 device_printf(dev, "Crc errors = %lld\n", 5211 (long long)adapter->stats.crcerrs); 5212 device_printf(dev, "Alignment errors = %lld\n", 5213 (long long)adapter->stats.algnerrc); 5214 device_printf(dev, "Collision/Carrier extension errors = %lld\n", 5215 (long long)adapter->stats.cexterr); 5216 device_printf(dev, "RX overruns = %ld\n", adapter->rx_overruns); 5217 device_printf(dev, "watchdog timeouts = %ld\n", 5218 adapter->watchdog_events); 5219 device_printf(dev, "RX MSIX IRQ = %ld TX MSIX IRQ = %ld" 5220 " LINK MSIX IRQ = %ld\n", adapter->rx_irq, 5221 adapter->tx_irq , adapter->link_irq); 5222 device_printf(dev, "XON Rcvd = %lld\n", 5223 (long long)adapter->stats.xonrxc); 5224 device_printf(dev, "XON Xmtd = %lld\n", 5225 (long long)adapter->stats.xontxc); 5226 device_printf(dev, "XOFF Rcvd = %lld\n", 5227 (long long)adapter->stats.xoffrxc); 5228 device_printf(dev, "XOFF Xmtd = %lld\n", 5229 (long long)adapter->stats.xofftxc); 5230 device_printf(dev, "Good Packets Rcvd = %lld\n", 5231 (long long)adapter->stats.gprc); 5232 device_printf(dev, "Good Packets Xmtd = %lld\n", 5233 (long long)adapter->stats.gptc); 5234 device_printf(dev, "TSO Contexts Xmtd = %lld\n", 5235 (long long)adapter->stats.tsctc); 5236 device_printf(dev, "TSO Contexts Failed = %lld\n", 5237 (long long)adapter->stats.tsctfc); 5238 } 5239 5240 /********************************************************************** 5241 * 5242 * This routine provides a way to dump out the adapter eeprom, 5243 * often a useful debug/service tool. This only dumps the first 5244 * 32 words, stuff that matters is in that extent. 5245 * 5246 **********************************************************************/ 5247 static void 5248 em_print_nvm_info(struct adapter *adapter) 5249 { 5250 u16 eeprom_data; 5251 int i, j, row = 0; 5252 5253 /* Its a bit crude, but it gets the job done */ 5254 printf("\nInterface EEPROM Dump:\n"); 5255 printf("Offset\n0x0000 "); 5256 for (i = 0, j = 0; i < 32; i++, j++) { 5257 if (j == 8) { /* Make the offset block */ 5258 j = 0; ++row; 5259 printf("\n0x00%x0 ",row); 5260 } 5261 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data); 5262 printf("%04x ", eeprom_data); 5263 } 5264 printf("\n"); 5265 } 5266 5267 static int 5268 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS) 5269 { 5270 struct adapter *adapter; 5271 int error; 5272 int result; 5273 5274 result = -1; 5275 error = sysctl_handle_int(oidp, &result, 0, req); 5276 5277 if (error || !req->newptr) 5278 return (error); 5279 5280 if (result == 1) { 5281 adapter = (struct adapter *)arg1; 5282 em_print_debug_info(adapter); 5283 } 5284 /* 5285 * This value will cause a hex dump of the 5286 * first 32 16-bit words of the EEPROM to 5287 * the screen. 5288 */ 5289 if (result == 2) { 5290 adapter = (struct adapter *)arg1; 5291 em_print_nvm_info(adapter); 5292 } 5293 5294 return (error); 5295 } 5296 5297 5298 static int 5299 em_sysctl_stats(SYSCTL_HANDLER_ARGS) 5300 { 5301 struct adapter *adapter; 5302 int error; 5303 int result; 5304 5305 result = -1; 5306 error = sysctl_handle_int(oidp, &result, 0, req); 5307 5308 if (error || !req->newptr) 5309 return (error); 5310 5311 if (result == 1) { 5312 adapter = (struct adapter *)arg1; 5313 em_print_hw_stats(adapter); 5314 } 5315 5316 return (error); 5317 } 5318 5319 static int 5320 em_sysctl_int_delay(SYSCTL_HANDLER_ARGS) 5321 { 5322 struct em_int_delay_info *info; 5323 struct adapter *adapter; 5324 u32 regval; 5325 int error; 5326 int usecs; 5327 int ticks; 5328 5329 info = (struct em_int_delay_info *)arg1; 5330 usecs = info->value; 5331 error = sysctl_handle_int(oidp, &usecs, 0, req); 5332 if (error != 0 || req->newptr == NULL) 5333 return (error); 5334 if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535)) 5335 return (EINVAL); 5336 info->value = usecs; 5337 ticks = EM_USECS_TO_TICKS(usecs); 5338 5339 adapter = info->adapter; 5340 5341 EM_CORE_LOCK(adapter); 5342 regval = E1000_READ_OFFSET(&adapter->hw, info->offset); 5343 regval = (regval & ~0xffff) | (ticks & 0xffff); 5344 /* Handle a few special cases. */ 5345 switch (info->offset) { 5346 case E1000_RDTR: 5347 break; 5348 case E1000_TIDV: 5349 if (ticks == 0) { 5350 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE; 5351 /* Don't write 0 into the TIDV register. */ 5352 regval++; 5353 } else 5354 adapter->txd_cmd |= E1000_TXD_CMD_IDE; 5355 break; 5356 } 5357 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval); 5358 EM_CORE_UNLOCK(adapter); 5359 return (0); 5360 } 5361 5362 static void 5363 em_add_int_delay_sysctl(struct adapter *adapter, const char *name, 5364 const char *description, struct em_int_delay_info *info, 5365 int offset, int value) 5366 { 5367 info->adapter = adapter; 5368 info->offset = offset; 5369 info->value = value; 5370 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev), 5371 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), 5372 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, 5373 info, 0, em_sysctl_int_delay, "I", description); 5374 } 5375 5376 #ifndef EM_LEGACY_IRQ 5377 static void 5378 em_add_rx_process_limit(struct adapter *adapter, const char *name, 5379 const char *description, int *limit, int value) 5380 { 5381 *limit = value; 5382 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev), 5383 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), 5384 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description); 5385 } 5386 #endif 5387 5388 5389