1 /**************************************************************************
3 Copyright (c) 2001-2003, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
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.
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.
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.
32 ***************************************************************************/
34 /*$FreeBSD: src/sys/dev/em/if_em.c,v 1.2.2.15 2003/06/09 22:10:15 pdeuskar Exp $*/
36 #include <dev/em/if_em.h>
38 /*********************************************************************
39 * Set this to one to display debug statistics
40 *********************************************************************/
41 int em_display_debug_stats = 0;
43 /*********************************************************************
44 * Linked list of board private structures for all NICs found
45 *********************************************************************/
47 struct adapter *em_adapter_list = NULL;
50 /*********************************************************************
52 *********************************************************************/
54 char em_driver_version[] = "1.6.6";
57 /*********************************************************************
60 * Used by probe to select devices to load on
61 * Last field stores an index into em_strings
62 * Last entry must be all 0s
64 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
65 *********************************************************************/
67 static em_vendor_info_t em_vendor_info_array[] =
69 /* Intel(R) PRO/1000 Network Connection */
70 { 0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0},
71 { 0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0},
72 { 0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0},
73 { 0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0},
74 { 0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0},
75 { 0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0},
76 { 0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0},
77 { 0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0},
78 { 0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0},
79 { 0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0},
80 { 0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0},
81 { 0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0},
82 { 0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0},
83 { 0x8086, 0x1014, PCI_ANY_ID, PCI_ANY_ID, 0},
84 { 0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0},
85 { 0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0},
86 { 0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0},
87 { 0x8086, 0x1018, PCI_ANY_ID, PCI_ANY_ID, 0},
88 { 0x8086, 0x1019, PCI_ANY_ID, PCI_ANY_ID, 0},
89 { 0x8086, 0x101A, PCI_ANY_ID, PCI_ANY_ID, 0},
90 { 0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0},
91 { 0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0},
92 /* required last entry */
96 /*********************************************************************
97 * Table of branding strings for all supported NICs.
98 *********************************************************************/
100 static char *em_strings[] = {
101 "Intel(R) PRO/1000 Network Connection"
104 /*********************************************************************
105 * Function prototypes
106 *********************************************************************/
107 static int em_probe(device_t);
108 static int em_attach(device_t);
109 static int em_detach(device_t);
110 static int em_shutdown(device_t);
111 static void em_intr(void *);
112 static void em_start(struct ifnet *);
113 static int em_ioctl(struct ifnet *, u_long, caddr_t);
114 static void em_watchdog(struct ifnet *);
115 static void em_init(void *);
116 static void em_stop(void *);
117 static void em_media_status(struct ifnet *, struct ifmediareq *);
118 static int em_media_change(struct ifnet *);
119 static void em_identify_hardware(struct adapter *);
120 static int em_allocate_pci_resources(struct adapter *);
121 static void em_free_pci_resources(struct adapter *);
122 static void em_local_timer(void *);
123 static int em_hardware_init(struct adapter *);
124 static void em_setup_interface(device_t, struct adapter *);
125 static int em_setup_transmit_structures(struct adapter *);
126 static void em_initialize_transmit_unit(struct adapter *);
127 static int em_setup_receive_structures(struct adapter *);
128 static void em_initialize_receive_unit(struct adapter *);
129 static void em_enable_intr(struct adapter *);
130 static void em_disable_intr(struct adapter *);
131 static void em_free_transmit_structures(struct adapter *);
132 static void em_free_receive_structures(struct adapter *);
133 static void em_update_stats_counters(struct adapter *);
134 static void em_clean_transmit_interrupts(struct adapter *);
135 static int em_allocate_receive_structures(struct adapter *);
136 static int em_allocate_transmit_structures(struct adapter *);
137 static void em_process_receive_interrupts(struct adapter *, int);
138 static void em_receive_checksum(struct adapter *,
141 static void em_transmit_checksum_setup(struct adapter *,
145 static void em_set_promisc(struct adapter *);
146 static void em_disable_promisc(struct adapter *);
147 static void em_set_multi(struct adapter *);
148 static void em_print_hw_stats(struct adapter *);
149 static void em_print_link_status(struct adapter *);
150 static int em_get_buf(int i, struct adapter *,
152 static void em_enable_vlans(struct adapter *);
153 static int em_encap(struct adapter *, struct mbuf *);
154 static void em_smartspeed(struct adapter *);
155 static int em_82547_fifo_workaround(struct adapter *, int);
156 static void em_82547_update_fifo_head(struct adapter *, int);
157 static int em_82547_tx_fifo_reset(struct adapter *);
158 static void em_82547_move_tail(void *arg);
159 static void em_print_debug_info(struct adapter *);
160 static int em_is_valid_ether_addr(u_int8_t *);
161 static int em_sysctl_stats(SYSCTL_HANDLER_ARGS);
162 static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
164 /*********************************************************************
165 * FreeBSD Device Interface Entry Points
166 *********************************************************************/
168 static device_method_t em_methods[] = {
169 /* Device interface */
170 DEVMETHOD(device_probe, em_probe),
171 DEVMETHOD(device_attach, em_attach),
172 DEVMETHOD(device_detach, em_detach),
173 DEVMETHOD(device_shutdown, em_shutdown),
177 static driver_t em_driver = {
178 "em", em_methods, sizeof(struct adapter ),
181 static devclass_t em_devclass;
182 DRIVER_MODULE(if_em, pci, em_driver, em_devclass, 0, 0);
184 /*********************************************************************
185 * Device identification routine
187 * em_probe determines if the driver should be loaded on
188 * adapter based on PCI vendor/device id of the adapter.
190 * return 0 on success, positive on failure
191 *********************************************************************/
194 em_probe(device_t dev)
196 em_vendor_info_t *ent;
198 u_int16_t pci_vendor_id = 0;
199 u_int16_t pci_device_id = 0;
200 u_int16_t pci_subvendor_id = 0;
201 u_int16_t pci_subdevice_id = 0;
202 char adapter_name[60];
204 INIT_DEBUGOUT("em_probe: begin");
206 pci_vendor_id = pci_get_vendor(dev);
207 if (pci_vendor_id != EM_VENDOR_ID)
210 pci_device_id = pci_get_device(dev);
211 pci_subvendor_id = pci_get_subvendor(dev);
212 pci_subdevice_id = pci_get_subdevice(dev);
214 ent = em_vendor_info_array;
215 while (ent->vendor_id != 0) {
216 if ((pci_vendor_id == ent->vendor_id) &&
217 (pci_device_id == ent->device_id) &&
219 ((pci_subvendor_id == ent->subvendor_id) ||
220 (ent->subvendor_id == PCI_ANY_ID)) &&
222 ((pci_subdevice_id == ent->subdevice_id) ||
223 (ent->subdevice_id == PCI_ANY_ID))) {
224 sprintf(adapter_name, "%s, Version - %s",
225 em_strings[ent->index],
227 device_set_desc_copy(dev, adapter_name);
236 /*********************************************************************
237 * Device initialization routine
239 * The attach entry point is called when the driver is being loaded.
240 * This routine identifies the type of hardware, allocates all resources
241 * and initializes the hardware.
243 * return 0 on success, positive on failure
244 *********************************************************************/
247 em_attach(device_t dev)
249 struct adapter * adapter;
254 INIT_DEBUGOUT("em_attach: begin");
257 /* Allocate, clear, and link in our adapter structure */
258 if (!(adapter = device_get_softc(dev))) {
259 printf("em: adapter structure allocation failed\n");
263 bzero(adapter, sizeof(struct adapter ));
265 adapter->osdep.dev = dev;
266 adapter->unit = device_get_unit(dev);
268 if (em_adapter_list != NULL)
269 em_adapter_list->prev = adapter;
270 adapter->next = em_adapter_list;
271 em_adapter_list = adapter;
274 sysctl_ctx_init(&adapter->sysctl_ctx);
275 adapter->sysctl_tree = SYSCTL_ADD_NODE(&adapter->sysctl_ctx,
276 SYSCTL_STATIC_CHILDREN(_hw),
278 device_get_nameunit(dev),
281 if (adapter->sysctl_tree == NULL) {
286 SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
287 SYSCTL_CHILDREN(adapter->sysctl_tree),
288 OID_AUTO, "debug_info", CTLTYPE_INT|CTLFLAG_RW,
290 em_sysctl_debug_info, "I", "Debug Information");
292 SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
293 SYSCTL_CHILDREN(adapter->sysctl_tree),
294 OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW,
296 em_sysctl_stats, "I", "Statistics");
298 callout_handle_init(&adapter->timer_handle);
299 callout_handle_init(&adapter->tx_fifo_timer_handle);
301 /* Determine hardware revision */
302 em_identify_hardware(adapter);
304 /* Parameters (to be read from user) */
305 adapter->num_tx_desc = EM_MAX_TXD;
306 adapter->num_rx_desc = EM_MAX_RXD;
307 adapter->tx_int_delay = EM_TIDV;
308 adapter->tx_abs_int_delay = EM_TADV;
309 adapter->rx_int_delay = EM_RDTR;
310 adapter->rx_abs_int_delay = EM_RADV;
311 adapter->hw.autoneg = DO_AUTO_NEG;
312 adapter->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT;
313 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
314 adapter->hw.tbi_compatibility_en = TRUE;
315 adapter->rx_buffer_len = EM_RXBUFFER_2048;
318 * These parameters control the automatic generation(Tx) and
319 * response(Rx) to Ethernet PAUSE frames.
321 adapter->hw.fc_high_water = FC_DEFAULT_HI_THRESH;
322 adapter->hw.fc_low_water = FC_DEFAULT_LO_THRESH;
323 adapter->hw.fc_pause_time = FC_DEFAULT_TX_TIMER;
324 adapter->hw.fc_send_xon = TRUE;
325 adapter->hw.fc = em_fc_full;
327 adapter->hw.phy_init_script = 1;
330 * Set the max frame size assuming standard ethernet
333 adapter->hw.max_frame_size =
334 ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN;
336 adapter->hw.min_frame_size =
337 MINIMUM_ETHERNET_PACKET_SIZE + ETHER_CRC_LEN;
340 * This controls when hardware reports transmit completion
343 adapter->hw.report_tx_early = 1;
346 if (em_allocate_pci_resources(adapter)) {
347 printf("em%d: Allocation of PCI resources failed\n",
353 em_init_eeprom_params(&adapter->hw);
355 tsize = EM_ROUNDUP(adapter->num_tx_desc *
356 sizeof(struct em_tx_desc), 4096);
358 /* Allocate Transmit Descriptor ring */
359 if (!(adapter->tx_desc_base = (struct em_tx_desc *)
360 contigmalloc(tsize, M_DEVBUF, M_NOWAIT, 0, ~0,
362 printf("em%d: Unable to allocate TxDescriptor memory\n",
368 rsize = EM_ROUNDUP(adapter->num_rx_desc *
369 sizeof(struct em_rx_desc), 4096);
371 /* Allocate Receive Descriptor ring */
372 if (!(adapter->rx_desc_base = (struct em_rx_desc *)
373 contigmalloc(rsize, M_DEVBUF, M_NOWAIT, 0, ~0,
375 printf("em%d: Unable to allocate rx_desc memory\n",
381 /* Initialize the hardware */
382 if (em_hardware_init(adapter)) {
383 printf("em%d: Unable to initialize the hardware\n",
389 /* Copy the permanent MAC address out of the EEPROM */
390 if (em_read_mac_addr(&adapter->hw) < 0) {
391 printf("em%d: EEPROM read error while reading mac address\n",
397 if (!em_is_valid_ether_addr(adapter->hw.mac_addr)) {
398 printf("em%d: Invalid mac address\n", adapter->unit);
404 bcopy(adapter->hw.mac_addr, adapter->interface_data.ac_enaddr,
407 /* Setup OS specific network interface */
408 em_setup_interface(dev, adapter);
410 /* Initialize statistics */
411 em_clear_hw_cntrs(&adapter->hw);
412 em_update_stats_counters(adapter);
413 adapter->hw.get_link_status = 1;
414 em_check_for_link(&adapter->hw);
416 /* Print the link status */
417 if (adapter->link_active == 1) {
418 em_get_speed_and_duplex(&adapter->hw, &adapter->link_speed,
419 &adapter->link_duplex);
420 printf("em%d: Speed:%d Mbps Duplex:%s\n",
423 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
425 printf("em%d: Speed:N/A Duplex:N/A\n", adapter->unit);
427 INIT_DEBUGOUT("em_attach: end");
434 contigfree(adapter->rx_desc_base, rsize, M_DEVBUF);
436 contigfree(adapter->tx_desc_base, tsize, M_DEVBUF);
439 em_free_pci_resources(adapter);
440 sysctl_ctx_free(&adapter->sysctl_ctx);
446 /*********************************************************************
447 * Device removal routine
449 * The detach entry point is called when the driver is being removed.
450 * This routine stops the adapter and deallocates all the resources
451 * that were allocated for driver operation.
453 * return 0 on success, positive on failure
454 *********************************************************************/
457 em_detach(device_t dev)
459 struct adapter * adapter = device_get_softc(dev);
460 struct ifnet *ifp = &adapter->interface_data.ac_if;
464 INIT_DEBUGOUT("em_detach: begin");
468 em_phy_hw_reset(&adapter->hw);
469 #if __FreeBSD_version < 500000
470 ether_ifdetach(&adapter->interface_data.ac_if, ETHER_BPF_SUPPORTED);
472 ether_ifdetach(&adapter->interface_data.ac_if);
474 em_free_pci_resources(adapter);
476 size = EM_ROUNDUP(adapter->num_tx_desc *
477 sizeof(struct em_tx_desc), 4096);
479 /* Free Transmit Descriptor ring */
480 if (adapter->tx_desc_base) {
481 contigfree(adapter->tx_desc_base, size, M_DEVBUF);
482 adapter->tx_desc_base = NULL;
485 size = EM_ROUNDUP(adapter->num_rx_desc *
486 sizeof(struct em_rx_desc), 4096);
488 /* Free Receive Descriptor ring */
489 if (adapter->rx_desc_base) {
490 contigfree(adapter->rx_desc_base, size, M_DEVBUF);
491 adapter->rx_desc_base = NULL;
494 /* Remove from the adapter list */
495 if (em_adapter_list == adapter)
496 em_adapter_list = adapter->next;
497 if (adapter->next != NULL)
498 adapter->next->prev = adapter->prev;
499 if (adapter->prev != NULL)
500 adapter->prev->next = adapter->next;
502 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
505 adapter->sysctl_tree = NULL;
506 sysctl_ctx_free(&adapter->sysctl_ctx);
512 /*********************************************************************
514 * Shutdown entry point
516 **********************************************************************/
519 em_shutdown(device_t dev)
521 struct adapter *adapter = device_get_softc(dev);
527 /*********************************************************************
528 * Transmit entry point
530 * em_start is called by the stack to initiate a transmit.
531 * The driver will remain in this routine as long as there are
532 * packets to transmit and transmit resources are available.
533 * In case resources are not available stack is notified and
534 * the packet is requeued.
535 **********************************************************************/
538 em_start(struct ifnet *ifp)
542 struct adapter *adapter = ifp->if_softc;
544 if (!adapter->link_active)
548 while (ifp->if_snd.ifq_head != NULL) {
550 IF_DEQUEUE(&ifp->if_snd, m_head);
552 if (m_head == NULL) break;
554 if (em_encap(adapter, m_head)) {
555 ifp->if_flags |= IFF_OACTIVE;
556 IF_PREPEND(&ifp->if_snd, m_head);
560 /* Send a copy of the frame to the BPF listener */
561 #if __FreeBSD_version < 500000
563 bpf_mtap(ifp, m_head);
565 BPF_MTAP(ifp, m_head);
568 /* Set timeout in case hardware has problems transmitting */
569 ifp->if_timer = EM_TX_TIMEOUT;
576 /*********************************************************************
579 * em_ioctl is called when the user wants to configure the
582 * return 0 on success, positive on failure
583 **********************************************************************/
586 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
588 int s, mask, error = 0;
589 struct ifreq *ifr = (struct ifreq *) data;
590 struct adapter * adapter = ifp->if_softc;
596 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFADDR (Get/Set Interface Addr)");
597 ether_ioctl(ifp, command, data);
600 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
601 if (ifr->ifr_mtu > MAX_JUMBO_FRAME_SIZE - ETHER_HDR_LEN) {
604 ifp->if_mtu = ifr->ifr_mtu;
605 adapter->hw.max_frame_size =
606 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
611 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
612 if (ifp->if_flags & IFF_UP) {
613 if (!(ifp->if_flags & IFF_RUNNING))
616 em_disable_promisc(adapter);
617 em_set_promisc(adapter);
619 if (ifp->if_flags & IFF_RUNNING) {
626 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
627 if (ifp->if_flags & IFF_RUNNING) {
628 em_disable_intr(adapter);
629 em_set_multi(adapter);
630 if (adapter->hw.mac_type == em_82542_rev2_0) {
631 em_initialize_receive_unit(adapter);
633 #ifdef DEVICE_POLLING
634 if (!(ifp->if_ipending & IFF_POLLING))
636 em_enable_intr(adapter);
641 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFMEDIA (Get/Set Interface Media)");
642 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
645 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
646 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
647 if (mask & IFCAP_HWCSUM) {
648 if (IFCAP_HWCSUM & ifp->if_capenable)
649 ifp->if_capenable &= ~IFCAP_HWCSUM;
651 ifp->if_capenable |= IFCAP_HWCSUM;
652 if (ifp->if_flags & IFF_RUNNING)
657 IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%d)\n", (int)command);
665 /*********************************************************************
666 * Watchdog entry point
668 * This routine is called whenever hardware quits transmitting.
670 **********************************************************************/
673 em_watchdog(struct ifnet *ifp)
675 struct adapter * adapter;
676 adapter = ifp->if_softc;
678 /* If we are in this routine because of pause frames, then
679 * don't reset the hardware.
681 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) {
682 ifp->if_timer = EM_TX_TIMEOUT;
686 printf("em%d: watchdog timeout -- resetting\n", adapter->unit);
688 ifp->if_flags &= ~IFF_RUNNING;
697 /*********************************************************************
700 * This routine is used in two ways. It is used by the stack as
701 * init entry point in network interface structure. It is also used
702 * by the driver as a hw/sw initialization routine to get to a
705 * return 0 on success, positive on failure
706 **********************************************************************/
713 struct adapter * adapter = arg;
715 INIT_DEBUGOUT("em_init: begin");
721 /* Initialize the hardware */
722 if (em_hardware_init(adapter)) {
723 printf("em%d: Unable to initialize the hardware\n",
729 em_enable_vlans(adapter);
731 /* Prepare transmit descriptors and buffers */
732 if (em_setup_transmit_structures(adapter)) {
733 printf("em%d: Could not setup transmit structures\n",
739 em_initialize_transmit_unit(adapter);
741 /* Setup Multicast table */
742 em_set_multi(adapter);
744 /* Prepare receive descriptors and buffers */
745 if (em_setup_receive_structures(adapter)) {
746 printf("em%d: Could not setup receive structures\n",
752 em_initialize_receive_unit(adapter);
754 ifp = &adapter->interface_data.ac_if;
755 ifp->if_flags |= IFF_RUNNING;
756 ifp->if_flags &= ~IFF_OACTIVE;
758 if (adapter->hw.mac_type >= em_82543) {
759 if (ifp->if_capenable & IFCAP_TXCSUM)
760 ifp->if_hwassist = EM_CHECKSUM_FEATURES;
762 ifp->if_hwassist = 0;
765 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
766 em_clear_hw_cntrs(&adapter->hw);
767 #ifdef DEVICE_POLLING
769 * Only enable interrupts if we are not polling, make sure
770 * they are off otherwise.
772 if (ifp->if_ipending & IFF_POLLING)
773 em_disable_intr(adapter);
775 #endif /* DEVICE_POLLING */
776 em_enable_intr(adapter);
783 #ifdef DEVICE_POLLING
784 static poll_handler_t em_poll;
787 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
789 struct adapter *adapter = ifp->if_softc;
792 if (cmd == POLL_DEREGISTER) { /* final call, enable interrupts */
793 em_enable_intr(adapter);
796 if (cmd == POLL_AND_CHECK_STATUS) {
797 reg_icr = E1000_READ_REG(&adapter->hw, ICR);
798 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
799 untimeout(em_local_timer, adapter, adapter->timer_handle);
800 adapter->hw.get_link_status = 1;
801 em_check_for_link(&adapter->hw);
802 em_print_link_status(adapter);
803 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
806 if (ifp->if_flags & IFF_RUNNING) {
807 em_process_receive_interrupts(adapter, count);
808 em_clean_transmit_interrupts(adapter);
811 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
814 #endif /* DEVICE_POLLING */
816 /*********************************************************************
818 * Interrupt Service routine
820 **********************************************************************/
824 u_int32_t loop_cnt = EM_MAX_INTR;
827 struct adapter *adapter = arg;
829 ifp = &adapter->interface_data.ac_if;
831 #ifdef DEVICE_POLLING
832 if (ifp->if_ipending & IFF_POLLING)
835 if (ether_poll_register(em_poll, ifp)) {
836 em_disable_intr(adapter);
840 #endif /* DEVICE_POLLING */
842 reg_icr = E1000_READ_REG(&adapter->hw, ICR);
847 /* Link status change */
848 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
849 untimeout(em_local_timer, adapter,
850 adapter->timer_handle);
851 adapter->hw.get_link_status = 1;
852 em_check_for_link(&adapter->hw);
853 em_print_link_status(adapter);
854 adapter->timer_handle =
855 timeout(em_local_timer, adapter, 2*hz);
858 while (loop_cnt > 0) {
859 if (ifp->if_flags & IFF_RUNNING) {
860 em_process_receive_interrupts(adapter, -1);
861 em_clean_transmit_interrupts(adapter);
866 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
874 /*********************************************************************
876 * Media Ioctl callback
878 * This routine is called whenever the user queries the status of
879 * the interface using ifconfig.
881 **********************************************************************/
883 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
885 struct adapter * adapter = ifp->if_softc;
887 INIT_DEBUGOUT("em_media_status: begin");
889 em_check_for_link(&adapter->hw);
890 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
891 if (adapter->link_active == 0) {
892 em_get_speed_and_duplex(&adapter->hw,
893 &adapter->link_speed,
894 &adapter->link_duplex);
895 adapter->link_active = 1;
898 if (adapter->link_active == 1) {
899 adapter->link_speed = 0;
900 adapter->link_duplex = 0;
901 adapter->link_active = 0;
905 ifmr->ifm_status = IFM_AVALID;
906 ifmr->ifm_active = IFM_ETHER;
908 if (!adapter->link_active)
911 ifmr->ifm_status |= IFM_ACTIVE;
913 if (adapter->hw.media_type == em_media_type_fiber) {
914 ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
916 switch (adapter->link_speed) {
918 ifmr->ifm_active |= IFM_10_T;
921 ifmr->ifm_active |= IFM_100_TX;
924 #if __FreeBSD_version < 500000
925 ifmr->ifm_active |= IFM_1000_TX;
927 ifmr->ifm_active |= IFM_1000_T;
931 if (adapter->link_duplex == FULL_DUPLEX)
932 ifmr->ifm_active |= IFM_FDX;
934 ifmr->ifm_active |= IFM_HDX;
939 /*********************************************************************
941 * Media Ioctl callback
943 * This routine is called when the user changes speed/duplex using
944 * media/mediopt option with ifconfig.
946 **********************************************************************/
948 em_media_change(struct ifnet *ifp)
950 struct adapter * adapter = ifp->if_softc;
951 struct ifmedia *ifm = &adapter->media;
953 INIT_DEBUGOUT("em_media_change: begin");
955 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
958 switch (IFM_SUBTYPE(ifm->ifm_media)) {
960 adapter->hw.autoneg = DO_AUTO_NEG;
961 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
964 #if __FreeBSD_version < 500000
969 adapter->hw.autoneg = DO_AUTO_NEG;
970 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
973 adapter->hw.autoneg = FALSE;
974 adapter->hw.autoneg_advertised = 0;
975 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
976 adapter->hw.forced_speed_duplex = em_100_full;
978 adapter->hw.forced_speed_duplex = em_100_half;
981 adapter->hw.autoneg = FALSE;
982 adapter->hw.autoneg_advertised = 0;
983 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
984 adapter->hw.forced_speed_duplex = em_10_full;
986 adapter->hw.forced_speed_duplex = em_10_half;
989 printf("em%d: Unsupported media type\n", adapter->unit);
997 #define EM_FIFO_HDR 0x10
998 #define EM_82547_PKT_THRESH 0x3e0
999 #define EM_82547_TX_FIFO_SIZE 0x2800
1000 #define EM_82547_TX_FIFO_BEGIN 0xf00
1001 /*********************************************************************
1003 * This routine maps the mbufs to tx descriptors.
1005 * return 0 on success, positive on failure
1006 **********************************************************************/
1009 em_encap(struct adapter *adapter, struct mbuf *m_head)
1011 vm_offset_t virtual_addr;
1012 u_int32_t txd_upper;
1013 u_int32_t txd_lower;
1014 int txd_used, i, txd_saved;
1017 #if __FreeBSD_version < 500000
1018 struct ifvlan *ifv = NULL;
1022 struct em_buffer *tx_buffer = NULL;
1023 struct em_tx_desc *current_tx_desc = NULL;
1024 struct ifnet *ifp = &adapter->interface_data.ac_if;
1027 * Force a cleanup if number of TX descriptors
1028 * available hits the threshold
1030 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD)
1031 em_clean_transmit_interrupts(adapter);
1033 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
1034 adapter->no_tx_desc_avail1++;
1038 if (ifp->if_hwassist > 0) {
1039 em_transmit_checksum_setup(adapter, m_head,
1040 &txd_upper, &txd_lower);
1043 txd_upper = txd_lower = 0;
1046 /* Find out if we are in vlan mode */
1047 #if __FreeBSD_version < 500000
1048 if ((m_head->m_flags & (M_PROTO1|M_PKTHDR)) == (M_PROTO1|M_PKTHDR) &&
1049 m_head->m_pkthdr.rcvif != NULL &&
1050 m_head->m_pkthdr.rcvif->if_type == IFT_L2VLAN)
1051 ifv = m_head->m_pkthdr.rcvif->if_softc;
1053 mtag = VLAN_OUTPUT_TAG(ifp, m_head);
1056 i = adapter->next_avail_tx_desc;
1059 for (mp = m_head; mp != NULL; mp = mp->m_next) {
1063 if (txd_used == adapter->num_tx_desc_avail) {
1064 adapter->next_avail_tx_desc = txd_saved;
1065 adapter->no_tx_desc_avail2++;
1069 tx_buffer = &adapter->tx_buffer_area[i];
1070 current_tx_desc = &adapter->tx_desc_base[i];
1071 virtual_addr = mtod(mp, vm_offset_t);
1072 current_tx_desc->buffer_addr = vtophys(virtual_addr);
1074 current_tx_desc->lower.data = (adapter->txd_cmd | txd_lower | mp->m_len);
1075 current_tx_desc->upper.data = (txd_upper);
1077 if (++i == adapter->num_tx_desc)
1080 tx_buffer->m_head = NULL;
1085 adapter->num_tx_desc_avail -= txd_used;
1086 adapter->next_avail_tx_desc = i;
1088 #if __FreeBSD_version < 500000
1090 /* Set the vlan id */
1091 current_tx_desc->upper.fields.special = ifv->ifv_tag;
1094 /* Set the vlan id */
1095 current_tx_desc->upper.fields.special = VLAN_TAG_VALUE(mtag);
1097 /* Tell hardware to add tag */
1098 current_tx_desc->lower.data |= E1000_TXD_CMD_VLE;
1101 tx_buffer->m_head = m_head;
1104 * Last Descriptor of Packet needs End Of Packet (EOP)
1106 current_tx_desc->lower.data |= (E1000_TXD_CMD_EOP);
1109 * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000
1110 * that this frame is available to transmit.
1112 if (adapter->hw.mac_type == em_82547 &&
1113 adapter->link_duplex == HALF_DUPLEX) {
1114 em_82547_move_tail(adapter);
1117 E1000_WRITE_REG(&adapter->hw, TDT, i);
1118 if (adapter->hw.mac_type == em_82547) {
1119 em_82547_update_fifo_head(adapter, m_head->m_pkthdr.len);
1127 /*********************************************************************
1129 * 82547 workaround to avoid controller hang in half-duplex environment.
1130 * The workaround is to avoid queuing a large packet that would span
1131 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
1132 * in this case. We do that only when FIFO is queiced.
1134 **********************************************************************/
1136 em_82547_move_tail(void *arg)
1139 struct adapter *adapter = arg;
1142 struct em_tx_desc *tx_desc;
1143 uint16_t length = 0;
1147 hw_tdt = E1000_READ_REG(&adapter->hw, TDT);
1148 sw_tdt = adapter->next_avail_tx_desc;
1150 while (hw_tdt != sw_tdt) {
1151 tx_desc = &adapter->tx_desc_base[hw_tdt];
1152 length += tx_desc->lower.flags.length;
1153 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
1154 if(++hw_tdt == adapter->num_tx_desc)
1158 if (em_82547_fifo_workaround(adapter, length)) {
1159 adapter->tx_fifo_wrk++;
1160 adapter->tx_fifo_timer_handle =
1161 timeout(em_82547_move_tail,
1167 E1000_WRITE_REG(&adapter->hw, TDT, hw_tdt);
1168 em_82547_update_fifo_head(adapter, length);
1178 em_82547_fifo_workaround(struct adapter *adapter, int len)
1180 int fifo_space, fifo_pkt_len;
1182 fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1184 if (adapter->link_duplex == HALF_DUPLEX) {
1185 fifo_space = EM_82547_TX_FIFO_SIZE - adapter->tx_fifo_head;
1187 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
1188 if (em_82547_tx_fifo_reset(adapter)) {
1201 em_82547_update_fifo_head(struct adapter *adapter, int len)
1203 int fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1205 /* tx_fifo_head is always 16 byte aligned */
1206 adapter->tx_fifo_head += fifo_pkt_len;
1207 if (adapter->tx_fifo_head >= EM_82547_TX_FIFO_SIZE) {
1208 adapter->tx_fifo_head -= EM_82547_TX_FIFO_SIZE;
1216 em_82547_tx_fifo_reset(struct adapter *adapter)
1220 if ( (E1000_READ_REG(&adapter->hw, TDT) ==
1221 E1000_READ_REG(&adapter->hw, TDH)) &&
1222 (E1000_READ_REG(&adapter->hw, TDFT) ==
1223 E1000_READ_REG(&adapter->hw, TDFH)) &&
1224 (E1000_READ_REG(&adapter->hw, TDFTS) ==
1225 E1000_READ_REG(&adapter->hw, TDFHS)) &&
1226 (E1000_READ_REG(&adapter->hw, TDFPC) == 0)) {
1228 /* Disable TX unit */
1229 tctl = E1000_READ_REG(&adapter->hw, TCTL);
1230 E1000_WRITE_REG(&adapter->hw, TCTL, tctl & ~E1000_TCTL_EN);
1232 /* Reset FIFO pointers */
1233 E1000_WRITE_REG(&adapter->hw, TDFT, EM_82547_TX_FIFO_BEGIN);
1234 E1000_WRITE_REG(&adapter->hw, TDFH, EM_82547_TX_FIFO_BEGIN);
1235 E1000_WRITE_REG(&adapter->hw, TDFTS, EM_82547_TX_FIFO_BEGIN);
1236 E1000_WRITE_REG(&adapter->hw, TDFHS, EM_82547_TX_FIFO_BEGIN);
1238 /* Re-enable TX unit */
1239 E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1240 E1000_WRITE_FLUSH(&adapter->hw);
1242 adapter->tx_fifo_head = 0;
1243 adapter->tx_fifo_reset++;
1253 em_set_promisc(struct adapter * adapter)
1257 struct ifnet *ifp = &adapter->interface_data.ac_if;
1259 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1261 if (ifp->if_flags & IFF_PROMISC) {
1262 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1263 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1264 } else if (ifp->if_flags & IFF_ALLMULTI) {
1265 reg_rctl |= E1000_RCTL_MPE;
1266 reg_rctl &= ~E1000_RCTL_UPE;
1267 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1274 em_disable_promisc(struct adapter * adapter)
1278 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1280 reg_rctl &= (~E1000_RCTL_UPE);
1281 reg_rctl &= (~E1000_RCTL_MPE);
1282 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1288 /*********************************************************************
1291 * This routine is called whenever multicast address list is updated.
1293 **********************************************************************/
1296 em_set_multi(struct adapter * adapter)
1298 u_int32_t reg_rctl = 0;
1299 u_int8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
1300 struct ifmultiaddr *ifma;
1302 struct ifnet *ifp = &adapter->interface_data.ac_if;
1304 IOCTL_DEBUGOUT("em_set_multi: begin");
1306 if (adapter->hw.mac_type == em_82542_rev2_0) {
1307 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1308 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1309 em_pci_clear_mwi(&adapter->hw);
1311 reg_rctl |= E1000_RCTL_RST;
1312 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1316 #if __FreeBSD_version < 500000
1317 LIST_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1319 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1321 if (ifma->ifma_addr->sa_family != AF_LINK)
1324 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) break;
1326 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
1327 &mta[mcnt*ETH_LENGTH_OF_ADDRESS], ETH_LENGTH_OF_ADDRESS);
1331 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
1332 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1333 reg_rctl |= E1000_RCTL_MPE;
1334 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1336 em_mc_addr_list_update(&adapter->hw, mta, mcnt, 0);
1338 if (adapter->hw.mac_type == em_82542_rev2_0) {
1339 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1340 reg_rctl &= ~E1000_RCTL_RST;
1341 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1343 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1344 em_pci_set_mwi(&adapter->hw);
1352 /*********************************************************************
1355 * This routine checks for link status and updates statistics.
1357 **********************************************************************/
1360 em_local_timer(void *arg)
1364 struct adapter * adapter = arg;
1365 ifp = &adapter->interface_data.ac_if;
1369 em_check_for_link(&adapter->hw);
1370 em_print_link_status(adapter);
1371 em_update_stats_counters(adapter);
1372 if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
1373 em_print_hw_stats(adapter);
1375 em_smartspeed(adapter);
1377 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
1384 em_print_link_status(struct adapter * adapter)
1386 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1387 if (adapter->link_active == 0) {
1388 em_get_speed_and_duplex(&adapter->hw,
1389 &adapter->link_speed,
1390 &adapter->link_duplex);
1391 printf("em%d: Link is up %d Mbps %s\n",
1393 adapter->link_speed,
1394 ((adapter->link_duplex == FULL_DUPLEX) ?
1395 "Full Duplex" : "Half Duplex"));
1396 adapter->link_active = 1;
1397 adapter->smartspeed = 0;
1400 if (adapter->link_active == 1) {
1401 adapter->link_speed = 0;
1402 adapter->link_duplex = 0;
1403 printf("em%d: Link is Down\n", adapter->unit);
1404 adapter->link_active = 0;
1411 /*********************************************************************
1413 * This routine disables all traffic on the adapter by issuing a
1414 * global reset on the MAC and deallocates TX/RX buffers.
1416 **********************************************************************/
1422 struct adapter * adapter = arg;
1423 ifp = &adapter->interface_data.ac_if;
1425 INIT_DEBUGOUT("em_stop: begin\n");
1426 em_disable_intr(adapter);
1427 em_reset_hw(&adapter->hw);
1428 untimeout(em_local_timer, adapter, adapter->timer_handle);
1429 untimeout(em_82547_move_tail, adapter,
1430 adapter->tx_fifo_timer_handle);
1431 em_free_transmit_structures(adapter);
1432 em_free_receive_structures(adapter);
1435 /* Tell the stack that the interface is no longer active */
1436 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
1442 /*********************************************************************
1444 * Determine hardware revision.
1446 **********************************************************************/
1448 em_identify_hardware(struct adapter * adapter)
1450 device_t dev = adapter->dev;
1452 /* Make sure our PCI config space has the necessary stuff set */
1453 adapter->hw.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
1454 if (!((adapter->hw.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
1455 (adapter->hw.pci_cmd_word & PCIM_CMD_MEMEN))) {
1456 printf("em%d: Memory Access and/or Bus Master bits were not set!\n",
1458 adapter->hw.pci_cmd_word |=
1459 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
1460 pci_write_config(dev, PCIR_COMMAND, adapter->hw.pci_cmd_word, 2);
1463 /* Save off the information about this board */
1464 adapter->hw.vendor_id = pci_get_vendor(dev);
1465 adapter->hw.device_id = pci_get_device(dev);
1466 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
1467 adapter->hw.subsystem_vendor_id = pci_read_config(dev, PCIR_SUBVEND_0, 2);
1468 adapter->hw.subsystem_id = pci_read_config(dev, PCIR_SUBDEV_0, 2);
1470 /* Identify the MAC */
1471 if (em_set_mac_type(&adapter->hw))
1472 printf("em%d: Unknown MAC Type\n", adapter->unit);
1478 em_allocate_pci_resources(struct adapter * adapter)
1481 device_t dev = adapter->dev;
1484 adapter->res_memory = bus_alloc_resource(dev, SYS_RES_MEMORY,
1487 if (!(adapter->res_memory)) {
1488 printf("em%d: Unable to allocate bus resource: memory\n",
1492 adapter->osdep.mem_bus_space_tag =
1493 rman_get_bustag(adapter->res_memory);
1494 adapter->osdep.mem_bus_space_handle =
1495 rman_get_bushandle(adapter->res_memory);
1496 adapter->hw.hw_addr = (uint8_t *)&adapter->osdep.mem_bus_space_handle;
1499 if (adapter->hw.mac_type > em_82543) {
1500 /* Figure our where our IO BAR is ? */
1502 for (i = 0; i < 5; i++) {
1503 val = pci_read_config(dev, rid, 4);
1504 if (val & 0x00000001) {
1505 adapter->io_rid = rid;
1511 adapter->res_ioport = bus_alloc_resource(dev, SYS_RES_IOPORT,
1512 &adapter->io_rid, 0, ~0, 1,
1514 if (!(adapter->res_ioport)) {
1515 printf("em%d: Unable to allocate bus resource: ioport\n",
1520 adapter->hw.io_base =
1521 rman_get_start(adapter->res_ioport);
1525 adapter->res_interrupt = bus_alloc_resource(dev, SYS_RES_IRQ,
1527 RF_SHAREABLE | RF_ACTIVE);
1528 if (!(adapter->res_interrupt)) {
1529 printf("em%d: Unable to allocate bus resource: interrupt\n",
1533 if (bus_setup_intr(dev, adapter->res_interrupt, INTR_TYPE_NET,
1534 (void (*)(void *)) em_intr, adapter,
1535 &adapter->int_handler_tag)) {
1536 printf("em%d: Error registering interrupt handler!\n",
1541 adapter->hw.back = &adapter->osdep;
1547 em_free_pci_resources(struct adapter * adapter)
1549 device_t dev = adapter->dev;
1551 if (adapter->res_interrupt != NULL) {
1552 bus_teardown_intr(dev, adapter->res_interrupt,
1553 adapter->int_handler_tag);
1554 bus_release_resource(dev, SYS_RES_IRQ, 0,
1555 adapter->res_interrupt);
1557 if (adapter->res_memory != NULL) {
1558 bus_release_resource(dev, SYS_RES_MEMORY, EM_MMBA,
1559 adapter->res_memory);
1562 if (adapter->res_ioport != NULL) {
1563 bus_release_resource(dev, SYS_RES_IOPORT, adapter->io_rid,
1564 adapter->res_ioport);
1569 /*********************************************************************
1571 * Initialize the hardware to a configuration as specified by the
1572 * adapter structure. The controller is reset, the EEPROM is
1573 * verified, the MAC address is set, then the shared initialization
1574 * routines are called.
1576 **********************************************************************/
1578 em_hardware_init(struct adapter * adapter)
1580 /* Issue a global reset */
1581 em_reset_hw(&adapter->hw);
1583 /* When hardware is reset, fifo_head is also reset */
1584 adapter->tx_fifo_head = 0;
1586 /* Make sure we have a good EEPROM before we read from it */
1587 if (em_validate_eeprom_checksum(&adapter->hw) < 0) {
1588 printf("em%d: The EEPROM Checksum Is Not Valid\n",
1593 if (em_read_part_num(&adapter->hw, &(adapter->part_num)) < 0) {
1594 printf("em%d: EEPROM read error while reading part number\n",
1599 if (em_init_hw(&adapter->hw) < 0) {
1600 printf("em%d: Hardware Initialization Failed",
1605 em_check_for_link(&adapter->hw);
1606 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)
1607 adapter->link_active = 1;
1609 adapter->link_active = 0;
1611 if (adapter->link_active) {
1612 em_get_speed_and_duplex(&adapter->hw,
1613 &adapter->link_speed,
1614 &adapter->link_duplex);
1616 adapter->link_speed = 0;
1617 adapter->link_duplex = 0;
1623 /*********************************************************************
1625 * Setup networking device structure and register an interface.
1627 **********************************************************************/
1629 em_setup_interface(device_t dev, struct adapter * adapter)
1632 INIT_DEBUGOUT("em_setup_interface: begin");
1634 ifp = &adapter->interface_data.ac_if;
1635 ifp->if_unit = adapter->unit;
1636 ifp->if_name = "em";
1637 ifp->if_mtu = ETHERMTU;
1638 ifp->if_output = ether_output;
1639 ifp->if_baudrate = 1000000000;
1640 ifp->if_init = em_init;
1641 ifp->if_softc = adapter;
1642 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1643 ifp->if_ioctl = em_ioctl;
1644 ifp->if_start = em_start;
1645 ifp->if_watchdog = em_watchdog;
1646 ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 1;
1648 #if __FreeBSD_version < 500000
1649 ether_ifattach(ifp, ETHER_BPF_SUPPORTED);
1651 ether_ifattach(ifp, adapter->interface_data.ac_enaddr);
1654 if (adapter->hw.mac_type >= em_82543) {
1655 ifp->if_capabilities = IFCAP_HWCSUM;
1656 ifp->if_capenable = ifp->if_capabilities;
1660 * Tell the upper layer(s) we support long frames.
1662 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
1663 #if __FreeBSD_version >= 500000
1664 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
1669 * Specify the media types supported by this adapter and register
1670 * callbacks to update media and link information
1672 ifmedia_init(&adapter->media, IFM_IMASK, em_media_change,
1674 if (adapter->hw.media_type == em_media_type_fiber) {
1675 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX | IFM_FDX,
1677 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX,
1680 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
1681 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
1683 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
1685 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
1687 #if __FreeBSD_version < 500000
1688 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX | IFM_FDX,
1690 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX, 0, NULL);
1692 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T | IFM_FDX,
1694 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T, 0, NULL);
1697 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
1698 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
1704 /*********************************************************************
1706 * Workaround for SmartSpeed on 82541 and 82547 controllers
1708 **********************************************************************/
1710 em_smartspeed(struct adapter *adapter)
1714 if(adapter->link_active || (adapter->hw.phy_type != em_phy_igp) ||
1715 !adapter->hw.autoneg || !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
1718 if(adapter->smartspeed == 0) {
1719 /* If Master/Slave config fault is asserted twice,
1720 * we assume back-to-back */
1721 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1722 if(!(phy_tmp & SR_1000T_MS_CONFIG_FAULT)) return;
1723 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1724 if(phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
1725 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL,
1727 if(phy_tmp & CR_1000T_MS_ENABLE) {
1728 phy_tmp &= ~CR_1000T_MS_ENABLE;
1729 em_write_phy_reg(&adapter->hw,
1730 PHY_1000T_CTRL, phy_tmp);
1731 adapter->smartspeed++;
1732 if(adapter->hw.autoneg &&
1733 !em_phy_setup_autoneg(&adapter->hw) &&
1734 !em_read_phy_reg(&adapter->hw, PHY_CTRL,
1736 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1737 MII_CR_RESTART_AUTO_NEG);
1738 em_write_phy_reg(&adapter->hw,
1744 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
1745 /* If still no link, perhaps using 2/3 pair cable */
1746 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
1747 phy_tmp |= CR_1000T_MS_ENABLE;
1748 em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
1749 if(adapter->hw.autoneg &&
1750 !em_phy_setup_autoneg(&adapter->hw) &&
1751 !em_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_tmp)) {
1752 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1753 MII_CR_RESTART_AUTO_NEG);
1754 em_write_phy_reg(&adapter->hw, PHY_CTRL, phy_tmp);
1757 /* Restart process after EM_SMARTSPEED_MAX iterations */
1758 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX)
1759 adapter->smartspeed = 0;
1765 /*********************************************************************
1767 * Allocate memory for tx_buffer structures. The tx_buffer stores all
1768 * the information needed to transmit a packet on the wire.
1770 **********************************************************************/
1772 em_allocate_transmit_structures(struct adapter * adapter)
1774 if (!(adapter->tx_buffer_area =
1775 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
1776 adapter->num_tx_desc, M_DEVBUF,
1778 printf("em%d: Unable to allocate tx_buffer memory\n",
1783 bzero(adapter->tx_buffer_area,
1784 sizeof(struct em_buffer) * adapter->num_tx_desc);
1789 /*********************************************************************
1791 * Allocate and initialize transmit structures.
1793 **********************************************************************/
1795 em_setup_transmit_structures(struct adapter * adapter)
1797 if (em_allocate_transmit_structures(adapter))
1800 bzero((void *) adapter->tx_desc_base,
1801 (sizeof(struct em_tx_desc)) * adapter->num_tx_desc);
1803 adapter->next_avail_tx_desc = 0;
1804 adapter->oldest_used_tx_desc = 0;
1806 /* Set number of descriptors available */
1807 adapter->num_tx_desc_avail = adapter->num_tx_desc;
1809 /* Set checksum context */
1810 adapter->active_checksum_context = OFFLOAD_NONE;
1815 /*********************************************************************
1817 * Enable transmit unit.
1819 **********************************************************************/
1821 em_initialize_transmit_unit(struct adapter * adapter)
1824 u_int32_t reg_tipg = 0;
1825 u_int64_t tdba = vtophys((vm_offset_t)adapter->tx_desc_base);
1827 /* Setup the Base and Length of the Tx Descriptor Ring */
1828 E1000_WRITE_REG(&adapter->hw, TDBAL,
1829 (tdba & 0x00000000ffffffffULL));
1830 E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
1831 E1000_WRITE_REG(&adapter->hw, TDLEN,
1832 adapter->num_tx_desc *
1833 sizeof(struct em_tx_desc));
1835 /* Setup the HW Tx Head and Tail descriptor pointers */
1836 E1000_WRITE_REG(&adapter->hw, TDH, 0);
1837 E1000_WRITE_REG(&adapter->hw, TDT, 0);
1840 HW_DEBUGOUT2("Base = %x, Length = %x\n",
1841 E1000_READ_REG(&adapter->hw, TDBAL),
1842 E1000_READ_REG(&adapter->hw, TDLEN));
1845 /* Set the default values for the Tx Inter Packet Gap timer */
1846 switch (adapter->hw.mac_type) {
1847 case em_82542_rev2_0:
1848 case em_82542_rev2_1:
1849 reg_tipg = DEFAULT_82542_TIPG_IPGT;
1850 reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1851 reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1854 if (adapter->hw.media_type == em_media_type_fiber)
1855 reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
1857 reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
1858 reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1859 reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1862 E1000_WRITE_REG(&adapter->hw, TIPG, reg_tipg);
1863 E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
1864 if(adapter->hw.mac_type >= em_82540)
1865 E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
1867 /* Program the Transmit Control Register */
1868 reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
1869 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
1870 if (adapter->link_duplex == 1) {
1871 reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1873 reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1875 E1000_WRITE_REG(&adapter->hw, TCTL, reg_tctl);
1877 /* Setup Transmit Descriptor Settings for this adapter */
1878 adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_RS;
1880 if (adapter->tx_int_delay > 0)
1881 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
1886 /*********************************************************************
1888 * Free all transmit related data structures.
1890 **********************************************************************/
1892 em_free_transmit_structures(struct adapter * adapter)
1894 struct em_buffer *tx_buffer;
1897 INIT_DEBUGOUT("free_transmit_structures: begin");
1899 if (adapter->tx_buffer_area != NULL) {
1900 tx_buffer = adapter->tx_buffer_area;
1901 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
1902 if (tx_buffer->m_head != NULL)
1903 m_freem(tx_buffer->m_head);
1904 tx_buffer->m_head = NULL;
1907 if (adapter->tx_buffer_area != NULL) {
1908 free(adapter->tx_buffer_area, M_DEVBUF);
1909 adapter->tx_buffer_area = NULL;
1914 /*********************************************************************
1916 * The offload context needs to be set when we transfer the first
1917 * packet of a particular protocol (TCP/UDP). We change the
1918 * context only if the protocol type changes.
1920 **********************************************************************/
1922 em_transmit_checksum_setup(struct adapter * adapter,
1924 u_int32_t *txd_upper,
1925 u_int32_t *txd_lower)
1927 struct em_context_desc *TXD;
1928 struct em_buffer *tx_buffer;
1931 if (mp->m_pkthdr.csum_flags) {
1933 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
1934 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
1935 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1936 if (adapter->active_checksum_context == OFFLOAD_TCP_IP)
1939 adapter->active_checksum_context = OFFLOAD_TCP_IP;
1941 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
1942 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
1943 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1944 if (adapter->active_checksum_context == OFFLOAD_UDP_IP)
1947 adapter->active_checksum_context = OFFLOAD_UDP_IP;
1959 /* If we reach this point, the checksum offload context
1960 * needs to be reset.
1962 curr_txd = adapter->next_avail_tx_desc;
1963 tx_buffer = &adapter->tx_buffer_area[curr_txd];
1964 TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd];
1966 TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN;
1967 TXD->lower_setup.ip_fields.ipcso =
1968 ETHER_HDR_LEN + offsetof(struct ip, ip_sum);
1969 TXD->lower_setup.ip_fields.ipcse =
1970 ETHER_HDR_LEN + sizeof(struct ip) - 1;
1972 TXD->upper_setup.tcp_fields.tucss =
1973 ETHER_HDR_LEN + sizeof(struct ip);
1974 TXD->upper_setup.tcp_fields.tucse = 0;
1976 if (adapter->active_checksum_context == OFFLOAD_TCP_IP) {
1977 TXD->upper_setup.tcp_fields.tucso =
1978 ETHER_HDR_LEN + sizeof(struct ip) +
1979 offsetof(struct tcphdr, th_sum);
1980 } else if (adapter->active_checksum_context == OFFLOAD_UDP_IP) {
1981 TXD->upper_setup.tcp_fields.tucso =
1982 ETHER_HDR_LEN + sizeof(struct ip) +
1983 offsetof(struct udphdr, uh_sum);
1986 TXD->tcp_seg_setup.data = 0;
1987 TXD->cmd_and_length = (adapter->txd_cmd | E1000_TXD_CMD_DEXT);
1989 tx_buffer->m_head = NULL;
1991 if (++curr_txd == adapter->num_tx_desc)
1994 adapter->num_tx_desc_avail--;
1995 adapter->next_avail_tx_desc = curr_txd;
2000 /**********************************************************************
2002 * Examine each tx_buffer in the used queue. If the hardware is done
2003 * processing the packet then free associated resources. The
2004 * tx_buffer is put back on the free queue.
2006 **********************************************************************/
2008 em_clean_transmit_interrupts(struct adapter * adapter)
2012 struct em_buffer *tx_buffer;
2013 struct em_tx_desc *tx_desc;
2014 struct ifnet *ifp = &adapter->interface_data.ac_if;
2016 if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
2021 adapter->clean_tx_interrupts++;
2023 num_avail = adapter->num_tx_desc_avail;
2024 i = adapter->oldest_used_tx_desc;
2026 tx_buffer = &adapter->tx_buffer_area[i];
2027 tx_desc = &adapter->tx_desc_base[i];
2029 while(tx_desc->upper.fields.status & E1000_TXD_STAT_DD) {
2031 tx_desc->upper.data = 0;
2034 if (tx_buffer->m_head) {
2036 m_freem(tx_buffer->m_head);
2037 tx_buffer->m_head = NULL;
2040 if (++i == adapter->num_tx_desc)
2043 tx_buffer = &adapter->tx_buffer_area[i];
2044 tx_desc = &adapter->tx_desc_base[i];
2047 adapter->oldest_used_tx_desc = i;
2050 * If we have enough room, clear IFF_OACTIVE to tell the stack
2051 * that it is OK to send packets.
2052 * If there are no pending descriptors, clear the timeout. Otherwise,
2053 * if some descriptors have been freed, restart the timeout.
2055 if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
2056 ifp->if_flags &= ~IFF_OACTIVE;
2057 if (num_avail == adapter->num_tx_desc)
2059 else if (num_avail == adapter->num_tx_desc_avail)
2060 ifp->if_timer = EM_TX_TIMEOUT;
2062 adapter->num_tx_desc_avail = num_avail;
2067 /*********************************************************************
2069 * Get a buffer from system mbuf buffer pool.
2071 **********************************************************************/
2073 em_get_buf(int i, struct adapter *adapter,
2076 register struct mbuf *mp = nmp;
2079 ifp = &adapter->interface_data.ac_if;
2082 MGETHDR(mp, M_DONTWAIT, MT_DATA);
2084 adapter->mbuf_alloc_failed++;
2087 MCLGET(mp, M_DONTWAIT);
2088 if ((mp->m_flags & M_EXT) == 0) {
2090 adapter->mbuf_cluster_failed++;
2093 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2095 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2096 mp->m_data = mp->m_ext.ext_buf;
2100 if (ifp->if_mtu <= ETHERMTU) {
2101 m_adj(mp, ETHER_ALIGN);
2104 adapter->rx_buffer_area[i].m_head = mp;
2105 adapter->rx_desc_base[i].buffer_addr =
2106 vtophys(mtod(mp, vm_offset_t));
2111 /*********************************************************************
2113 * Allocate memory for rx_buffer structures. Since we use one
2114 * rx_buffer per received packet, the maximum number of rx_buffer's
2115 * that we'll need is equal to the number of receive descriptors
2116 * that we've allocated.
2118 **********************************************************************/
2120 em_allocate_receive_structures(struct adapter * adapter)
2124 if (!(adapter->rx_buffer_area =
2125 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
2126 adapter->num_rx_desc, M_DEVBUF,
2128 printf("em%d: Unable to allocate rx_buffer memory\n",
2133 bzero(adapter->rx_buffer_area,
2134 sizeof(struct em_buffer) * adapter->num_rx_desc);
2136 for (i = 0; i < adapter->num_rx_desc; i++) {
2137 if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2138 adapter->rx_buffer_area[i].m_head = NULL;
2139 adapter->rx_desc_base[i].buffer_addr = 0;
2147 /*********************************************************************
2149 * Allocate and initialize receive structures.
2151 **********************************************************************/
2153 em_setup_receive_structures(struct adapter * adapter)
2155 bzero((void *) adapter->rx_desc_base,
2156 (sizeof(struct em_rx_desc)) * adapter->num_rx_desc);
2158 if (em_allocate_receive_structures(adapter))
2161 /* Setup our descriptor pointers */
2162 adapter->next_rx_desc_to_check = 0;
2166 /*********************************************************************
2168 * Enable receive unit.
2170 **********************************************************************/
2172 em_initialize_receive_unit(struct adapter * adapter)
2175 u_int32_t reg_rxcsum;
2177 u_int64_t rdba = vtophys((vm_offset_t)adapter->rx_desc_base);
2179 ifp = &adapter->interface_data.ac_if;
2181 /* Make sure receives are disabled while setting up the descriptor ring */
2182 E1000_WRITE_REG(&adapter->hw, RCTL, 0);
2184 /* Set the Receive Delay Timer Register */
2185 E1000_WRITE_REG(&adapter->hw, RDTR,
2186 adapter->rx_int_delay | E1000_RDT_FPDB);
2188 if(adapter->hw.mac_type >= em_82540) {
2189 E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
2191 /* Set the interrupt throttling rate. Value is calculated
2192 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
2193 #define MAX_INTS_PER_SEC 8000
2194 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256)
2195 E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR);
2198 /* Setup the Base and Length of the Rx Descriptor Ring */
2199 E1000_WRITE_REG(&adapter->hw, RDBAL,
2200 (rdba & 0x00000000ffffffffULL));
2201 E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
2202 E1000_WRITE_REG(&adapter->hw, RDLEN,
2203 adapter->num_rx_desc *
2204 sizeof(struct em_rx_desc));
2206 /* Setup the HW Rx Head and Tail Descriptor Pointers */
2207 E1000_WRITE_REG(&adapter->hw, RDH, 0);
2208 E1000_WRITE_REG(&adapter->hw, RDT, adapter->num_rx_desc - 1);
2210 /* Setup the Receive Control Register */
2211 reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
2212 E1000_RCTL_RDMTS_HALF |
2213 (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
2215 if (adapter->hw.tbi_compatibility_on == TRUE)
2216 reg_rctl |= E1000_RCTL_SBP;
2219 switch (adapter->rx_buffer_len) {
2221 case EM_RXBUFFER_2048:
2222 reg_rctl |= E1000_RCTL_SZ_2048;
2224 case EM_RXBUFFER_4096:
2225 reg_rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2227 case EM_RXBUFFER_8192:
2228 reg_rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2230 case EM_RXBUFFER_16384:
2231 reg_rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2235 if (ifp->if_mtu > ETHERMTU)
2236 reg_rctl |= E1000_RCTL_LPE;
2238 /* Enable 82543 Receive Checksum Offload for TCP and UDP */
2239 if ((adapter->hw.mac_type >= em_82543) &&
2240 (ifp->if_capenable & IFCAP_RXCSUM)) {
2241 reg_rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
2242 reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
2243 E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum);
2246 /* Enable Receives */
2247 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
2252 /*********************************************************************
2254 * Free receive related data structures.
2256 **********************************************************************/
2258 em_free_receive_structures(struct adapter *adapter)
2260 struct em_buffer *rx_buffer;
2263 INIT_DEBUGOUT("free_receive_structures: begin");
2265 if (adapter->rx_buffer_area != NULL) {
2266 rx_buffer = adapter->rx_buffer_area;
2267 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2268 if (rx_buffer->m_head != NULL)
2269 m_freem(rx_buffer->m_head);
2270 rx_buffer->m_head = NULL;
2273 if (adapter->rx_buffer_area != NULL) {
2274 free(adapter->rx_buffer_area, M_DEVBUF);
2275 adapter->rx_buffer_area = NULL;
2280 /*********************************************************************
2282 * This routine executes in interrupt context. It replenishes
2283 * the mbufs in the descriptor and sends data which has been
2284 * dma'ed into host memory to upper layer.
2286 * We loop at most count times if count is > 0, or until done if
2289 *********************************************************************/
2291 em_process_receive_interrupts(struct adapter * adapter, int count)
2295 #if __FreeBSD_version < 500000
2296 struct ether_header *eh;
2298 u_int8_t accept_frame = 0;
2303 /* Pointer to the receive descriptor being examined. */
2304 struct em_rx_desc *current_desc;
2306 ifp = &adapter->interface_data.ac_if;
2307 i = adapter->next_rx_desc_to_check;
2308 current_desc = &adapter->rx_desc_base[i];
2310 if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
2312 adapter->no_pkts_avail++;
2317 while ((current_desc->status & E1000_RXD_STAT_DD) && (count != 0)) {
2319 mp = adapter->rx_buffer_area[i].m_head;
2322 if (current_desc->status & E1000_RXD_STAT_EOP) {
2325 len = current_desc->length - ETHER_CRC_LEN;
2328 len = current_desc->length;
2331 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2333 u_int32_t pkt_len = current_desc->length;
2335 if (adapter->fmp != NULL)
2336 pkt_len += adapter->fmp->m_pkthdr.len;
2338 last_byte = *(mtod(mp, caddr_t) +
2339 current_desc->length - 1);
2341 if (TBI_ACCEPT(&adapter->hw, current_desc->status,
2342 current_desc->errors,
2343 pkt_len, last_byte)) {
2344 em_tbi_adjust_stats(&adapter->hw,
2347 adapter->hw.mac_addr);
2357 if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2358 adapter->dropped_pkts++;
2359 em_get_buf(i, adapter, mp);
2360 if (adapter->fmp != NULL)
2361 m_freem(adapter->fmp);
2362 adapter->fmp = NULL;
2363 adapter->lmp = NULL;
2367 /* Assign correct length to the current fragment */
2370 if (adapter->fmp == NULL) {
2371 mp->m_pkthdr.len = len;
2372 adapter->fmp = mp; /* Store the first mbuf */
2375 /* Chain mbuf's together */
2376 mp->m_flags &= ~M_PKTHDR;
2377 adapter->lmp->m_next = mp;
2378 adapter->lmp = adapter->lmp->m_next;
2379 adapter->fmp->m_pkthdr.len += len;
2383 adapter->fmp->m_pkthdr.rcvif = ifp;
2386 #if __FreeBSD_version < 500000
2387 eh = mtod(adapter->fmp, struct ether_header *);
2388 /* Remove ethernet header from mbuf */
2389 m_adj(adapter->fmp, sizeof(struct ether_header));
2390 em_receive_checksum(adapter, current_desc,
2392 if (current_desc->status & E1000_RXD_STAT_VP)
2393 VLAN_INPUT_TAG(eh, adapter->fmp,
2394 (current_desc->special &
2395 E1000_RXD_SPC_VLAN_MASK));
2397 ether_input(ifp, eh, adapter->fmp);
2400 em_receive_checksum(adapter, current_desc,
2402 if (current_desc->status & E1000_RXD_STAT_VP)
2403 VLAN_INPUT_TAG(ifp, adapter->fmp,
2404 (current_desc->special &
2405 E1000_RXD_SPC_VLAN_MASK),
2406 adapter->fmp = NULL);
2408 if (adapter->fmp != NULL)
2409 (*ifp->if_input)(ifp, adapter->fmp);
2411 adapter->fmp = NULL;
2412 adapter->lmp = NULL;
2415 adapter->dropped_pkts++;
2416 em_get_buf(i, adapter, mp);
2417 if (adapter->fmp != NULL)
2418 m_freem(adapter->fmp);
2419 adapter->fmp = NULL;
2420 adapter->lmp = NULL;
2423 /* Zero out the receive descriptors status */
2424 current_desc->status = 0;
2426 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */
2427 E1000_WRITE_REG(&adapter->hw, RDT, i);
2429 /* Advance our pointers to the next descriptor */
2430 if (++i == adapter->num_rx_desc) {
2432 current_desc = adapter->rx_desc_base;
2436 adapter->next_rx_desc_to_check = i;
2440 /*********************************************************************
2442 * Verify that the hardware indicated that the checksum is valid.
2443 * Inform the stack about the status of checksum so that stack
2444 * doesn't spend time verifying the checksum.
2446 *********************************************************************/
2448 em_receive_checksum(struct adapter *adapter,
2449 struct em_rx_desc *rx_desc,
2452 /* 82543 or newer only */
2453 if ((adapter->hw.mac_type < em_82543) ||
2454 /* Ignore Checksum bit is set */
2455 (rx_desc->status & E1000_RXD_STAT_IXSM)) {
2456 mp->m_pkthdr.csum_flags = 0;
2460 if (rx_desc->status & E1000_RXD_STAT_IPCS) {
2462 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
2463 /* IP Checksum Good */
2464 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
2465 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
2468 mp->m_pkthdr.csum_flags = 0;
2472 if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
2474 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
2475 mp->m_pkthdr.csum_flags |=
2476 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
2477 mp->m_pkthdr.csum_data = htons(0xffff);
2486 em_enable_vlans(struct adapter *adapter)
2490 E1000_WRITE_REG(&adapter->hw, VET, ETHERTYPE_VLAN);
2492 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2493 ctrl |= E1000_CTRL_VME;
2494 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2500 em_enable_intr(struct adapter * adapter)
2502 E1000_WRITE_REG(&adapter->hw, IMS, (IMS_ENABLE_MASK));
2507 em_disable_intr(struct adapter *adapter)
2509 E1000_WRITE_REG(&adapter->hw, IMC,
2510 (0xffffffff & ~E1000_IMC_RXSEQ));
2515 em_is_valid_ether_addr(u_int8_t *addr)
2517 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
2519 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
2527 em_write_pci_cfg(struct em_hw *hw,
2531 pci_write_config(((struct em_osdep *)hw->back)->dev, reg,
2536 em_read_pci_cfg(struct em_hw *hw, uint32_t reg,
2539 *value = pci_read_config(((struct em_osdep *)hw->back)->dev,
2545 em_pci_set_mwi(struct em_hw *hw)
2547 pci_write_config(((struct em_osdep *)hw->back)->dev,
2549 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE), 2);
2554 em_pci_clear_mwi(struct em_hw *hw)
2556 pci_write_config(((struct em_osdep *)hw->back)->dev,
2558 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE), 2);
2563 em_io_read(struct em_hw *hw, uint32_t port)
2569 em_io_write(struct em_hw *hw, uint32_t port, uint32_t value)
2576 /**********************************************************************
2578 * Update the board statistics counters.
2580 **********************************************************************/
2582 em_update_stats_counters(struct adapter *adapter)
2586 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, CRCERRS);
2587 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, SYMERRS);
2588 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, MPC);
2589 adapter->stats.scc += E1000_READ_REG(&adapter->hw, SCC);
2590 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, ECOL);
2592 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, MCC);
2593 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, LATECOL);
2594 adapter->stats.colc += E1000_READ_REG(&adapter->hw, COLC);
2595 adapter->stats.dc += E1000_READ_REG(&adapter->hw, DC);
2596 adapter->stats.sec += E1000_READ_REG(&adapter->hw, SEC);
2597 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, RLEC);
2598 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, XONRXC);
2599 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, XONTXC);
2600 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, XOFFRXC);
2601 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, XOFFTXC);
2602 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, FCRUC);
2603 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, PRC64);
2604 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, PRC127);
2605 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, PRC255);
2606 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, PRC511);
2607 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, PRC1023);
2608 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, PRC1522);
2609 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, GPRC);
2610 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, BPRC);
2611 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, MPRC);
2612 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, GPTC);
2614 /* For the 64-bit byte counters the low dword must be read first. */
2615 /* Both registers clear on the read of the high dword */
2617 adapter->stats.gorcl += E1000_READ_REG(&adapter->hw, GORCL);
2618 adapter->stats.gorch += E1000_READ_REG(&adapter->hw, GORCH);
2619 adapter->stats.gotcl += E1000_READ_REG(&adapter->hw, GOTCL);
2620 adapter->stats.gotch += E1000_READ_REG(&adapter->hw, GOTCH);
2622 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, RNBC);
2623 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, RUC);
2624 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, RFC);
2625 adapter->stats.roc += E1000_READ_REG(&adapter->hw, ROC);
2626 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, RJC);
2628 adapter->stats.torl += E1000_READ_REG(&adapter->hw, TORL);
2629 adapter->stats.torh += E1000_READ_REG(&adapter->hw, TORH);
2630 adapter->stats.totl += E1000_READ_REG(&adapter->hw, TOTL);
2631 adapter->stats.toth += E1000_READ_REG(&adapter->hw, TOTH);
2633 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, TPR);
2634 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, TPT);
2635 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, PTC64);
2636 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, PTC127);
2637 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, PTC255);
2638 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, PTC511);
2639 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, PTC1023);
2640 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, PTC1522);
2641 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, MPTC);
2642 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, BPTC);
2644 if (adapter->hw.mac_type >= em_82543) {
2645 adapter->stats.algnerrc +=
2646 E1000_READ_REG(&adapter->hw, ALGNERRC);
2647 adapter->stats.rxerrc +=
2648 E1000_READ_REG(&adapter->hw, RXERRC);
2649 adapter->stats.tncrs +=
2650 E1000_READ_REG(&adapter->hw, TNCRS);
2651 adapter->stats.cexterr +=
2652 E1000_READ_REG(&adapter->hw, CEXTERR);
2653 adapter->stats.tsctc +=
2654 E1000_READ_REG(&adapter->hw, TSCTC);
2655 adapter->stats.tsctfc +=
2656 E1000_READ_REG(&adapter->hw, TSCTFC);
2658 ifp = &adapter->interface_data.ac_if;
2660 /* Fill out the OS statistics structure */
2661 ifp->if_ibytes = adapter->stats.gorcl;
2662 ifp->if_obytes = adapter->stats.gotcl;
2663 ifp->if_imcasts = adapter->stats.mprc;
2664 ifp->if_collisions = adapter->stats.colc;
2668 adapter->dropped_pkts +
2669 adapter->stats.rxerrc +
2670 adapter->stats.crcerrs +
2671 adapter->stats.algnerrc +
2672 adapter->stats.rlec + adapter->stats.rnbc +
2673 adapter->stats.mpc + adapter->stats.cexterr;
2676 ifp->if_oerrors = adapter->stats.ecol + adapter->stats.latecol;
2681 /**********************************************************************
2683 * This routine is called only when em_display_debug_stats is enabled.
2684 * This routine provides a way to take a look at important statistics
2685 * maintained by the driver and hardware.
2687 **********************************************************************/
2689 em_print_debug_info(struct adapter *adapter)
2691 int unit = adapter->unit;
2694 printf("em%d: Packets not Avail = %ld\n", unit,
2695 adapter->no_pkts_avail);
2696 printf("em%d: CleanTxInterrupts = %ld\n", unit,
2697 adapter->clean_tx_interrupts);
2699 printf("em%d: fifo workaround = %lld, fifo_reset = %lld\n", unit,
2700 (long long)adapter->tx_fifo_wrk,
2701 (long long)adapter->tx_fifo_reset);
2702 printf("em%d: hw tdh = %d, hw tdt = %d\n", unit,
2703 E1000_READ_REG(&adapter->hw, TDH),
2704 E1000_READ_REG(&adapter->hw, TDT));
2705 printf("em%d: Num Tx descriptors avail = %d\n", unit,
2706 adapter->num_tx_desc_avail);
2707 printf("em%d: Tx Descriptors not avail1 = %ld\n", unit,
2708 adapter->no_tx_desc_avail1);
2709 printf("em%d: Tx Descriptors not avail2 = %ld\n", unit,
2710 adapter->no_tx_desc_avail2);
2711 printf("em%d: Std mbuf failed = %ld\n", unit,
2712 adapter->mbuf_alloc_failed);
2713 printf("em%d: Std mbuf cluster failed = %ld\n", unit,
2714 adapter->mbuf_cluster_failed);
2715 printf("em%d: Driver dropped packets = %ld\n", unit,
2716 adapter->dropped_pkts);
2722 em_print_hw_stats(struct adapter *adapter)
2724 int unit = adapter->unit;
2726 printf("em%d: Excessive collisions = %lld\n", unit,
2727 (long long)adapter->stats.ecol);
2728 printf("em%d: Symbol errors = %lld\n", unit,
2729 (long long)adapter->stats.symerrs);
2730 printf("em%d: Sequence errors = %lld\n", unit,
2731 (long long)adapter->stats.sec);
2732 printf("em%d: Defer count = %lld\n", unit,
2733 (long long)adapter->stats.dc);
2735 printf("em%d: Missed Packets = %lld\n", unit,
2736 (long long)adapter->stats.mpc);
2737 printf("em%d: Receive No Buffers = %lld\n", unit,
2738 (long long)adapter->stats.rnbc);
2739 printf("em%d: Receive length errors = %lld\n", unit,
2740 (long long)adapter->stats.rlec);
2741 printf("em%d: Receive errors = %lld\n", unit,
2742 (long long)adapter->stats.rxerrc);
2743 printf("em%d: Crc errors = %lld\n", unit,
2744 (long long)adapter->stats.crcerrs);
2745 printf("em%d: Alignment errors = %lld\n", unit,
2746 (long long)adapter->stats.algnerrc);
2747 printf("em%d: Carrier extension errors = %lld\n", unit,
2748 (long long)adapter->stats.cexterr);
2750 printf("em%d: XON Rcvd = %lld\n", unit,
2751 (long long)adapter->stats.xonrxc);
2752 printf("em%d: XON Xmtd = %lld\n", unit,
2753 (long long)adapter->stats.xontxc);
2754 printf("em%d: XOFF Rcvd = %lld\n", unit,
2755 (long long)adapter->stats.xoffrxc);
2756 printf("em%d: XOFF Xmtd = %lld\n", unit,
2757 (long long)adapter->stats.xofftxc);
2759 printf("em%d: Good Packets Rcvd = %lld\n", unit,
2760 (long long)adapter->stats.gprc);
2761 printf("em%d: Good Packets Xmtd = %lld\n", unit,
2762 (long long)adapter->stats.gptc);
2768 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
2772 struct adapter *adapter;
2775 error = sysctl_handle_int(oidp, &result, 0, req);
2777 if (error || !req->newptr)
2781 adapter = (struct adapter *)arg1;
2782 em_print_debug_info(adapter);
2790 em_sysctl_stats(SYSCTL_HANDLER_ARGS)
2794 struct adapter *adapter;
2797 error = sysctl_handle_int(oidp, &result, 0, req);
2799 if (error || !req->newptr)
2803 adapter = (struct adapter *)arg1;
2804 em_print_hw_stats(adapter);