FreeBSD/Linux Kernel Cross Reference
sys/dev/em/if_em.c
1 /**************************************************************************
2
3 Copyright (c) 2001-2003, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32 ***************************************************************************/
33
34 /*$FreeBSD: releng/5.1/sys/dev/em/if_em.c 114776 2003-05-06 03:55:12Z des $*/
35
36 #include <dev/em/if_em.h>
37
38 /*********************************************************************
39 * Set this to one to display debug statistics
40 *********************************************************************/
41 int em_display_debug_stats = 0;
42
43 /*********************************************************************
44 * Linked list of board private structures for all NICs found
45 *********************************************************************/
46
47 struct adapter *em_adapter_list = NULL;
48
49
50 /*********************************************************************
51 * Driver version
52 *********************************************************************/
53
54 char em_driver_version[] = "1.5.31";
55
56
57 /*********************************************************************
58 * PCI Device ID Table
59 *
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
63 *
64 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
65 *********************************************************************/
66
67 static em_vendor_info_t em_vendor_info_array[] =
68 {
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, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0},
91 /* required last entry */
92 { 0, 0, 0, 0, 0}
93 };
94
95 /*********************************************************************
96 * Table of branding strings for all supported NICs.
97 *********************************************************************/
98
99 static char *em_strings[] = {
100 "Intel(R) PRO/1000 Network Connection"
101 };
102
103 /*********************************************************************
104 * Function prototypes
105 *********************************************************************/
106 static int em_probe(device_t);
107 static int em_attach(device_t);
108 static int em_detach(device_t);
109 static int em_shutdown(device_t);
110 static void em_intr(void *);
111 static void em_start(struct ifnet *);
112 static int em_ioctl(struct ifnet *, u_long, caddr_t);
113 static void em_watchdog(struct ifnet *);
114 static void em_init(void *);
115 static void em_stop(void *);
116 static void em_media_status(struct ifnet *, struct ifmediareq *);
117 static int em_media_change(struct ifnet *);
118 static void em_identify_hardware(struct adapter *);
119 static int em_allocate_pci_resources(struct adapter *);
120 static void em_free_pci_resources(struct adapter *);
121 static void em_local_timer(void *);
122 static int em_hardware_init(struct adapter *);
123 static void em_setup_interface(device_t, struct adapter *);
124 static int em_setup_transmit_structures(struct adapter *);
125 static void em_initialize_transmit_unit(struct adapter *);
126 static int em_setup_receive_structures(struct adapter *);
127 static void em_initialize_receive_unit(struct adapter *);
128 static void em_enable_intr(struct adapter *);
129 static void em_disable_intr(struct adapter *);
130 static void em_free_transmit_structures(struct adapter *);
131 static void em_free_receive_structures(struct adapter *);
132 static void em_update_stats_counters(struct adapter *);
133 static void em_clean_transmit_interrupts(struct adapter *);
134 static int em_allocate_receive_structures(struct adapter *);
135 static int em_allocate_transmit_structures(struct adapter *);
136 static void em_process_receive_interrupts(struct adapter *, int);
137 static void em_receive_checksum(struct adapter *,
138 struct em_rx_desc *,
139 struct mbuf *);
140 static void em_transmit_checksum_setup(struct adapter *,
141 struct mbuf *,
142 u_int32_t *,
143 u_int32_t *);
144 static void em_set_promisc(struct adapter *);
145 static void em_disable_promisc(struct adapter *);
146 static void em_set_multi(struct adapter *);
147 static void em_print_hw_stats(struct adapter *);
148 static void em_print_link_status(struct adapter *);
149 static int em_get_buf(int i, struct adapter *,
150 struct mbuf *);
151 static void em_enable_vlans(struct adapter *);
152 static int em_encap(struct adapter *, struct mbuf *);
153 static void em_smartspeed(struct adapter *);
154 static int em_82547_fifo_workaround(struct adapter *, int);
155 static void em_82547_update_fifo_head(struct adapter *, int);
156 static int em_82547_tx_fifo_reset(struct adapter *);
157 static void em_82547_move_tail(void *arg);
158 static int em_dma_malloc(struct adapter *, bus_size_t,
159 struct em_dma_alloc *, int);
160 static void em_dma_free(struct adapter *, struct em_dma_alloc *);
161
162 /*********************************************************************
163 * FreeBSD Device Interface Entry Points
164 *********************************************************************/
165
166 static device_method_t em_methods[] = {
167 /* Device interface */
168 DEVMETHOD(device_probe, em_probe),
169 DEVMETHOD(device_attach, em_attach),
170 DEVMETHOD(device_detach, em_detach),
171 DEVMETHOD(device_shutdown, em_shutdown),
172 {0, 0}
173 };
174
175 static driver_t em_driver = {
176 "em", em_methods, sizeof(struct adapter ),
177 };
178
179 static devclass_t em_devclass;
180 DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0);
181 MODULE_DEPEND(em, pci, 1, 1, 1);
182 MODULE_DEPEND(em, ether, 1, 1, 1);
183
184 /*********************************************************************
185 * Device identification routine
186 *
187 * em_probe determines if the driver should be loaded on
188 * adapter based on PCI vendor/device id of the adapter.
189 *
190 * return 0 on success, positive on failure
191 *********************************************************************/
192
193 static int
194 em_probe(device_t dev)
195 {
196 em_vendor_info_t *ent;
197
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];
203
204 INIT_DEBUGOUT("em_probe: begin");
205
206 pci_vendor_id = pci_get_vendor(dev);
207 if (pci_vendor_id != EM_VENDOR_ID)
208 return(ENXIO);
209
210 pci_device_id = pci_get_device(dev);
211 pci_subvendor_id = pci_get_subvendor(dev);
212 pci_subdevice_id = pci_get_subdevice(dev);
213
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) &&
218
219 ((pci_subvendor_id == ent->subvendor_id) ||
220 (ent->subvendor_id == PCI_ANY_ID)) &&
221
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],
226 em_driver_version);
227 device_set_desc_copy(dev, adapter_name);
228 return(0);
229 }
230 ent++;
231 }
232
233 return(ENXIO);
234 }
235
236 /*********************************************************************
237 * Device initialization routine
238 *
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.
242 *
243 * return 0 on success, positive on failure
244 *********************************************************************/
245
246 static int
247 em_attach(device_t dev)
248 {
249 struct adapter * adapter;
250 int s;
251 int tsize, rsize;
252
253 INIT_DEBUGOUT("em_attach: begin");
254 s = splimp();
255
256 /* Allocate, clear, and link in our adapter structure */
257 if (!(adapter = device_get_softc(dev))) {
258 printf("em: adapter structure allocation failed\n");
259 splx(s);
260 return(ENOMEM);
261 }
262 bzero(adapter, sizeof(struct adapter ));
263 adapter->dev = dev;
264 adapter->osdep.dev = dev;
265 adapter->unit = device_get_unit(dev);
266
267 if (em_adapter_list != NULL)
268 em_adapter_list->prev = adapter;
269 adapter->next = em_adapter_list;
270 em_adapter_list = adapter;
271
272 callout_handle_init(&adapter->timer_handle);
273 callout_handle_init(&adapter->tx_fifo_timer_handle);
274
275 /* Determine hardware revision */
276 em_identify_hardware(adapter);
277
278 /* Parameters (to be read from user) */
279 adapter->num_tx_desc = EM_MAX_TXD;
280 adapter->num_rx_desc = EM_MAX_RXD;
281 adapter->tx_int_delay = EM_TIDV;
282 adapter->tx_abs_int_delay = EM_TADV;
283 adapter->rx_int_delay = EM_RDTR;
284 adapter->rx_abs_int_delay = EM_RADV;
285 adapter->hw.autoneg = DO_AUTO_NEG;
286 adapter->hw.wait_autoneg_complete = WAIT_FOR_AUTO_NEG_DEFAULT;
287 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
288 adapter->hw.tbi_compatibility_en = TRUE;
289 adapter->rx_buffer_len = EM_RXBUFFER_2048;
290
291 /* These parameters control the automatic generation(Tx) and
292 * response(Rx) to Ethernet PAUSE frames.
293 */
294 adapter->hw.fc_high_water = FC_DEFAULT_HI_THRESH;
295 adapter->hw.fc_low_water = FC_DEFAULT_LO_THRESH;
296 adapter->hw.fc_pause_time = FC_DEFAULT_TX_TIMER;
297 adapter->hw.fc_send_xon = TRUE;
298 adapter->hw.fc = em_fc_full;
299
300 adapter->hw.phy_init_script = 1;
301
302 /*
303 * Set the max frame size assuming standard ethernet
304 * sized frames
305 */
306 adapter->hw.max_frame_size =
307 ETHERMTU + ETHER_HDR_LEN + ETHER_CRC_LEN;
308
309 adapter->hw.min_frame_size =
310 MINIMUM_ETHERNET_PACKET_SIZE + ETHER_CRC_LEN;
311
312 /*
313 * This controls when hardware reports transmit completion
314 * status.
315 */
316 adapter->hw.report_tx_early = 1;
317
318
319 if (em_allocate_pci_resources(adapter)) {
320 printf("em%d: Allocation of PCI resources failed\n",
321 adapter->unit);
322 em_free_pci_resources(adapter);
323 splx(s);
324 return(ENXIO);
325 }
326
327
328 /* Initialize eeprom parameters */
329 em_init_eeprom_params(&adapter->hw);
330
331 tsize = EM_ROUNDUP(adapter->num_tx_desc *
332 sizeof(struct em_tx_desc), 4096);
333
334 /* Allocate Transmit Descriptor ring */
335 if (em_dma_malloc(adapter, tsize, &adapter->txdma, BUS_DMA_NOWAIT)) {
336 printf("em%d: Unable to allocate tx_desc memory\n",
337 adapter->unit);
338 em_free_pci_resources(adapter);
339 splx(s);
340 return(ENOMEM);
341 }
342 adapter->tx_desc_base = (struct em_tx_desc *) adapter->txdma.dma_vaddr;
343
344 rsize = EM_ROUNDUP(adapter->num_rx_desc *
345 sizeof(struct em_rx_desc), 4096);
346
347 /* Allocate Receive Descriptor ring */
348 if (em_dma_malloc(adapter, rsize, &adapter->rxdma, BUS_DMA_NOWAIT)) {
349 printf("em%d: Unable to allocate rx_desc memory\n",
350 adapter->unit);
351 em_free_pci_resources(adapter);
352 em_dma_free(adapter, &adapter->txdma);
353 splx(s);
354 return(ENOMEM);
355 }
356 adapter->rx_desc_base = (struct em_rx_desc *) adapter->rxdma.dma_vaddr;
357
358 /* Initialize the hardware */
359 if (em_hardware_init(adapter)) {
360 printf("em%d: Unable to initialize the hardware\n",
361 adapter->unit);
362 em_free_pci_resources(adapter);
363 em_dma_free(adapter, &adapter->txdma);
364 em_dma_free(adapter, &adapter->rxdma);
365 splx(s);
366 return(EIO);
367 }
368
369 /* Copy the permanent MAC address out of the EEPROM */
370 if (em_read_mac_addr(&adapter->hw) < 0) {
371 printf("em%d: EEPROM read error while reading mac address\n",
372 adapter->unit);
373 em_free_pci_resources(adapter);
374 em_dma_free(adapter, &adapter->txdma);
375 em_dma_free(adapter, &adapter->rxdma);
376 splx(s);
377 return(EIO);
378 }
379
380 bcopy(adapter->hw.mac_addr, adapter->interface_data.ac_enaddr,
381 ETHER_ADDR_LEN);
382
383 /* Setup OS specific network interface */
384 em_setup_interface(dev, adapter);
385
386 /* Initialize statistics */
387 em_clear_hw_cntrs(&adapter->hw);
388 em_update_stats_counters(adapter);
389 adapter->hw.get_link_status = 1;
390 em_check_for_link(&adapter->hw);
391
392 /* Print the link status */
393 if (adapter->link_active == 1) {
394 em_get_speed_and_duplex(&adapter->hw, &adapter->link_speed,
395 &adapter->link_duplex);
396 printf("em%d: Speed:%d Mbps Duplex:%s\n",
397 adapter->unit,
398 adapter->link_speed,
399 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
400 } else
401 printf("em%d: Speed:N/A Duplex:N/A\n", adapter->unit);
402
403 INIT_DEBUGOUT("em_attach: end");
404 splx(s);
405 return(0);
406 }
407
408 /*********************************************************************
409 * Device removal routine
410 *
411 * The detach entry point is called when the driver is being removed.
412 * This routine stops the adapter and deallocates all the resources
413 * that were allocated for driver operation.
414 *
415 * return 0 on success, positive on failure
416 *********************************************************************/
417
418 static int
419 em_detach(device_t dev)
420 {
421 struct adapter * adapter = device_get_softc(dev);
422 struct ifnet *ifp = &adapter->interface_data.ac_if;
423 int s;
424
425 INIT_DEBUGOUT("em_detach: begin");
426 s = splimp();
427
428 em_stop(adapter);
429 em_phy_hw_reset(&adapter->hw);
430 #if __FreeBSD_version < 500000
431 ether_ifdetach(&adapter->interface_data.ac_if, ETHER_BPF_SUPPORTED);
432 #else
433 ether_ifdetach(&adapter->interface_data.ac_if);
434 #endif
435 em_free_pci_resources(adapter);
436
437 /* Free Transmit Descriptor ring */
438 if (adapter->tx_desc_base) {
439 em_dma_free(adapter, &adapter->txdma);
440 adapter->tx_desc_base = NULL;
441 }
442
443 /* Free Receive Descriptor ring */
444 if (adapter->rx_desc_base) {
445 em_dma_free(adapter, &adapter->rxdma);
446 adapter->rx_desc_base = NULL;
447 }
448
449 /* Remove from the adapter list */
450 if (em_adapter_list == adapter)
451 em_adapter_list = adapter->next;
452 if (adapter->next != NULL)
453 adapter->next->prev = adapter->prev;
454 if (adapter->prev != NULL)
455 adapter->prev->next = adapter->next;
456
457 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
458 ifp->if_timer = 0;
459
460 splx(s);
461 return(0);
462 }
463
464 /*********************************************************************
465 *
466 * Shutdown entry point
467 *
468 **********************************************************************/
469
470 static int
471 em_shutdown(device_t dev)
472 {
473 struct adapter *adapter = device_get_softc(dev);
474 em_stop(adapter);
475 return(0);
476 }
477
478
479 /*********************************************************************
480 * Transmit entry point
481 *
482 * em_start is called by the stack to initiate a transmit.
483 * The driver will remain in this routine as long as there are
484 * packets to transmit and transmit resources are available.
485 * In case resources are not available stack is notified and
486 * the packet is requeued.
487 **********************************************************************/
488
489 static void
490 em_start(struct ifnet *ifp)
491 {
492 int s;
493 struct mbuf *m_head;
494 struct adapter *adapter = ifp->if_softc;
495
496 if (!adapter->link_active)
497 return;
498
499 s = splimp();
500 while (ifp->if_snd.ifq_head != NULL) {
501
502 IF_DEQUEUE(&ifp->if_snd, m_head);
503
504 if (m_head == NULL) break;
505
506 if (em_encap(adapter, m_head)) {
507 ifp->if_flags |= IFF_OACTIVE;
508 IF_PREPEND(&ifp->if_snd, m_head);
509 break;
510 }
511
512 /* Send a copy of the frame to the BPF listener */
513 #if __FreeBSD_version < 500000
514 if (ifp->if_bpf)
515 bpf_mtap(ifp, m_head);
516 #else
517 BPF_MTAP(ifp, m_head);
518 #endif
519
520 /* Set timeout in case hardware has problems transmitting */
521 ifp->if_timer = EM_TX_TIMEOUT;
522
523 }
524 splx(s);
525 return;
526 }
527
528 /*********************************************************************
529 * Ioctl entry point
530 *
531 * em_ioctl is called when the user wants to configure the
532 * interface.
533 *
534 * return 0 on success, positive on failure
535 **********************************************************************/
536
537 static int
538 em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
539 {
540 int s, mask, error = 0;
541 struct ifreq *ifr = (struct ifreq *) data;
542 struct adapter * adapter = ifp->if_softc;
543
544 s = splimp();
545 switch (command) {
546 case SIOCSIFADDR:
547 case SIOCGIFADDR:
548 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFADDR (Get/Set Interface Addr)");
549 ether_ioctl(ifp, command, data);
550 break;
551 case SIOCSIFMTU:
552 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
553 if (ifr->ifr_mtu > MAX_JUMBO_FRAME_SIZE - ETHER_HDR_LEN) {
554 error = EINVAL;
555 } else {
556 ifp->if_mtu = ifr->ifr_mtu;
557 adapter->hw.max_frame_size =
558 ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
559 em_init(adapter);
560 }
561 break;
562 case SIOCSIFFLAGS:
563 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
564 if (ifp->if_flags & IFF_UP) {
565 if (!(ifp->if_flags & IFF_RUNNING))
566 em_init(adapter);
567
568 em_disable_promisc(adapter);
569 em_set_promisc(adapter);
570 } else {
571 if (ifp->if_flags & IFF_RUNNING) {
572 em_stop(adapter);
573 }
574 }
575 break;
576 case SIOCADDMULTI:
577 case SIOCDELMULTI:
578 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
579 if (ifp->if_flags & IFF_RUNNING) {
580 em_disable_intr(adapter);
581 em_set_multi(adapter);
582 if (adapter->hw.mac_type == em_82542_rev2_0)
583 em_initialize_receive_unit(adapter);
584 em_enable_intr(adapter);
585 }
586 break;
587 case SIOCSIFMEDIA:
588 case SIOCGIFMEDIA:
589 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCxIFMEDIA (Get/Set Interface Media)");
590 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
591 break;
592 case SIOCSIFCAP:
593 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
594 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
595 if (mask & IFCAP_HWCSUM) {
596 if (IFCAP_HWCSUM & ifp->if_capenable)
597 ifp->if_capenable &= ~IFCAP_HWCSUM;
598 else
599 ifp->if_capenable |= IFCAP_HWCSUM;
600 if (ifp->if_flags & IFF_RUNNING)
601 em_init(adapter);
602 }
603 break;
604 default:
605 IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%d)\n", (int)command);
606 error = EINVAL;
607 }
608
609 splx(s);
610 return(error);
611 }
612
613 /*********************************************************************
614 * Watchdog entry point
615 *
616 * This routine is called whenever hardware quits transmitting.
617 *
618 **********************************************************************/
619
620 static void
621 em_watchdog(struct ifnet *ifp)
622 {
623 struct adapter * adapter;
624 adapter = ifp->if_softc;
625
626 /* If we are in this routine because of pause frames, then
627 * don't reset the hardware.
628 */
629 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) {
630 ifp->if_timer = EM_TX_TIMEOUT;
631 return;
632 }
633
634 printf("em%d: watchdog timeout -- resetting\n", adapter->unit);
635
636 ifp->if_flags &= ~IFF_RUNNING;
637
638 em_stop(adapter);
639 em_init(adapter);
640
641 ifp->if_oerrors++;
642 return;
643 }
644
645 /*********************************************************************
646 * Init entry point
647 *
648 * This routine is used in two ways. It is used by the stack as
649 * init entry point in network interface structure. It is also used
650 * by the driver as a hw/sw initialization routine to get to a
651 * consistent state.
652 *
653 * return 0 on success, positive on failure
654 **********************************************************************/
655
656 static void
657 em_init(void *arg)
658 {
659 int s;
660 struct ifnet *ifp;
661 struct adapter * adapter = arg;
662
663 INIT_DEBUGOUT("em_init: begin");
664
665 s = splimp();
666
667 em_stop(adapter);
668
669 /* Initialize the hardware */
670 if (em_hardware_init(adapter)) {
671 printf("em%d: Unable to initialize the hardware\n",
672 adapter->unit);
673 splx(s);
674 return;
675 }
676
677 em_enable_vlans(adapter);
678
679 /* Prepare transmit descriptors and buffers */
680 if (em_setup_transmit_structures(adapter)) {
681 printf("em%d: Could not setup transmit structures\n",
682 adapter->unit);
683 em_stop(adapter);
684 splx(s);
685 return;
686 }
687 em_initialize_transmit_unit(adapter);
688
689 /* Setup Multicast table */
690 em_set_multi(adapter);
691
692 /* Prepare receive descriptors and buffers */
693 if (em_setup_receive_structures(adapter)) {
694 printf("em%d: Could not setup receive structures\n",
695 adapter->unit);
696 em_stop(adapter);
697 splx(s);
698 return;
699 }
700 em_initialize_receive_unit(adapter);
701
702 ifp = &adapter->interface_data.ac_if;
703 ifp->if_flags |= IFF_RUNNING;
704 ifp->if_flags &= ~IFF_OACTIVE;
705
706 if (adapter->hw.mac_type >= em_82543) {
707 if (ifp->if_capenable & IFCAP_TXCSUM)
708 ifp->if_hwassist = EM_CHECKSUM_FEATURES;
709 else
710 ifp->if_hwassist = 0;
711 }
712
713 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
714 em_clear_hw_cntrs(&adapter->hw);
715 #ifdef DEVICE_POLLING
716 /*
717 * Only enable interrupts if we are not polling, make sure
718 * they are off otherwise.
719 */
720 if (ifp->if_ipending & IFF_POLLING)
721 em_disable_intr(adapter);
722 else
723 #endif /* DEVICE_POLLING */
724 em_enable_intr(adapter);
725
726 splx(s);
727 return;
728 }
729
730
731 #ifdef DEVICE_POLLING
732 static poll_handler_t em_poll;
733
734 static void
735 em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
736 {
737 struct adapter *adapter = ifp->if_softc;
738 u_int32_t reg_icr;
739
740 if (cmd == POLL_DEREGISTER) { /* final call, enable interrupts */
741 em_enable_intr(adapter);
742 return;
743 }
744 if (cmd == POLL_AND_CHECK_STATUS) {
745 reg_icr = E1000_READ_REG(&adapter->hw, ICR);
746 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
747 untimeout(em_local_timer, adapter, adapter->timer_handle);
748 adapter->hw.get_link_status = 1;
749 em_check_for_link(&adapter->hw);
750 em_print_link_status(adapter);
751 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
752 }
753 }
754 if (ifp->if_flags & IFF_RUNNING) {
755 em_process_receive_interrupts(adapter, count);
756 em_clean_transmit_interrupts(adapter);
757 }
758
759 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
760 em_start(ifp);
761 }
762 #endif /* DEVICE_POLLING */
763
764 /*********************************************************************
765 *
766 * Interrupt Service routine
767 *
768 **********************************************************************/
769 static void
770 em_intr(void *arg)
771 {
772 u_int32_t loop_cnt = EM_MAX_INTR;
773 u_int32_t reg_icr;
774 struct ifnet *ifp;
775 struct adapter *adapter = arg;
776
777 ifp = &adapter->interface_data.ac_if;
778
779 #ifdef DEVICE_POLLING
780 if (ifp->if_ipending & IFF_POLLING)
781 return;
782
783 if (ether_poll_register(em_poll, ifp)) {
784 em_disable_intr(adapter);
785 em_poll(ifp, 0, 1);
786 return;
787 }
788 #endif /* DEVICE_POLLING */
789
790
791 em_disable_intr(adapter);
792 while (loop_cnt > 0 &&
793 (reg_icr = E1000_READ_REG(&adapter->hw, ICR)) != 0) {
794
795 /* Link status change */
796 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
797 untimeout(em_local_timer, adapter,
798 adapter->timer_handle);
799 adapter->hw.get_link_status = 1;
800 em_check_for_link(&adapter->hw);
801 em_print_link_status(adapter);
802 adapter->timer_handle =
803 timeout(em_local_timer, adapter, 2*hz);
804 }
805
806 if (ifp->if_flags & IFF_RUNNING) {
807 em_process_receive_interrupts(adapter, -1);
808 em_clean_transmit_interrupts(adapter);
809 }
810 loop_cnt--;
811 }
812
813 em_enable_intr(adapter);
814
815 if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
816 em_start(ifp);
817
818 return;
819 }
820
821
822
823 /*********************************************************************
824 *
825 * Media Ioctl callback
826 *
827 * This routine is called whenever the user queries the status of
828 * the interface using ifconfig.
829 *
830 **********************************************************************/
831 static void
832 em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
833 {
834 struct adapter * adapter = ifp->if_softc;
835
836 INIT_DEBUGOUT("em_media_status: begin");
837
838 em_check_for_link(&adapter->hw);
839 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
840 if (adapter->link_active == 0) {
841 em_get_speed_and_duplex(&adapter->hw,
842 &adapter->link_speed,
843 &adapter->link_duplex);
844 adapter->link_active = 1;
845 }
846 } else {
847 if (adapter->link_active == 1) {
848 adapter->link_speed = 0;
849 adapter->link_duplex = 0;
850 adapter->link_active = 0;
851 }
852 }
853
854 ifmr->ifm_status = IFM_AVALID;
855 ifmr->ifm_active = IFM_ETHER;
856
857 if (!adapter->link_active)
858 return;
859
860 ifmr->ifm_status |= IFM_ACTIVE;
861
862 if (adapter->hw.media_type == em_media_type_fiber) {
863 ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
864 } else {
865 switch (adapter->link_speed) {
866 case 10:
867 ifmr->ifm_active |= IFM_10_T;
868 break;
869 case 100:
870 ifmr->ifm_active |= IFM_100_TX;
871 break;
872 case 1000:
873 #if __FreeBSD_version < 500000
874 ifmr->ifm_active |= IFM_1000_TX;
875 #else
876 ifmr->ifm_active |= IFM_1000_T;
877 #endif
878 break;
879 }
880 if (adapter->link_duplex == FULL_DUPLEX)
881 ifmr->ifm_active |= IFM_FDX;
882 else
883 ifmr->ifm_active |= IFM_HDX;
884 }
885 return;
886 }
887
888 /*********************************************************************
889 *
890 * Media Ioctl callback
891 *
892 * This routine is called when the user changes speed/duplex using
893 * media/mediopt option with ifconfig.
894 *
895 **********************************************************************/
896 static int
897 em_media_change(struct ifnet *ifp)
898 {
899 struct adapter * adapter = ifp->if_softc;
900 struct ifmedia *ifm = &adapter->media;
901
902 INIT_DEBUGOUT("em_media_change: begin");
903
904 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
905 return(EINVAL);
906
907 switch (IFM_SUBTYPE(ifm->ifm_media)) {
908 case IFM_AUTO:
909 adapter->hw.autoneg = DO_AUTO_NEG;
910 adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
911 break;
912 case IFM_1000_SX:
913 #if __FreeBSD_version < 500000
914 case IFM_1000_TX:
915 #else
916 case IFM_1000_T:
917 #endif
918 adapter->hw.autoneg = DO_AUTO_NEG;
919 adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
920 break;
921 case IFM_100_TX:
922 adapter->hw.autoneg = FALSE;
923 adapter->hw.autoneg_advertised = 0;
924 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
925 adapter->hw.forced_speed_duplex = em_100_full;
926 else
927 adapter->hw.forced_speed_duplex = em_100_half;
928 break;
929 case IFM_10_T:
930 adapter->hw.autoneg = FALSE;
931 adapter->hw.autoneg_advertised = 0;
932 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
933 adapter->hw.forced_speed_duplex = em_10_full;
934 else
935 adapter->hw.forced_speed_duplex = em_10_half;
936 break;
937 default:
938 printf("em%d: Unsupported media type\n", adapter->unit);
939 }
940
941 em_init(adapter);
942
943 return(0);
944 }
945
946 static void
947 em_tx_cb(void *arg, bus_dma_segment_t *seg, int nsegs, bus_size_t mapsize, int error)
948 {
949 struct em_q *q = arg;
950
951 if (error)
952 return;
953 KASSERT(nsegs <= EM_MAX_SCATTER,
954 ("Too many DMA segments returned when mapping tx packet"));
955 q->nsegs = nsegs;
956 bcopy(seg, q->segs, nsegs * sizeof(seg[0]));
957 }
958
959 #define EM_FIFO_HDR 0x10
960 #define EM_82547_PKT_THRESH 0x3e0
961 #define EM_82547_TX_FIFO_SIZE 0x2800
962 #define EM_82547_TX_FIFO_BEGIN 0xf00
963 /*********************************************************************
964 *
965 * This routine maps the mbufs to tx descriptors.
966 *
967 * return 0 on success, positive on failure
968 **********************************************************************/
969 static int
970 em_encap(struct adapter *adapter, struct mbuf *m_head)
971 {
972 u_int32_t txd_upper;
973 u_int32_t txd_lower;
974 int i, j, error;
975
976 #if __FreeBSD_version < 500000
977 struct ifvlan *ifv = NULL;
978 #else
979 struct m_tag *mtag;
980 #endif
981 struct em_q q;
982 struct em_buffer *tx_buffer = NULL;
983 struct em_tx_desc *current_tx_desc = NULL;
984 struct ifnet *ifp = &adapter->interface_data.ac_if;
985
986 /*
987 * Force a cleanup if number of TX descriptors
988 * available hits the threshold
989 */
990 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
991 em_clean_transmit_interrupts(adapter);
992 if (adapter->num_tx_desc_avail <= EM_TX_CLEANUP_THRESHOLD) {
993 adapter->no_tx_desc_avail1++;
994 return(ENOBUFS);
995 }
996 }
997
998 /*
999 * Map the packet for DMA.
1000 */
1001 if (bus_dmamap_create(adapter->txtag, BUS_DMA_NOWAIT, &q.map)) {
1002 adapter->no_tx_map_avail++;
1003 return (ENOMEM);
1004 }
1005 error = bus_dmamap_load_mbuf(adapter->txtag, q.map,
1006 m_head, em_tx_cb, &q, BUS_DMA_NOWAIT);
1007 if (error != 0) {
1008 adapter->no_tx_dma_setup++;
1009 bus_dmamap_destroy(adapter->txtag, q.map);
1010 return (error);
1011 }
1012 KASSERT(q.nsegs != 0, ("em_encap: empty packet"));
1013
1014 if (q.nsegs > adapter->num_tx_desc_avail) {
1015 adapter->no_tx_desc_avail2++;
1016 bus_dmamap_destroy(adapter->txtag, q.map);
1017 return (ENOBUFS);
1018 }
1019
1020
1021 if (ifp->if_hwassist > 0) {
1022 em_transmit_checksum_setup(adapter, m_head,
1023 &txd_upper, &txd_lower);
1024 } else
1025 txd_upper = txd_lower = 0;
1026
1027
1028 /* Find out if we are in vlan mode */
1029 #if __FreeBSD_version < 500000
1030 if ((m_head->m_flags & (M_PROTO1|M_PKTHDR)) == (M_PROTO1|M_PKTHDR) &&
1031 m_head->m_pkthdr.rcvif != NULL &&
1032 m_head->m_pkthdr.rcvif->if_type == IFT_L2VLAN)
1033 ifv = m_head->m_pkthdr.rcvif->if_softc;
1034 #else
1035 mtag = VLAN_OUTPUT_TAG(ifp, m_head);
1036 #endif
1037
1038 i = adapter->next_avail_tx_desc;
1039 for (j = 0; j < q.nsegs; j++) {
1040 tx_buffer = &adapter->tx_buffer_area[i];
1041 current_tx_desc = &adapter->tx_desc_base[i];
1042
1043 current_tx_desc->buffer_addr = htole64(q.segs[j].ds_addr);
1044 current_tx_desc->lower.data = htole32(
1045 adapter->txd_cmd | txd_lower | q.segs[j].ds_len);
1046 current_tx_desc->upper.data = htole32(txd_upper);
1047
1048 if (++i == adapter->num_tx_desc)
1049 i = 0;
1050
1051 tx_buffer->m_head = NULL;
1052 }
1053
1054 adapter->num_tx_desc_avail -= q.nsegs;
1055 adapter->next_avail_tx_desc = i;
1056
1057 #if __FreeBSD_version < 500000
1058 if (ifv != NULL) {
1059 /* Set the vlan id */
1060 current_tx_desc->upper.fields.special = htole16(ifv->ifv_tag);
1061 #else
1062 if (mtag != NULL) {
1063 /* Set the vlan id */
1064 current_tx_desc->upper.fields.special = htole16(VLAN_TAG_VALUE(mtag));
1065 #endif
1066
1067 /* Tell hardware to add tag */
1068 current_tx_desc->lower.data |= htole32(E1000_TXD_CMD_VLE);
1069 }
1070
1071 tx_buffer->m_head = m_head;
1072 tx_buffer->map = q.map;
1073 bus_dmamap_sync(adapter->txtag, q.map, BUS_DMASYNC_PREWRITE);
1074
1075 /*
1076 * Last Descriptor of Packet needs End Of Packet (EOP)
1077 */
1078 current_tx_desc->lower.data |= htole32(E1000_TXD_CMD_EOP);
1079
1080 /*
1081 * Advance the Transmit Descriptor Tail (Tdt), this tells the E1000
1082 * that this frame is available to transmit.
1083 */
1084 if (adapter->hw.mac_type == em_82547 &&
1085 adapter->link_duplex == HALF_DUPLEX) {
1086 em_82547_move_tail(adapter);
1087 } else {
1088 E1000_WRITE_REG(&adapter->hw, TDT, i);
1089 if (adapter->hw.mac_type == em_82547) {
1090 em_82547_update_fifo_head(adapter, m_head->m_pkthdr.len);
1091 }
1092 }
1093
1094 return(0);
1095 }
1096
1097 /*********************************************************************
1098 *
1099 * 82547 workaround to avoid controller hang in half-duplex environment.
1100 * The workaround is to avoid queuing a large packet that would span
1101 * the internal Tx FIFO ring boundary. We need to reset the FIFO pointers
1102 * in this case. We do that only when FIFO is queiced.
1103 *
1104 **********************************************************************/
1105 static void
1106 em_82547_move_tail(void *arg)
1107 {
1108 int s;
1109 struct adapter *adapter = arg;
1110 uint16_t hw_tdt;
1111 uint16_t sw_tdt;
1112 struct em_tx_desc *tx_desc;
1113 uint16_t length = 0;
1114 boolean_t eop = 0;
1115
1116 s = splimp();
1117 hw_tdt = E1000_READ_REG(&adapter->hw, TDT);
1118 sw_tdt = adapter->next_avail_tx_desc;
1119
1120 while (hw_tdt != sw_tdt) {
1121 tx_desc = &adapter->tx_desc_base[hw_tdt];
1122 length += tx_desc->lower.flags.length;
1123 eop = tx_desc->lower.data & E1000_TXD_CMD_EOP;
1124 if(++hw_tdt == adapter->num_tx_desc)
1125 hw_tdt = 0;
1126
1127 if(eop) {
1128 if (em_82547_fifo_workaround(adapter, length)) {
1129 adapter->tx_fifo_wrk++;
1130 adapter->tx_fifo_timer_handle =
1131 timeout(em_82547_move_tail,
1132 adapter, 1);
1133 splx(s);
1134 return;
1135 }
1136 else {
1137 E1000_WRITE_REG(&adapter->hw, TDT, hw_tdt);
1138 em_82547_update_fifo_head(adapter, length);
1139 length = 0;
1140 }
1141 }
1142 }
1143 splx(s);
1144 return;
1145 }
1146
1147 static int
1148 em_82547_fifo_workaround(struct adapter *adapter, int len)
1149 {
1150 int fifo_space, fifo_pkt_len;
1151
1152 fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1153
1154 if (adapter->link_duplex == HALF_DUPLEX) {
1155 fifo_space = EM_82547_TX_FIFO_SIZE - adapter->tx_fifo_head;
1156
1157 if (fifo_pkt_len >= (EM_82547_PKT_THRESH + fifo_space)) {
1158 if (em_82547_tx_fifo_reset(adapter)) {
1159 return(0);
1160 }
1161 else {
1162 return(1);
1163 }
1164 }
1165 }
1166
1167 return(0);
1168 }
1169
1170 static void
1171 em_82547_update_fifo_head(struct adapter *adapter, int len)
1172 {
1173 int fifo_pkt_len = EM_ROUNDUP(len + EM_FIFO_HDR, EM_FIFO_HDR);
1174
1175 /* tx_fifo_head is always 16 byte aligned */
1176 adapter->tx_fifo_head += fifo_pkt_len;
1177 if (adapter->tx_fifo_head >= EM_82547_TX_FIFO_SIZE) {
1178 adapter->tx_fifo_head -= EM_82547_TX_FIFO_SIZE;
1179 }
1180
1181 return;
1182 }
1183
1184
1185 static int
1186 em_82547_tx_fifo_reset(struct adapter *adapter)
1187 {
1188 uint32_t tctl;
1189
1190 if ( (E1000_READ_REG(&adapter->hw, TDT) ==
1191 E1000_READ_REG(&adapter->hw, TDH)) &&
1192 (E1000_READ_REG(&adapter->hw, TDFT) ==
1193 E1000_READ_REG(&adapter->hw, TDFH)) &&
1194 (E1000_READ_REG(&adapter->hw, TDFTS) ==
1195 E1000_READ_REG(&adapter->hw, TDFHS)) &&
1196 (E1000_READ_REG(&adapter->hw, TDFPC) == 0)) {
1197
1198 /* Disable TX unit */
1199 tctl = E1000_READ_REG(&adapter->hw, TCTL);
1200 E1000_WRITE_REG(&adapter->hw, TCTL, tctl & ~E1000_TCTL_EN);
1201
1202 /* Reset FIFO pointers */
1203 E1000_WRITE_REG(&adapter->hw, TDFT, EM_82547_TX_FIFO_BEGIN);
1204 E1000_WRITE_REG(&adapter->hw, TDFH, EM_82547_TX_FIFO_BEGIN);
1205 E1000_WRITE_REG(&adapter->hw, TDFTS, EM_82547_TX_FIFO_BEGIN);
1206 E1000_WRITE_REG(&adapter->hw, TDFHS, EM_82547_TX_FIFO_BEGIN);
1207
1208 /* Re-enable TX unit */
1209 E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1210 E1000_WRITE_FLUSH(&adapter->hw);
1211
1212 adapter->tx_fifo_head = 0;
1213 adapter->tx_fifo_reset++;
1214
1215 return(TRUE);
1216 }
1217 else {
1218 return(FALSE);
1219 }
1220 }
1221
1222 static void
1223 em_set_promisc(struct adapter * adapter)
1224 {
1225
1226 u_int32_t reg_rctl;
1227 struct ifnet *ifp = &adapter->interface_data.ac_if;
1228
1229 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1230
1231 if (ifp->if_flags & IFF_PROMISC) {
1232 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1233 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1234 } else if (ifp->if_flags & IFF_ALLMULTI) {
1235 reg_rctl |= E1000_RCTL_MPE;
1236 reg_rctl &= ~E1000_RCTL_UPE;
1237 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1238 }
1239
1240 return;
1241 }
1242
1243 static void
1244 em_disable_promisc(struct adapter * adapter)
1245 {
1246 u_int32_t reg_rctl;
1247
1248 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1249
1250 reg_rctl &= (~E1000_RCTL_UPE);
1251 reg_rctl &= (~E1000_RCTL_MPE);
1252 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1253
1254 return;
1255 }
1256
1257
1258 /*********************************************************************
1259 * Multicast Update
1260 *
1261 * This routine is called whenever multicast address list is updated.
1262 *
1263 **********************************************************************/
1264
1265 static void
1266 em_set_multi(struct adapter * adapter)
1267 {
1268 u_int32_t reg_rctl = 0;
1269 u_int8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
1270 struct ifmultiaddr *ifma;
1271 int mcnt = 0;
1272 struct ifnet *ifp = &adapter->interface_data.ac_if;
1273
1274 IOCTL_DEBUGOUT("em_set_multi: begin");
1275
1276 if (adapter->hw.mac_type == em_82542_rev2_0) {
1277 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1278 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1279 em_pci_clear_mwi(&adapter->hw);
1280 }
1281 reg_rctl |= E1000_RCTL_RST;
1282 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1283 msec_delay(5);
1284 }
1285
1286 #if __FreeBSD_version < 500000
1287 LIST_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1288 #else
1289 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
1290 #endif
1291 if (ifma->ifma_addr->sa_family != AF_LINK)
1292 continue;
1293
1294 if (mcnt == MAX_NUM_MULTICAST_ADDRESSES) break;
1295
1296 bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
1297 &mta[mcnt*ETH_LENGTH_OF_ADDRESS], ETH_LENGTH_OF_ADDRESS);
1298 mcnt++;
1299 }
1300
1301 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
1302 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1303 reg_rctl |= E1000_RCTL_MPE;
1304 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1305 } else
1306 em_mc_addr_list_update(&adapter->hw, mta, mcnt, 0);
1307
1308 if (adapter->hw.mac_type == em_82542_rev2_0) {
1309 reg_rctl = E1000_READ_REG(&adapter->hw, RCTL);
1310 reg_rctl &= ~E1000_RCTL_RST;
1311 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
1312 msec_delay(5);
1313 if (adapter->hw.pci_cmd_word & CMD_MEM_WRT_INVALIDATE) {
1314 em_pci_set_mwi(&adapter->hw);
1315 }
1316 }
1317
1318 return;
1319 }
1320
1321
1322 /*********************************************************************
1323 * Timer routine
1324 *
1325 * This routine checks for link status and updates statistics.
1326 *
1327 **********************************************************************/
1328
1329 static void
1330 em_local_timer(void *arg)
1331 {
1332 int s;
1333 struct ifnet *ifp;
1334 struct adapter * adapter = arg;
1335 ifp = &adapter->interface_data.ac_if;
1336
1337 s = splimp();
1338
1339 em_check_for_link(&adapter->hw);
1340 em_print_link_status(adapter);
1341 em_update_stats_counters(adapter);
1342 if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
1343 em_print_hw_stats(adapter);
1344 }
1345 em_smartspeed(adapter);
1346
1347 adapter->timer_handle = timeout(em_local_timer, adapter, 2*hz);
1348
1349 splx(s);
1350 return;
1351 }
1352
1353 static void
1354 em_print_link_status(struct adapter * adapter)
1355 {
1356 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1357 if (adapter->link_active == 0) {
1358 em_get_speed_and_duplex(&adapter->hw,
1359 &adapter->link_speed,
1360 &adapter->link_duplex);
1361 printf("em%d: Link is up %d Mbps %s\n",
1362 adapter->unit,
1363 adapter->link_speed,
1364 ((adapter->link_duplex == FULL_DUPLEX) ?
1365 "Full Duplex" : "Half Duplex"));
1366 adapter->link_active = 1;
1367 adapter->smartspeed = 0;
1368 }
1369 } else {
1370 if (adapter->link_active == 1) {
1371 adapter->link_speed = 0;
1372 adapter->link_duplex = 0;
1373 printf("em%d: Link is Down\n", adapter->unit);
1374 adapter->link_active = 0;
1375 }
1376 }
1377
1378 return;
1379 }
1380
1381 /*********************************************************************
1382 *
1383 * This routine disables all traffic on the adapter by issuing a
1384 * global reset on the MAC and deallocates TX/RX buffers.
1385 *
1386 **********************************************************************/
1387
1388 static void
1389 em_stop(void *arg)
1390 {
1391 struct ifnet *ifp;
1392 struct adapter * adapter = arg;
1393 ifp = &adapter->interface_data.ac_if;
1394
1395 INIT_DEBUGOUT("em_stop: begin\n");
1396 em_disable_intr(adapter);
1397 em_reset_hw(&adapter->hw);
1398 untimeout(em_local_timer, adapter, adapter->timer_handle);
1399 untimeout(em_82547_move_tail, adapter,
1400 adapter->tx_fifo_timer_handle);
1401 em_free_transmit_structures(adapter);
1402 em_free_receive_structures(adapter);
1403
1404
1405 /* Tell the stack that the interface is no longer active */
1406 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
1407
1408 return;
1409 }
1410
1411
1412 /*********************************************************************
1413 *
1414 * Determine hardware revision.
1415 *
1416 **********************************************************************/
1417 static void
1418 em_identify_hardware(struct adapter * adapter)
1419 {
1420 device_t dev = adapter->dev;
1421
1422 /* Make sure our PCI config space has the necessary stuff set */
1423 adapter->hw.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
1424 if (!((adapter->hw.pci_cmd_word & PCIM_CMD_BUSMASTEREN) &&
1425 (adapter->hw.pci_cmd_word & PCIM_CMD_MEMEN))) {
1426 printf("em%d: Memory Access and/or Bus Master bits were not set!\n",
1427 adapter->unit);
1428 adapter->hw.pci_cmd_word |=
1429 (PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN);
1430 pci_write_config(dev, PCIR_COMMAND, adapter->hw.pci_cmd_word, 2);
1431 }
1432
1433 /* Save off the information about this board */
1434 adapter->hw.vendor_id = pci_get_vendor(dev);
1435 adapter->hw.device_id = pci_get_device(dev);
1436 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
1437 adapter->hw.subsystem_vendor_id = pci_read_config(dev, PCIR_SUBVEND_0, 2);
1438 adapter->hw.subsystem_id = pci_read_config(dev, PCIR_SUBDEV_0, 2);
1439
1440 /* Identify the MAC */
1441 if (em_set_mac_type(&adapter->hw))
1442 printf("em%d: Unknown MAC Type\n", adapter->unit);
1443
1444 return;
1445 }
1446
1447 static int
1448 em_allocate_pci_resources(struct adapter * adapter)
1449 {
1450 int i, val, rid;
1451 device_t dev = adapter->dev;
1452
1453 rid = EM_MMBA;
1454 adapter->res_memory = bus_alloc_resource(dev, SYS_RES_MEMORY,
1455 &rid, 0, ~0, 1,
1456 RF_ACTIVE);
1457 if (!(adapter->res_memory)) {
1458 printf("em%d: Unable to allocate bus resource: memory\n",
1459 adapter->unit);
1460 return(ENXIO);
1461 }
1462 adapter->osdep.mem_bus_space_tag =
1463 rman_get_bustag(adapter->res_memory);
1464 adapter->osdep.mem_bus_space_handle =
1465 rman_get_bushandle(adapter->res_memory);
1466 adapter->hw.hw_addr = (uint8_t *)&adapter->osdep.mem_bus_space_handle;
1467
1468
1469 if (adapter->hw.mac_type > em_82543) {
1470 /* Figure our where our IO BAR is ? */
1471 rid = EM_MMBA;
1472 for (i = 0; i < 5; i++) {
1473 val = pci_read_config(dev, rid, 4);
1474 if (val & 0x00000001) {
1475 adapter->io_rid = rid;
1476 break;
1477 }
1478 rid += 4;
1479 }
1480
1481 adapter->res_ioport = bus_alloc_resource(dev, SYS_RES_IOPORT,
1482 &adapter->io_rid, 0, ~0, 1,
1483 RF_ACTIVE);
1484 if (!(adapter->res_ioport)) {
1485 printf("em%d: Unable to allocate bus resource: ioport\n",
1486 adapter->unit);
1487 return(ENXIO);
1488 }
1489
1490 adapter->hw.io_base =
1491 rman_get_start(adapter->res_ioport);
1492 }
1493
1494 rid = 0x0;
1495 adapter->res_interrupt = bus_alloc_resource(dev, SYS_RES_IRQ,
1496 &rid, 0, ~0, 1,
1497 RF_SHAREABLE | RF_ACTIVE);
1498 if (!(adapter->res_interrupt)) {
1499 printf("em%d: Unable to allocate bus resource: interrupt\n",
1500 adapter->unit);
1501 return(ENXIO);
1502 }
1503 if (bus_setup_intr(dev, adapter->res_interrupt, INTR_TYPE_NET,
1504 (void (*)(void *)) em_intr, adapter,
1505 &adapter->int_handler_tag)) {
1506 printf("em%d: Error registering interrupt handler!\n",
1507 adapter->unit);
1508 return(ENXIO);
1509 }
1510
1511 adapter->hw.back = &adapter->osdep;
1512
1513 return(0);
1514 }
1515
1516 static void
1517 em_free_pci_resources(struct adapter * adapter)
1518 {
1519 device_t dev = adapter->dev;
1520
1521 if (adapter->res_interrupt != NULL) {
1522 bus_teardown_intr(dev, adapter->res_interrupt,
1523 adapter->int_handler_tag);
1524 bus_release_resource(dev, SYS_RES_IRQ, 0,
1525 adapter->res_interrupt);
1526 }
1527 if (adapter->res_memory != NULL) {
1528 bus_release_resource(dev, SYS_RES_MEMORY, EM_MMBA,
1529 adapter->res_memory);
1530 }
1531
1532 if (adapter->res_ioport != NULL) {
1533 bus_release_resource(dev, SYS_RES_IOPORT, adapter->io_rid,
1534 adapter->res_ioport);
1535 }
1536 return;
1537 }
1538
1539 /*********************************************************************
1540 *
1541 * Initialize the hardware to a configuration as specified by the
1542 * adapter structure. The controller is reset, the EEPROM is
1543 * verified, the MAC address is set, then the shared initialization
1544 * routines are called.
1545 *
1546 **********************************************************************/
1547 static int
1548 em_hardware_init(struct adapter * adapter)
1549 {
1550 /* Issue a global reset */
1551 em_reset_hw(&adapter->hw);
1552
1553 /* When hardware is reset, fifo_head is also reset */
1554 adapter->tx_fifo_head = 0;
1555
1556 /* Make sure we have a good EEPROM before we read from it */
1557 if (em_validate_eeprom_checksum(&adapter->hw) < 0) {
1558 printf("em%d: The EEPROM Checksum Is Not Valid\n",
1559 adapter->unit);
1560 return(EIO);
1561 }
1562
1563 if (em_read_part_num(&adapter->hw, &(adapter->part_num)) < 0) {
1564 printf("em%d: EEPROM read error while reading part number\n",
1565 adapter->unit);
1566 return(EIO);
1567 }
1568
1569 if (em_init_hw(&adapter->hw) < 0) {
1570 printf("em%d: Hardware Initialization Failed",
1571 adapter->unit);
1572 return(EIO);
1573 }
1574
1575 em_check_for_link(&adapter->hw);
1576 if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)
1577 adapter->link_active = 1;
1578 else
1579 adapter->link_active = 0;
1580
1581 if (adapter->link_active) {
1582 em_get_speed_and_duplex(&adapter->hw,
1583 &adapter->link_speed,
1584 &adapter->link_duplex);
1585 } else {
1586 adapter->link_speed = 0;
1587 adapter->link_duplex = 0;
1588 }
1589
1590 return(0);
1591 }
1592
1593 /*********************************************************************
1594 *
1595 * Setup networking device structure and register an interface.
1596 *
1597 **********************************************************************/
1598 static void
1599 em_setup_interface(device_t dev, struct adapter * adapter)
1600 {
1601 struct ifnet *ifp;
1602 INIT_DEBUGOUT("em_setup_interface: begin");
1603
1604 ifp = &adapter->interface_data.ac_if;
1605 ifp->if_unit = adapter->unit;
1606 ifp->if_name = "em";
1607 ifp->if_mtu = ETHERMTU;
1608 ifp->if_output = ether_output;
1609 ifp->if_baudrate = 1000000000;
1610 ifp->if_init = em_init;
1611 ifp->if_softc = adapter;
1612 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
1613 ifp->if_ioctl = em_ioctl;
1614 ifp->if_start = em_start;
1615 ifp->if_watchdog = em_watchdog;
1616 ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 1;
1617
1618 #if __FreeBSD_version < 500000
1619 ether_ifattach(ifp, ETHER_BPF_SUPPORTED);
1620 #else
1621 ether_ifattach(ifp, adapter->interface_data.ac_enaddr);
1622 #endif
1623
1624 if (adapter->hw.mac_type >= em_82543) {
1625 ifp->if_capabilities = IFCAP_HWCSUM;
1626 ifp->if_capenable = ifp->if_capabilities;
1627 }
1628
1629 /*
1630 * Tell the upper layer(s) we support long frames.
1631 */
1632 ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
1633 #if __FreeBSD_version >= 500000
1634 ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
1635 #endif
1636
1637
1638 /*
1639 * Specify the media types supported by this adapter and register
1640 * callbacks to update media and link information
1641 */
1642 ifmedia_init(&adapter->media, IFM_IMASK, em_media_change,
1643 em_media_status);
1644 if (adapter->hw.media_type == em_media_type_fiber) {
1645 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX | IFM_FDX,
1646 0, NULL);
1647 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_SX,
1648 0, NULL);
1649 } else {
1650 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
1651 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
1652 0, NULL);
1653 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
1654 0, NULL);
1655 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
1656 0, NULL);
1657 #if __FreeBSD_version < 500000
1658 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX | IFM_FDX,
1659 0, NULL);
1660 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_TX, 0, NULL);
1661 #else
1662 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T | IFM_FDX,
1663 0, NULL);
1664 ifmedia_add(&adapter->media, IFM_ETHER | IFM_1000_T, 0, NULL);
1665 #endif
1666 }
1667 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
1668 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
1669
1670 return;
1671 }
1672
1673
1674 /*********************************************************************
1675 *
1676 * Workaround for SmartSpeed on 82541 and 82547 controllers
1677 *
1678 **********************************************************************/
1679 static void
1680 em_smartspeed(struct adapter *adapter)
1681 {
1682 uint16_t phy_tmp;
1683
1684 if(adapter->link_active || (adapter->hw.phy_type != em_phy_igp) ||
1685 !adapter->hw.autoneg || !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
1686 return;
1687
1688 if(adapter->smartspeed == 0) {
1689 /* If Master/Slave config fault is asserted twice,
1690 * we assume back-to-back */
1691 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1692 if(!(phy_tmp & SR_1000T_MS_CONFIG_FAULT)) return;
1693 em_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_tmp);
1694 if(phy_tmp & SR_1000T_MS_CONFIG_FAULT) {
1695 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL,
1696 &phy_tmp);
1697 if(phy_tmp & CR_1000T_MS_ENABLE) {
1698 phy_tmp &= ~CR_1000T_MS_ENABLE;
1699 em_write_phy_reg(&adapter->hw,
1700 PHY_1000T_CTRL, phy_tmp);
1701 adapter->smartspeed++;
1702 if(adapter->hw.autoneg &&
1703 !em_phy_setup_autoneg(&adapter->hw) &&
1704 !em_read_phy_reg(&adapter->hw, PHY_CTRL,
1705 &phy_tmp)) {
1706 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1707 MII_CR_RESTART_AUTO_NEG);
1708 em_write_phy_reg(&adapter->hw,
1709 PHY_CTRL, phy_tmp);
1710 }
1711 }
1712 }
1713 return;
1714 } else if(adapter->smartspeed == EM_SMARTSPEED_DOWNSHIFT) {
1715 /* If still no link, perhaps using 2/3 pair cable */
1716 em_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_tmp);
1717 phy_tmp |= CR_1000T_MS_ENABLE;
1718 em_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
1719 if(adapter->hw.autoneg &&
1720 !em_phy_setup_autoneg(&adapter->hw) &&
1721 !em_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_tmp)) {
1722 phy_tmp |= (MII_CR_AUTO_NEG_EN |
1723 MII_CR_RESTART_AUTO_NEG);
1724 em_write_phy_reg(&adapter->hw, PHY_CTRL, phy_tmp);
1725 }
1726 }
1727 /* Restart process after EM_SMARTSPEED_MAX iterations */
1728 if(adapter->smartspeed++ == EM_SMARTSPEED_MAX)
1729 adapter->smartspeed = 0;
1730
1731 return;
1732 }
1733
1734
1735 /*
1736 * Manage DMA'able memory.
1737 */
1738 static void
1739 em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
1740 {
1741 if (error)
1742 return;
1743 *(bus_addr_t*) arg = segs->ds_addr;
1744 return;
1745 }
1746
1747 static int
1748 em_dma_malloc(struct adapter *adapter, bus_size_t size,
1749 struct em_dma_alloc *dma, int mapflags)
1750 {
1751 int r;
1752
1753 r = bus_dma_tag_create(NULL, /* parent */
1754 PAGE_SIZE, 0, /* alignment, bounds */
1755 BUS_SPACE_MAXADDR, /* lowaddr */
1756 BUS_SPACE_MAXADDR, /* highaddr */
1757 NULL, NULL, /* filter, filterarg */
1758 size, /* maxsize */
1759 1, /* nsegments */
1760 size, /* maxsegsize */
1761 BUS_DMA_ALLOCNOW, /* flags */
1762 &dma->dma_tag);
1763 if (r != 0) {
1764 printf("em%d: em_dma_malloc: bus_dma_tag_create failed; "
1765 "error %u\n", adapter->unit, r);
1766 goto fail_0;
1767 }
1768
1769 r = bus_dmamap_create(dma->dma_tag, BUS_DMA_NOWAIT, &dma->dma_map);
1770 if (r != 0) {
1771 printf("em%d: em_dma_malloc: bus_dmamap_create failed; "
1772 "error %u\n", adapter->unit, r);
1773 goto fail_1;
1774 }
1775
1776 r = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
1777 BUS_DMA_NOWAIT, &dma->dma_map);
1778 if (r != 0) {
1779 printf("em%d: em_dma_malloc: bus_dmammem_alloc failed; "
1780 "size %ju, error %d\n", adapter->unit,
1781 (uintmax_t)size, r);
1782 goto fail_2;
1783 }
1784
1785 r = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
1786 size,
1787 em_dmamap_cb,
1788 &dma->dma_paddr,
1789 mapflags | BUS_DMA_NOWAIT);
1790 if (r != 0) {
1791 printf("em%d: em_dma_malloc: bus_dmamap_load failed; "
1792 "error %u\n", adapter->unit, r);
1793 goto fail_3;
1794 }
1795
1796 dma->dma_size = size;
1797 return (0);
1798
1799 fail_3:
1800 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
1801 fail_2:
1802 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
1803 fail_1:
1804 bus_dmamap_destroy(dma->dma_tag, dma->dma_map);
1805 bus_dma_tag_destroy(dma->dma_tag);
1806 fail_0:
1807 dma->dma_map = NULL;
1808 dma->dma_tag = NULL;
1809 return (r);
1810 }
1811
1812 static void
1813 em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
1814 {
1815 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
1816 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
1817 bus_dmamap_destroy(dma->dma_tag, dma->dma_map);
1818 bus_dma_tag_destroy(dma->dma_tag);
1819 }
1820
1821
1822 /*********************************************************************
1823 *
1824 * Allocate memory for tx_buffer structures. The tx_buffer stores all
1825 * the information needed to transmit a packet on the wire.
1826 *
1827 **********************************************************************/
1828 static int
1829 em_allocate_transmit_structures(struct adapter * adapter)
1830 {
1831 if (!(adapter->tx_buffer_area =
1832 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
1833 adapter->num_tx_desc, M_DEVBUF,
1834 M_NOWAIT))) {
1835 printf("em%d: Unable to allocate tx_buffer memory\n",
1836 adapter->unit);
1837 return ENOMEM;
1838 }
1839
1840 bzero(adapter->tx_buffer_area,
1841 sizeof(struct em_buffer) * adapter->num_tx_desc);
1842
1843 return 0;
1844 }
1845
1846 /*********************************************************************
1847 *
1848 * Allocate and initialize transmit structures.
1849 *
1850 **********************************************************************/
1851 static int
1852 em_setup_transmit_structures(struct adapter * adapter)
1853 {
1854 /*
1855 * Setup DMA descriptor areas.
1856 */
1857 if (bus_dma_tag_create(NULL, /* parent */
1858 PAGE_SIZE, 0, /* alignment, bounds */
1859 BUS_SPACE_MAXADDR, /* lowaddr */
1860 BUS_SPACE_MAXADDR, /* highaddr */
1861 NULL, NULL, /* filter, filterarg */
1862 MCLBYTES * 8, /* maxsize */
1863 EM_MAX_SCATTER, /* nsegments */
1864 MCLBYTES * 8, /* maxsegsize */
1865 BUS_DMA_ALLOCNOW, /* flags */
1866 &adapter->txtag)) {
1867 printf("em%d: Unable to allocate TX DMA tag\n", adapter->unit);
1868 return (ENOMEM);
1869 }
1870
1871 if (em_allocate_transmit_structures(adapter))
1872 return (ENOMEM);
1873
1874 bzero((void *) adapter->tx_desc_base,
1875 (sizeof(struct em_tx_desc)) * adapter->num_tx_desc);
1876
1877 adapter->next_avail_tx_desc = 0;
1878 adapter->oldest_used_tx_desc = 0;
1879
1880 /* Set number of descriptors available */
1881 adapter->num_tx_desc_avail = adapter->num_tx_desc;
1882
1883 /* Set checksum context */
1884 adapter->active_checksum_context = OFFLOAD_NONE;
1885
1886 return (0);
1887 }
1888
1889 /*********************************************************************
1890 *
1891 * Enable transmit unit.
1892 *
1893 **********************************************************************/
1894 static void
1895 em_initialize_transmit_unit(struct adapter * adapter)
1896 {
1897 u_int32_t reg_tctl;
1898 u_int32_t reg_tipg = 0;
1899 u_int64_t bus_addr;
1900
1901 /* Setup the Base and Length of the Tx Descriptor Ring */
1902 bus_addr = adapter->txdma.dma_paddr;
1903 E1000_WRITE_REG(&adapter->hw, TDBAL, (u_int32_t)bus_addr);
1904 E1000_WRITE_REG(&adapter->hw, TDBAH, (u_int32_t)(bus_addr >> 32));
1905 E1000_WRITE_REG(&adapter->hw, TDLEN,
1906 adapter->num_tx_desc *
1907 sizeof(struct em_tx_desc));
1908
1909 /* Setup the HW Tx Head and Tail descriptor pointers */
1910 E1000_WRITE_REG(&adapter->hw, TDH, 0);
1911 E1000_WRITE_REG(&adapter->hw, TDT, 0);
1912
1913
1914 HW_DEBUGOUT2("Base = %x, Length = %x\n",
1915 E1000_READ_REG(&adapter->hw, TDBAL),
1916 E1000_READ_REG(&adapter->hw, TDLEN));
1917
1918
1919 /* Set the default values for the Tx Inter Packet Gap timer */
1920 switch (adapter->hw.mac_type) {
1921 case em_82543:
1922 case em_82544:
1923 case em_82540:
1924 case em_82545:
1925 case em_82546:
1926 case em_82541:
1927 case em_82547:
1928 if (adapter->hw.media_type == em_media_type_fiber)
1929 reg_tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
1930 else
1931 reg_tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
1932 reg_tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1933 reg_tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1934 break;
1935 case em_82542_rev2_0:
1936 case em_82542_rev2_1:
1937 reg_tipg = DEFAULT_82542_TIPG_IPGT;
1938 reg_tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
1939 reg_tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
1940 break;
1941 default:
1942 printf("em%d: Invalid mac type detected\n", adapter->unit);
1943 }
1944 E1000_WRITE_REG(&adapter->hw, TIPG, reg_tipg);
1945 E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
1946 if(adapter->hw.mac_type >= em_82540)
1947 E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
1948
1949 /* Program the Transmit Control Register */
1950 reg_tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
1951 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
1952 if (adapter->link_duplex == 1) {
1953 reg_tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1954 } else {
1955 reg_tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1956 }
1957 E1000_WRITE_REG(&adapter->hw, TCTL, reg_tctl);
1958
1959 /* Setup Transmit Descriptor Settings for this adapter */
1960 adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_RS;
1961
1962 if (adapter->tx_int_delay > 0)
1963 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
1964
1965 return;
1966 }
1967
1968 /*********************************************************************
1969 *
1970 * Free all transmit related data structures.
1971 *
1972 **********************************************************************/
1973 static void
1974 em_free_transmit_structures(struct adapter * adapter)
1975 {
1976 struct em_buffer *tx_buffer;
1977 int i;
1978
1979 INIT_DEBUGOUT("free_transmit_structures: begin");
1980
1981 if (adapter->tx_buffer_area != NULL) {
1982 tx_buffer = adapter->tx_buffer_area;
1983 for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) {
1984 if (tx_buffer->m_head != NULL) {
1985 bus_dmamap_unload(adapter->txtag, tx_buffer->map);
1986 bus_dmamap_destroy(adapter->txtag, tx_buffer->map);
1987 m_freem(tx_buffer->m_head);
1988 }
1989 tx_buffer->m_head = NULL;
1990 }
1991 }
1992 if (adapter->tx_buffer_area != NULL) {
1993 free(adapter->tx_buffer_area, M_DEVBUF);
1994 adapter->tx_buffer_area = NULL;
1995 }
1996 if (adapter->txtag != NULL) {
1997 bus_dma_tag_destroy(adapter->txtag);
1998 adapter->txtag = NULL;
1999 }
2000 return;
2001 }
2002
2003 /*********************************************************************
2004 *
2005 * The offload context needs to be set when we transfer the first
2006 * packet of a particular protocol (TCP/UDP). We change the
2007 * context only if the protocol type changes.
2008 *
2009 **********************************************************************/
2010 static void
2011 em_transmit_checksum_setup(struct adapter * adapter,
2012 struct mbuf *mp,
2013 u_int32_t *txd_upper,
2014 u_int32_t *txd_lower)
2015 {
2016 struct em_context_desc *TXD;
2017 struct em_buffer *tx_buffer;
2018 int curr_txd;
2019
2020 if (mp->m_pkthdr.csum_flags) {
2021
2022 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
2023 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
2024 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
2025 if (adapter->active_checksum_context == OFFLOAD_TCP_IP)
2026 return;
2027 else
2028 adapter->active_checksum_context = OFFLOAD_TCP_IP;
2029
2030 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
2031 *txd_upper = E1000_TXD_POPTS_TXSM << 8;
2032 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
2033 if (adapter->active_checksum_context == OFFLOAD_UDP_IP)
2034 return;
2035 else
2036 adapter->active_checksum_context = OFFLOAD_UDP_IP;
2037 } else {
2038 *txd_upper = 0;
2039 *txd_lower = 0;
2040 return;
2041 }
2042 } else {
2043 *txd_upper = 0;
2044 *txd_lower = 0;
2045 return;
2046 }
2047
2048 /* If we reach this point, the checksum offload context
2049 * needs to be reset.
2050 */
2051 curr_txd = adapter->next_avail_tx_desc;
2052 tx_buffer = &adapter->tx_buffer_area[curr_txd];
2053 TXD = (struct em_context_desc *) &adapter->tx_desc_base[curr_txd];
2054
2055 TXD->lower_setup.ip_fields.ipcss = ETHER_HDR_LEN;
2056 TXD->lower_setup.ip_fields.ipcso =
2057 ETHER_HDR_LEN + offsetof(struct ip, ip_sum);
2058 TXD->lower_setup.ip_fields.ipcse =
2059 htole16(ETHER_HDR_LEN + sizeof(struct ip) - 1);
2060
2061 TXD->upper_setup.tcp_fields.tucss =
2062 ETHER_HDR_LEN + sizeof(struct ip);
2063 TXD->upper_setup.tcp_fields.tucse = htole16(0);
2064
2065 if (adapter->active_checksum_context == OFFLOAD_TCP_IP) {
2066 TXD->upper_setup.tcp_fields.tucso =
2067 ETHER_HDR_LEN + sizeof(struct ip) +
2068 offsetof(struct tcphdr, th_sum);
2069 } else if (adapter->active_checksum_context == OFFLOAD_UDP_IP) {
2070 TXD->upper_setup.tcp_fields.tucso =
2071 ETHER_HDR_LEN + sizeof(struct ip) +
2072 offsetof(struct udphdr, uh_sum);
2073 }
2074
2075 TXD->tcp_seg_setup.data = htole32(0);
2076 TXD->cmd_and_length = htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT);
2077
2078 tx_buffer->m_head = NULL;
2079
2080 if (++curr_txd == adapter->num_tx_desc)
2081 curr_txd = 0;
2082
2083 adapter->num_tx_desc_avail--;
2084 adapter->next_avail_tx_desc = curr_txd;
2085
2086 return;
2087 }
2088
2089 /**********************************************************************
2090 *
2091 * Examine each tx_buffer in the used queue. If the hardware is done
2092 * processing the packet then free associated resources. The
2093 * tx_buffer is put back on the free queue.
2094 *
2095 **********************************************************************/
2096 static void
2097 em_clean_transmit_interrupts(struct adapter * adapter)
2098 {
2099 int s;
2100 int i, num_avail;
2101 struct em_buffer *tx_buffer;
2102 struct em_tx_desc *tx_desc;
2103
2104 if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
2105 return;
2106
2107 s = splimp();
2108 #ifdef DBG_STATS
2109 adapter->clean_tx_interrupts++;
2110 #endif
2111 num_avail = adapter->num_tx_desc_avail;
2112 i = adapter->oldest_used_tx_desc;
2113
2114 tx_buffer = &adapter->tx_buffer_area[i];
2115 tx_desc = &adapter->tx_desc_base[i];
2116
2117 while (tx_desc->upper.fields.status & E1000_TXD_STAT_DD) {
2118
2119 tx_desc->upper.data = 0;
2120 num_avail++;
2121
2122 if (tx_buffer->m_head) {
2123
2124 bus_dmamap_sync(adapter->txtag, tx_buffer->map,
2125 BUS_DMASYNC_POSTWRITE);
2126 bus_dmamap_unload(adapter->txtag, tx_buffer->map);
2127 bus_dmamap_destroy(adapter->txtag, tx_buffer->map);
2128
2129 m_freem(tx_buffer->m_head);
2130 tx_buffer->m_head = NULL;
2131
2132 }
2133
2134 if (++i == adapter->num_tx_desc)
2135 i = 0;
2136
2137 tx_buffer = &adapter->tx_buffer_area[i];
2138 tx_desc = &adapter->tx_desc_base[i];
2139 }
2140
2141 adapter->oldest_used_tx_desc = i;
2142
2143 /*
2144 * If we have enough room, clear IFF_OACTIVE to tell the stack
2145 * that it is OK to send packets.
2146 * If there are no pending descriptors, clear the timeout. Otherwise,
2147 * if some descriptors have been freed, restart the timeout.
2148 */
2149 if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
2150 struct ifnet *ifp = &adapter->interface_data.ac_if;
2151
2152 ifp->if_flags &= ~IFF_OACTIVE;
2153 if (num_avail == adapter->num_tx_desc)
2154 ifp->if_timer = 0;
2155 else if (num_avail == adapter->num_tx_desc_avail)
2156 ifp->if_timer = EM_TX_TIMEOUT;
2157 }
2158 adapter->num_tx_desc_avail = num_avail;
2159 splx(s);
2160 return;
2161 }
2162
2163 /*********************************************************************
2164 *
2165 * Get a buffer from system mbuf buffer pool.
2166 *
2167 **********************************************************************/
2168 static int
2169 em_get_buf(int i, struct adapter *adapter,
2170 struct mbuf *nmp)
2171 {
2172 register struct mbuf *mp = nmp;
2173 struct em_buffer *rx_buffer;
2174 struct ifnet *ifp;
2175 bus_addr_t paddr;
2176 int error;
2177
2178 ifp = &adapter->interface_data.ac_if;
2179
2180 if (mp == NULL) {
2181 mp = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
2182 if (mp == NULL) {
2183 adapter->mbuf_cluster_failed++;
2184 return(ENOBUFS);
2185 }
2186 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2187 } else {
2188 mp->m_len = mp->m_pkthdr.len = MCLBYTES;
2189 mp->m_data = mp->m_ext.ext_buf;
2190 mp->m_next = NULL;
2191 }
2192
2193 if (ifp->if_mtu <= ETHERMTU) {
2194 m_adj(mp, ETHER_ALIGN);
2195 }
2196
2197 rx_buffer = &adapter->rx_buffer_area[i];
2198
2199 /*
2200 * Using memory from the mbuf cluster pool, invoke the
2201 * bus_dma machinery to arrange the memory mapping.
2202 */
2203 error = bus_dmamap_load(adapter->rxtag, rx_buffer->map,
2204 mtod(mp, void *), mp->m_len,
2205 em_dmamap_cb, &paddr, 0);
2206 if (error) {
2207 m_free(mp);
2208 return(error);
2209 }
2210 rx_buffer->m_head = mp;
2211 adapter->rx_desc_base[i].buffer_addr = htole64(paddr);
2212 bus_dmamap_sync(adapter->rxtag, rx_buffer->map, BUS_DMASYNC_PREREAD);
2213
2214 return(0);
2215 }
2216
2217 /*********************************************************************
2218 *
2219 * Allocate memory for rx_buffer structures. Since we use one
2220 * rx_buffer per received packet, the maximum number of rx_buffer's
2221 * that we'll need is equal to the number of receive descriptors
2222 * that we've allocated.
2223 *
2224 **********************************************************************/
2225 static int
2226 em_allocate_receive_structures(struct adapter * adapter)
2227 {
2228 int i, error;
2229 struct em_buffer *rx_buffer;
2230
2231 if (!(adapter->rx_buffer_area =
2232 (struct em_buffer *) malloc(sizeof(struct em_buffer) *
2233 adapter->num_rx_desc, M_DEVBUF,
2234 M_NOWAIT))) {
2235 printf("em%d: Unable to allocate rx_buffer memory\n",
2236 adapter->unit);
2237 return(ENOMEM);
2238 }
2239
2240 bzero(adapter->rx_buffer_area,
2241 sizeof(struct em_buffer) * adapter->num_rx_desc);
2242
2243 error = bus_dma_tag_create(NULL, /* parent */
2244 PAGE_SIZE, 0, /* alignment, bounds */
2245 BUS_SPACE_MAXADDR, /* lowaddr */
2246 BUS_SPACE_MAXADDR, /* highaddr */
2247 NULL, NULL, /* filter, filterarg */
2248 MCLBYTES, /* maxsize */
2249 1, /* nsegments */
2250 MCLBYTES, /* maxsegsize */
2251 BUS_DMA_ALLOCNOW, /* flags */
2252 &adapter->rxtag);
2253 if (error != 0) {
2254 printf("em%d: em_allocate_receive_structures: "
2255 "bus_dma_tag_create failed; error %u\n",
2256 adapter->unit, error);
2257 goto fail_0;
2258 }
2259
2260 rx_buffer = adapter->rx_buffer_area;
2261 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2262 error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT,
2263 &rx_buffer->map);
2264 if (error != 0) {
2265 printf("em%d: em_allocate_receive_structures: "
2266 "bus_dmamap_create failed; error %u\n",
2267 adapter->unit, error);
2268 goto fail_1;
2269 }
2270 }
2271
2272 for (i = 0; i < adapter->num_rx_desc; i++) {
2273 error = em_get_buf(i, adapter, NULL);
2274 if (error != 0) {
2275 adapter->rx_buffer_area[i].m_head = NULL;
2276 adapter->rx_desc_base[i].buffer_addr = 0;
2277 return(error);
2278 }
2279 }
2280
2281 return(0);
2282
2283 fail_1:
2284 bus_dma_tag_destroy(adapter->rxtag);
2285 fail_0:
2286 adapter->rxtag = NULL;
2287 free(adapter->rx_buffer_area, M_DEVBUF);
2288 adapter->rx_buffer_area = NULL;
2289 return (error);
2290 }
2291
2292 /*********************************************************************
2293 *
2294 * Allocate and initialize receive structures.
2295 *
2296 **********************************************************************/
2297 static int
2298 em_setup_receive_structures(struct adapter * adapter)
2299 {
2300 bzero((void *) adapter->rx_desc_base,
2301 (sizeof(struct em_rx_desc)) * adapter->num_rx_desc);
2302
2303 if (em_allocate_receive_structures(adapter))
2304 return ENOMEM;
2305
2306 /* Setup our descriptor pointers */
2307 adapter->next_rx_desc_to_check = 0;
2308 return(0);
2309 }
2310
2311 /*********************************************************************
2312 *
2313 * Enable receive unit.
2314 *
2315 **********************************************************************/
2316 static void
2317 em_initialize_receive_unit(struct adapter * adapter)
2318 {
2319 u_int32_t reg_rctl;
2320 u_int32_t reg_rxcsum;
2321 struct ifnet *ifp;
2322 u_int64_t bus_addr;
2323
2324 ifp = &adapter->interface_data.ac_if;
2325
2326 /* Make sure receives are disabled while setting up the descriptor ring */
2327 E1000_WRITE_REG(&adapter->hw, RCTL, 0);
2328
2329 /* Set the Receive Delay Timer Register */
2330 E1000_WRITE_REG(&adapter->hw, RDTR,
2331 adapter->rx_int_delay | E1000_RDT_FPDB);
2332
2333 if(adapter->hw.mac_type >= em_82540) {
2334 E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
2335
2336 /* Set the interrupt throttling rate. Value is calculated
2337 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
2338 #define MAX_INTS_PER_SEC 8000
2339 #define DEFAULT_ITR 1000000000/(MAX_INTS_PER_SEC * 256)
2340 E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR);
2341 }
2342
2343 /* Setup the Base and Length of the Rx Descriptor Ring */
2344 bus_addr = adapter->rxdma.dma_paddr;
2345 E1000_WRITE_REG(&adapter->hw, RDBAL, (u_int32_t)bus_addr);
2346 E1000_WRITE_REG(&adapter->hw, RDBAH, (u_int32_t)(bus_addr >> 32));
2347 E1000_WRITE_REG(&adapter->hw, RDLEN, adapter->num_rx_desc *
2348 sizeof(struct em_rx_desc));
2349
2350 /* Setup the HW Rx Head and Tail Descriptor Pointers */
2351 E1000_WRITE_REG(&adapter->hw, RDH, 0);
2352 E1000_WRITE_REG(&adapter->hw, RDT, adapter->num_rx_desc - 1);
2353
2354 /* Setup the Receive Control Register */
2355 reg_rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
2356 E1000_RCTL_RDMTS_HALF |
2357 (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
2358
2359 if (adapter->hw.tbi_compatibility_on == TRUE)
2360 reg_rctl |= E1000_RCTL_SBP;
2361
2362
2363 switch (adapter->rx_buffer_len) {
2364 default:
2365 case EM_RXBUFFER_2048:
2366 reg_rctl |= E1000_RCTL_SZ_2048;
2367 break;
2368 case EM_RXBUFFER_4096:
2369 reg_rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2370 break;
2371 case EM_RXBUFFER_8192:
2372 reg_rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2373 break;
2374 case EM_RXBUFFER_16384:
2375 reg_rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
2376 break;
2377 }
2378
2379 if (ifp->if_mtu > ETHERMTU)
2380 reg_rctl |= E1000_RCTL_LPE;
2381
2382 /* Enable 82543 Receive Checksum Offload for TCP and UDP */
2383 if ((adapter->hw.mac_type >= em_82543) &&
2384 (ifp->if_capenable & IFCAP_RXCSUM)) {
2385 reg_rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
2386 reg_rxcsum |= (E1000_RXCSUM_IPOFL | E1000_RXCSUM_TUOFL);
2387 E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum);
2388 }
2389
2390 /* Enable Receives */
2391 E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
2392
2393 return;
2394 }
2395
2396 /*********************************************************************
2397 *
2398 * Free receive related data structures.
2399 *
2400 **********************************************************************/
2401 static void
2402 em_free_receive_structures(struct adapter *adapter)
2403 {
2404 struct em_buffer *rx_buffer;
2405 int i;
2406
2407 INIT_DEBUGOUT("free_receive_structures: begin");
2408
2409 if (adapter->rx_buffer_area != NULL) {
2410 rx_buffer = adapter->rx_buffer_area;
2411 for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) {
2412 if (rx_buffer->map != NULL) {
2413 bus_dmamap_unload(adapter->rxtag, rx_buffer->map);
2414 bus_dmamap_destroy(adapter->rxtag, rx_buffer->map);
2415 }
2416 if (rx_buffer->m_head != NULL)
2417 m_freem(rx_buffer->m_head);
2418 rx_buffer->m_head = NULL;
2419 }
2420 }
2421 if (adapter->rx_buffer_area != NULL) {
2422 free(adapter->rx_buffer_area, M_DEVBUF);
2423 adapter->rx_buffer_area = NULL;
2424 }
2425 if (adapter->rxtag != NULL) {
2426 bus_dma_tag_destroy(adapter->rxtag);
2427 adapter->rxtag = NULL;
2428 }
2429 return;
2430 }
2431
2432 /*********************************************************************
2433 *
2434 * This routine executes in interrupt context. It replenishes
2435 * the mbufs in the descriptor and sends data which has been
2436 * dma'ed into host memory to upper layer.
2437 *
2438 * We loop at most count times if count is > 0, or until done if
2439 * count < 0.
2440 *
2441 *********************************************************************/
2442 static void
2443 em_process_receive_interrupts(struct adapter * adapter, int count)
2444 {
2445 struct ifnet *ifp;
2446 struct mbuf *mp;
2447 #if __FreeBSD_version < 500000
2448 struct ether_header *eh;
2449 #endif
2450 u_int8_t accept_frame = 0;
2451 u_int8_t eop = 0;
2452 u_int16_t len, desc_len;
2453 int i;
2454
2455 /* Pointer to the receive descriptor being examined. */
2456 struct em_rx_desc *current_desc;
2457
2458 ifp = &adapter->interface_data.ac_if;
2459 i = adapter->next_rx_desc_to_check;
2460 current_desc = &adapter->rx_desc_base[i];
2461
2462 if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
2463 #ifdef DBG_STATS
2464 adapter->no_pkts_avail++;
2465 #endif
2466 return;
2467 }
2468
2469 while ((current_desc->status & E1000_RXD_STAT_DD) && (count != 0)) {
2470
2471 mp = adapter->rx_buffer_area[i].m_head;
2472 bus_dmamap_sync(adapter->rxtag, adapter->rx_buffer_area[i].map,
2473 BUS_DMASYNC_POSTREAD);
2474
2475 accept_frame = 1;
2476 desc_len = le16toh(current_desc->length);
2477 if (current_desc->status & E1000_RXD_STAT_EOP) {
2478 count--;
2479 eop = 1;
2480 len = desc_len - ETHER_CRC_LEN;
2481 } else {
2482 eop = 0;
2483 len = desc_len;
2484 }
2485
2486 if (current_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2487 u_int8_t last_byte;
2488 u_int32_t pkt_len = desc_len;
2489
2490 if (adapter->fmp != NULL)
2491 pkt_len += adapter->fmp->m_pkthdr.len;
2492
2493 last_byte = *(mtod(mp, caddr_t) + desc_len - 1);
2494
2495 if (TBI_ACCEPT(&adapter->hw, current_desc->status,
2496 current_desc->errors,
2497 pkt_len, last_byte)) {
2498 em_tbi_adjust_stats(&adapter->hw,
2499 &adapter->stats,
2500 pkt_len,
2501 adapter->hw.mac_addr);
2502 len--;
2503 }
2504 else {
2505 accept_frame = 0;
2506 }
2507 }
2508
2509 if (accept_frame) {
2510
2511 if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2512 adapter->dropped_pkts++;
2513 em_get_buf(i, adapter, mp);
2514 if (adapter->fmp != NULL)
2515 m_freem(adapter->fmp);
2516 adapter->fmp = NULL;
2517 adapter->lmp = NULL;
2518 break;
2519 }
2520
2521 /* Assign correct length to the current fragment */
2522 mp->m_len = len;
2523
2524 if (adapter->fmp == NULL) {
2525 mp->m_pkthdr.len = len;
2526 adapter->fmp = mp; /* Store the first mbuf */
2527 adapter->lmp = mp;
2528 } else {
2529 /* Chain mbuf's together */
2530 mp->m_flags &= ~M_PKTHDR;
2531 adapter->lmp->m_next = mp;
2532 adapter->lmp = adapter->lmp->m_next;
2533 adapter->fmp->m_pkthdr.len += len;
2534 }
2535
2536 if (eop) {
2537 adapter->fmp->m_pkthdr.rcvif = ifp;
2538
2539 #if __FreeBSD_version < 500000
2540 eh = mtod(adapter->fmp, struct ether_header *);
2541 /* Remove ethernet header from mbuf */
2542 m_adj(adapter->fmp, sizeof(struct ether_header));
2543 em_receive_checksum(adapter, current_desc,
2544 adapter->fmp);
2545 if (current_desc->status & E1000_RXD_STAT_VP)
2546 VLAN_INPUT_TAG(eh, adapter->fmp,
2547 (current_desc->special &
2548 E1000_RXD_SPC_VLAN_MASK));
2549 else
2550 ether_input(ifp, eh, adapter->fmp);
2551 #else
2552
2553 em_receive_checksum(adapter, current_desc,
2554 adapter->fmp);
2555 if (current_desc->status & E1000_RXD_STAT_VP)
2556 VLAN_INPUT_TAG(ifp, adapter->fmp,
2557 (current_desc->special &
2558 E1000_RXD_SPC_VLAN_MASK),
2559 adapter->fmp = NULL);
2560
2561 if (adapter->fmp != NULL)
2562 (*ifp->if_input)(ifp, adapter->fmp);
2563 #endif
2564 adapter->fmp = NULL;
2565 adapter->lmp = NULL;
2566 }
2567 } else {
2568 adapter->dropped_pkts++;
2569 em_get_buf(i, adapter, mp);
2570 if (adapter->fmp != NULL)
2571 m_freem(adapter->fmp);
2572 adapter->fmp = NULL;
2573 adapter->lmp = NULL;
2574 }
2575
2576 /* Zero out the receive descriptors status */
2577 current_desc->status = 0;
2578
2579 /* Advance the E1000's Receive Queue #0 "Tail Pointer". */
2580 E1000_WRITE_REG(&adapter->hw, RDT, i);
2581
2582 /* Advance our pointers to the next descriptor */
2583 if (++i == adapter->num_rx_desc) {
2584 i = 0;
2585 current_desc = adapter->rx_desc_base;
2586 } else
2587 current_desc++;
2588 }
2589 adapter->next_rx_desc_to_check = i;
2590 return;
2591 }
2592
2593 /*********************************************************************
2594 *
2595 * Verify that the hardware indicated that the checksum is valid.
2596 * Inform the stack about the status of checksum so that stack
2597 * doesn't spend time verifying the checksum.
2598 *
2599 *********************************************************************/
2600 static void
2601 em_receive_checksum(struct adapter *adapter,
2602 struct em_rx_desc *rx_desc,
2603 struct mbuf *mp)
2604 {
2605 /* 82543 or newer only */
2606 if ((adapter->hw.mac_type < em_82543) ||
2607 /* Ignore Checksum bit is set */
2608 (rx_desc->status & E1000_RXD_STAT_IXSM)) {
2609 mp->m_pkthdr.csum_flags = 0;
2610 return;
2611 }
2612
2613 if (rx_desc->status & E1000_RXD_STAT_IPCS) {
2614 /* Did it pass? */
2615 if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
2616 /* IP Checksum Good */
2617 mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
2618 mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
2619
2620 } else {
2621 mp->m_pkthdr.csum_flags = 0;
2622 }
2623 }
2624
2625 if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
2626 /* Did it pass? */
2627 if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
2628 mp->m_pkthdr.csum_flags |=
2629 (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
2630 mp->m_pkthdr.csum_data = htons(0xffff);
2631 }
2632 }
2633
2634 return;
2635 }
2636
2637
2638 static void
2639 em_enable_vlans(struct adapter *adapter)
2640 {
2641 uint32_t ctrl;
2642
2643 E1000_WRITE_REG(&adapter->hw, VET, ETHERTYPE_VLAN);
2644
2645 ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2646 ctrl |= E1000_CTRL_VME;
2647 E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2648
2649 return;
2650 }
2651
2652 static void
2653 em_enable_intr(struct adapter * adapter)
2654 {
2655 E1000_WRITE_REG(&adapter->hw, IMS, (IMS_ENABLE_MASK));
2656 return;
2657 }
2658
2659 static void
2660 em_disable_intr(struct adapter *adapter)
2661 {
2662 E1000_WRITE_REG(&adapter->hw, IMC,
2663 (0xffffffff & ~E1000_IMC_RXSEQ));
2664 return;
2665 }
2666
2667 void
2668 em_write_pci_cfg(struct em_hw *hw,
2669 uint32_t reg,
2670 uint16_t *value)
2671 {
2672 pci_write_config(((struct em_osdep *)hw->back)->dev, reg,
2673 *value, 2);
2674 }
2675
2676 void
2677 em_read_pci_cfg(struct em_hw *hw, uint32_t reg,
2678 uint16_t *value)
2679 {
2680 *value = pci_read_config(((struct em_osdep *)hw->back)->dev,
2681 reg, 2);
2682 return;
2683 }
2684
2685 void
2686 em_pci_set_mwi(struct em_hw *hw)
2687 {
2688 pci_write_config(((struct em_osdep *)hw->back)->dev,
2689 PCIR_COMMAND,
2690 (hw->pci_cmd_word | CMD_MEM_WRT_INVALIDATE), 2);
2691 return;
2692 }
2693
2694 void
2695 em_pci_clear_mwi(struct em_hw *hw)
2696 {
2697 pci_write_config(((struct em_osdep *)hw->back)->dev,
2698 PCIR_COMMAND,
2699 (hw->pci_cmd_word & ~CMD_MEM_WRT_INVALIDATE), 2);
2700 return;
2701 }
2702
2703 uint32_t
2704 em_io_read(struct em_hw *hw, uint32_t port)
2705 {
2706 return(inl(port));
2707 }
2708
2709 void
2710 em_io_write(struct em_hw *hw, uint32_t port, uint32_t value)
2711 {
2712 outl(port, value);
2713 return;
2714 }
2715
2716 /**********************************************************************
2717 *
2718 * Update the board statistics counters.
2719 *
2720 **********************************************************************/
2721 static void
2722 em_update_stats_counters(struct adapter *adapter)
2723 {
2724 struct ifnet *ifp;
2725
2726 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, CRCERRS);
2727 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, SYMERRS);
2728 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, MPC);
2729 adapter->stats.scc += E1000_READ_REG(&adapter->hw, SCC);
2730 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, ECOL);
2731
2732 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, MCC);
2733 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, LATECOL);
2734 adapter->stats.colc += E1000_READ_REG(&adapter->hw, COLC);
2735 adapter->stats.dc += E1000_READ_REG(&adapter->hw, DC);
2736 adapter->stats.sec += E1000_READ_REG(&adapter->hw, SEC);
2737 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, RLEC);
2738 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, XONRXC);
2739 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, XONTXC);
2740 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, XOFFRXC);
2741 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, XOFFTXC);
2742 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, FCRUC);
2743 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, PRC64);
2744 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, PRC127);
2745 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, PRC255);
2746 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, PRC511);
2747 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, PRC1023);
2748 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, PRC1522);
2749 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, GPRC);
2750 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, BPRC);
2751 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, MPRC);
2752 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, GPTC);
2753
2754 /* For the 64-bit byte counters the low dword must be read first. */
2755 /* Both registers clear on the read of the high dword */
2756
2757 adapter->stats.gorcl += E1000_READ_REG(&adapter->hw, GORCL);
2758 adapter->stats.gorch += E1000_READ_REG(&adapter->hw, GORCH);
2759 adapter->stats.gotcl += E1000_READ_REG(&adapter->hw, GOTCL);
2760 adapter->stats.gotch += E1000_READ_REG(&adapter->hw, GOTCH);
2761
2762 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, RNBC);
2763 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, RUC);
2764 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, RFC);
2765 adapter->stats.roc += E1000_READ_REG(&adapter->hw, ROC);
2766 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, RJC);
2767
2768 adapter->stats.torl += E1000_READ_REG(&adapter->hw, TORL);
2769 adapter->stats.torh += E1000_READ_REG(&adapter->hw, TORH);
2770 adapter->stats.totl += E1000_READ_REG(&adapter->hw, TOTL);
2771 adapter->stats.toth += E1000_READ_REG(&adapter->hw, TOTH);
2772
2773 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, TPR);
2774 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, TPT);
2775 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, PTC64);
2776 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, PTC127);
2777 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, PTC255);
2778 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, PTC511);
2779 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, PTC1023);
2780 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, PTC1522);
2781 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, MPTC);
2782 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, BPTC);
2783
2784 if (adapter->hw.mac_type >= em_82543) {
2785 adapter->stats.algnerrc +=
2786 E1000_READ_REG(&adapter->hw, ALGNERRC);
2787 adapter->stats.rxerrc +=
2788 E1000_READ_REG(&adapter->hw, RXERRC);
2789 adapter->stats.tncrs +=
2790 E1000_READ_REG(&adapter->hw, TNCRS);
2791 adapter->stats.cexterr +=
2792 E1000_READ_REG(&adapter->hw, CEXTERR);
2793 adapter->stats.tsctc +=
2794 E1000_READ_REG(&adapter->hw, TSCTC);
2795 adapter->stats.tsctfc +=
2796 E1000_READ_REG(&adapter->hw, TSCTFC);
2797 }
2798 ifp = &adapter->interface_data.ac_if;
2799
2800 /* Fill out the OS statistics structure */
2801 ifp->if_ipackets = adapter->stats.gprc;
2802 ifp->if_opackets = adapter->stats.gptc;
2803 ifp->if_ibytes = adapter->stats.gorcl;
2804 ifp->if_obytes = adapter->stats.gotcl;
2805 ifp->if_imcasts = adapter->stats.mprc;
2806 ifp->if_collisions = adapter->stats.colc;
2807
2808 /* Rx Errors */
2809 ifp->if_ierrors =
2810 adapter->dropped_pkts +
2811 adapter->stats.rxerrc +
2812 adapter->stats.crcerrs +
2813 adapter->stats.algnerrc +
2814 adapter->stats.rlec + adapter->stats.rnbc +
2815 adapter->stats.mpc + adapter->stats.cexterr;
2816
2817 /* Tx Errors */
2818 ifp->if_oerrors = adapter->stats.ecol + adapter->stats.latecol;
2819
2820 }
2821
2822
2823 /**********************************************************************
2824 *
2825 * This routine is called only when em_display_debug_stats is enabled.
2826 * This routine provides a way to take a look at important statistics
2827 * maintained by the driver and hardware.
2828 *
2829 **********************************************************************/
2830 static void
2831 em_print_hw_stats(struct adapter *adapter)
2832 {
2833 int unit = adapter->unit;
2834
2835 #ifdef DBG_STATS
2836 printf("em%d: Packets not Avail = %ld\n", unit,
2837 adapter->no_pkts_avail);
2838 printf("em%d: CleanTxInterrupts = %ld\n", unit,
2839 adapter->clean_tx_interrupts);
2840 #endif
2841
2842 printf("em%d: fifo workaround = %lld, fifo_reset = %lld\n", unit,
2843 (long long)adapter->tx_fifo_wrk,
2844 (long long)adapter->tx_fifo_reset);
2845 printf("em%d: hw tdh = %d, hw tdt = %d\n", unit,
2846 E1000_READ_REG(&adapter->hw, TDH),
2847 E1000_READ_REG(&adapter->hw, TDT));
2848 printf("em%d: Excessive collisions = %lld\n", unit,
2849 (long long)adapter->stats.ecol);
2850 printf("em%d: Tx Descriptors not avail1 = %ld\n", unit,
2851 adapter->no_tx_desc_avail1);
2852 printf("em%d: Tx Descriptors not avail2 = %ld\n", unit,
2853 adapter->no_tx_desc_avail2);
2854
2855 printf("em%d: Symbol errors = %lld\n", unit,
2856 (long long)adapter->stats.symerrs);
2857 printf("em%d: Sequence errors = %lld\n", unit,
2858 (long long)adapter->stats.sec);
2859 printf("em%d: Defer count = %lld\n", unit,
2860 (long long)adapter->stats.dc);
2861
2862 printf("em%d: Missed Packets = %lld\n", unit,
2863 (long long)adapter->stats.mpc);
2864 printf("em%d: Receive No Buffers = %lld\n", unit,
2865 (long long)adapter->stats.rnbc);
2866 printf("em%d: Receive length errors = %lld\n", unit,
2867 (long long)adapter->stats.rlec);
2868 printf("em%d: Receive errors = %lld\n", unit,
2869 (long long)adapter->stats.rxerrc);
2870 printf("em%d: Crc errors = %lld\n", unit,
2871 (long long)adapter->stats.crcerrs);
2872 printf("em%d: Alignment errors = %lld\n", unit,
2873 (long long)adapter->stats.algnerrc);
2874 printf("em%d: Carrier extension errors = %lld\n", unit,
2875 (long long)adapter->stats.cexterr);
2876 printf("em%d: Driver dropped packets = %ld\n", unit,
2877 adapter->dropped_pkts);
2878
2879 printf("em%d: XON Rcvd = %lld\n", unit,
2880 (long long)adapter->stats.xonrxc);
2881 printf("em%d: XON Xmtd = %lld\n", unit,
2882 (long long)adapter->stats.xontxc);
2883 printf("em%d: XOFF Rcvd = %lld\n", unit,
2884 (long long)adapter->stats.xoffrxc);
2885 printf("em%d: XOFF Xmtd = %lld\n", unit,
2886 (long long)adapter->stats.xofftxc);
2887
2888 printf("em%d: Good Packets Rcvd = %lld\n", unit,
2889 (long long)adapter->stats.gprc);
2890 printf("em%d: Good Packets Xmtd = %lld\n", unit,
2891 (long long)adapter->stats.gptc);
2892
2893 return;
2894 }
2895
Cache object: 6e8f22d0b290cd4f7e9f4ef4bcacc581
|