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 $*/
35 /*$DragonFly: src/sys/dev/netif/em/if_em.c,v 1.6 2004/02/13 02:44:47 joerg Exp $*/
39 /*********************************************************************
40 * Set this to one to display debug statistics
41 *********************************************************************/
42 int em_display_debug_stats = 0;
44 /*********************************************************************
45 * Linked list of board private structures for all NICs found
46 *********************************************************************/
48 struct adapter *em_adapter_list = NULL;
51 /*********************************************************************
53 *********************************************************************/
55 char em_driver_version[] = "1.6.6";
58 /*********************************************************************
61 * Used by probe to select devices to load on
62 * Last field stores an index into em_strings
63 * Last entry must be all 0s
65 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
66 *********************************************************************/
68 static em_vendor_info_t em_vendor_info_array[] =
70 /* Intel(R) PRO/1000 Network Connection */
71 { 0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0},
72 { 0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0},
73 { 0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0},
74 { 0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0},
75 { 0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0},
76 { 0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0},
77 { 0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0},
78 { 0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0},
79 { 0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0},
80 { 0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0},
81 { 0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0},
82 { 0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0},
83 { 0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0},
84 { 0x8086, 0x1014, PCI_ANY_ID, PCI_ANY_ID, 0},
85 { 0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0},
86 { 0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0},
87 { 0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0},
88 { 0x8086, 0x1018, PCI_ANY_ID, PCI_ANY_ID, 0},
89 { 0x8086, 0x1019, PCI_ANY_ID, PCI_ANY_ID, 0},
90 { 0x8086, 0x101A, PCI_ANY_ID, PCI_ANY_ID, 0},
91 { 0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0},
92 { 0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0},
93 /* required last entry */
97 /*********************************************************************
98 * Table of branding strings for all supported NICs.
99 *********************************************************************/
101 static char *em_strings[] = {
102 "Intel(R) PRO/1000 Network Connection"
105 /*********************************************************************
106 * Function prototypes
107 *********************************************************************/
108 static int em_probe(device_t);
109 static int em_attach(device_t);
110 static int em_detach(device_t);
111 static int em_shutdown(device_t);
112 static void em_intr(void *);
113 static void em_start(struct ifnet *);
114 static int em_ioctl(struct ifnet *, u_long, caddr_t);
115 static void em_watchdog(struct ifnet *);
116 static void em_init(void *);
117 static void em_stop(void *);
118 static void em_media_status(struct ifnet *, struct ifmediareq *);
119 static int em_media_change(struct ifnet *);
120 static void em_identify_hardware(struct adapter *);
121 static int em_allocate_pci_resources(struct adapter *);
122 static void em_free_pci_resources(struct adapter *);
123 static void em_local_timer(void *);
124 static int em_hardware_init(struct adapter *);
125 static void em_setup_interface(device_t, struct adapter *);
126 static int em_setup_transmit_structures(struct adapter *);
127 static void em_initialize_transmit_unit(struct adapter *);
128 static int em_setup_receive_structures(struct adapter *);
129 static void em_initialize_receive_unit(struct adapter *);
130 static void em_enable_intr(struct adapter *);
131 static void em_disable_intr(struct adapter *);
132 static void em_free_transmit_structures(struct adapter *);
133 static void em_free_receive_structures(struct adapter *);
134 static void em_update_stats_counters(struct adapter *);
135 static void em_clean_transmit_interrupts(struct adapter *);
136 static int em_allocate_receive_structures(struct adapter *);
137 static int em_allocate_transmit_structures(struct adapter *);
138 static void em_process_receive_interrupts(struct adapter *, int);
139 static void em_receive_checksum(struct adapter *,
142 static void em_transmit_checksum_setup(struct adapter *,
146 static void em_set_promisc(struct adapter *);
147 static void em_disable_promisc(struct adapter *);
148 static void em_set_multi(struct adapter *);
149 static void em_print_hw_stats(struct adapter *);
150 static void em_print_link_status(struct adapter *);
151 static int em_get_buf(int i, struct adapter *,
153 static void em_enable_vlans(struct adapter *);
154 static int em_encap(struct adapter *, struct mbuf *);
155 static void em_smartspeed(struct adapter *);
156 static int em_82547_fifo_workaround(struct adapter *, int);
157 static void em_82547_update_fifo_head(struct adapter *, int);
158 static int em_82547_tx_fifo_reset(struct adapter *);
159 static void em_82547_move_tail(void *arg);
160 static void em_print_debug_info(struct adapter *);
161 static int em_is_valid_ether_addr(u_int8_t *);
162 static int em_sysctl_stats(SYSCTL_HANDLER_ARGS);
163 static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
165 /*********************************************************************
166 * FreeBSD Device Interface Entry Points
167 *********************************************************************/
169 static device_method_t em_methods[] = {
170 /* Device interface */
171 DEVMETHOD(device_probe, em_probe),
172 DEVMETHOD(device_attach, em_attach),
173 DEVMETHOD(device_detach, em_detach),
174 DEVMETHOD(device_shutdown, em_shutdown),
178 static driver_t em_driver = {
179 "em", em_methods, sizeof(struct adapter ),
182 static devclass_t em_devclass;
184 DECLARE_DUMMY_MODULE(if_em);
185 DRIVER_MODULE(if_em, pci, em_driver, em_devclass, 0, 0);
187 /*********************************************************************
188 * Device identification routine
190 * em_probe determines if the driver should be loaded on
191 * adapter based on PCI vendor/device id of the adapter.
193 * return 0 on success, positive on failure
194 *********************************************************************/
197 em_probe(device_t dev)
199 em_vendor_info_t *ent;
201 u_int16_t pci_vendor_id = 0;
202 u_int16_t pci_device_id = 0;
203 u_int16_t pci_subvendor_id = 0;
204 u_int16_t pci_subdevice_id = 0;
205 char adapter_name[60];
207 INIT_DEBUGOUT("em_probe: begin");
209 pci_vendor_id = pci_get_vendor(dev);
210 if (pci_vendor_id != EM_VENDOR_ID)
213 pci_device_id = pci_get_device(dev);
214 pci_subvendor_id = pci_get_subvendor(dev);
215 pci_subdevice_id = pci_get_subdevice(dev);
217 ent = em_vendor_info_array;
218 while (ent->vendor_id != 0) {
219 if ((pci_vendor_id == ent->vendor_id) &&
220 (pci_device_id == ent->device_id) &&
222 ((pci_subvendor_id == ent->subvendor_id) ||
223 (ent->subvendor_id == PCI_ANY_ID)) &&
225 ((pci_subdevice_id == ent->subdevice_id) ||
226 (ent->subdevice_id == PCI_ANY_ID))) {
227 sprintf(adapter_name, "%s, Version - %s",
228 em_strings[ent->index],
230 device_set_desc_copy(dev, adapter_name);
239 /*********************************************************************
240 * Device initialization routine
242 * The attach entry point is called when the driver is being loaded.
243 * This routine identifies the type of hardware, allocates all resources
244 * and initializes the hardware.
246 * return 0 on success, positive on failure
247 *********************************************************************/
250 em_attach(device_t dev)
252 struct adapter * adapter;
257 INIT_DEBUGOUT("em_attach: begin");
260 /* Allocate, clear, and link in our adapter structure */
261 if (!(adapter = device_get_softc(dev))) {
262 printf("em: adapter structure allocation failed\n");
266 bzero(adapter, sizeof(struct adapter ));
268 adapter->osdep.dev = dev;
269 adapter->unit = device_get_unit(dev);
271 if (em_adapter_list != NULL)
272 em_adapter_list->prev = adapter;
273 adapter->next = em_adapter_list;
274 em_adapter_list = adapter;
277 sysctl_ctx_init(&adapter->sysctl_ctx);
278 adapter->sysctl_tree = SYSCTL_ADD_NODE(&adapter->sysctl_ctx,
279 SYSCTL_STATIC_CHILDREN(_hw),
281 device_get_nameunit(dev),
284 if (adapter->sysctl_tree == NULL) {
289 SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
290 SYSCTL_CHILDREN(adapter->sysctl_tree),
291 OID_AUTO, "debug_info", CTLTYPE_INT|CTLFLAG_RW,
293 em_sysctl_debug_info, "I", "Debug Information");
295 SYSCTL_ADD_PROC(&adapter->sysctl_ctx,
296 SYSCTL_CHILDREN(adapter->sysctl_tree),
297 OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW,
299 em_sysctl_stats, "I", "Statistics");
301 callout_handle_init(&adapter->timer_handle);
302 callout_handle_init(&adapter->tx_fifo_timer_handle);
304 /* Determine hardware revision */
305 em_identify_hardware(adapter);
307 /* Parameters (to be read from user) */
308 adapter->num_tx_desc = EM_MAX_TXD;
309 adapter->num_rx_desc = EM_MAX_RXD;
310 adapter->tx_int_delay = EM_TIDV;
311 adapter->tx_abs_int_delay = EM_TADV;
312 adapter->rx_int_delay = EM_RDTR;
313 adapter->rx_abs_int_delay = EM_RADV;
314 adapter->hw.autoneg = DO_AUTO_NEG;
315 adapter->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT;
316 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
317 adapter->hw.tbi_compatibility_en = TRUE;
318 adapter->rx_buffer_len = EM_RXBUFFER_2048;
321 * These parameters control the automatic generation(Tx) and
322 * response(Rx) to Ethernet PAUSE frames.
324 adapter->hw.fc_high_water = FC_DEFAULT_HI_THRESH;
325 adapter->hw.fc_low_water = FC_DEFAULT_LO_THRESH;
326 adapter->hw.fc_pause_time = FC_DEFAULT_TX_TIMER;
327 adapter->hw.fc_send_xon = TRUE;
328 adapter->hw.fc = em_fc_full;
330 adapter->hw.phy_init_script = 1;
333 * Set the max frame size assuming standard ethernet
336 adapter->hw.max_frame_size =
337 ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN;
339 adapter->hw.min_frame_size =
340 MINIMUM_ETHERNET_PACKET_SIZE + ETHER_CRC_LEN;
343 * This controls when hardware reports transmit completion
346 adapter->hw.report_tx_early = 1;
349 if (em_allocate_pci_resources(adapter)) {
350 printf("em%d: Allocation of PCI resources failed\n",
356 em_init_eeprom_params(&adapter->hw);
358 tsize = EM_ROUNDUP(adapter->num_tx_desc *
359 sizeof(struct em_tx_desc), 4096);
361 /* Allocate Transmit Descriptor ring */
362 if (!(adapter->tx_desc_base = (struct em_tx_desc *)
363 contigmalloc(tsize, M_DEVBUF, M_NOWAIT, 0, ~0,
365 printf("em%d: Unable to allocate TxDescriptor memory\n",
371 rsize = EM_ROUNDUP(adapter->num_rx_desc *
372 sizeof(struct em_rx_desc), 4096);
374 /* Allocate Receive Descriptor ring */
375 if (!(adapter->rx_desc_base = (struct em_rx_desc *)
376 contigmalloc(rsize, M_DEVBUF, M_NOWAIT, 0, ~0,
378 printf("em%d: Unable to allocate rx_desc memory\n",
384 /* Initialize the hardware */
385 if (em_hardware_init(adapter)) {
386 printf("em%d: Unable to initialize the hardware\n",
392 /* Copy the permanent MAC address out of the EEPROM */
393 if (em_read_mac_addr(&adapter->hw) < 0) {
394 printf("em%d: EEPROM read error while reading mac address\n",
400 if (!em_is_valid_ether_addr(adapter->hw.mac_addr)) {
401 printf("em%d: Invalid mac address\n", adapter->unit);
407 bcopy(adapter->hw.mac_addr, adapter->interface_data.ac_enaddr,
410 /* Setup OS specific network interface */
411 em_setup_interface(dev, adapter);
413 /* Initialize statistics */
414 em_clear_hw_cntrs(&adapter->hw);
415 em_update_stats_counters(adapter);
416 adapter->hw.get_link_status = 1;
417 em_check_for_link(&adapter->hw);
419 /* Print the link status */
420 if (adapter->link_active == 1) {
421 em_get_speed_and_duplex(&adapter->hw, &adapter->link_speed,
422 &adapter->link_duplex);
423 printf("em%d: Speed:%d Mbps Duplex:%s\n",
426 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
428 printf("em%d: Speed:N/A Duplex:N/A\n", adapter->unit);
430 INIT_DEBUGOUT("em_attach: end");
437 contigfree(adapter->rx_desc_base, rsize, M_DEVBUF);
439 contigfree(adapter->tx_desc_base, tsize, M_DEVBUF);
442 em_free_pci_resources(adapter);
443 sysctl_ctx_free(&adapter->sysctl_ctx);
449 /*********************************************************************
450 * Device removal routine
452 * The detach entry point is called when the driver is being removed.
453 * This routine stops the adapter and deallocates all the resources
454 * that were allocated for driver operation.
456 * return 0 on success, positive on failure
457 *********************************************************************/
460 em_detach(device_t dev)
462 struct adapter * adapter = device_get_softc(dev);
463 struct ifnet *ifp = &adapter->interface_data.ac_if;
467 INIT_DEBUGOUT("em_detach: begin");
471 em_phy_hw_reset(&adapter->hw);
472 #if defined(__DragonFly__) || __FreeBSD_version < 500000
473 ether_ifdetach(&adapter->interface_data.ac_if, ETHER_BPF_SUPPORTED);
475 ether_ifdetach(&adapter->interface_data.ac_if);
477 em_free_pci_resources(adapter);
479 size = EM_ROUNDUP(adapter->num_tx_desc *
480 sizeof(struct em_tx_desc), 4096);
482 /* Free Transmit Descriptor ring */
483 if (adapter->tx_desc_base) {
484 contigfree(adapter->tx_desc_base, size, M_DEVBUF);
485 adapter->tx_desc_base = NULL;
488 size = EM_ROUNDUP(adapter->num_rx_desc *
489 sizeof(struct em_rx_desc), 4096);
491 /* Free Receive Descriptor ring */
492 if (adapter->rx_desc_base) {
493 contigfree(adapter->rx_desc_base, size, M_DEVBUF);
494 adapter->rx_desc_base = NULL;
497 /* Remove from the adapter list */
498 if (em_adapter_list == adapter)
499 em_adapter_list = adapter->next;
500 if (adapter->next != NULL)
501 adapter->next->prev = adapter->prev;
502 if (adapter->prev != NULL)
503 adapter->prev->next = adapter->next;
505 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
508 adapter->sysctl_tree = NULL;
509 sysctl_ctx_free(&adapter->sysctl_ctx);
515 /*********************************************************************
517 * Shutdown entry point
519 **********************************************************************/
522 em_shutdown(device_t dev)
524 struct adapter *adapter = device_get_softc(dev);
530 /*********************************************************************
531 * Transmit entry point
533 * em_start is called by the stack to initiate a transmit.
534 * The driver will remain in this routine as long as there are
535 * packets to transmit and transmit resources are available.
536 * In case resources are not available stack is notified and
537 * the packet is requeued.
538 **********************************************************************/
541 em_start(struct ifnet *ifp)
545 struct adapter *adapter = ifp->if_softc;
547 if (!adapter->link_active)
551 while (ifp->if_snd.ifq_head != NULL) {
553 IF_DEQUEUE(&ifp->if_snd, m_head);
555 if (m_head == NULL) break;
557 if (em_encap(adapter, m_head)) {
558 ifp->if_flags |= IFF_OACTIVE;
559 IF_PREPEND(&ifp->if_snd, m_head);
563 /* Send a copy of the frame to the BPF listener */
564 #if defined(__DragonFly__) || __FreeBSD_version < 500000
566 bpf_mtap(ifp, m_head);
568 BPF_MTAP(ifp, m_head);
571 /* Set timeout in case hardware has problems transmitting */
572 ifp->if_timer = EM_TX_TIMEOUT;
579 /*********************************************************************
582 * em_ioctl is called when the user wants to configure the
585 * return 0 on success, positive on failure
586 **********************************************************************/
589 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
591 int s, mask, error = 0;
592 struct ifreq *ifr = (struct ifreq *) data;
593 struct adapter * adapter = ifp->if_softc;
599 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFADDR (Get/Set Interface Addr)");
600 ether_ioctl(ifp, command, data);
603 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
604 if (ifr->ifr_mtu > MAX_JUMBO_FRAME_SIZE - ETHER_HDR_LEN) {
607 ifp->if_mtu = ifr->ifr_mtu;
608 adapter->hw.max_frame_size =
609 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
614 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
615 if (ifp->if_flags & IFF_UP) {
616 if (!(ifp->if_flags & IFF_RUNNING))
619 em_disable_promisc(adapter);
620 em_set_promisc(adapter);
622 if (ifp->if_flags & IFF_RUNNING) {
629 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
630 if (ifp->if_flags & IFF_RUNNING) {
631 em_disable_intr(adapter);
632 em_set_multi(adapter);
633 if (adapter->hw.mac_type == em_82542_rev2_0) {
634 em_initialize_receive_unit(adapter);
636 #ifdef DEVICE_POLLING
637 if (!(ifp->if_ipending & IFF_POLLING))
639 em_enable_intr(adapter);
644 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFMEDIA (Get/Set Interface Media)");
645 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
648 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
649 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
650 if (mask & IFCAP_HWCSUM) {
651 if (IFCAP_HWCSUM & ifp->if_capenable)
652 ifp->if_capenable &= ~IFCAP_HWCSUM;
654 ifp->if_capenable |= IFCAP_HWCSUM;
655 if (ifp->if_flags & IFF_RUNNING)
660 IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%d)\n", (int)command);
668 /*********************************************************************
669 * Watchdog entry point
671 * This routine is called whenever hardware quits transmitting.
673 **********************************************************************/
676 em_watchdog(struct ifnet *ifp)
678 struct adapter * adapter;
679 adapter = ifp->if_softc;
681 /* If we are in this routine because of pause frames, then
682 * don't reset the hardware.
684 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) {
685 ifp->if_timer = EM_TX_TIMEOUT;
689 printf("em%d: watchdog timeout -- resetting\n", adapter->unit);
691 ifp->if_flags &= ~IFF_RUNNING;
700 /*********************************************************************
703 * This routine is used in two ways. It is used by the stack as
704 * init entry point in network interface structure. It is also used
705 * by the driver as a hw/sw initialization routine to get to a
708 * return 0 on success, positive on failure
709 **********************************************************************/
716 struct adapter * adapter = arg;
718 INIT_DEBUGOUT("em_init: begin");
724 /* Initialize the hardware */
725 if (em_hardware_init(adapter)) {
726 printf("em%d: Unable to initialize the hardware\n",
732 em_enable_vlans(adapter);
734 /* Prepare transmit descriptors and buffers */
735 if (em_setup_transmit_structures(adapter)) {
736 printf("em%d: Could not setup transmit structures\n",
742 em_initialize_transmit_unit(adapter);
744 /* Setup Multicast table */
745 em_set_multi(adapter);
747 /* Prepare receive descriptors and buffers */
748 if (em_setup_receive_structures(adapter)) {
749 printf("em%d: Could not setup receive structures\n",
755 em_initialize_receive_unit(adapter);
757 ifp = &adapter->interface_data.ac_if;
758 ifp->if_flags |= IFF_RUNNING;
759 ifp->if_flags &= ~IFF_OACTIVE;
761 if (adapter->hw.mac_type >= em_82543) {
762 if (ifp->if_capenable & IFCAP_TXCSUM)
763 ifp->if_hwassist = EM_CHECKSUM_FEATURES;
765 ifp->if_hwassist = 0;
768 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
769 em_clear_hw_cntrs(&adapter->hw);
770 #ifdef DEVICE_POLLING
772 * Only enable interrupts if we are not polling, make sure
773 * they are off otherwise.
775 if (ifp->if_ipending & IFF_POLLING)
776 em_disable_intr(adapter);
778 #endif /* DEVICE_POLLING */
779 em_enable_intr(adapter);
786 #ifdef DEVICE_POLLING
787 static poll_handler_t em_poll;
790 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
792 struct adapter *adapter = ifp->if_softc;
795 if (cmd == POLL_DEREGISTER) { /* final call, enable interrupts */
796 em_enable_intr(adapter);
799 if (cmd == POLL_AND_CHECK_STATUS) {
800 reg_icr = E1000_READ_REG(&adapter->hw, ICR);
801 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
802 untimeout(em_local_timer, adapter, adapter->timer_handle);
803 adapter->hw.get_link_status = 1;
804 em_check_for_link(&adapter->hw);
805 em_print_link_status(adapter);
806 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
809 if (ifp->if_flags & IFF_RUNNING) {
810 em_process_receive_interrupts(adapter, count);
811 em_clean_transmit_interrupts(adapter);
814 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
817 #endif /* DEVICE_POLLING */
819 /*********************************************************************
821 * Interrupt Service routine
823 **********************************************************************/
827 u_int32_t loop_cnt = EM_MAX_INTR;
830 struct adapter *adapter = arg;
832 ifp = &adapter->interface_data.ac_if;
834 #ifdef DEVICE_POLLING
835 if (ifp->if_ipending & IFF_POLLING)
838 if (ether_poll_register(em_poll, ifp)) {
839 em_disable_intr(adapter);
843 #endif /* DEVICE_POLLING */
845 reg_icr = E1000_READ_REG(&adapter->hw, ICR);
850 /* Link status change */
851 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
852 untimeout(em_local_timer, adapter,
853 adapter->timer_handle);
854 adapter->hw.get_link_status = 1;
855 em_check_for_link(&adapter->hw);
856 em_print_link_status(adapter);
857 adapter->timer_handle =
858 timeout(em_local_timer, adapter, 2*hz);
861 while (loop_cnt > 0) {
862 if (ifp->if_flags & IFF_RUNNING) {
863 em_process_receive_interrupts(adapter, -1);
864 em_clean_transmit_interrupts(adapter);
869 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
877 /*********************************************************************
879 * Media Ioctl callback
881 * This routine is called whenever the user queries the status of
882 * the interface using ifconfig.
884 **********************************************************************/
886 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
888 struct adapter * adapter = ifp->if_softc;
890 INIT_DEBUGOUT("em_media_status: begin");
892 em_check_for_link(&adapter->hw);
893 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
894 if (adapter->link_active == 0) {
895 em_get_speed_and_duplex(&adapter->hw,
896 &adapter->link_speed,
897 &adapter->link_duplex);
898 adapter->link_active = 1;
901 if (adapter->link_active == 1) {
902 adapter->link_speed = 0;
903 adapter->link_duplex = 0;
904 adapter->link_active = 0;
908 ifmr->ifm_status = IFM_AVALID;
909 ifmr->ifm_active = IFM_ETHER;
911 if (!adapter->link_active)
914 ifmr->ifm_status |= IFM_ACTIVE;
916 if (adapter->hw.media_type == em_media_type_fiber) {
917 ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
919 switch (adapter->link_speed) {
921 ifmr->ifm_active |= IFM_10_T;
924 ifmr->ifm_active |= IFM_100_TX;
927 #if defined(__DragonFly__) || __FreeBSD_version < 500000
928 ifmr->ifm_active |= IFM_1000_TX;
930 ifmr->ifm_active |= IFM_1000_T;
934 if (adapter->link_duplex == FULL_DUPLEX)
935 ifmr->ifm_active |= IFM_FDX;
937 ifmr->ifm_active |= IFM_HDX;
942 /*********************************************************************
944 * Media Ioctl callback
946 * This routine is called when the user changes speed/duplex using
947 * media/mediopt option with ifconfig.
949 **********************************************************************/
951 em_media_change(struct ifnet *ifp)
953 struct adapter * adapter = ifp->if_softc;
954 struct ifmedia *ifm = &adapter->media;
956 INIT_DEBUGOUT("em_media_change: begin");
958 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
961 switch (IFM_SUBTYPE(ifm->ifm_media)) {
963 adapter->hw.autoneg = DO_AUTO_NEG;
964 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
967 #if defined(__DragonFly__) || __FreeBSD_version < 500000
972 adapter->hw.autoneg = DO_AUTO_NEG;
973 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
976 adapter->hw.autoneg = FALSE;
977 adapter->hw.autoneg_advertised = 0;
978 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
979 adapter->hw.forced_speed_duplex = em_100_full;
981 adapter->hw.forced_speed_duplex = em_100_half;
984 adapter->hw.autoneg = FALSE;
985 adapter->hw.autoneg_advertised = 0;
986 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
987 adapter->hw.forced_speed_duplex = em_10_full;
989 adapter->hw.forced_speed_duplex = em_10_half;
992 printf("em%d: Unsupported media type\n", adapter->unit);
1000 #define EM_FIFO_HDR 0x10
1001 #define EM_82547_PKT_THRESH 0x3e0
1002 #define EM_82547_TX_FIFO_SIZE 0x2800
1003 #define EM_82547_TX_FIFO_BEGIN 0xf00
1004 /*********************************************************************
1006 * This routine maps the mbufs to tx descriptors.
1008 * return 0 on success, positive on failure
1009 **********************************************************************/
1012 em_encap(struct adapter *adapter, struct mbuf *m_head)
1014 vm_offset_t virtual_addr;
1015 u_int32_t txd_upper;
1016 u_int32_t txd_lower;
1017 int txd_used, i, txd_saved;
1020 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1021 struct ifvlan *ifv = NULL;
1025 struct em_buffer *tx_buffer = NULL;
1026 struct em_tx_desc *current_tx_desc = NULL;
1027 struct ifnet *ifp = &adapter->interface_data.ac_if;
1030 * Force a cleanup if number of TX descriptors
1031 * available hits the threshold
1033 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD)
1034 em_clean_transmit_interrupts(adapter);
1036 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
1037 adapter->no_tx_desc_avail1++;
1041 if (ifp->if_hwassist > 0) {
1042 em_transmit_checksum_setup(adapter, m_head,
1043 &txd_upper, &txd_lower);
1046 txd_upper = txd_lower = 0;
1049 /* Find out if we are in vlan mode */
1050 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1051 if ((m_head->m_flags & (M_PROTO1|M_PKTHDR)) == (M_PROTO1|M_PKTHDR) &&
1052 m_head->m_pkthdr.rcvif != NULL &&
1053 m_head->m_pkthdr.rcvif->if_type == IFT_L2VLAN)
1054 ifv = m_head->m_pkthdr.rcvif->if_softc;
1056 mtag = VLAN_OUTPUT_TAG(ifp, m_head);
1059 i = adapter->next_avail_tx_desc;
1062 for (mp = m_head; mp != NULL; mp = mp->m_next) {
1066 if (txd_used == adapter->num_tx_desc_avail) {
1067 adapter->next_avail_tx_desc = txd_saved;
1068 adapter->no_tx_desc_avail2++;
1072 tx_buffer = &adapter->tx_buffer_area[i];
1073 current_tx_desc = &adapter->tx_desc_base[i];
1074 virtual_addr = mtod(mp, vm_offset_t);
1075 current_tx_desc->buffer_addr = vtophys(virtual_addr);
1077 current_tx_desc->lower.data = (adapter->txd_cmd | txd_lower | mp->m_len);
1078 current_tx_desc->upper.data = (txd_upper);
1080 if (++i == adapter->num_tx_desc)
1083 tx_buffer->m_head = NULL;
1088 adapter->num_tx_desc_avail -= txd_used;
1089 adapter->next_avail_tx_desc = i;
1091 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1093 /* Set the vlan id */
1094 current_tx_desc->upper.fields.special = ifv->ifv_tag;
1097 /* Set the vlan id */
1098 current_tx_desc->upper.fields.special = VLAN_TAG_VALUE(mtag);
1100 /* Tell hardware to add tag */
1101 current_tx_desc->lower.data |= E1000_TXD_CMD_VLE;
1104 tx_buffer->m_head = m_head;
1107 * Last Descriptor of Packet needs End Of Packet (EOP)
1109 current_tx_desc->lower.data |= (E1000_TXD_CMD_EOP);
1112 * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000
1113 * that this frame is available to transmit.
1115 if (adapter->hw.mac_type == em_82547 &&
1116 adapter->link_duplex == HALF_DUPLEX) {
1117 em_82547_move_tail(adapter);
1120 E1000_WRITE_REG(&adapter->hw, TDT, i);
1121 if (adapter->hw.mac_type == em_82547) {
1122 em_82547_update_fifo_head(adapter, m_head->m_pkthdr.len);
1130 /*********************************************************************
1132 * 82547 workaround to avoid controller hang in half-duplex environment.
1133 * The workaround is to avoid queuing a large packet that would span
1134 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
1135 * in this case. We do that only when FIFO is queiced.
1137 **********************************************************************/
1139 em_82547_move_tail(void *arg)
1142 struct adapter *adapter = arg;
1145 struct em_tx_desc *tx_desc;
1146 uint16_t length = 0;
1150 hw_tdt = E1000_READ_REG(&adapter->hw, TDT);
1151 sw_tdt = adapter->next_avail_tx_desc;
1153 while (hw_tdt != sw_tdt) {
1154 tx_desc = &adapter->tx_desc_base[hw_tdt];
1155 length += tx_desc->lower.flags.length;
1156 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
1157 if(++hw_tdt == adapter->num_tx_desc)
1161 if (em_82547_fifo_workaround(adapter, length)) {
1162 adapter->tx_fifo_wrk++;
1163 adapter->tx_fifo_timer_handle =
1164 timeout(em_82547_move_tail,
1170 E1000_WRITE_REG(&adapter->hw, TDT, hw_tdt);
1171 em_82547_update_fifo_head(adapter, length);
1181 em_82547_fifo_workaround(struct adapter *adapter, int len)
1183 int fifo_space, fifo_pkt_len;
1185 fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1187 if (adapter->link_duplex == HALF_DUPLEX) {
1188 fifo_space = EM_82547_TX_FIFO_SIZE - adapter->tx_fifo_head;
1190 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
1191 if (em_82547_tx_fifo_reset(adapter)) {
1204 em_82547_update_fifo_head(struct adapter *adapter, int len)
1206 int fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1208 /* tx_fifo_head is always 16 byte aligned */
1209 adapter->tx_fifo_head += fifo_pkt_len;
1210 if (adapter->tx_fifo_head >= EM_82547_TX_FIFO_SIZE) {
1211 adapter->tx_fifo_head -= EM_82547_TX_FIFO_SIZE;
1219 em_82547_tx_fifo_reset(struct adapter *adapter)
1223 if ( (E1000_READ_REG(&adapter->hw, TDT) ==
1224 E1000_READ_REG(&adapter->hw, TDH)) &&
1225 (E1000_READ_REG(&adapter->hw, TDFT) ==
1226 E1000_READ_REG(&adapter->hw, TDFH)) &&
1227 (E1000_READ_REG(&adapter->hw, TDFTS) ==
1228 E1000_READ_REG(&adapter->hw, TDFHS)) &&
1229 (E1000_READ_REG(&adapter->hw, TDFPC) == 0)) {
1231 /* Disable TX unit */
1232 tctl = E1000_READ_REG(&adapter->hw, TCTL);
1233 E1000_WRITE_REG(&adapter->hw, TCTL, tctl & ~E1000_TCTL_EN);
1235 /* Reset FIFO pointers */
1236 E1000_WRITE_REG(&adapter->hw, TDFT, EM_82547_TX_FIFO_BEGIN);
1237 E1000_WRITE_REG(&adapter->hw, TDFH, EM_82547_TX_FIFO_BEGIN);
1238 E1000_WRITE_REG(&adapter->hw, TDFTS, EM_82547_TX_FIFO_BEGIN);
1239 E1000_WRITE_REG(&adapter->hw, TDFHS, EM_82547_TX_FIFO_BEGIN);
1241 /* Re-enable TX unit */
1242 E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1243 E1000_WRITE_FLUSH(&adapter->hw);
1245 adapter->tx_fifo_head = 0;
1246 adapter->tx_fifo_reset++;
1256 em_set_promisc(struct adapter * adapter)
1260 struct ifnet *ifp = &adapter->interface_data.ac_if;
1262 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1264 if (ifp->if_flags & IFF_PROMISC) {
1265 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1266 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1267 } else if (ifp->if_flags & IFF_ALLMULTI) {
1268 reg_rctl |= E1000_RCTL_MPE;
1269 reg_rctl &= ~E1000_RCTL_UPE;
1270 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1277 em_disable_promisc(struct adapter * adapter)
1281 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1283 reg_rctl &= (~E1000_RCTL_UPE);
1284 reg_rctl &= (~E1000_RCTL_MPE);
1285 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1291 /*********************************************************************
1294 * This routine is called whenever multicast address list is updated.
1296 **********************************************************************/
1299 em_set_multi(struct adapter * adapter)
1301 u_int32_t reg_rctl = 0;
1302 u_int8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
1303 struct ifmultiaddr *ifma;
1305 struct ifnet *ifp = &adapter->interface_data.ac_if;
1307 IOCTL_DEBUGOUT("em_set_multi: begin");
1309 if (adapter->hw.mac_type == em_82542_rev2_0) {
1310 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1311 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1312 em_pci_clear_mwi(&adapter->hw);
1314 reg_rctl |= E1000_RCTL_RST;
1315 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1319 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1320 LIST_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1322 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1324 if (ifma->ifma_addr->sa_family != AF_LINK)
1327 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) break;
1329 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
1330 &mta[mcnt*ETH_LENGTH_OF_ADDRESS], ETH_LENGTH_OF_ADDRESS);
1334 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
1335 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1336 reg_rctl |= E1000_RCTL_MPE;
1337 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1339 em_mc_addr_list_update(&adapter->hw, mta, mcnt, 0);
1341 if (adapter->hw.mac_type == em_82542_rev2_0) {
1342 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1343 reg_rctl &= ~E1000_RCTL_RST;
1344 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1346 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1347 em_pci_set_mwi(&adapter->hw);
1355 /*********************************************************************
1358 * This routine checks for link status and updates statistics.
1360 **********************************************************************/
1363 em_local_timer(void *arg)
1367 struct adapter * adapter = arg;
1368 ifp = &adapter->interface_data.ac_if;
1372 em_check_for_link(&adapter->hw);
1373 em_print_link_status(adapter);
1374 em_update_stats_counters(adapter);
1375 if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
1376 em_print_hw_stats(adapter);
1378 em_smartspeed(adapter);
1380 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
1387 em_print_link_status(struct adapter * adapter)
1389 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1390 if (adapter->link_active == 0) {
1391 em_get_speed_and_duplex(&adapter->hw,
1392 &adapter->link_speed,
1393 &adapter->link_duplex);
1394 printf("em%d: Link is up %d Mbps %s\n",
1396 adapter->link_speed,
1397 ((adapter->link_duplex == FULL_DUPLEX) ?
1398 "Full Duplex" : "Half Duplex"));
1399 adapter->link_active = 1;
1400 adapter->smartspeed = 0;
1403 if (adapter->link_active == 1) {
1404 adapter->link_speed = 0;
1405 adapter->link_duplex = 0;
1406 printf("em%d: Link is Down\n", adapter->unit);
1407 adapter->link_active = 0;
1414 /*********************************************************************
1416 * This routine disables all traffic on the adapter by issuing a
1417 * global reset on the MAC and deallocates TX/RX buffers.
1419 **********************************************************************/
1425 struct adapter * adapter = arg;
1426 ifp = &adapter->interface_data.ac_if;
1428 INIT_DEBUGOUT("em_stop: begin\n");
1429 em_disable_intr(adapter);
1430 em_reset_hw(&adapter->hw);
1431 untimeout(em_local_timer, adapter, adapter->timer_handle);
1432 untimeout(em_82547_move_tail, adapter,
1433 adapter->tx_fifo_timer_handle);
1434 em_free_transmit_structures(adapter);
1435 em_free_receive_structures(adapter);
1438 /* Tell the stack that the interface is no longer active */
1439 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
1445 /*********************************************************************
1447 * Determine hardware revision.
1449 **********************************************************************/
1451 em_identify_hardware(struct adapter * adapter)
1453 device_t dev = adapter->dev;
1455 /* Make sure our PCI config space has the necessary stuff set */
1456 adapter->hw.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
1457 if (!((adapter->hw.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
1458 (adapter->hw.pci_cmd_word & PCIM_CMD_MEMEN))) {
1459 printf("em%d: Memory Access and/or Bus Master bits were not set!\n",
1461 adapter->hw.pci_cmd_word |=
1462 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
1463 pci_write_config(dev, PCIR_COMMAND, adapter->hw.pci_cmd_word, 2);
1466 /* Save off the information about this board */
1467 adapter->hw.vendor_id = pci_get_vendor(dev);
1468 adapter->hw.device_id = pci_get_device(dev);
1469 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
1470 adapter->hw.subsystem_vendor_id = pci_read_config(dev, PCIR_SUBVEND_0, 2);
1471 adapter->hw.subsystem_id = pci_read_config(dev, PCIR_SUBDEV_0, 2);
1473 /* Identify the MAC */
1474 if (em_set_mac_type(&adapter->hw))
1475 printf("em%d: Unknown MAC Type\n", adapter->unit);
1481 em_allocate_pci_resources(struct adapter * adapter)
1484 device_t dev = adapter->dev;
1487 adapter->res_memory = bus_alloc_resource(dev, SYS_RES_MEMORY,
1490 if (!(adapter->res_memory)) {
1491 printf("em%d: Unable to allocate bus resource: memory\n",
1495 adapter->osdep.mem_bus_space_tag =
1496 rman_get_bustag(adapter->res_memory);
1497 adapter->osdep.mem_bus_space_handle =
1498 rman_get_bushandle(adapter->res_memory);
1499 adapter->hw.hw_addr = (uint8_t *)&adapter->osdep.mem_bus_space_handle;
1502 if (adapter->hw.mac_type > em_82543) {
1503 /* Figure our where our IO BAR is ? */
1505 for (i = 0; i < 5; i++) {
1506 val = pci_read_config(dev, rid, 4);
1507 if (val & 0x00000001) {
1508 adapter->io_rid = rid;
1514 adapter->res_ioport = bus_alloc_resource(dev, SYS_RES_IOPORT,
1515 &adapter->io_rid, 0, ~0, 1,
1517 if (!(adapter->res_ioport)) {
1518 printf("em%d: Unable to allocate bus resource: ioport\n",
1523 adapter->hw.io_base =
1524 rman_get_start(adapter->res_ioport);
1528 adapter->res_interrupt = bus_alloc_resource(dev, SYS_RES_IRQ,
1530 RF_SHAREABLE | RF_ACTIVE);
1531 if (!(adapter->res_interrupt)) {
1532 printf("em%d: Unable to allocate bus resource: interrupt\n",
1536 if (bus_setup_intr(dev, adapter->res_interrupt, INTR_TYPE_NET,
1537 (void (*)(void *)) em_intr, adapter,
1538 &adapter->int_handler_tag)) {
1539 printf("em%d: Error registering interrupt handler!\n",
1544 adapter->hw.back = &adapter->osdep;
1550 em_free_pci_resources(struct adapter * adapter)
1552 device_t dev = adapter->dev;
1554 if (adapter->res_interrupt != NULL) {
1555 bus_teardown_intr(dev, adapter->res_interrupt,
1556 adapter->int_handler_tag);
1557 bus_release_resource(dev, SYS_RES_IRQ, 0,
1558 adapter->res_interrupt);
1560 if (adapter->res_memory != NULL) {
1561 bus_release_resource(dev, SYS_RES_MEMORY, EM_MMBA,
1562 adapter->res_memory);
1565 if (adapter->res_ioport != NULL) {
1566 bus_release_resource(dev, SYS_RES_IOPORT, adapter->io_rid,
1567 adapter->res_ioport);
1572 /*********************************************************************
1574 * Initialize the hardware to a configuration as specified by the
1575 * adapter structure. The controller is reset, the EEPROM is
1576 * verified, the MAC address is set, then the shared initialization
1577 * routines are called.
1579 **********************************************************************/
1581 em_hardware_init(struct adapter * adapter)
1583 /* Issue a global reset */
1584 em_reset_hw(&adapter->hw);
1586 /* When hardware is reset, fifo_head is also reset */
1587 adapter->tx_fifo_head = 0;
1589 /* Make sure we have a good EEPROM before we read from it */
1590 if (em_validate_eeprom_checksum(&adapter->hw) < 0) {
1591 printf("em%d: The EEPROM Checksum Is Not Valid\n",
1596 if (em_read_part_num(&adapter->hw, &(adapter->part_num)) < 0) {
1597 printf("em%d: EEPROM read error while reading part number\n",
1602 if (em_init_hw(&adapter->hw) < 0) {
1603 printf("em%d: Hardware Initialization Failed",
1608 em_check_for_link(&adapter->hw);
1609 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)
1610 adapter->link_active = 1;
1612 adapter->link_active = 0;
1614 if (adapter->link_active) {
1615 em_get_speed_and_duplex(&adapter->hw,
1616 &adapter->link_speed,
1617 &adapter->link_duplex);
1619 adapter->link_speed = 0;
1620 adapter->link_duplex = 0;
1626 /*********************************************************************
1628 * Setup networking device structure and register an interface.
1630 **********************************************************************/
1632 em_setup_interface(device_t dev, struct adapter * adapter)
1635 INIT_DEBUGOUT("em_setup_interface: begin");
1637 ifp = &adapter->interface_data.ac_if;
1638 if_initname(ifp, "em", adapter->unit);
1639 ifp->if_mtu = ETHERMTU;
1640 ifp->if_output = ether_output;
1641 ifp->if_baudrate = 1000000000;
1642 ifp->if_init = em_init;
1643 ifp->if_softc = adapter;
1644 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1645 ifp->if_ioctl = em_ioctl;
1646 ifp->if_start = em_start;
1647 ifp->if_watchdog = em_watchdog;
1648 ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 1;
1650 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1651 ether_ifattach(ifp, ETHER_BPF_SUPPORTED);
1653 ether_ifattach(ifp, adapter->interface_data.ac_enaddr);
1656 if (adapter->hw.mac_type >= em_82543) {
1657 ifp->if_capabilities = IFCAP_HWCSUM;
1658 ifp->if_capenable = ifp->if_capabilities;
1662 * Tell the upper layer(s) we support long frames.
1664 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
1665 #if defined(__FreeBSD__) && __FreeBSD_version >= 500000
1666 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
1671 * Specify the media types supported by this adapter and register
1672 * callbacks to update media and link information
1674 ifmedia_init(&adapter->media, IFM_IMASK, em_media_change,
1676 if (adapter->hw.media_type == em_media_type_fiber) {
1677 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX | IFM_FDX,
1679 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX,
1682 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
1683 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
1685 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
1687 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
1689 #if defined(__DragonFly__) || __FreeBSD_version < 500000
1690 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX | IFM_FDX,
1692 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX, 0, NULL);
1694 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T | IFM_FDX,
1696 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T, 0, NULL);
1699 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
1700 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
1706 /*********************************************************************
1708 * Workaround for SmartSpeed on 82541 and 82547 controllers
1710 **********************************************************************/
1712 em_smartspeed(struct adapter *adapter)
1716 if(adapter->link_active || (adapter->hw.phy_type != em_phy_igp) ||
1717 !adapter->hw.autoneg || !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
1720 if(adapter->smartspeed == 0) {
1721 /* If Master/Slave config fault is asserted twice,
1722 * we assume back-to-back */
1723 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1724 if(!(phy_tmp & SR_1000T_MS_CONFIG_FAULT)) return;
1725 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1726 if(phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
1727 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL,
1729 if(phy_tmp & CR_1000T_MS_ENABLE) {
1730 phy_tmp &= ~CR_1000T_MS_ENABLE;
1731 em_write_phy_reg(&adapter->hw,
1732 PHY_1000T_CTRL, phy_tmp);
1733 adapter->smartspeed++;
1734 if(adapter->hw.autoneg &&
1735 !em_phy_setup_autoneg(&adapter->hw) &&
1736 !em_read_phy_reg(&adapter->hw, PHY_CTRL,
1738 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1739 MII_CR_RESTART_AUTO_NEG);
1740 em_write_phy_reg(&adapter->hw,
1746 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
1747 /* If still no link, perhaps using 2/3 pair cable */
1748 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
1749 phy_tmp |= CR_1000T_MS_ENABLE;
1750 em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
1751 if(adapter->hw.autoneg &&
1752 !em_phy_setup_autoneg(&adapter->hw) &&
1753 !em_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_tmp)) {
1754 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1755 MII_CR_RESTART_AUTO_NEG);
1756 em_write_phy_reg(&adapter->hw, PHY_CTRL, phy_tmp);
1759 /* Restart process after EM_SMARTSPEED_MAX iterations */
1760 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX)
1761 adapter->smartspeed = 0;
1767 /*********************************************************************
1769 * Allocate memory for tx_buffer structures. The tx_buffer stores all
1770 * the information needed to transmit a packet on the wire.
1772 **********************************************************************/
1774 em_allocate_transmit_structures(struct adapter * adapter)
1776 if (!(adapter->tx_buffer_area =
1777 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
1778 adapter->num_tx_desc, M_DEVBUF,
1780 printf("em%d: Unable to allocate tx_buffer memory\n",
1785 bzero(adapter->tx_buffer_area,
1786 sizeof(struct em_buffer) * adapter->num_tx_desc);
1791 /*********************************************************************
1793 * Allocate and initialize transmit structures.
1795 **********************************************************************/
1797 em_setup_transmit_structures(struct adapter * adapter)
1799 if (em_allocate_transmit_structures(adapter))
1802 bzero((void *) adapter->tx_desc_base,
1803 (sizeof(struct em_tx_desc)) * adapter->num_tx_desc);
1805 adapter->next_avail_tx_desc = 0;
1806 adapter->oldest_used_tx_desc = 0;
1808 /* Set number of descriptors available */
1809 adapter->num_tx_desc_avail = adapter->num_tx_desc;
1811 /* Set checksum context */
1812 adapter->active_checksum_context = OFFLOAD_NONE;
1817 /*********************************************************************
1819 * Enable transmit unit.
1821 **********************************************************************/
1823 em_initialize_transmit_unit(struct adapter * adapter)
1826 u_int32_t reg_tipg = 0;
1827 u_int64_t tdba = vtophys((vm_offset_t)adapter->tx_desc_base);
1829 /* Setup the Base and Length of the Tx Descriptor Ring */
1830 E1000_WRITE_REG(&adapter->hw, TDBAL,
1831 (tdba & 0x00000000ffffffffULL));
1832 E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
1833 E1000_WRITE_REG(&adapter->hw, TDLEN,
1834 adapter->num_tx_desc *
1835 sizeof(struct em_tx_desc));
1837 /* Setup the HW Tx Head and Tail descriptor pointers */
1838 E1000_WRITE_REG(&adapter->hw, TDH, 0);
1839 E1000_WRITE_REG(&adapter->hw, TDT, 0);
1842 HW_DEBUGOUT2("Base = %x, Length = %x\n",
1843 E1000_READ_REG(&adapter->hw, TDBAL),
1844 E1000_READ_REG(&adapter->hw, TDLEN));
1847 /* Set the default values for the Tx Inter Packet Gap timer */
1848 switch (adapter->hw.mac_type) {
1849 case em_82542_rev2_0:
1850 case em_82542_rev2_1:
1851 reg_tipg = DEFAULT_82542_TIPG_IPGT;
1852 reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1853 reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1856 if (adapter->hw.media_type == em_media_type_fiber)
1857 reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
1859 reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
1860 reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1861 reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1864 E1000_WRITE_REG(&adapter->hw, TIPG, reg_tipg);
1865 E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
1866 if(adapter->hw.mac_type >= em_82540)
1867 E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
1869 /* Program the Transmit Control Register */
1870 reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
1871 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
1872 if (adapter->link_duplex == 1) {
1873 reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1875 reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1877 E1000_WRITE_REG(&adapter->hw, TCTL, reg_tctl);
1879 /* Setup Transmit Descriptor Settings for this adapter */
1880 adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_RS;
1882 if (adapter->tx_int_delay > 0)
1883 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
1888 /*********************************************************************
1890 * Free all transmit related data structures.
1892 **********************************************************************/
1894 em_free_transmit_structures(struct adapter * adapter)
1896 struct em_buffer *tx_buffer;
1899 INIT_DEBUGOUT("free_transmit_structures: begin");
1901 if (adapter->tx_buffer_area != NULL) {
1902 tx_buffer = adapter->tx_buffer_area;
1903 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
1904 if (tx_buffer->m_head != NULL)
1905 m_freem(tx_buffer->m_head);
1906 tx_buffer->m_head = NULL;
1909 if (adapter->tx_buffer_area != NULL) {
1910 free(adapter->tx_buffer_area, M_DEVBUF);
1911 adapter->tx_buffer_area = NULL;
1916 /*********************************************************************
1918 * The offload context needs to be set when we transfer the first
1919 * packet of a particular protocol (TCP/UDP). We change the
1920 * context only if the protocol type changes.
1922 **********************************************************************/
1924 em_transmit_checksum_setup(struct adapter * adapter,
1926 u_int32_t *txd_upper,
1927 u_int32_t *txd_lower)
1929 struct em_context_desc *TXD;
1930 struct em_buffer *tx_buffer;
1933 if (mp->m_pkthdr.csum_flags) {
1935 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
1936 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
1937 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1938 if (adapter->active_checksum_context == OFFLOAD_TCP_IP)
1941 adapter->active_checksum_context = OFFLOAD_TCP_IP;
1943 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
1944 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
1945 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1946 if (adapter->active_checksum_context == OFFLOAD_UDP_IP)
1949 adapter->active_checksum_context = OFFLOAD_UDP_IP;
1961 /* If we reach this point, the checksum offload context
1962 * needs to be reset.
1964 curr_txd = adapter->next_avail_tx_desc;
1965 tx_buffer = &adapter->tx_buffer_area[curr_txd];
1966 TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd];
1968 TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN;
1969 TXD->lower_setup.ip_fields.ipcso =
1970 ETHER_HDR_LEN + offsetof(struct ip, ip_sum);
1971 TXD->lower_setup.ip_fields.ipcse =
1972 ETHER_HDR_LEN + sizeof(struct ip) - 1;
1974 TXD->upper_setup.tcp_fields.tucss =
1975 ETHER_HDR_LEN + sizeof(struct ip);
1976 TXD->upper_setup.tcp_fields.tucse = 0;
1978 if (adapter->active_checksum_context == OFFLOAD_TCP_IP) {
1979 TXD->upper_setup.tcp_fields.tucso =
1980 ETHER_HDR_LEN + sizeof(struct ip) +
1981 offsetof(struct tcphdr, th_sum);
1982 } else if (adapter->active_checksum_context == OFFLOAD_UDP_IP) {
1983 TXD->upper_setup.tcp_fields.tucso =
1984 ETHER_HDR_LEN + sizeof(struct ip) +
1985 offsetof(struct udphdr, uh_sum);
1988 TXD->tcp_seg_setup.data = 0;
1989 TXD->cmd_and_length = (adapter->txd_cmd | E1000_TXD_CMD_DEXT);
1991 tx_buffer->m_head = NULL;
1993 if (++curr_txd == adapter->num_tx_desc)
1996 adapter->num_tx_desc_avail--;
1997 adapter->next_avail_tx_desc = curr_txd;
2002 /**********************************************************************
2004 * Examine each tx_buffer in the used queue. If the hardware is done
2005 * processing the packet then free associated resources. The
2006 * tx_buffer is put back on the free queue.
2008 **********************************************************************/
2010 em_clean_transmit_interrupts(struct adapter * adapter)
2014 struct em_buffer *tx_buffer;
2015 struct em_tx_desc *tx_desc;
2016 struct ifnet *ifp = &adapter->interface_data.ac_if;
2018 if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
2023 adapter->clean_tx_interrupts++;
2025 num_avail = adapter->num_tx_desc_avail;
2026 i = adapter->oldest_used_tx_desc;
2028 tx_buffer = &adapter->tx_buffer_area[i];
2029 tx_desc = &adapter->tx_desc_base[i];
2031 while(tx_desc->upper.fields.status & E1000_TXD_STAT_DD) {
2033 tx_desc->upper.data = 0;
2036 if (tx_buffer->m_head) {
2038 m_freem(tx_buffer->m_head);
2039 tx_buffer->m_head = NULL;
2042 if (++i == adapter->num_tx_desc)
2045 tx_buffer = &adapter->tx_buffer_area[i];
2046 tx_desc = &adapter->tx_desc_base[i];
2049 adapter->oldest_used_tx_desc = i;
2052 * If we have enough room, clear IFF_OACTIVE to tell the stack
2053 * that it is OK to send packets.
2054 * If there are no pending descriptors, clear the timeout. Otherwise,
2055 * if some descriptors have been freed, restart the timeout.
2057 if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
2058 ifp->if_flags &= ~IFF_OACTIVE;
2059 if (num_avail == adapter->num_tx_desc)
2061 else if (num_avail == adapter->num_tx_desc_avail)
2062 ifp->if_timer = EM_TX_TIMEOUT;
2064 adapter->num_tx_desc_avail = num_avail;
2069 /*********************************************************************
2071 * Get a buffer from system mbuf buffer pool.
2073 **********************************************************************/
2075 em_get_buf(int i, struct adapter *adapter,
2078 register struct mbuf *mp = nmp;
2081 ifp = &adapter->interface_data.ac_if;
2084 MGETHDR(mp, M_DONTWAIT, MT_DATA);
2086 adapter->mbuf_alloc_failed++;
2089 MCLGET(mp, M_DONTWAIT);
2090 if ((mp->m_flags & M_EXT) == 0) {
2092 adapter->mbuf_cluster_failed++;
2095 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2097 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2098 mp->m_data = mp->m_ext.ext_buf;
2102 if (ifp->if_mtu <= ETHERMTU) {
2103 m_adj(mp, ETHER_ALIGN);
2106 adapter->rx_buffer_area[i].m_head = mp;
2107 adapter->rx_desc_base[i].buffer_addr =
2108 vtophys(mtod(mp, vm_offset_t));
2113 /*********************************************************************
2115 * Allocate memory for rx_buffer structures. Since we use one
2116 * rx_buffer per received packet, the maximum number of rx_buffer's
2117 * that we'll need is equal to the number of receive descriptors
2118 * that we've allocated.
2120 **********************************************************************/
2122 em_allocate_receive_structures(struct adapter * adapter)
2126 if (!(adapter->rx_buffer_area =
2127 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
2128 adapter->num_rx_desc, M_DEVBUF,
2130 printf("em%d: Unable to allocate rx_buffer memory\n",
2135 bzero(adapter->rx_buffer_area,
2136 sizeof(struct em_buffer) * adapter->num_rx_desc);
2138 for (i = 0; i < adapter->num_rx_desc; i++) {
2139 if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2140 adapter->rx_buffer_area[i].m_head = NULL;
2141 adapter->rx_desc_base[i].buffer_addr = 0;
2149 /*********************************************************************
2151 * Allocate and initialize receive structures.
2153 **********************************************************************/
2155 em_setup_receive_structures(struct adapter * adapter)
2157 bzero((void *) adapter->rx_desc_base,
2158 (sizeof(struct em_rx_desc)) * adapter->num_rx_desc);
2160 if (em_allocate_receive_structures(adapter))
2163 /* Setup our descriptor pointers */
2164 adapter->next_rx_desc_to_check = 0;
2168 /*********************************************************************
2170 * Enable receive unit.
2172 **********************************************************************/
2174 em_initialize_receive_unit(struct adapter * adapter)
2177 u_int32_t reg_rxcsum;
2179 u_int64_t rdba = vtophys((vm_offset_t)adapter->rx_desc_base);
2181 ifp = &adapter->interface_data.ac_if;
2183 /* Make sure receives are disabled while setting up the descriptor ring */
2184 E1000_WRITE_REG(&adapter->hw, RCTL, 0);
2186 /* Set the Receive Delay Timer Register */
2187 E1000_WRITE_REG(&adapter->hw, RDTR,
2188 adapter->rx_int_delay | E1000_RDT_FPDB);
2190 if(adapter->hw.mac_type >= em_82540) {
2191 E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
2193 /* Set the interrupt throttling rate. Value is calculated
2194 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
2195 #define MAX_INTS_PER_SEC 8000
2196 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256)
2197 E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR);
2200 /* Setup the Base and Length of the Rx Descriptor Ring */
2201 E1000_WRITE_REG(&adapter->hw, RDBAL,
2202 (rdba & 0x00000000ffffffffULL));
2203 E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
2204 E1000_WRITE_REG(&adapter->hw, RDLEN,
2205 adapter->num_rx_desc *
2206 sizeof(struct em_rx_desc));
2208 /* Setup the HW Rx Head and Tail Descriptor Pointers */
2209 E1000_WRITE_REG(&adapter->hw, RDH, 0);
2210 E1000_WRITE_REG(&adapter->hw, RDT, adapter->num_rx_desc - 1);
2212 /* Setup the Receive Control Register */
2213 reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
2214 E1000_RCTL_RDMTS_HALF |
2215 (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
2217 if (adapter->hw.tbi_compatibility_on == TRUE)
2218 reg_rctl |= E1000_RCTL_SBP;
2221 switch (adapter->rx_buffer_len) {
2223 case EM_RXBUFFER_2048:
2224 reg_rctl |= E1000_RCTL_SZ_2048;
2226 case EM_RXBUFFER_4096:
2227 reg_rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2229 case EM_RXBUFFER_8192:
2230 reg_rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2232 case EM_RXBUFFER_16384:
2233 reg_rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2237 if (ifp->if_mtu > ETHERMTU)
2238 reg_rctl |= E1000_RCTL_LPE;
2240 /* Enable 82543 Receive Checksum Offload for TCP and UDP */
2241 if ((adapter->hw.mac_type >= em_82543) &&
2242 (ifp->if_capenable & IFCAP_RXCSUM)) {
2243 reg_rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
2244 reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
2245 E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum);
2248 /* Enable Receives */
2249 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
2254 /*********************************************************************
2256 * Free receive related data structures.
2258 **********************************************************************/
2260 em_free_receive_structures(struct adapter *adapter)
2262 struct em_buffer *rx_buffer;
2265 INIT_DEBUGOUT("free_receive_structures: begin");
2267 if (adapter->rx_buffer_area != NULL) {
2268 rx_buffer = adapter->rx_buffer_area;
2269 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2270 if (rx_buffer->m_head != NULL)
2271 m_freem(rx_buffer->m_head);
2272 rx_buffer->m_head = NULL;
2275 if (adapter->rx_buffer_area != NULL) {
2276 free(adapter->rx_buffer_area, M_DEVBUF);
2277 adapter->rx_buffer_area = NULL;
2282 /*********************************************************************
2284 * This routine executes in interrupt context. It replenishes
2285 * the mbufs in the descriptor and sends data which has been
2286 * dma'ed into host memory to upper layer.
2288 * We loop at most count times if count is > 0, or until done if
2291 *********************************************************************/
2293 em_process_receive_interrupts(struct adapter * adapter, int count)
2297 #if defined(__DragonFly__) || __FreeBSD_version < 500000
2298 struct ether_header *eh;
2300 u_int8_t accept_frame = 0;
2305 /* Pointer to the receive descriptor being examined. */
2306 struct em_rx_desc *current_desc;
2308 ifp = &adapter->interface_data.ac_if;
2309 i = adapter->next_rx_desc_to_check;
2310 current_desc = &adapter->rx_desc_base[i];
2312 if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
2314 adapter->no_pkts_avail++;
2319 while ((current_desc->status & E1000_RXD_STAT_DD) && (count != 0)) {
2321 mp = adapter->rx_buffer_area[i].m_head;
2324 if (current_desc->status & E1000_RXD_STAT_EOP) {
2327 len = current_desc->length - ETHER_CRC_LEN;
2330 len = current_desc->length;
2333 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2335 u_int32_t pkt_len = current_desc->length;
2337 if (adapter->fmp != NULL)
2338 pkt_len += adapter->fmp->m_pkthdr.len;
2340 last_byte = *(mtod(mp, caddr_t) +
2341 current_desc->length - 1);
2343 if (TBI_ACCEPT(&adapter->hw, current_desc->status,
2344 current_desc->errors,
2345 pkt_len, last_byte)) {
2346 em_tbi_adjust_stats(&adapter->hw,
2349 adapter->hw.mac_addr);
2359 if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2360 adapter->dropped_pkts++;
2361 em_get_buf(i, adapter, mp);
2362 if (adapter->fmp != NULL)
2363 m_freem(adapter->fmp);
2364 adapter->fmp = NULL;
2365 adapter->lmp = NULL;
2369 /* Assign correct length to the current fragment */
2372 if (adapter->fmp == NULL) {
2373 mp->m_pkthdr.len = len;
2374 adapter->fmp = mp; /* Store the first mbuf */
2377 /* Chain mbuf's together */
2378 mp->m_flags &= ~M_PKTHDR;
2379 adapter->lmp->m_next = mp;
2380 adapter->lmp = adapter->lmp->m_next;
2381 adapter->fmp->m_pkthdr.len += len;
2385 adapter->fmp->m_pkthdr.rcvif = ifp;
2388 #if defined(__DragonFly__) || __FreeBSD_version < 500000
2389 eh = mtod(adapter->fmp, struct ether_header *);
2390 /* Remove ethernet header from mbuf */
2391 m_adj(adapter->fmp, sizeof(struct ether_header));
2392 em_receive_checksum(adapter, current_desc,
2394 if (current_desc->status & E1000_RXD_STAT_VP)
2395 VLAN_INPUT_TAG(eh, adapter->fmp,
2396 (current_desc->special &
2397 E1000_RXD_SPC_VLAN_MASK));
2399 ether_input(ifp, eh, adapter->fmp);
2402 em_receive_checksum(adapter, current_desc,
2404 if (current_desc->status & E1000_RXD_STAT_VP)
2405 VLAN_INPUT_TAG(ifp, adapter->fmp,
2406 (current_desc->special &
2407 E1000_RXD_SPC_VLAN_MASK),
2408 adapter->fmp = NULL);
2410 if (adapter->fmp != NULL)
2411 (*ifp->if_input)(ifp, adapter->fmp);
2413 adapter->fmp = NULL;
2414 adapter->lmp = NULL;
2417 adapter->dropped_pkts++;
2418 em_get_buf(i, adapter, mp);
2419 if (adapter->fmp != NULL)
2420 m_freem(adapter->fmp);
2421 adapter->fmp = NULL;
2422 adapter->lmp = NULL;
2425 /* Zero out the receive descriptors status */
2426 current_desc->status = 0;
2428 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */
2429 E1000_WRITE_REG(&adapter->hw, RDT, i);
2431 /* Advance our pointers to the next descriptor */
2432 if (++i == adapter->num_rx_desc) {
2434 current_desc = adapter->rx_desc_base;
2438 adapter->next_rx_desc_to_check = i;
2442 /*********************************************************************
2444 * Verify that the hardware indicated that the checksum is valid.
2445 * Inform the stack about the status of checksum so that stack
2446 * doesn't spend time verifying the checksum.
2448 *********************************************************************/
2450 em_receive_checksum(struct adapter *adapter,
2451 struct em_rx_desc *rx_desc,
2454 /* 82543 or newer only */
2455 if ((adapter->hw.mac_type < em_82543) ||
2456 /* Ignore Checksum bit is set */
2457 (rx_desc->status & E1000_RXD_STAT_IXSM)) {
2458 mp->m_pkthdr.csum_flags = 0;
2462 if (rx_desc->status & E1000_RXD_STAT_IPCS) {
2464 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
2465 /* IP Checksum Good */
2466 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
2467 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
2470 mp->m_pkthdr.csum_flags = 0;
2474 if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
2476 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
2477 mp->m_pkthdr.csum_flags |=
2478 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
2479 mp->m_pkthdr.csum_data = htons(0xffff);
2488 em_enable_vlans(struct adapter *adapter)
2492 E1000_WRITE_REG(&adapter->hw, VET, ETHERTYPE_VLAN);
2494 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2495 ctrl |= E1000_CTRL_VME;
2496 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2502 em_enable_intr(struct adapter * adapter)
2504 E1000_WRITE_REG(&adapter->hw, IMS, (IMS_ENABLE_MASK));
2509 em_disable_intr(struct adapter *adapter)
2511 E1000_WRITE_REG(&adapter->hw, IMC,
2512 (0xffffffff & ~E1000_IMC_RXSEQ));
2517 em_is_valid_ether_addr(u_int8_t *addr)
2519 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
2521 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
2529 em_write_pci_cfg(struct em_hw *hw,
2533 pci_write_config(((struct em_osdep *)hw->back)->dev, reg,
2538 em_read_pci_cfg(struct em_hw *hw, uint32_t reg,
2541 *value = pci_read_config(((struct em_osdep *)hw->back)->dev,
2547 em_pci_set_mwi(struct em_hw *hw)
2549 pci_write_config(((struct em_osdep *)hw->back)->dev,
2551 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE), 2);
2556 em_pci_clear_mwi(struct em_hw *hw)
2558 pci_write_config(((struct em_osdep *)hw->back)->dev,
2560 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE), 2);
2565 em_io_read(struct em_hw *hw, uint32_t port)
2571 em_io_write(struct em_hw *hw, uint32_t port, uint32_t value)
2578 /**********************************************************************
2580 * Update the board statistics counters.
2582 **********************************************************************/
2584 em_update_stats_counters(struct adapter *adapter)
2588 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, CRCERRS);
2589 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, SYMERRS);
2590 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, MPC);
2591 adapter->stats.scc += E1000_READ_REG(&adapter->hw, SCC);
2592 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, ECOL);
2594 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, MCC);
2595 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, LATECOL);
2596 adapter->stats.colc += E1000_READ_REG(&adapter->hw, COLC);
2597 adapter->stats.dc += E1000_READ_REG(&adapter->hw, DC);
2598 adapter->stats.sec += E1000_READ_REG(&adapter->hw, SEC);
2599 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, RLEC);
2600 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, XONRXC);
2601 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, XONTXC);
2602 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, XOFFRXC);
2603 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, XOFFTXC);
2604 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, FCRUC);
2605 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, PRC64);
2606 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, PRC127);
2607 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, PRC255);
2608 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, PRC511);
2609 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, PRC1023);
2610 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, PRC1522);
2611 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, GPRC);
2612 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, BPRC);
2613 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, MPRC);
2614 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, GPTC);
2616 /* For the 64-bit byte counters the low dword must be read first. */
2617 /* Both registers clear on the read of the high dword */
2619 adapter->stats.gorcl += E1000_READ_REG(&adapter->hw, GORCL);
2620 adapter->stats.gorch += E1000_READ_REG(&adapter->hw, GORCH);
2621 adapter->stats.gotcl += E1000_READ_REG(&adapter->hw, GOTCL);
2622 adapter->stats.gotch += E1000_READ_REG(&adapter->hw, GOTCH);
2624 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, RNBC);
2625 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, RUC);
2626 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, RFC);
2627 adapter->stats.roc += E1000_READ_REG(&adapter->hw, ROC);
2628 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, RJC);
2630 adapter->stats.torl += E1000_READ_REG(&adapter->hw, TORL);
2631 adapter->stats.torh += E1000_READ_REG(&adapter->hw, TORH);
2632 adapter->stats.totl += E1000_READ_REG(&adapter->hw, TOTL);
2633 adapter->stats.toth += E1000_READ_REG(&adapter->hw, TOTH);
2635 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, TPR);
2636 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, TPT);
2637 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, PTC64);
2638 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, PTC127);
2639 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, PTC255);
2640 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, PTC511);
2641 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, PTC1023);
2642 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, PTC1522);
2643 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, MPTC);
2644 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, BPTC);
2646 if (adapter->hw.mac_type >= em_82543) {
2647 adapter->stats.algnerrc +=
2648 E1000_READ_REG(&adapter->hw, ALGNERRC);
2649 adapter->stats.rxerrc +=
2650 E1000_READ_REG(&adapter->hw, RXERRC);
2651 adapter->stats.tncrs +=
2652 E1000_READ_REG(&adapter->hw, TNCRS);
2653 adapter->stats.cexterr +=
2654 E1000_READ_REG(&adapter->hw, CEXTERR);
2655 adapter->stats.tsctc +=
2656 E1000_READ_REG(&adapter->hw, TSCTC);
2657 adapter->stats.tsctfc +=
2658 E1000_READ_REG(&adapter->hw, TSCTFC);
2660 ifp = &adapter->interface_data.ac_if;
2662 /* Fill out the OS statistics structure */
2663 ifp->if_ibytes = adapter->stats.gorcl;
2664 ifp->if_obytes = adapter->stats.gotcl;
2665 ifp->if_imcasts = adapter->stats.mprc;
2666 ifp->if_collisions = adapter->stats.colc;
2670 adapter->dropped_pkts +
2671 adapter->stats.rxerrc +
2672 adapter->stats.crcerrs +
2673 adapter->stats.algnerrc +
2674 adapter->stats.rlec + adapter->stats.rnbc +
2675 adapter->stats.mpc + adapter->stats.cexterr;
2678 ifp->if_oerrors = adapter->stats.ecol + adapter->stats.latecol;
2683 /**********************************************************************
2685 * This routine is called only when em_display_debug_stats is enabled.
2686 * This routine provides a way to take a look at important statistics
2687 * maintained by the driver and hardware.
2689 **********************************************************************/
2691 em_print_debug_info(struct adapter *adapter)
2693 int unit = adapter->unit;
2696 printf("em%d: Packets not Avail = %ld\n", unit,
2697 adapter->no_pkts_avail);
2698 printf("em%d: CleanTxInterrupts = %ld\n", unit,
2699 adapter->clean_tx_interrupts);
2701 printf("em%d: fifo workaround = %lld, fifo_reset = %lld\n", unit,
2702 (long long)adapter->tx_fifo_wrk,
2703 (long long)adapter->tx_fifo_reset);
2704 printf("em%d: hw tdh = %d, hw tdt = %d\n", unit,
2705 E1000_READ_REG(&adapter->hw, TDH),
2706 E1000_READ_REG(&adapter->hw, TDT));
2707 printf("em%d: Num Tx descriptors avail = %d\n", unit,
2708 adapter->num_tx_desc_avail);
2709 printf("em%d: Tx Descriptors not avail1 = %ld\n", unit,
2710 adapter->no_tx_desc_avail1);
2711 printf("em%d: Tx Descriptors not avail2 = %ld\n", unit,
2712 adapter->no_tx_desc_avail2);
2713 printf("em%d: Std mbuf failed = %ld\n", unit,
2714 adapter->mbuf_alloc_failed);
2715 printf("em%d: Std mbuf cluster failed = %ld\n", unit,
2716 adapter->mbuf_cluster_failed);
2717 printf("em%d: Driver dropped packets = %ld\n", unit,
2718 adapter->dropped_pkts);
2724 em_print_hw_stats(struct adapter *adapter)
2726 int unit = adapter->unit;
2728 printf("em%d: Excessive collisions = %lld\n", unit,
2729 (long long)adapter->stats.ecol);
2730 printf("em%d: Symbol errors = %lld\n", unit,
2731 (long long)adapter->stats.symerrs);
2732 printf("em%d: Sequence errors = %lld\n", unit,
2733 (long long)adapter->stats.sec);
2734 printf("em%d: Defer count = %lld\n", unit,
2735 (long long)adapter->stats.dc);
2737 printf("em%d: Missed Packets = %lld\n", unit,
2738 (long long)adapter->stats.mpc);
2739 printf("em%d: Receive No Buffers = %lld\n", unit,
2740 (long long)adapter->stats.rnbc);
2741 printf("em%d: Receive length errors = %lld\n", unit,
2742 (long long)adapter->stats.rlec);
2743 printf("em%d: Receive errors = %lld\n", unit,
2744 (long long)adapter->stats.rxerrc);
2745 printf("em%d: Crc errors = %lld\n", unit,
2746 (long long)adapter->stats.crcerrs);
2747 printf("em%d: Alignment errors = %lld\n", unit,
2748 (long long)adapter->stats.algnerrc);
2749 printf("em%d: Carrier extension errors = %lld\n", unit,
2750 (long long)adapter->stats.cexterr);
2752 printf("em%d: XON Rcvd = %lld\n", unit,
2753 (long long)adapter->stats.xonrxc);
2754 printf("em%d: XON Xmtd = %lld\n", unit,
2755 (long long)adapter->stats.xontxc);
2756 printf("em%d: XOFF Rcvd = %lld\n", unit,
2757 (long long)adapter->stats.xoffrxc);
2758 printf("em%d: XOFF Xmtd = %lld\n", unit,
2759 (long long)adapter->stats.xofftxc);
2761 printf("em%d: Good Packets Rcvd = %lld\n", unit,
2762 (long long)adapter->stats.gprc);
2763 printf("em%d: Good Packets Xmtd = %lld\n", unit,
2764 (long long)adapter->stats.gptc);
2770 em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
2774 struct adapter *adapter;
2777 error = sysctl_handle_int(oidp, &result, 0, req);
2779 if (error || !req->newptr)
2783 adapter = (struct adapter *)arg1;
2784 em_print_debug_info(adapter);
2792 em_sysctl_stats(SYSCTL_HANDLER_ARGS)
2796 struct adapter *adapter;
2799 error = sysctl_handle_int(oidp, &result, 0, req);
2801 if (error || !req->newptr)
2805 adapter = (struct adapter *)arg1;
2806 em_print_hw_stats(adapter);