1 /*******************************************************************************
3 Intel PRO/100 Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
30 * e100.c: Intel(R) PRO/100 ethernet driver
33 * original e100 driver, but better described as a munging of
34 * e100, e1000, eepro100, tg3, 8139cp, and other drivers.
37 * Intel 8255x 10/100 Mbps Ethernet Controller Family,
38 * Open Source Software Developers Manual,
39 * http://sourceforge.net/projects/e1000
46 * The driver supports Intel(R) 10/100 Mbps PCI Fast Ethernet
47 * controller family, which includes the 82557, 82558, 82559, 82550,
48 * 82551, and 82562 devices. 82558 and greater controllers
49 * integrate the Intel 82555 PHY. The controllers are used in
50 * server and client network interface cards, as well as in
51 * LAN-On-Motherboard (LOM), CardBus, MiniPCI, and ICHx
52 * configurations. 8255x supports a 32-bit linear addressing
53 * mode and operates at 33Mhz PCI clock rate.
55 * II. Driver Operation
57 * Memory-mapped mode is used exclusively to access the device's
58 * shared-memory structure, the Control/Status Registers (CSR). All
59 * setup, configuration, and control of the device, including queuing
60 * of Tx, Rx, and configuration commands is through the CSR.
61 * cmd_lock serializes accesses to the CSR command register. cb_lock
62 * protects the shared Command Block List (CBL).
64 * 8255x is highly MII-compliant and all access to the PHY go
65 * through the Management Data Interface (MDI). Consequently, the
66 * driver leverages the mii.c library shared with other MII-compliant
69 * Big- and Little-Endian byte order as well as 32- and 64-bit
70 * archs are supported. Weak-ordered memory and non-cache-coherent
71 * archs are supported.
75 * A Tx skb is mapped and hangs off of a TCB. TCBs are linked
76 * together in a fixed-size ring (CBL) thus forming the flexible mode
77 * memory structure. A TCB marked with the suspend-bit indicates
78 * the end of the ring. The last TCB processed suspends the
79 * controller, and the controller can be restarted by issue a CU
80 * resume command to continue from the suspend point, or a CU start
81 * command to start at a given position in the ring.
83 * Non-Tx commands (config, multicast setup, etc) are linked
84 * into the CBL ring along with Tx commands. The common structure
85 * used for both Tx and non-Tx commands is the Command Block (CB).
87 * cb_to_use is the next CB to use for queuing a command; cb_to_clean
88 * is the next CB to check for completion; cb_to_send is the first
89 * CB to start on in case of a previous failure to resume. CB clean
90 * up happens in interrupt context in response to a CU interrupt.
91 * cbs_avail keeps track of number of free CB resources available.
93 * Hardware padding of short packets to minimum packet size is
94 * enabled. 82557 pads with 7Eh, while the later controllers pad
99 * The Receive Frame Area (RFA) comprises a ring of Receive Frame
100 * Descriptors (RFD) + data buffer, thus forming the simplified mode
101 * memory structure. Rx skbs are allocated to contain both the RFD
102 * and the data buffer, but the RFD is pulled off before the skb is
103 * indicated. The data buffer is aligned such that encapsulated
104 * protocol headers are u32-aligned. Since the RFD is part of the
105 * mapped shared memory, and completion status is contained within
106 * the RFD, the RFD must be dma_sync'ed to maintain a consistent
107 * view from software and hardware.
109 * In order to keep updates to the RFD link field from colliding with
110 * hardware writes to mark packets complete, we use the feature that
111 * hardware will not write to a size 0 descriptor and mark the previous
112 * packet as end-of-list (EL). After updating the link, we remove EL
113 * and only then restore the size such that hardware may use the
114 * previous-to-end RFD.
116 * Under typical operation, the receive unit (RU) is start once,
117 * and the controller happily fills RFDs as frames arrive. If
118 * replacement RFDs cannot be allocated, or the RU goes non-active,
119 * the RU must be restarted. Frame arrival generates an interrupt,
120 * and Rx indication and re-allocation happen in the same context,
121 * therefore no locking is required. A software-generated interrupt
122 * is generated from the watchdog to recover from a failed allocation
123 * scenario where all Rx resources have been indicated and none re-
128 * VLAN offloading of tagging, stripping and filtering is not
129 * supported, but driver will accommodate the extra 4-byte VLAN tag
130 * for processing by upper layers. Tx/Rx Checksum offloading is not
131 * supported. Tx Scatter/Gather is not supported. Jumbo Frames is
132 * not supported (hardware limitation).
134 * MagicPacket(tm) WoL support is enabled/disabled via ethtool.
137 * testing/troubleshooting the development driver.
140 * o several entry points race with dev->close
141 * o check for tx-no-resources/stop Q races with tx clean/wake Q
144 * 2005/12/02 - Michael O'Donnell <Michael.ODonnell at stratus dot com>
145 * - Stratus87247: protect MDI control register manipulations
148 #include <linux/module.h>
149 #include <linux/moduleparam.h>
150 #include <linux/kernel.h>
151 #include <linux/types.h>
152 #include <linux/slab.h>
153 #include <linux/delay.h>
154 #include <linux/init.h>
155 #include <linux/pci.h>
156 #include <linux/dma-mapping.h>
157 #include <linux/netdevice.h>
158 #include <linux/etherdevice.h>
159 #include <linux/mii.h>
160 #include <linux/if_vlan.h>
161 #include <linux/skbuff.h>
162 #include <linux/ethtool.h>
163 #include <linux/string.h>
164 #include <asm/unaligned.h>
167 #define DRV_NAME "e100"
168 #define DRV_EXT "-NAPI"
169 #define DRV_VERSION "3.5.23-k6"DRV_EXT
170 #define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver"
171 #define DRV_COPYRIGHT "Copyright(c) 1999-2006 Intel Corporation"
172 #define PFX DRV_NAME ": "
174 #define E100_WATCHDOG_PERIOD (2 * HZ)
175 #define E100_NAPI_WEIGHT 16
177 MODULE_DESCRIPTION(DRV_DESCRIPTION);
178 MODULE_AUTHOR(DRV_COPYRIGHT);
179 MODULE_LICENSE("GPL");
180 MODULE_VERSION(DRV_VERSION);
182 static int debug = 3;
183 static int eeprom_bad_csum_allow = 0;
184 static int use_io = 0;
185 module_param(debug, int, 0);
186 module_param(eeprom_bad_csum_allow, int, 0);
187 module_param(use_io, int, 0);
188 MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
189 MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad eeprom checksums");
190 MODULE_PARM_DESC(use_io, "Force use of i/o access mode");
191 #define DPRINTK(nlevel, klevel, fmt, args...) \
192 (void)((NETIF_MSG_##nlevel & nic->msg_enable) && \
193 printk(KERN_##klevel PFX "%s: %s: " fmt, nic->netdev->name, \
196 #define INTEL_8255X_ETHERNET_DEVICE(device_id, ich) {\
197 PCI_VENDOR_ID_INTEL, device_id, PCI_ANY_ID, PCI_ANY_ID, \
198 PCI_CLASS_NETWORK_ETHERNET << 8, 0xFFFF00, ich }
199 static struct pci_device_id e100_id_table[] = {
200 INTEL_8255X_ETHERNET_DEVICE(0x1029, 0),
201 INTEL_8255X_ETHERNET_DEVICE(0x1030, 0),
202 INTEL_8255X_ETHERNET_DEVICE(0x1031, 3),
203 INTEL_8255X_ETHERNET_DEVICE(0x1032, 3),
204 INTEL_8255X_ETHERNET_DEVICE(0x1033, 3),
205 INTEL_8255X_ETHERNET_DEVICE(0x1034, 3),
206 INTEL_8255X_ETHERNET_DEVICE(0x1038, 3),
207 INTEL_8255X_ETHERNET_DEVICE(0x1039, 4),
208 INTEL_8255X_ETHERNET_DEVICE(0x103A, 4),
209 INTEL_8255X_ETHERNET_DEVICE(0x103B, 4),
210 INTEL_8255X_ETHERNET_DEVICE(0x103C, 4),
211 INTEL_8255X_ETHERNET_DEVICE(0x103D, 4),
212 INTEL_8255X_ETHERNET_DEVICE(0x103E, 4),
213 INTEL_8255X_ETHERNET_DEVICE(0x1050, 5),
214 INTEL_8255X_ETHERNET_DEVICE(0x1051, 5),
215 INTEL_8255X_ETHERNET_DEVICE(0x1052, 5),
216 INTEL_8255X_ETHERNET_DEVICE(0x1053, 5),
217 INTEL_8255X_ETHERNET_DEVICE(0x1054, 5),
218 INTEL_8255X_ETHERNET_DEVICE(0x1055, 5),
219 INTEL_8255X_ETHERNET_DEVICE(0x1056, 5),
220 INTEL_8255X_ETHERNET_DEVICE(0x1057, 5),
221 INTEL_8255X_ETHERNET_DEVICE(0x1059, 0),
222 INTEL_8255X_ETHERNET_DEVICE(0x1064, 6),
223 INTEL_8255X_ETHERNET_DEVICE(0x1065, 6),
224 INTEL_8255X_ETHERNET_DEVICE(0x1066, 6),
225 INTEL_8255X_ETHERNET_DEVICE(0x1067, 6),
226 INTEL_8255X_ETHERNET_DEVICE(0x1068, 6),
227 INTEL_8255X_ETHERNET_DEVICE(0x1069, 6),
228 INTEL_8255X_ETHERNET_DEVICE(0x106A, 6),
229 INTEL_8255X_ETHERNET_DEVICE(0x106B, 6),
230 INTEL_8255X_ETHERNET_DEVICE(0x1091, 7),
231 INTEL_8255X_ETHERNET_DEVICE(0x1092, 7),
232 INTEL_8255X_ETHERNET_DEVICE(0x1093, 7),
233 INTEL_8255X_ETHERNET_DEVICE(0x1094, 7),
234 INTEL_8255X_ETHERNET_DEVICE(0x1095, 7),
235 INTEL_8255X_ETHERNET_DEVICE(0x1209, 0),
236 INTEL_8255X_ETHERNET_DEVICE(0x1229, 0),
237 INTEL_8255X_ETHERNET_DEVICE(0x2449, 2),
238 INTEL_8255X_ETHERNET_DEVICE(0x2459, 2),
239 INTEL_8255X_ETHERNET_DEVICE(0x245D, 2),
240 INTEL_8255X_ETHERNET_DEVICE(0x27DC, 7),
243 MODULE_DEVICE_TABLE(pci, e100_id_table);
246 mac_82557_D100_A = 0,
247 mac_82557_D100_B = 1,
248 mac_82557_D100_C = 2,
249 mac_82558_D101_A4 = 4,
250 mac_82558_D101_B0 = 5,
254 mac_82550_D102_C = 13,
262 phy_100a = 0x000003E0,
263 phy_100c = 0x035002A8,
264 phy_82555_tx = 0x015002A8,
265 phy_nsc_tx = 0x5C002000,
266 phy_82562_et = 0x033002A8,
267 phy_82562_em = 0x032002A8,
268 phy_82562_ek = 0x031002A8,
269 phy_82562_eh = 0x017002A8,
270 phy_unknown = 0xFFFFFFFF,
273 /* CSR (Control/Status Registers) */
299 RU_UNINITIALIZED = -1,
303 stat_ack_not_ours = 0x00,
304 stat_ack_sw_gen = 0x04,
306 stat_ack_cu_idle = 0x20,
307 stat_ack_frame_rx = 0x40,
308 stat_ack_cu_cmd_done = 0x80,
309 stat_ack_not_present = 0xFF,
310 stat_ack_rx = (stat_ack_sw_gen | stat_ack_rnr | stat_ack_frame_rx),
311 stat_ack_tx = (stat_ack_cu_idle | stat_ack_cu_cmd_done),
315 irq_mask_none = 0x00,
323 ruc_load_base = 0x06,
326 cuc_dump_addr = 0x40,
327 cuc_dump_stats = 0x50,
328 cuc_load_base = 0x60,
329 cuc_dump_reset = 0x70,
333 cuc_dump_complete = 0x0000A005,
334 cuc_dump_reset_complete = 0x0000A007,
338 software_reset = 0x0000,
340 selective_reset = 0x0002,
343 enum eeprom_ctrl_lo {
351 mdi_write = 0x04000000,
352 mdi_read = 0x08000000,
353 mdi_ready = 0x10000000,
363 enum eeprom_offsets {
364 eeprom_cnfg_mdix = 0x03,
366 eeprom_config_asf = 0x0D,
367 eeprom_smbus_addr = 0x90,
370 enum eeprom_cnfg_mdix {
371 eeprom_mdix_enabled = 0x0080,
375 eeprom_id_wol = 0x0020,
378 enum eeprom_config_asf {
384 cb_complete = 0x8000,
413 struct rx *next, *prev;
418 #if defined(__BIG_ENDIAN_BITFIELD)
424 /*0*/ u8 X(byte_count:6, pad0:2);
425 /*1*/ u8 X(X(rx_fifo_limit:4, tx_fifo_limit:3), pad1:1);
426 /*2*/ u8 adaptive_ifs;
427 /*3*/ u8 X(X(X(X(mwi_enable:1, type_enable:1), read_align_enable:1),
428 term_write_cache_line:1), pad3:4);
429 /*4*/ u8 X(rx_dma_max_count:7, pad4:1);
430 /*5*/ u8 X(tx_dma_max_count:7, dma_max_count_enable:1);
431 /*6*/ u8 X(X(X(X(X(X(X(late_scb_update:1, direct_rx_dma:1),
432 tno_intr:1), cna_intr:1), standard_tcb:1), standard_stat_counter:1),
433 rx_discard_overruns:1), rx_save_bad_frames:1);
434 /*7*/ u8 X(X(X(X(X(rx_discard_short_frames:1, tx_underrun_retry:2),
435 pad7:2), rx_extended_rfd:1), tx_two_frames_in_fifo:1),
437 /*8*/ u8 X(X(mii_mode:1, pad8:6), csma_disabled:1);
438 /*9*/ u8 X(X(X(X(X(rx_tcpudp_checksum:1, pad9:3), vlan_arp_tco:1),
439 link_status_wake:1), arp_wake:1), mcmatch_wake:1);
440 /*10*/ u8 X(X(X(pad10:3, no_source_addr_insertion:1), preamble_length:2),
442 /*11*/ u8 X(linear_priority:3, pad11:5);
443 /*12*/ u8 X(X(linear_priority_mode:1, pad12:3), ifs:4);
444 /*13*/ u8 ip_addr_lo;
445 /*14*/ u8 ip_addr_hi;
446 /*15*/ u8 X(X(X(X(X(X(X(promiscuous_mode:1, broadcast_disabled:1),
447 wait_after_win:1), pad15_1:1), ignore_ul_bit:1), crc_16_bit:1),
448 pad15_2:1), crs_or_cdt:1);
449 /*16*/ u8 fc_delay_lo;
450 /*17*/ u8 fc_delay_hi;
451 /*18*/ u8 X(X(X(X(X(rx_stripping:1, tx_padding:1), rx_crc_transfer:1),
452 rx_long_ok:1), fc_priority_threshold:3), pad18:1);
453 /*19*/ u8 X(X(X(X(X(X(X(addr_wake:1, magic_packet_disable:1),
454 fc_disable:1), fc_restop:1), fc_restart:1), fc_reject:1),
455 full_duplex_force:1), full_duplex_pin:1);
456 /*20*/ u8 X(X(X(pad20_1:5, fc_priority_location:1), multi_ia:1), pad20_2:1);
457 /*21*/ u8 X(X(pad21_1:3, multicast_all:1), pad21_2:4);
458 /*22*/ u8 X(X(rx_d102_mode:1, rx_vlan_drop:1), pad22:6);
462 #define E100_MAX_MULTICAST_ADDRS 64
465 u8 addr[E100_MAX_MULTICAST_ADDRS * ETH_ALEN + 2/*pad*/];
468 /* Important: keep total struct u32-aligned */
469 #define UCODE_SIZE 134
476 __le32 ucode[UCODE_SIZE];
477 struct config config;
490 __le32 dump_buffer_addr;
492 struct cb *next, *prev;
498 lb_none = 0, lb_mac = 1, lb_phy = 3,
502 __le32 tx_good_frames, tx_max_collisions, tx_late_collisions,
503 tx_underruns, tx_lost_crs, tx_deferred, tx_single_collisions,
504 tx_multiple_collisions, tx_total_collisions;
505 __le32 rx_good_frames, rx_crc_errors, rx_alignment_errors,
506 rx_resource_errors, rx_overrun_errors, rx_cdt_errors,
507 rx_short_frame_errors;
508 __le32 fc_xmt_pause, fc_rcv_pause, fc_rcv_unsupported;
509 __le16 xmt_tco_frames, rcv_tco_frames;
529 struct param_range rfds;
530 struct param_range cbs;
534 /* Begin: frequently used values: keep adjacent for cache effect */
535 u32 msg_enable ____cacheline_aligned;
536 struct net_device *netdev;
537 struct pci_dev *pdev;
539 struct rx *rxs ____cacheline_aligned;
540 struct rx *rx_to_use;
541 struct rx *rx_to_clean;
542 struct rfd blank_rfd;
543 enum ru_state ru_running;
545 spinlock_t cb_lock ____cacheline_aligned;
547 struct csr __iomem *csr;
548 enum scb_cmd_lo cuc_cmd;
549 unsigned int cbs_avail;
550 struct napi_struct napi;
552 struct cb *cb_to_use;
553 struct cb *cb_to_send;
554 struct cb *cb_to_clean;
556 /* End: frequently used values: keep adjacent for cache effect */
560 promiscuous = (1 << 1),
561 multicast_all = (1 << 2),
562 wol_magic = (1 << 3),
563 ich_10h_workaround = (1 << 4),
564 } flags ____cacheline_aligned;
568 struct params params;
569 struct timer_list watchdog;
570 struct timer_list blink_timer;
571 struct mii_if_info mii;
572 struct work_struct tx_timeout_task;
573 enum loopback loopback;
578 dma_addr_t cbs_dma_addr;
584 u32 tx_single_collisions;
585 u32 tx_multiple_collisions;
590 u32 rx_fc_unsupported;
592 u32 rx_over_length_errors;
597 spinlock_t mdio_lock;
600 static inline void e100_write_flush(struct nic *nic)
602 /* Flush previous PCI writes through intermediate bridges
603 * by doing a benign read */
604 (void)ioread8(&nic->csr->scb.status);
607 static void e100_enable_irq(struct nic *nic)
611 spin_lock_irqsave(&nic->cmd_lock, flags);
612 iowrite8(irq_mask_none, &nic->csr->scb.cmd_hi);
613 e100_write_flush(nic);
614 spin_unlock_irqrestore(&nic->cmd_lock, flags);
617 static void e100_disable_irq(struct nic *nic)
621 spin_lock_irqsave(&nic->cmd_lock, flags);
622 iowrite8(irq_mask_all, &nic->csr->scb.cmd_hi);
623 e100_write_flush(nic);
624 spin_unlock_irqrestore(&nic->cmd_lock, flags);
627 static void e100_hw_reset(struct nic *nic)
629 /* Put CU and RU into idle with a selective reset to get
630 * device off of PCI bus */
631 iowrite32(selective_reset, &nic->csr->port);
632 e100_write_flush(nic); udelay(20);
634 /* Now fully reset device */
635 iowrite32(software_reset, &nic->csr->port);
636 e100_write_flush(nic); udelay(20);
638 /* Mask off our interrupt line - it's unmasked after reset */
639 e100_disable_irq(nic);
642 static int e100_self_test(struct nic *nic)
644 u32 dma_addr = nic->dma_addr + offsetof(struct mem, selftest);
646 /* Passing the self-test is a pretty good indication
647 * that the device can DMA to/from host memory */
649 nic->mem->selftest.signature = 0;
650 nic->mem->selftest.result = 0xFFFFFFFF;
652 iowrite32(selftest | dma_addr, &nic->csr->port);
653 e100_write_flush(nic);
654 /* Wait 10 msec for self-test to complete */
657 /* Interrupts are enabled after self-test */
658 e100_disable_irq(nic);
660 /* Check results of self-test */
661 if(nic->mem->selftest.result != 0) {
662 DPRINTK(HW, ERR, "Self-test failed: result=0x%08X\n",
663 nic->mem->selftest.result);
666 if(nic->mem->selftest.signature == 0) {
667 DPRINTK(HW, ERR, "Self-test failed: timed out\n");
674 static void e100_eeprom_write(struct nic *nic, u16 addr_len, u16 addr, __le16 data)
676 u32 cmd_addr_data[3];
680 /* Three cmds: write/erase enable, write data, write/erase disable */
681 cmd_addr_data[0] = op_ewen << (addr_len - 2);
682 cmd_addr_data[1] = (((op_write << addr_len) | addr) << 16) |
684 cmd_addr_data[2] = op_ewds << (addr_len - 2);
686 /* Bit-bang cmds to write word to eeprom */
687 for(j = 0; j < 3; j++) {
690 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
691 e100_write_flush(nic); udelay(4);
693 for(i = 31; i >= 0; i--) {
694 ctrl = (cmd_addr_data[j] & (1 << i)) ?
696 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
697 e100_write_flush(nic); udelay(4);
699 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
700 e100_write_flush(nic); udelay(4);
702 /* Wait 10 msec for cmd to complete */
706 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
707 e100_write_flush(nic); udelay(4);
711 /* General technique stolen from the eepro100 driver - very clever */
712 static __le16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr)
719 cmd_addr_data = ((op_read << *addr_len) | addr) << 16;
722 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
723 e100_write_flush(nic); udelay(4);
725 /* Bit-bang to read word from eeprom */
726 for(i = 31; i >= 0; i--) {
727 ctrl = (cmd_addr_data & (1 << i)) ? eecs | eedi : eecs;
728 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
729 e100_write_flush(nic); udelay(4);
731 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
732 e100_write_flush(nic); udelay(4);
734 /* Eeprom drives a dummy zero to EEDO after receiving
735 * complete address. Use this to adjust addr_len. */
736 ctrl = ioread8(&nic->csr->eeprom_ctrl_lo);
737 if(!(ctrl & eedo) && i > 16) {
738 *addr_len -= (i - 16);
742 data = (data << 1) | (ctrl & eedo ? 1 : 0);
746 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
747 e100_write_flush(nic); udelay(4);
749 return cpu_to_le16(data);
752 /* Load entire EEPROM image into driver cache and validate checksum */
753 static int e100_eeprom_load(struct nic *nic)
755 u16 addr, addr_len = 8, checksum = 0;
757 /* Try reading with an 8-bit addr len to discover actual addr len */
758 e100_eeprom_read(nic, &addr_len, 0);
759 nic->eeprom_wc = 1 << addr_len;
761 for(addr = 0; addr < nic->eeprom_wc; addr++) {
762 nic->eeprom[addr] = e100_eeprom_read(nic, &addr_len, addr);
763 if(addr < nic->eeprom_wc - 1)
764 checksum += le16_to_cpu(nic->eeprom[addr]);
767 /* The checksum, stored in the last word, is calculated such that
768 * the sum of words should be 0xBABA */
769 if (cpu_to_le16(0xBABA - checksum) != nic->eeprom[nic->eeprom_wc - 1]) {
770 DPRINTK(PROBE, ERR, "EEPROM corrupted\n");
771 if (!eeprom_bad_csum_allow)
778 /* Save (portion of) driver EEPROM cache to device and update checksum */
779 static int e100_eeprom_save(struct nic *nic, u16 start, u16 count)
781 u16 addr, addr_len = 8, checksum = 0;
783 /* Try reading with an 8-bit addr len to discover actual addr len */
784 e100_eeprom_read(nic, &addr_len, 0);
785 nic->eeprom_wc = 1 << addr_len;
787 if(start + count >= nic->eeprom_wc)
790 for(addr = start; addr < start + count; addr++)
791 e100_eeprom_write(nic, addr_len, addr, nic->eeprom[addr]);
793 /* The checksum, stored in the last word, is calculated such that
794 * the sum of words should be 0xBABA */
795 for(addr = 0; addr < nic->eeprom_wc - 1; addr++)
796 checksum += le16_to_cpu(nic->eeprom[addr]);
797 nic->eeprom[nic->eeprom_wc - 1] = cpu_to_le16(0xBABA - checksum);
798 e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1,
799 nic->eeprom[nic->eeprom_wc - 1]);
804 #define E100_WAIT_SCB_TIMEOUT 20000 /* we might have to wait 100ms!!! */
805 #define E100_WAIT_SCB_FAST 20 /* delay like the old code */
806 static int e100_exec_cmd(struct nic *nic, u8 cmd, dma_addr_t dma_addr)
812 spin_lock_irqsave(&nic->cmd_lock, flags);
814 /* Previous command is accepted when SCB clears */
815 for(i = 0; i < E100_WAIT_SCB_TIMEOUT; i++) {
816 if(likely(!ioread8(&nic->csr->scb.cmd_lo)))
819 if(unlikely(i > E100_WAIT_SCB_FAST))
822 if(unlikely(i == E100_WAIT_SCB_TIMEOUT)) {
827 if(unlikely(cmd != cuc_resume))
828 iowrite32(dma_addr, &nic->csr->scb.gen_ptr);
829 iowrite8(cmd, &nic->csr->scb.cmd_lo);
832 spin_unlock_irqrestore(&nic->cmd_lock, flags);
837 static int e100_exec_cb(struct nic *nic, struct sk_buff *skb,
838 void (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *))
844 spin_lock_irqsave(&nic->cb_lock, flags);
846 if(unlikely(!nic->cbs_avail)) {
852 nic->cb_to_use = cb->next;
856 if(unlikely(!nic->cbs_avail))
859 cb_prepare(nic, cb, skb);
861 /* Order is important otherwise we'll be in a race with h/w:
862 * set S-bit in current first, then clear S-bit in previous. */
863 cb->command |= cpu_to_le16(cb_s);
865 cb->prev->command &= cpu_to_le16(~cb_s);
867 while(nic->cb_to_send != nic->cb_to_use) {
868 if(unlikely(e100_exec_cmd(nic, nic->cuc_cmd,
869 nic->cb_to_send->dma_addr))) {
870 /* Ok, here's where things get sticky. It's
871 * possible that we can't schedule the command
872 * because the controller is too busy, so
873 * let's just queue the command and try again
874 * when another command is scheduled. */
877 schedule_work(&nic->tx_timeout_task);
881 nic->cuc_cmd = cuc_resume;
882 nic->cb_to_send = nic->cb_to_send->next;
887 spin_unlock_irqrestore(&nic->cb_lock, flags);
892 static u16 mdio_ctrl(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data)
900 * Stratus87247: we shouldn't be writing the MDI control
901 * register until the Ready bit shows True. Also, since
902 * manipulation of the MDI control registers is a multi-step
903 * procedure it should be done under lock.
905 spin_lock_irqsave(&nic->mdio_lock, flags);
906 for (i = 100; i; --i) {
907 if (ioread32(&nic->csr->mdi_ctrl) & mdi_ready)
912 printk("e100.mdio_ctrl(%s) won't go Ready\n",
914 spin_unlock_irqrestore(&nic->mdio_lock, flags);
915 return 0; /* No way to indicate timeout error */
917 iowrite32((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl);
919 for (i = 0; i < 100; i++) {
921 if ((data_out = ioread32(&nic->csr->mdi_ctrl)) & mdi_ready)
924 spin_unlock_irqrestore(&nic->mdio_lock, flags);
926 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n",
927 dir == mdi_read ? "READ" : "WRITE", addr, reg, data, data_out);
928 return (u16)data_out;
931 static int mdio_read(struct net_device *netdev, int addr, int reg)
933 return mdio_ctrl(netdev_priv(netdev), addr, mdi_read, reg, 0);
936 static void mdio_write(struct net_device *netdev, int addr, int reg, int data)
938 mdio_ctrl(netdev_priv(netdev), addr, mdi_write, reg, data);
941 static void e100_get_defaults(struct nic *nic)
943 struct param_range rfds = { .min = 16, .max = 256, .count = 256 };
944 struct param_range cbs = { .min = 64, .max = 256, .count = 128 };
946 /* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */
947 nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->pdev->revision;
948 if(nic->mac == mac_unknown)
949 nic->mac = mac_82557_D100_A;
951 nic->params.rfds = rfds;
952 nic->params.cbs = cbs;
954 /* Quadwords to DMA into FIFO before starting frame transmit */
955 nic->tx_threshold = 0xE0;
957 /* no interrupt for every tx completion, delay = 256us if not 557 */
958 nic->tx_command = cpu_to_le16(cb_tx | cb_tx_sf |
959 ((nic->mac >= mac_82558_D101_A4) ? cb_cid : cb_i));
961 /* Template for a freshly allocated RFD */
962 nic->blank_rfd.command = 0;
963 nic->blank_rfd.rbd = cpu_to_le32(0xFFFFFFFF);
964 nic->blank_rfd.size = cpu_to_le16(VLAN_ETH_FRAME_LEN);
967 nic->mii.phy_id_mask = 0x1F;
968 nic->mii.reg_num_mask = 0x1F;
969 nic->mii.dev = nic->netdev;
970 nic->mii.mdio_read = mdio_read;
971 nic->mii.mdio_write = mdio_write;
974 static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb)
976 struct config *config = &cb->u.config;
977 u8 *c = (u8 *)config;
979 cb->command = cpu_to_le16(cb_config);
981 memset(config, 0, sizeof(struct config));
983 config->byte_count = 0x16; /* bytes in this struct */
984 config->rx_fifo_limit = 0x8; /* bytes in FIFO before DMA */
985 config->direct_rx_dma = 0x1; /* reserved */
986 config->standard_tcb = 0x1; /* 1=standard, 0=extended */
987 config->standard_stat_counter = 0x1; /* 1=standard, 0=extended */
988 config->rx_discard_short_frames = 0x1; /* 1=discard, 0=pass */
989 config->tx_underrun_retry = 0x3; /* # of underrun retries */
990 config->mii_mode = 0x1; /* 1=MII mode, 0=503 mode */
992 config->no_source_addr_insertion = 0x1; /* 1=no, 0=yes */
993 config->preamble_length = 0x2; /* 0=1, 1=3, 2=7, 3=15 bytes */
994 config->ifs = 0x6; /* x16 = inter frame spacing */
995 config->ip_addr_hi = 0xF2; /* ARP IP filter - not used */
996 config->pad15_1 = 0x1;
997 config->pad15_2 = 0x1;
998 config->crs_or_cdt = 0x0; /* 0=CRS only, 1=CRS or CDT */
999 config->fc_delay_hi = 0x40; /* time delay for fc frame */
1000 config->tx_padding = 0x1; /* 1=pad short frames */
1001 config->fc_priority_threshold = 0x7; /* 7=priority fc disabled */
1002 config->pad18 = 0x1;
1003 config->full_duplex_pin = 0x1; /* 1=examine FDX# pin */
1004 config->pad20_1 = 0x1F;
1005 config->fc_priority_location = 0x1; /* 1=byte#31, 0=byte#19 */
1006 config->pad21_1 = 0x5;
1008 config->adaptive_ifs = nic->adaptive_ifs;
1009 config->loopback = nic->loopback;
1011 if(nic->mii.force_media && nic->mii.full_duplex)
1012 config->full_duplex_force = 0x1; /* 1=force, 0=auto */
1014 if(nic->flags & promiscuous || nic->loopback) {
1015 config->rx_save_bad_frames = 0x1; /* 1=save, 0=discard */
1016 config->rx_discard_short_frames = 0x0; /* 1=discard, 0=save */
1017 config->promiscuous_mode = 0x1; /* 1=on, 0=off */
1020 if(nic->flags & multicast_all)
1021 config->multicast_all = 0x1; /* 1=accept, 0=no */
1023 /* disable WoL when up */
1024 if(netif_running(nic->netdev) || !(nic->flags & wol_magic))
1025 config->magic_packet_disable = 0x1; /* 1=off, 0=on */
1027 if(nic->mac >= mac_82558_D101_A4) {
1028 config->fc_disable = 0x1; /* 1=Tx fc off, 0=Tx fc on */
1029 config->mwi_enable = 0x1; /* 1=enable, 0=disable */
1030 config->standard_tcb = 0x0; /* 1=standard, 0=extended */
1031 config->rx_long_ok = 0x1; /* 1=VLANs ok, 0=standard */
1032 if (nic->mac >= mac_82559_D101M) {
1033 config->tno_intr = 0x1; /* TCO stats enable */
1034 /* Enable TCO in extended config */
1035 if (nic->mac >= mac_82551_10) {
1036 config->byte_count = 0x20; /* extended bytes */
1037 config->rx_d102_mode = 0x1; /* GMRC for TCO */
1040 config->standard_stat_counter = 0x0;
1044 DPRINTK(HW, DEBUG, "[00-07]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1045 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
1046 DPRINTK(HW, DEBUG, "[08-15]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1047 c[8], c[9], c[10], c[11], c[12], c[13], c[14], c[15]);
1048 DPRINTK(HW, DEBUG, "[16-23]=%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
1049 c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]);
1052 /********************************************************/
1053 /* Micro code for 8086:1229 Rev 8 */
1054 /********************************************************/
1056 /* Parameter values for the D101M B-step */
1057 #define D101M_CPUSAVER_TIMER_DWORD 78
1058 #define D101M_CPUSAVER_BUNDLE_DWORD 65
1059 #define D101M_CPUSAVER_MIN_SIZE_DWORD 126
1061 #define D101M_B_RCVBUNDLE_UCODE \
1063 0x00550215, 0xFFFF0437, 0xFFFFFFFF, 0x06A70789, 0xFFFFFFFF, 0x0558FFFF, \
1064 0x000C0001, 0x00101312, 0x000C0008, 0x00380216, \
1065 0x0010009C, 0x00204056, 0x002380CC, 0x00380056, \
1066 0x0010009C, 0x00244C0B, 0x00000800, 0x00124818, \
1067 0x00380438, 0x00000000, 0x00140000, 0x00380555, \
1068 0x00308000, 0x00100662, 0x00100561, 0x000E0408, \
1069 0x00134861, 0x000C0002, 0x00103093, 0x00308000, \
1070 0x00100624, 0x00100561, 0x000E0408, 0x00100861, \
1071 0x000C007E, 0x00222C21, 0x000C0002, 0x00103093, \
1072 0x00380C7A, 0x00080000, 0x00103090, 0x00380C7A, \
1073 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1074 0x0010009C, 0x00244C2D, 0x00010004, 0x00041000, \
1075 0x003A0437, 0x00044010, 0x0038078A, 0x00000000, \
1076 0x00100099, 0x00206C7A, 0x0010009C, 0x00244C48, \
1077 0x00130824, 0x000C0001, 0x00101213, 0x00260C75, \
1078 0x00041000, 0x00010004, 0x00130826, 0x000C0006, \
1079 0x002206A8, 0x0013C926, 0x00101313, 0x003806A8, \
1080 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1081 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1082 0x00080600, 0x00101B10, 0x00050004, 0x00100826, \
1083 0x00101210, 0x00380C34, 0x00000000, 0x00000000, \
1084 0x0021155B, 0x00100099, 0x00206559, 0x0010009C, \
1085 0x00244559, 0x00130836, 0x000C0000, 0x00220C62, \
1086 0x000C0001, 0x00101B13, 0x00229C0E, 0x00210C0E, \
1087 0x00226C0E, 0x00216C0E, 0x0022FC0E, 0x00215C0E, \
1088 0x00214C0E, 0x00380555, 0x00010004, 0x00041000, \
1089 0x00278C67, 0x00040800, 0x00018100, 0x003A0437, \
1090 0x00130826, 0x000C0001, 0x00220559, 0x00101313, \
1091 0x00380559, 0x00000000, 0x00000000, 0x00000000, \
1092 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1093 0x00000000, 0x00130831, 0x0010090B, 0x00124813, \
1094 0x000CFF80, 0x002606AB, 0x00041000, 0x00010004, \
1095 0x003806A8, 0x00000000, 0x00000000, 0x00000000, \
1098 /********************************************************/
1099 /* Micro code for 8086:1229 Rev 9 */
1100 /********************************************************/
1102 /* Parameter values for the D101S */
1103 #define D101S_CPUSAVER_TIMER_DWORD 78
1104 #define D101S_CPUSAVER_BUNDLE_DWORD 67
1105 #define D101S_CPUSAVER_MIN_SIZE_DWORD 128
1107 #define D101S_RCVBUNDLE_UCODE \
1109 0x00550242, 0xFFFF047E, 0xFFFFFFFF, 0x06FF0818, 0xFFFFFFFF, 0x05A6FFFF, \
1110 0x000C0001, 0x00101312, 0x000C0008, 0x00380243, \
1111 0x0010009C, 0x00204056, 0x002380D0, 0x00380056, \
1112 0x0010009C, 0x00244F8B, 0x00000800, 0x00124818, \
1113 0x0038047F, 0x00000000, 0x00140000, 0x003805A3, \
1114 0x00308000, 0x00100610, 0x00100561, 0x000E0408, \
1115 0x00134861, 0x000C0002, 0x00103093, 0x00308000, \
1116 0x00100624, 0x00100561, 0x000E0408, 0x00100861, \
1117 0x000C007E, 0x00222FA1, 0x000C0002, 0x00103093, \
1118 0x00380F90, 0x00080000, 0x00103090, 0x00380F90, \
1119 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1120 0x0010009C, 0x00244FAD, 0x00010004, 0x00041000, \
1121 0x003A047E, 0x00044010, 0x00380819, 0x00000000, \
1122 0x00100099, 0x00206FFD, 0x0010009A, 0x0020AFFD, \
1123 0x0010009C, 0x00244FC8, 0x00130824, 0x000C0001, \
1124 0x00101213, 0x00260FF7, 0x00041000, 0x00010004, \
1125 0x00130826, 0x000C0006, 0x00220700, 0x0013C926, \
1126 0x00101313, 0x00380700, 0x00000000, 0x00000000, \
1127 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1128 0x00080600, 0x00101B10, 0x00050004, 0x00100826, \
1129 0x00101210, 0x00380FB6, 0x00000000, 0x00000000, \
1130 0x002115A9, 0x00100099, 0x002065A7, 0x0010009A, \
1131 0x0020A5A7, 0x0010009C, 0x002445A7, 0x00130836, \
1132 0x000C0000, 0x00220FE4, 0x000C0001, 0x00101B13, \
1133 0x00229F8E, 0x00210F8E, 0x00226F8E, 0x00216F8E, \
1134 0x0022FF8E, 0x00215F8E, 0x00214F8E, 0x003805A3, \
1135 0x00010004, 0x00041000, 0x00278FE9, 0x00040800, \
1136 0x00018100, 0x003A047E, 0x00130826, 0x000C0001, \
1137 0x002205A7, 0x00101313, 0x003805A7, 0x00000000, \
1138 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1139 0x00000000, 0x00000000, 0x00000000, 0x00130831, \
1140 0x0010090B, 0x00124813, 0x000CFF80, 0x00260703, \
1141 0x00041000, 0x00010004, 0x00380700 \
1144 /********************************************************/
1145 /* Micro code for the 8086:1229 Rev F/10 */
1146 /********************************************************/
1148 /* Parameter values for the D102 E-step */
1149 #define D102_E_CPUSAVER_TIMER_DWORD 42
1150 #define D102_E_CPUSAVER_BUNDLE_DWORD 54
1151 #define D102_E_CPUSAVER_MIN_SIZE_DWORD 46
1153 #define D102_E_RCVBUNDLE_UCODE \
1155 0x007D028F, 0x0E4204F9, 0x14ED0C85, 0x14FA14E9, 0x0EF70E36, 0x1FFF1FFF, \
1156 0x00E014B9, 0x00000000, 0x00000000, 0x00000000, \
1157 0x00E014BD, 0x00000000, 0x00000000, 0x00000000, \
1158 0x00E014D5, 0x00000000, 0x00000000, 0x00000000, \
1159 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1160 0x00E014C1, 0x00000000, 0x00000000, 0x00000000, \
1161 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1162 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1163 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1164 0x00E014C8, 0x00000000, 0x00000000, 0x00000000, \
1165 0x00200600, 0x00E014EE, 0x00000000, 0x00000000, \
1166 0x0030FF80, 0x00940E46, 0x00038200, 0x00102000, \
1167 0x00E00E43, 0x00000000, 0x00000000, 0x00000000, \
1168 0x00300006, 0x00E014FB, 0x00000000, 0x00000000, \
1169 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1170 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1171 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1172 0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000, \
1173 0x00906EFD, 0x00900EFD, 0x00E00EF8, 0x00000000, \
1174 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1175 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1176 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1177 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1178 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1179 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1180 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1181 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1182 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1183 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1184 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1185 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1186 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1187 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
1190 static void e100_setup_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1194 u32 ucode[UCODE_SIZE + 1];
1200 { D101M_B_RCVBUNDLE_UCODE,
1202 D101M_CPUSAVER_TIMER_DWORD,
1203 D101M_CPUSAVER_BUNDLE_DWORD,
1204 D101M_CPUSAVER_MIN_SIZE_DWORD },
1205 { D101S_RCVBUNDLE_UCODE,
1207 D101S_CPUSAVER_TIMER_DWORD,
1208 D101S_CPUSAVER_BUNDLE_DWORD,
1209 D101S_CPUSAVER_MIN_SIZE_DWORD },
1210 { D102_E_RCVBUNDLE_UCODE,
1212 D102_E_CPUSAVER_TIMER_DWORD,
1213 D102_E_CPUSAVER_BUNDLE_DWORD,
1214 D102_E_CPUSAVER_MIN_SIZE_DWORD },
1215 { D102_E_RCVBUNDLE_UCODE,
1217 D102_E_CPUSAVER_TIMER_DWORD,
1218 D102_E_CPUSAVER_BUNDLE_DWORD,
1219 D102_E_CPUSAVER_MIN_SIZE_DWORD },
1224 /*************************************************************************
1225 * CPUSaver parameters
1227 * All CPUSaver parameters are 16-bit literals that are part of a
1228 * "move immediate value" instruction. By changing the value of
1229 * the literal in the instruction before the code is loaded, the
1230 * driver can change the algorithm.
1232 * INTDELAY - This loads the dead-man timer with its initial value.
1233 * When this timer expires the interrupt is asserted, and the
1234 * timer is reset each time a new packet is received. (see
1235 * BUNDLEMAX below to set the limit on number of chained packets)
1236 * The current default is 0x600 or 1536. Experiments show that
1237 * the value should probably stay within the 0x200 - 0x1000.
1240 * This sets the maximum number of frames that will be bundled. In
1241 * some situations, such as the TCP windowing algorithm, it may be
1242 * better to limit the growth of the bundle size than let it go as
1243 * high as it can, because that could cause too much added latency.
1244 * The default is six, because this is the number of packets in the
1245 * default TCP window size. A value of 1 would make CPUSaver indicate
1246 * an interrupt for every frame received. If you do not want to put
1247 * a limit on the bundle size, set this value to xFFFF.
1250 * This contains a bit-mask describing the minimum size frame that
1251 * will be bundled. The default masks the lower 7 bits, which means
1252 * that any frame less than 128 bytes in length will not be bundled,
1253 * but will instead immediately generate an interrupt. This does
1254 * not affect the current bundle in any way. Any frame that is 128
1255 * bytes or large will be bundled normally. This feature is meant
1256 * to provide immediate indication of ACK frames in a TCP environment.
1257 * Customers were seeing poor performance when a machine with CPUSaver
1258 * enabled was sending but not receiving. The delay introduced when
1259 * the ACKs were received was enough to reduce total throughput, because
1260 * the sender would sit idle until the ACK was finally seen.
1262 * The current default is 0xFF80, which masks out the lower 7 bits.
1263 * This means that any frame which is x7F (127) bytes or smaller
1264 * will cause an immediate interrupt. Because this value must be a
1265 * bit mask, there are only a few valid values that can be used. To
1266 * turn this feature off, the driver can write the value xFFFF to the
1267 * lower word of this instruction (in the same way that the other
1268 * parameters are used). Likewise, a value of 0xF800 (2047) would
1269 * cause an interrupt to be generated for every frame, because all
1270 * standard Ethernet frames are <= 2047 bytes in length.
1271 *************************************************************************/
1273 /* if you wish to disable the ucode functionality, while maintaining the
1274 * workarounds it provides, set the following defines to:
1279 #define BUNDLESMALL 1
1280 #define BUNDLEMAX (u16)6
1281 #define INTDELAY (u16)1536 /* 0x600 */
1283 /* do not load u-code for ICH devices */
1284 if (nic->flags & ich)
1287 /* Search for ucode match against h/w revision */
1288 for (opts = ucode_opts; opts->mac; opts++) {
1290 u32 *ucode = opts->ucode;
1291 if (nic->mac != opts->mac)
1294 /* Insert user-tunable settings */
1295 ucode[opts->timer_dword] &= 0xFFFF0000;
1296 ucode[opts->timer_dword] |= INTDELAY;
1297 ucode[opts->bundle_dword] &= 0xFFFF0000;
1298 ucode[opts->bundle_dword] |= BUNDLEMAX;
1299 ucode[opts->min_size_dword] &= 0xFFFF0000;
1300 ucode[opts->min_size_dword] |= (BUNDLESMALL) ? 0xFFFF : 0xFF80;
1302 for (i = 0; i < UCODE_SIZE; i++)
1303 cb->u.ucode[i] = cpu_to_le32(ucode[i]);
1304 cb->command = cpu_to_le16(cb_ucode | cb_el);
1309 cb->command = cpu_to_le16(cb_nop | cb_el);
1312 static inline int e100_exec_cb_wait(struct nic *nic, struct sk_buff *skb,
1313 void (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *))
1315 int err = 0, counter = 50;
1316 struct cb *cb = nic->cb_to_clean;
1318 if ((err = e100_exec_cb(nic, NULL, e100_setup_ucode)))
1319 DPRINTK(PROBE,ERR, "ucode cmd failed with error %d\n", err);
1321 /* must restart cuc */
1322 nic->cuc_cmd = cuc_start;
1324 /* wait for completion */
1325 e100_write_flush(nic);
1328 /* wait for possibly (ouch) 500ms */
1329 while (!(cb->status & cpu_to_le16(cb_complete))) {
1331 if (!--counter) break;
1334 /* ack any interrupts, something could have been set */
1335 iowrite8(~0, &nic->csr->scb.stat_ack);
1337 /* if the command failed, or is not OK, notify and return */
1338 if (!counter || !(cb->status & cpu_to_le16(cb_ok))) {
1339 DPRINTK(PROBE,ERR, "ucode load failed\n");
1346 static void e100_setup_iaaddr(struct nic *nic, struct cb *cb,
1347 struct sk_buff *skb)
1349 cb->command = cpu_to_le16(cb_iaaddr);
1350 memcpy(cb->u.iaaddr, nic->netdev->dev_addr, ETH_ALEN);
1353 static void e100_dump(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1355 cb->command = cpu_to_le16(cb_dump);
1356 cb->u.dump_buffer_addr = cpu_to_le32(nic->dma_addr +
1357 offsetof(struct mem, dump_buf));
1360 #define NCONFIG_AUTO_SWITCH 0x0080
1361 #define MII_NSC_CONG MII_RESV1
1362 #define NSC_CONG_ENABLE 0x0100
1363 #define NSC_CONG_TXREADY 0x0400
1364 #define ADVERTISE_FC_SUPPORTED 0x0400
1365 static int e100_phy_init(struct nic *nic)
1367 struct net_device *netdev = nic->netdev;
1369 u16 bmcr, stat, id_lo, id_hi, cong;
1371 /* Discover phy addr by searching addrs in order {1,0,2,..., 31} */
1372 for(addr = 0; addr < 32; addr++) {
1373 nic->mii.phy_id = (addr == 0) ? 1 : (addr == 1) ? 0 : addr;
1374 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR);
1375 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1376 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1377 if(!((bmcr == 0xFFFF) || ((stat == 0) && (bmcr == 0))))
1380 DPRINTK(HW, DEBUG, "phy_addr = %d\n", nic->mii.phy_id);
1384 /* Selected the phy and isolate the rest */
1385 for(addr = 0; addr < 32; addr++) {
1386 if(addr != nic->mii.phy_id) {
1387 mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE);
1389 bmcr = mdio_read(netdev, addr, MII_BMCR);
1390 mdio_write(netdev, addr, MII_BMCR,
1391 bmcr & ~BMCR_ISOLATE);
1396 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1);
1397 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2);
1398 nic->phy = (u32)id_hi << 16 | (u32)id_lo;
1399 DPRINTK(HW, DEBUG, "phy ID = 0x%08X\n", nic->phy);
1401 /* Handle National tx phys */
1402 #define NCS_PHY_MODEL_MASK 0xFFF0FFFF
1403 if((nic->phy & NCS_PHY_MODEL_MASK) == phy_nsc_tx) {
1404 /* Disable congestion control */
1405 cong = mdio_read(netdev, nic->mii.phy_id, MII_NSC_CONG);
1406 cong |= NSC_CONG_TXREADY;
1407 cong &= ~NSC_CONG_ENABLE;
1408 mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong);
1411 if((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
1412 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
1413 !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) {
1414 /* enable/disable MDI/MDI-X auto-switching. */
1415 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
1416 nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
1422 static int e100_hw_init(struct nic *nic)
1428 DPRINTK(HW, ERR, "e100_hw_init\n");
1429 if(!in_interrupt() && (err = e100_self_test(nic)))
1432 if((err = e100_phy_init(nic)))
1434 if((err = e100_exec_cmd(nic, cuc_load_base, 0)))
1436 if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
1438 if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
1440 if((err = e100_exec_cb(nic, NULL, e100_configure)))
1442 if((err = e100_exec_cb(nic, NULL, e100_setup_iaaddr)))
1444 if((err = e100_exec_cmd(nic, cuc_dump_addr,
1445 nic->dma_addr + offsetof(struct mem, stats))))
1447 if((err = e100_exec_cmd(nic, cuc_dump_reset, 0)))
1450 e100_disable_irq(nic);
1455 static void e100_multi(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1457 struct net_device *netdev = nic->netdev;
1458 struct dev_mc_list *list = netdev->mc_list;
1459 u16 i, count = min(netdev->mc_count, E100_MAX_MULTICAST_ADDRS);
1461 cb->command = cpu_to_le16(cb_multi);
1462 cb->u.multi.count = cpu_to_le16(count * ETH_ALEN);
1463 for(i = 0; list && i < count; i++, list = list->next)
1464 memcpy(&cb->u.multi.addr[i*ETH_ALEN], &list->dmi_addr,
1468 static void e100_set_multicast_list(struct net_device *netdev)
1470 struct nic *nic = netdev_priv(netdev);
1472 DPRINTK(HW, DEBUG, "mc_count=%d, flags=0x%04X\n",
1473 netdev->mc_count, netdev->flags);
1475 if(netdev->flags & IFF_PROMISC)
1476 nic->flags |= promiscuous;
1478 nic->flags &= ~promiscuous;
1480 if(netdev->flags & IFF_ALLMULTI ||
1481 netdev->mc_count > E100_MAX_MULTICAST_ADDRS)
1482 nic->flags |= multicast_all;
1484 nic->flags &= ~multicast_all;
1486 e100_exec_cb(nic, NULL, e100_configure);
1487 e100_exec_cb(nic, NULL, e100_multi);
1490 static void e100_update_stats(struct nic *nic)
1492 struct net_device *dev = nic->netdev;
1493 struct net_device_stats *ns = &dev->stats;
1494 struct stats *s = &nic->mem->stats;
1495 __le32 *complete = (nic->mac < mac_82558_D101_A4) ? &s->fc_xmt_pause :
1496 (nic->mac < mac_82559_D101M) ? (__le32 *)&s->xmt_tco_frames :
1499 /* Device's stats reporting may take several microseconds to
1500 * complete, so we're always waiting for results of the
1501 * previous command. */
1503 if(*complete == cpu_to_le32(cuc_dump_reset_complete)) {
1505 nic->tx_frames = le32_to_cpu(s->tx_good_frames);
1506 nic->tx_collisions = le32_to_cpu(s->tx_total_collisions);
1507 ns->tx_aborted_errors += le32_to_cpu(s->tx_max_collisions);
1508 ns->tx_window_errors += le32_to_cpu(s->tx_late_collisions);
1509 ns->tx_carrier_errors += le32_to_cpu(s->tx_lost_crs);
1510 ns->tx_fifo_errors += le32_to_cpu(s->tx_underruns);
1511 ns->collisions += nic->tx_collisions;
1512 ns->tx_errors += le32_to_cpu(s->tx_max_collisions) +
1513 le32_to_cpu(s->tx_lost_crs);
1514 ns->rx_length_errors += le32_to_cpu(s->rx_short_frame_errors) +
1515 nic->rx_over_length_errors;
1516 ns->rx_crc_errors += le32_to_cpu(s->rx_crc_errors);
1517 ns->rx_frame_errors += le32_to_cpu(s->rx_alignment_errors);
1518 ns->rx_over_errors += le32_to_cpu(s->rx_overrun_errors);
1519 ns->rx_fifo_errors += le32_to_cpu(s->rx_overrun_errors);
1520 ns->rx_missed_errors += le32_to_cpu(s->rx_resource_errors);
1521 ns->rx_errors += le32_to_cpu(s->rx_crc_errors) +
1522 le32_to_cpu(s->rx_alignment_errors) +
1523 le32_to_cpu(s->rx_short_frame_errors) +
1524 le32_to_cpu(s->rx_cdt_errors);
1525 nic->tx_deferred += le32_to_cpu(s->tx_deferred);
1526 nic->tx_single_collisions +=
1527 le32_to_cpu(s->tx_single_collisions);
1528 nic->tx_multiple_collisions +=
1529 le32_to_cpu(s->tx_multiple_collisions);
1530 if(nic->mac >= mac_82558_D101_A4) {
1531 nic->tx_fc_pause += le32_to_cpu(s->fc_xmt_pause);
1532 nic->rx_fc_pause += le32_to_cpu(s->fc_rcv_pause);
1533 nic->rx_fc_unsupported +=
1534 le32_to_cpu(s->fc_rcv_unsupported);
1535 if(nic->mac >= mac_82559_D101M) {
1536 nic->tx_tco_frames +=
1537 le16_to_cpu(s->xmt_tco_frames);
1538 nic->rx_tco_frames +=
1539 le16_to_cpu(s->rcv_tco_frames);
1545 if(e100_exec_cmd(nic, cuc_dump_reset, 0))
1546 DPRINTK(TX_ERR, DEBUG, "exec cuc_dump_reset failed\n");
1549 static void e100_adjust_adaptive_ifs(struct nic *nic, int speed, int duplex)
1551 /* Adjust inter-frame-spacing (IFS) between two transmits if
1552 * we're getting collisions on a half-duplex connection. */
1554 if(duplex == DUPLEX_HALF) {
1555 u32 prev = nic->adaptive_ifs;
1556 u32 min_frames = (speed == SPEED_100) ? 1000 : 100;
1558 if((nic->tx_frames / 32 < nic->tx_collisions) &&
1559 (nic->tx_frames > min_frames)) {
1560 if(nic->adaptive_ifs < 60)
1561 nic->adaptive_ifs += 5;
1562 } else if (nic->tx_frames < min_frames) {
1563 if(nic->adaptive_ifs >= 5)
1564 nic->adaptive_ifs -= 5;
1566 if(nic->adaptive_ifs != prev)
1567 e100_exec_cb(nic, NULL, e100_configure);
1571 static void e100_watchdog(unsigned long data)
1573 struct nic *nic = (struct nic *)data;
1574 struct ethtool_cmd cmd;
1576 DPRINTK(TIMER, DEBUG, "right now = %ld\n", jiffies);
1578 /* mii library handles link maintenance tasks */
1580 mii_ethtool_gset(&nic->mii, &cmd);
1582 if(mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) {
1583 DPRINTK(LINK, INFO, "link up, %sMbps, %s-duplex\n",
1584 cmd.speed == SPEED_100 ? "100" : "10",
1585 cmd.duplex == DUPLEX_FULL ? "full" : "half");
1586 } else if(!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) {
1587 DPRINTK(LINK, INFO, "link down\n");
1590 mii_check_link(&nic->mii);
1592 /* Software generated interrupt to recover from (rare) Rx
1593 * allocation failure.
1594 * Unfortunately have to use a spinlock to not re-enable interrupts
1595 * accidentally, due to hardware that shares a register between the
1596 * interrupt mask bit and the SW Interrupt generation bit */
1597 spin_lock_irq(&nic->cmd_lock);
1598 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi);
1599 e100_write_flush(nic);
1600 spin_unlock_irq(&nic->cmd_lock);
1602 e100_update_stats(nic);
1603 e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex);
1605 if(nic->mac <= mac_82557_D100_C)
1606 /* Issue a multicast command to workaround a 557 lock up */
1607 e100_set_multicast_list(nic->netdev);
1609 if(nic->flags & ich && cmd.speed==SPEED_10 && cmd.duplex==DUPLEX_HALF)
1610 /* Need SW workaround for ICH[x] 10Mbps/half duplex Tx hang. */
1611 nic->flags |= ich_10h_workaround;
1613 nic->flags &= ~ich_10h_workaround;
1615 mod_timer(&nic->watchdog,
1616 round_jiffies(jiffies + E100_WATCHDOG_PERIOD));
1619 static void e100_xmit_prepare(struct nic *nic, struct cb *cb,
1620 struct sk_buff *skb)
1622 cb->command = nic->tx_command;
1623 /* interrupt every 16 packets regardless of delay */
1624 if((nic->cbs_avail & ~15) == nic->cbs_avail)
1625 cb->command |= cpu_to_le16(cb_i);
1626 cb->u.tcb.tbd_array = cb->dma_addr + offsetof(struct cb, u.tcb.tbd);
1627 cb->u.tcb.tcb_byte_count = 0;
1628 cb->u.tcb.threshold = nic->tx_threshold;
1629 cb->u.tcb.tbd_count = 1;
1630 cb->u.tcb.tbd.buf_addr = cpu_to_le32(pci_map_single(nic->pdev,
1631 skb->data, skb->len, PCI_DMA_TODEVICE));
1632 /* check for mapping failure? */
1633 cb->u.tcb.tbd.size = cpu_to_le16(skb->len);
1636 static int e100_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1638 struct nic *nic = netdev_priv(netdev);
1641 if(nic->flags & ich_10h_workaround) {
1642 /* SW workaround for ICH[x] 10Mbps/half duplex Tx hang.
1643 Issue a NOP command followed by a 1us delay before
1644 issuing the Tx command. */
1645 if(e100_exec_cmd(nic, cuc_nop, 0))
1646 DPRINTK(TX_ERR, DEBUG, "exec cuc_nop failed\n");
1650 err = e100_exec_cb(nic, skb, e100_xmit_prepare);
1654 /* We queued the skb, but now we're out of space. */
1655 DPRINTK(TX_ERR, DEBUG, "No space for CB\n");
1656 netif_stop_queue(netdev);
1659 /* This is a hard error - log it. */
1660 DPRINTK(TX_ERR, DEBUG, "Out of Tx resources, returning skb\n");
1661 netif_stop_queue(netdev);
1665 netdev->trans_start = jiffies;
1669 static int e100_tx_clean(struct nic *nic)
1671 struct net_device *dev = nic->netdev;
1675 spin_lock(&nic->cb_lock);
1677 /* Clean CBs marked complete */
1678 for(cb = nic->cb_to_clean;
1679 cb->status & cpu_to_le16(cb_complete);
1680 cb = nic->cb_to_clean = cb->next) {
1681 DPRINTK(TX_DONE, DEBUG, "cb[%d]->status = 0x%04X\n",
1682 (int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
1685 if(likely(cb->skb != NULL)) {
1686 dev->stats.tx_packets++;
1687 dev->stats.tx_bytes += cb->skb->len;
1689 pci_unmap_single(nic->pdev,
1690 le32_to_cpu(cb->u.tcb.tbd.buf_addr),
1691 le16_to_cpu(cb->u.tcb.tbd.size),
1693 dev_kfree_skb_any(cb->skb);
1701 spin_unlock(&nic->cb_lock);
1703 /* Recover from running out of Tx resources in xmit_frame */
1704 if(unlikely(tx_cleaned && netif_queue_stopped(nic->netdev)))
1705 netif_wake_queue(nic->netdev);
1710 static void e100_clean_cbs(struct nic *nic)
1713 while(nic->cbs_avail != nic->params.cbs.count) {
1714 struct cb *cb = nic->cb_to_clean;
1716 pci_unmap_single(nic->pdev,
1717 le32_to_cpu(cb->u.tcb.tbd.buf_addr),
1718 le16_to_cpu(cb->u.tcb.tbd.size),
1720 dev_kfree_skb(cb->skb);
1722 nic->cb_to_clean = nic->cb_to_clean->next;
1725 pci_free_consistent(nic->pdev,
1726 sizeof(struct cb) * nic->params.cbs.count,
1727 nic->cbs, nic->cbs_dma_addr);
1731 nic->cuc_cmd = cuc_start;
1732 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean =
1736 static int e100_alloc_cbs(struct nic *nic)
1739 unsigned int i, count = nic->params.cbs.count;
1741 nic->cuc_cmd = cuc_start;
1742 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL;
1745 nic->cbs = pci_alloc_consistent(nic->pdev,
1746 sizeof(struct cb) * count, &nic->cbs_dma_addr);
1750 for(cb = nic->cbs, i = 0; i < count; cb++, i++) {
1751 cb->next = (i + 1 < count) ? cb + 1 : nic->cbs;
1752 cb->prev = (i == 0) ? nic->cbs + count - 1 : cb - 1;
1754 cb->dma_addr = nic->cbs_dma_addr + i * sizeof(struct cb);
1755 cb->link = cpu_to_le32(nic->cbs_dma_addr +
1756 ((i+1) % count) * sizeof(struct cb));
1760 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = nic->cbs;
1761 nic->cbs_avail = count;
1766 static inline void e100_start_receiver(struct nic *nic, struct rx *rx)
1768 if(!nic->rxs) return;
1769 if(RU_SUSPENDED != nic->ru_running) return;
1771 /* handle init time starts */
1772 if(!rx) rx = nic->rxs;
1774 /* (Re)start RU if suspended or idle and RFA is non-NULL */
1776 e100_exec_cmd(nic, ruc_start, rx->dma_addr);
1777 nic->ru_running = RU_RUNNING;
1781 #define RFD_BUF_LEN (sizeof(struct rfd) + VLAN_ETH_FRAME_LEN)
1782 static int e100_rx_alloc_skb(struct nic *nic, struct rx *rx)
1784 if(!(rx->skb = netdev_alloc_skb(nic->netdev, RFD_BUF_LEN + NET_IP_ALIGN)))
1787 /* Align, init, and map the RFD. */
1788 skb_reserve(rx->skb, NET_IP_ALIGN);
1789 skb_copy_to_linear_data(rx->skb, &nic->blank_rfd, sizeof(struct rfd));
1790 rx->dma_addr = pci_map_single(nic->pdev, rx->skb->data,
1791 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
1793 if (pci_dma_mapping_error(nic->pdev, rx->dma_addr)) {
1794 dev_kfree_skb_any(rx->skb);
1800 /* Link the RFD to end of RFA by linking previous RFD to
1801 * this one. We are safe to touch the previous RFD because
1802 * it is protected by the before last buffer's el bit being set */
1803 if (rx->prev->skb) {
1804 struct rfd *prev_rfd = (struct rfd *)rx->prev->skb->data;
1805 put_unaligned_le32(rx->dma_addr, &prev_rfd->link);
1806 pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr,
1807 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
1813 static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1814 unsigned int *work_done, unsigned int work_to_do)
1816 struct net_device *dev = nic->netdev;
1817 struct sk_buff *skb = rx->skb;
1818 struct rfd *rfd = (struct rfd *)skb->data;
1819 u16 rfd_status, actual_size;
1821 if(unlikely(work_done && *work_done >= work_to_do))
1824 /* Need to sync before taking a peek at cb_complete bit */
1825 pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr,
1826 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
1827 rfd_status = le16_to_cpu(rfd->status);
1829 DPRINTK(RX_STATUS, DEBUG, "status=0x%04X\n", rfd_status);
1831 /* If data isn't ready, nothing to indicate */
1832 if (unlikely(!(rfd_status & cb_complete))) {
1833 /* If the next buffer has the el bit, but we think the receiver
1834 * is still running, check to see if it really stopped while
1835 * we had interrupts off.
1836 * This allows for a fast restart without re-enabling
1838 if ((le16_to_cpu(rfd->command) & cb_el) &&
1839 (RU_RUNNING == nic->ru_running))
1841 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1842 nic->ru_running = RU_SUSPENDED;
1846 /* Get actual data size */
1847 actual_size = le16_to_cpu(rfd->actual_size) & 0x3FFF;
1848 if(unlikely(actual_size > RFD_BUF_LEN - sizeof(struct rfd)))
1849 actual_size = RFD_BUF_LEN - sizeof(struct rfd);
1852 pci_unmap_single(nic->pdev, rx->dma_addr,
1853 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
1855 /* If this buffer has the el bit, but we think the receiver
1856 * is still running, check to see if it really stopped while
1857 * we had interrupts off.
1858 * This allows for a fast restart without re-enabling interrupts.
1859 * This can happen when the RU sees the size change but also sees
1860 * the el bit set. */
1861 if ((le16_to_cpu(rfd->command) & cb_el) &&
1862 (RU_RUNNING == nic->ru_running)) {
1864 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1865 nic->ru_running = RU_SUSPENDED;
1868 /* Pull off the RFD and put the actual data (minus eth hdr) */
1869 skb_reserve(skb, sizeof(struct rfd));
1870 skb_put(skb, actual_size);
1871 skb->protocol = eth_type_trans(skb, nic->netdev);
1873 if(unlikely(!(rfd_status & cb_ok))) {
1874 /* Don't indicate if hardware indicates errors */
1875 dev_kfree_skb_any(skb);
1876 } else if(actual_size > ETH_DATA_LEN + VLAN_ETH_HLEN) {
1877 /* Don't indicate oversized frames */
1878 nic->rx_over_length_errors++;
1879 dev_kfree_skb_any(skb);
1881 dev->stats.rx_packets++;
1882 dev->stats.rx_bytes += actual_size;
1883 nic->netdev->last_rx = jiffies;
1884 netif_receive_skb(skb);
1894 static void e100_rx_clean(struct nic *nic, unsigned int *work_done,
1895 unsigned int work_to_do)
1898 int restart_required = 0, err = 0;
1899 struct rx *old_before_last_rx, *new_before_last_rx;
1900 struct rfd *old_before_last_rfd, *new_before_last_rfd;
1902 /* Indicate newly arrived packets */
1903 for(rx = nic->rx_to_clean; rx->skb; rx = nic->rx_to_clean = rx->next) {
1904 err = e100_rx_indicate(nic, rx, work_done, work_to_do);
1905 /* Hit quota or no more to clean */
1906 if (-EAGAIN == err || -ENODATA == err)
1911 /* On EAGAIN, hit quota so have more work to do, restart once
1912 * cleanup is complete.
1913 * Else, are we already rnr? then pay attention!!! this ensures that
1914 * the state machine progression never allows a start with a
1915 * partially cleaned list, avoiding a race between hardware
1916 * and rx_to_clean when in NAPI mode */
1917 if (-EAGAIN != err && RU_SUSPENDED == nic->ru_running)
1918 restart_required = 1;
1920 old_before_last_rx = nic->rx_to_use->prev->prev;
1921 old_before_last_rfd = (struct rfd *)old_before_last_rx->skb->data;
1923 /* Alloc new skbs to refill list */
1924 for(rx = nic->rx_to_use; !rx->skb; rx = nic->rx_to_use = rx->next) {
1925 if(unlikely(e100_rx_alloc_skb(nic, rx)))
1926 break; /* Better luck next time (see watchdog) */
1929 new_before_last_rx = nic->rx_to_use->prev->prev;
1930 if (new_before_last_rx != old_before_last_rx) {
1931 /* Set the el-bit on the buffer that is before the last buffer.
1932 * This lets us update the next pointer on the last buffer
1933 * without worrying about hardware touching it.
1934 * We set the size to 0 to prevent hardware from touching this
1936 * When the hardware hits the before last buffer with el-bit
1937 * and size of 0, it will RNR interrupt, the RUS will go into
1938 * the No Resources state. It will not complete nor write to
1940 new_before_last_rfd =
1941 (struct rfd *)new_before_last_rx->skb->data;
1942 new_before_last_rfd->size = 0;
1943 new_before_last_rfd->command |= cpu_to_le16(cb_el);
1944 pci_dma_sync_single_for_device(nic->pdev,
1945 new_before_last_rx->dma_addr, sizeof(struct rfd),
1946 PCI_DMA_BIDIRECTIONAL);
1948 /* Now that we have a new stopping point, we can clear the old
1949 * stopping point. We must sync twice to get the proper
1950 * ordering on the hardware side of things. */
1951 old_before_last_rfd->command &= ~cpu_to_le16(cb_el);
1952 pci_dma_sync_single_for_device(nic->pdev,
1953 old_before_last_rx->dma_addr, sizeof(struct rfd),
1954 PCI_DMA_BIDIRECTIONAL);
1955 old_before_last_rfd->size = cpu_to_le16(VLAN_ETH_FRAME_LEN);
1956 pci_dma_sync_single_for_device(nic->pdev,
1957 old_before_last_rx->dma_addr, sizeof(struct rfd),
1958 PCI_DMA_BIDIRECTIONAL);
1961 if(restart_required) {
1963 iowrite8(stat_ack_rnr, &nic->csr->scb.stat_ack);
1964 e100_start_receiver(nic, nic->rx_to_clean);
1970 static void e100_rx_clean_list(struct nic *nic)
1973 unsigned int i, count = nic->params.rfds.count;
1975 nic->ru_running = RU_UNINITIALIZED;
1978 for(rx = nic->rxs, i = 0; i < count; rx++, i++) {
1980 pci_unmap_single(nic->pdev, rx->dma_addr,
1981 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
1982 dev_kfree_skb(rx->skb);
1989 nic->rx_to_use = nic->rx_to_clean = NULL;
1992 static int e100_rx_alloc_list(struct nic *nic)
1995 unsigned int i, count = nic->params.rfds.count;
1996 struct rfd *before_last;
1998 nic->rx_to_use = nic->rx_to_clean = NULL;
1999 nic->ru_running = RU_UNINITIALIZED;
2001 if(!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_ATOMIC)))
2004 for(rx = nic->rxs, i = 0; i < count; rx++, i++) {
2005 rx->next = (i + 1 < count) ? rx + 1 : nic->rxs;
2006 rx->prev = (i == 0) ? nic->rxs + count - 1 : rx - 1;
2007 if(e100_rx_alloc_skb(nic, rx)) {
2008 e100_rx_clean_list(nic);
2012 /* Set the el-bit on the buffer that is before the last buffer.
2013 * This lets us update the next pointer on the last buffer without
2014 * worrying about hardware touching it.
2015 * We set the size to 0 to prevent hardware from touching this buffer.
2016 * When the hardware hits the before last buffer with el-bit and size
2017 * of 0, it will RNR interrupt, the RU will go into the No Resources
2018 * state. It will not complete nor write to this buffer. */
2019 rx = nic->rxs->prev->prev;
2020 before_last = (struct rfd *)rx->skb->data;
2021 before_last->command |= cpu_to_le16(cb_el);
2022 before_last->size = 0;
2023 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr,
2024 sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL);
2026 nic->rx_to_use = nic->rx_to_clean = nic->rxs;
2027 nic->ru_running = RU_SUSPENDED;
2032 static irqreturn_t e100_intr(int irq, void *dev_id)
2034 struct net_device *netdev = dev_id;
2035 struct nic *nic = netdev_priv(netdev);
2036 u8 stat_ack = ioread8(&nic->csr->scb.stat_ack);
2038 DPRINTK(INTR, DEBUG, "stat_ack = 0x%02X\n", stat_ack);
2040 if(stat_ack == stat_ack_not_ours || /* Not our interrupt */
2041 stat_ack == stat_ack_not_present) /* Hardware is ejected */
2044 /* Ack interrupt(s) */
2045 iowrite8(stat_ack, &nic->csr->scb.stat_ack);
2047 /* We hit Receive No Resource (RNR); restart RU after cleaning */
2048 if(stat_ack & stat_ack_rnr)
2049 nic->ru_running = RU_SUSPENDED;
2051 if(likely(netif_rx_schedule_prep(netdev, &nic->napi))) {
2052 e100_disable_irq(nic);
2053 __netif_rx_schedule(netdev, &nic->napi);
2059 static int e100_poll(struct napi_struct *napi, int budget)
2061 struct nic *nic = container_of(napi, struct nic, napi);
2062 struct net_device *netdev = nic->netdev;
2063 unsigned int work_done = 0;
2065 e100_rx_clean(nic, &work_done, budget);
2068 /* If budget not fully consumed, exit the polling mode */
2069 if (work_done < budget) {
2070 netif_rx_complete(netdev, napi);
2071 e100_enable_irq(nic);
2077 #ifdef CONFIG_NET_POLL_CONTROLLER
2078 static void e100_netpoll(struct net_device *netdev)
2080 struct nic *nic = netdev_priv(netdev);
2082 e100_disable_irq(nic);
2083 e100_intr(nic->pdev->irq, netdev);
2085 e100_enable_irq(nic);
2089 static int e100_set_mac_address(struct net_device *netdev, void *p)
2091 struct nic *nic = netdev_priv(netdev);
2092 struct sockaddr *addr = p;
2094 if (!is_valid_ether_addr(addr->sa_data))
2095 return -EADDRNOTAVAIL;
2097 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2098 e100_exec_cb(nic, NULL, e100_setup_iaaddr);
2103 static int e100_change_mtu(struct net_device *netdev, int new_mtu)
2105 if(new_mtu < ETH_ZLEN || new_mtu > ETH_DATA_LEN)
2107 netdev->mtu = new_mtu;
2111 static int e100_asf(struct nic *nic)
2113 /* ASF can be enabled from eeprom */
2114 return((nic->pdev->device >= 0x1050) && (nic->pdev->device <= 0x1057) &&
2115 (nic->eeprom[eeprom_config_asf] & eeprom_asf) &&
2116 !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) &&
2117 ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE));
2120 static int e100_up(struct nic *nic)
2124 if((err = e100_rx_alloc_list(nic)))
2126 if((err = e100_alloc_cbs(nic)))
2127 goto err_rx_clean_list;
2128 if((err = e100_hw_init(nic)))
2130 e100_set_multicast_list(nic->netdev);
2131 e100_start_receiver(nic, NULL);
2132 mod_timer(&nic->watchdog, jiffies);
2133 if((err = request_irq(nic->pdev->irq, e100_intr, IRQF_SHARED,
2134 nic->netdev->name, nic->netdev)))
2136 netif_wake_queue(nic->netdev);
2137 napi_enable(&nic->napi);
2138 /* enable ints _after_ enabling poll, preventing a race between
2139 * disable ints+schedule */
2140 e100_enable_irq(nic);
2144 del_timer_sync(&nic->watchdog);
2146 e100_clean_cbs(nic);
2148 e100_rx_clean_list(nic);
2152 static void e100_down(struct nic *nic)
2154 /* wait here for poll to complete */
2155 napi_disable(&nic->napi);
2156 netif_stop_queue(nic->netdev);
2158 free_irq(nic->pdev->irq, nic->netdev);
2159 del_timer_sync(&nic->watchdog);
2160 netif_carrier_off(nic->netdev);
2161 e100_clean_cbs(nic);
2162 e100_rx_clean_list(nic);
2165 static void e100_tx_timeout(struct net_device *netdev)
2167 struct nic *nic = netdev_priv(netdev);
2169 /* Reset outside of interrupt context, to avoid request_irq
2170 * in interrupt context */
2171 schedule_work(&nic->tx_timeout_task);
2174 static void e100_tx_timeout_task(struct work_struct *work)
2176 struct nic *nic = container_of(work, struct nic, tx_timeout_task);
2177 struct net_device *netdev = nic->netdev;
2179 DPRINTK(TX_ERR, DEBUG, "scb.status=0x%02X\n",
2180 ioread8(&nic->csr->scb.status));
2181 e100_down(netdev_priv(netdev));
2182 e100_up(netdev_priv(netdev));
2185 static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode)
2188 struct sk_buff *skb;
2190 /* Use driver resources to perform internal MAC or PHY
2191 * loopback test. A single packet is prepared and transmitted
2192 * in loopback mode, and the test passes if the received
2193 * packet compares byte-for-byte to the transmitted packet. */
2195 if((err = e100_rx_alloc_list(nic)))
2197 if((err = e100_alloc_cbs(nic)))
2200 /* ICH PHY loopback is broken so do MAC loopback instead */
2201 if(nic->flags & ich && loopback_mode == lb_phy)
2202 loopback_mode = lb_mac;
2204 nic->loopback = loopback_mode;
2205 if((err = e100_hw_init(nic)))
2206 goto err_loopback_none;
2208 if(loopback_mode == lb_phy)
2209 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR,
2212 e100_start_receiver(nic, NULL);
2214 if(!(skb = netdev_alloc_skb(nic->netdev, ETH_DATA_LEN))) {
2216 goto err_loopback_none;
2218 skb_put(skb, ETH_DATA_LEN);
2219 memset(skb->data, 0xFF, ETH_DATA_LEN);
2220 e100_xmit_frame(skb, nic->netdev);
2224 pci_dma_sync_single_for_cpu(nic->pdev, nic->rx_to_clean->dma_addr,
2225 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
2227 if(memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd),
2228 skb->data, ETH_DATA_LEN))
2232 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, 0);
2233 nic->loopback = lb_none;
2234 e100_clean_cbs(nic);
2237 e100_rx_clean_list(nic);
2241 #define MII_LED_CONTROL 0x1B
2242 static void e100_blink_led(unsigned long data)
2244 struct nic *nic = (struct nic *)data;
2252 nic->leds = (nic->leds & led_on) ? led_off :
2253 (nic->mac < mac_82559_D101M) ? led_on_557 : led_on_559;
2254 mdio_write(nic->netdev, nic->mii.phy_id, MII_LED_CONTROL, nic->leds);
2255 mod_timer(&nic->blink_timer, jiffies + HZ / 4);
2258 static int e100_get_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
2260 struct nic *nic = netdev_priv(netdev);
2261 return mii_ethtool_gset(&nic->mii, cmd);
2264 static int e100_set_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
2266 struct nic *nic = netdev_priv(netdev);
2269 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, BMCR_RESET);
2270 err = mii_ethtool_sset(&nic->mii, cmd);
2271 e100_exec_cb(nic, NULL, e100_configure);
2276 static void e100_get_drvinfo(struct net_device *netdev,
2277 struct ethtool_drvinfo *info)
2279 struct nic *nic = netdev_priv(netdev);
2280 strcpy(info->driver, DRV_NAME);
2281 strcpy(info->version, DRV_VERSION);
2282 strcpy(info->fw_version, "N/A");
2283 strcpy(info->bus_info, pci_name(nic->pdev));
2286 #define E100_PHY_REGS 0x1C
2287 static int e100_get_regs_len(struct net_device *netdev)
2289 struct nic *nic = netdev_priv(netdev);
2290 return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf);
2293 static void e100_get_regs(struct net_device *netdev,
2294 struct ethtool_regs *regs, void *p)
2296 struct nic *nic = netdev_priv(netdev);
2300 regs->version = (1 << 24) | nic->pdev->revision;
2301 buff[0] = ioread8(&nic->csr->scb.cmd_hi) << 24 |
2302 ioread8(&nic->csr->scb.cmd_lo) << 16 |
2303 ioread16(&nic->csr->scb.status);
2304 for(i = E100_PHY_REGS; i >= 0; i--)
2305 buff[1 + E100_PHY_REGS - i] =
2306 mdio_read(netdev, nic->mii.phy_id, i);
2307 memset(nic->mem->dump_buf, 0, sizeof(nic->mem->dump_buf));
2308 e100_exec_cb(nic, NULL, e100_dump);
2310 memcpy(&buff[2 + E100_PHY_REGS], nic->mem->dump_buf,
2311 sizeof(nic->mem->dump_buf));
2314 static void e100_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
2316 struct nic *nic = netdev_priv(netdev);
2317 wol->supported = (nic->mac >= mac_82558_D101_A4) ? WAKE_MAGIC : 0;
2318 wol->wolopts = (nic->flags & wol_magic) ? WAKE_MAGIC : 0;
2321 static int e100_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
2323 struct nic *nic = netdev_priv(netdev);
2325 if(wol->wolopts != WAKE_MAGIC && wol->wolopts != 0)
2329 nic->flags |= wol_magic;
2331 nic->flags &= ~wol_magic;
2333 e100_exec_cb(nic, NULL, e100_configure);
2338 static u32 e100_get_msglevel(struct net_device *netdev)
2340 struct nic *nic = netdev_priv(netdev);
2341 return nic->msg_enable;
2344 static void e100_set_msglevel(struct net_device *netdev, u32 value)
2346 struct nic *nic = netdev_priv(netdev);
2347 nic->msg_enable = value;
2350 static int e100_nway_reset(struct net_device *netdev)
2352 struct nic *nic = netdev_priv(netdev);
2353 return mii_nway_restart(&nic->mii);
2356 static u32 e100_get_link(struct net_device *netdev)
2358 struct nic *nic = netdev_priv(netdev);
2359 return mii_link_ok(&nic->mii);
2362 static int e100_get_eeprom_len(struct net_device *netdev)
2364 struct nic *nic = netdev_priv(netdev);
2365 return nic->eeprom_wc << 1;
2368 #define E100_EEPROM_MAGIC 0x1234
2369 static int e100_get_eeprom(struct net_device *netdev,
2370 struct ethtool_eeprom *eeprom, u8 *bytes)
2372 struct nic *nic = netdev_priv(netdev);
2374 eeprom->magic = E100_EEPROM_MAGIC;
2375 memcpy(bytes, &((u8 *)nic->eeprom)[eeprom->offset], eeprom->len);
2380 static int e100_set_eeprom(struct net_device *netdev,
2381 struct ethtool_eeprom *eeprom, u8 *bytes)
2383 struct nic *nic = netdev_priv(netdev);
2385 if(eeprom->magic != E100_EEPROM_MAGIC)
2388 memcpy(&((u8 *)nic->eeprom)[eeprom->offset], bytes, eeprom->len);
2390 return e100_eeprom_save(nic, eeprom->offset >> 1,
2391 (eeprom->len >> 1) + 1);
2394 static void e100_get_ringparam(struct net_device *netdev,
2395 struct ethtool_ringparam *ring)
2397 struct nic *nic = netdev_priv(netdev);
2398 struct param_range *rfds = &nic->params.rfds;
2399 struct param_range *cbs = &nic->params.cbs;
2401 ring->rx_max_pending = rfds->max;
2402 ring->tx_max_pending = cbs->max;
2403 ring->rx_mini_max_pending = 0;
2404 ring->rx_jumbo_max_pending = 0;
2405 ring->rx_pending = rfds->count;
2406 ring->tx_pending = cbs->count;
2407 ring->rx_mini_pending = 0;
2408 ring->rx_jumbo_pending = 0;
2411 static int e100_set_ringparam(struct net_device *netdev,
2412 struct ethtool_ringparam *ring)
2414 struct nic *nic = netdev_priv(netdev);
2415 struct param_range *rfds = &nic->params.rfds;
2416 struct param_range *cbs = &nic->params.cbs;
2418 if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
2421 if(netif_running(netdev))
2423 rfds->count = max(ring->rx_pending, rfds->min);
2424 rfds->count = min(rfds->count, rfds->max);
2425 cbs->count = max(ring->tx_pending, cbs->min);
2426 cbs->count = min(cbs->count, cbs->max);
2427 DPRINTK(DRV, INFO, "Ring Param settings: rx: %d, tx %d\n",
2428 rfds->count, cbs->count);
2429 if(netif_running(netdev))
2435 static const char e100_gstrings_test[][ETH_GSTRING_LEN] = {
2436 "Link test (on/offline)",
2437 "Eeprom test (on/offline)",
2438 "Self test (offline)",
2439 "Mac loopback (offline)",
2440 "Phy loopback (offline)",
2442 #define E100_TEST_LEN ARRAY_SIZE(e100_gstrings_test)
2444 static void e100_diag_test(struct net_device *netdev,
2445 struct ethtool_test *test, u64 *data)
2447 struct ethtool_cmd cmd;
2448 struct nic *nic = netdev_priv(netdev);
2451 memset(data, 0, E100_TEST_LEN * sizeof(u64));
2452 data[0] = !mii_link_ok(&nic->mii);
2453 data[1] = e100_eeprom_load(nic);
2454 if(test->flags & ETH_TEST_FL_OFFLINE) {
2456 /* save speed, duplex & autoneg settings */
2457 err = mii_ethtool_gset(&nic->mii, &cmd);
2459 if(netif_running(netdev))
2461 data[2] = e100_self_test(nic);
2462 data[3] = e100_loopback_test(nic, lb_mac);
2463 data[4] = e100_loopback_test(nic, lb_phy);
2465 /* restore speed, duplex & autoneg settings */
2466 err = mii_ethtool_sset(&nic->mii, &cmd);
2468 if(netif_running(netdev))
2471 for(i = 0; i < E100_TEST_LEN; i++)
2472 test->flags |= data[i] ? ETH_TEST_FL_FAILED : 0;
2474 msleep_interruptible(4 * 1000);
2477 static int e100_phys_id(struct net_device *netdev, u32 data)
2479 struct nic *nic = netdev_priv(netdev);
2481 if(!data || data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ))
2482 data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ);
2483 mod_timer(&nic->blink_timer, jiffies);
2484 msleep_interruptible(data * 1000);
2485 del_timer_sync(&nic->blink_timer);
2486 mdio_write(netdev, nic->mii.phy_id, MII_LED_CONTROL, 0);
2491 static const char e100_gstrings_stats[][ETH_GSTRING_LEN] = {
2492 "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
2493 "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
2494 "rx_length_errors", "rx_over_errors", "rx_crc_errors",
2495 "rx_frame_errors", "rx_fifo_errors", "rx_missed_errors",
2496 "tx_aborted_errors", "tx_carrier_errors", "tx_fifo_errors",
2497 "tx_heartbeat_errors", "tx_window_errors",
2498 /* device-specific stats */
2499 "tx_deferred", "tx_single_collisions", "tx_multi_collisions",
2500 "tx_flow_control_pause", "rx_flow_control_pause",
2501 "rx_flow_control_unsupported", "tx_tco_packets", "rx_tco_packets",
2503 #define E100_NET_STATS_LEN 21
2504 #define E100_STATS_LEN ARRAY_SIZE(e100_gstrings_stats)
2506 static int e100_get_sset_count(struct net_device *netdev, int sset)
2510 return E100_TEST_LEN;
2512 return E100_STATS_LEN;
2518 static void e100_get_ethtool_stats(struct net_device *netdev,
2519 struct ethtool_stats *stats, u64 *data)
2521 struct nic *nic = netdev_priv(netdev);
2524 for(i = 0; i < E100_NET_STATS_LEN; i++)
2525 data[i] = ((unsigned long *)&netdev->stats)[i];
2527 data[i++] = nic->tx_deferred;
2528 data[i++] = nic->tx_single_collisions;
2529 data[i++] = nic->tx_multiple_collisions;
2530 data[i++] = nic->tx_fc_pause;
2531 data[i++] = nic->rx_fc_pause;
2532 data[i++] = nic->rx_fc_unsupported;
2533 data[i++] = nic->tx_tco_frames;
2534 data[i++] = nic->rx_tco_frames;
2537 static void e100_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
2541 memcpy(data, *e100_gstrings_test, sizeof(e100_gstrings_test));
2544 memcpy(data, *e100_gstrings_stats, sizeof(e100_gstrings_stats));
2549 static const struct ethtool_ops e100_ethtool_ops = {
2550 .get_settings = e100_get_settings,
2551 .set_settings = e100_set_settings,
2552 .get_drvinfo = e100_get_drvinfo,
2553 .get_regs_len = e100_get_regs_len,
2554 .get_regs = e100_get_regs,
2555 .get_wol = e100_get_wol,
2556 .set_wol = e100_set_wol,
2557 .get_msglevel = e100_get_msglevel,
2558 .set_msglevel = e100_set_msglevel,
2559 .nway_reset = e100_nway_reset,
2560 .get_link = e100_get_link,
2561 .get_eeprom_len = e100_get_eeprom_len,
2562 .get_eeprom = e100_get_eeprom,
2563 .set_eeprom = e100_set_eeprom,
2564 .get_ringparam = e100_get_ringparam,
2565 .set_ringparam = e100_set_ringparam,
2566 .self_test = e100_diag_test,
2567 .get_strings = e100_get_strings,
2568 .phys_id = e100_phys_id,
2569 .get_ethtool_stats = e100_get_ethtool_stats,
2570 .get_sset_count = e100_get_sset_count,
2573 static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2575 struct nic *nic = netdev_priv(netdev);
2577 return generic_mii_ioctl(&nic->mii, if_mii(ifr), cmd, NULL);
2580 static int e100_alloc(struct nic *nic)
2582 nic->mem = pci_alloc_consistent(nic->pdev, sizeof(struct mem),
2584 return nic->mem ? 0 : -ENOMEM;
2587 static void e100_free(struct nic *nic)
2590 pci_free_consistent(nic->pdev, sizeof(struct mem),
2591 nic->mem, nic->dma_addr);
2596 static int e100_open(struct net_device *netdev)
2598 struct nic *nic = netdev_priv(netdev);
2601 netif_carrier_off(netdev);
2602 if((err = e100_up(nic)))
2603 DPRINTK(IFUP, ERR, "Cannot open interface, aborting.\n");
2607 static int e100_close(struct net_device *netdev)
2609 e100_down(netdev_priv(netdev));
2613 static int __devinit e100_probe(struct pci_dev *pdev,
2614 const struct pci_device_id *ent)
2616 struct net_device *netdev;
2619 DECLARE_MAC_BUF(mac);
2621 if(!(netdev = alloc_etherdev(sizeof(struct nic)))) {
2622 if(((1 << debug) - 1) & NETIF_MSG_PROBE)
2623 printk(KERN_ERR PFX "Etherdev alloc failed, abort.\n");
2627 netdev->open = e100_open;
2628 netdev->stop = e100_close;
2629 netdev->hard_start_xmit = e100_xmit_frame;
2630 netdev->set_multicast_list = e100_set_multicast_list;
2631 netdev->set_mac_address = e100_set_mac_address;
2632 netdev->change_mtu = e100_change_mtu;
2633 netdev->do_ioctl = e100_do_ioctl;
2634 SET_ETHTOOL_OPS(netdev, &e100_ethtool_ops);
2635 netdev->tx_timeout = e100_tx_timeout;
2636 netdev->watchdog_timeo = E100_WATCHDOG_PERIOD;
2637 #ifdef CONFIG_NET_POLL_CONTROLLER
2638 netdev->poll_controller = e100_netpoll;
2640 strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
2642 nic = netdev_priv(netdev);
2643 netif_napi_add(netdev, &nic->napi, e100_poll, E100_NAPI_WEIGHT);
2644 nic->netdev = netdev;
2646 nic->msg_enable = (1 << debug) - 1;
2647 pci_set_drvdata(pdev, netdev);
2649 if((err = pci_enable_device(pdev))) {
2650 DPRINTK(PROBE, ERR, "Cannot enable PCI device, aborting.\n");
2651 goto err_out_free_dev;
2654 if(!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
2655 DPRINTK(PROBE, ERR, "Cannot find proper PCI device "
2656 "base address, aborting.\n");
2658 goto err_out_disable_pdev;
2661 if((err = pci_request_regions(pdev, DRV_NAME))) {
2662 DPRINTK(PROBE, ERR, "Cannot obtain PCI resources, aborting.\n");
2663 goto err_out_disable_pdev;
2666 if((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) {
2667 DPRINTK(PROBE, ERR, "No usable DMA configuration, aborting.\n");
2668 goto err_out_free_res;
2671 SET_NETDEV_DEV(netdev, &pdev->dev);
2674 DPRINTK(PROBE, INFO, "using i/o access mode\n");
2676 nic->csr = pci_iomap(pdev, (use_io ? 1 : 0), sizeof(struct csr));
2678 DPRINTK(PROBE, ERR, "Cannot map device registers, aborting.\n");
2680 goto err_out_free_res;
2683 if(ent->driver_data)
2688 e100_get_defaults(nic);
2690 /* locks must be initialized before calling hw_reset */
2691 spin_lock_init(&nic->cb_lock);
2692 spin_lock_init(&nic->cmd_lock);
2693 spin_lock_init(&nic->mdio_lock);
2695 /* Reset the device before pci_set_master() in case device is in some
2696 * funky state and has an interrupt pending - hint: we don't have the
2697 * interrupt handler registered yet. */
2700 pci_set_master(pdev);
2702 init_timer(&nic->watchdog);
2703 nic->watchdog.function = e100_watchdog;
2704 nic->watchdog.data = (unsigned long)nic;
2705 init_timer(&nic->blink_timer);
2706 nic->blink_timer.function = e100_blink_led;
2707 nic->blink_timer.data = (unsigned long)nic;
2709 INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task);
2711 if((err = e100_alloc(nic))) {
2712 DPRINTK(PROBE, ERR, "Cannot alloc driver memory, aborting.\n");
2713 goto err_out_iounmap;
2716 if((err = e100_eeprom_load(nic)))
2721 memcpy(netdev->dev_addr, nic->eeprom, ETH_ALEN);
2722 memcpy(netdev->perm_addr, nic->eeprom, ETH_ALEN);
2723 if (!is_valid_ether_addr(netdev->perm_addr)) {
2724 if (!eeprom_bad_csum_allow) {
2725 DPRINTK(PROBE, ERR, "Invalid MAC address from "
2726 "EEPROM, aborting.\n");
2730 DPRINTK(PROBE, ERR, "Invalid MAC address from EEPROM, "
2731 "you MUST configure one.\n");
2735 /* Wol magic packet can be enabled from eeprom */
2736 if((nic->mac >= mac_82558_D101_A4) &&
2737 (nic->eeprom[eeprom_id] & eeprom_id_wol))
2738 nic->flags |= wol_magic;
2740 /* ack any pending wake events, disable PME */
2741 pci_pme_active(pdev, false);
2743 strcpy(netdev->name, "eth%d");
2744 if((err = register_netdev(netdev))) {
2745 DPRINTK(PROBE, ERR, "Cannot register net device, aborting.\n");
2749 DPRINTK(PROBE, INFO, "addr 0x%llx, irq %d, MAC addr %s\n",
2750 (unsigned long long)pci_resource_start(pdev, use_io ? 1 : 0),
2751 pdev->irq, print_mac(mac, netdev->dev_addr));
2758 pci_iounmap(pdev, nic->csr);
2760 pci_release_regions(pdev);
2761 err_out_disable_pdev:
2762 pci_disable_device(pdev);
2764 pci_set_drvdata(pdev, NULL);
2765 free_netdev(netdev);
2769 static void __devexit e100_remove(struct pci_dev *pdev)
2771 struct net_device *netdev = pci_get_drvdata(pdev);
2774 struct nic *nic = netdev_priv(netdev);
2775 unregister_netdev(netdev);
2777 pci_iounmap(pdev, nic->csr);
2778 free_netdev(netdev);
2779 pci_release_regions(pdev);
2780 pci_disable_device(pdev);
2781 pci_set_drvdata(pdev, NULL);
2785 static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
2787 struct net_device *netdev = pci_get_drvdata(pdev);
2788 struct nic *nic = netdev_priv(netdev);
2790 if (netif_running(netdev))
2792 netif_device_detach(netdev);
2794 pci_save_state(pdev);
2796 if ((nic->flags & wol_magic) | e100_asf(nic)) {
2797 pci_enable_wake(pdev, PCI_D3hot, 1);
2798 pci_enable_wake(pdev, PCI_D3cold, 1);
2800 pci_enable_wake(pdev, PCI_D3hot, 0);
2801 pci_enable_wake(pdev, PCI_D3cold, 0);
2804 pci_disable_device(pdev);
2805 pci_set_power_state(pdev, PCI_D3hot);
2811 static int e100_resume(struct pci_dev *pdev)
2813 struct net_device *netdev = pci_get_drvdata(pdev);
2814 struct nic *nic = netdev_priv(netdev);
2816 pci_set_power_state(pdev, PCI_D0);
2817 pci_restore_state(pdev);
2818 /* ack any pending wake events, disable PME */
2819 pci_enable_wake(pdev, 0, 0);
2821 netif_device_attach(netdev);
2822 if (netif_running(netdev))
2827 #endif /* CONFIG_PM */
2829 static void e100_shutdown(struct pci_dev *pdev)
2831 e100_suspend(pdev, PMSG_SUSPEND);
2834 /* ------------------ PCI Error Recovery infrastructure -------------- */
2836 * e100_io_error_detected - called when PCI error is detected.
2837 * @pdev: Pointer to PCI device
2838 * @state: The current pci connection state
2840 static pci_ers_result_t e100_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
2842 struct net_device *netdev = pci_get_drvdata(pdev);
2843 struct nic *nic = netdev_priv(netdev);
2845 /* Similar to calling e100_down(), but avoids adapter I/O. */
2846 netdev->stop(netdev);
2848 /* Detach; put netif into a state similar to hotplug unplug. */
2849 napi_enable(&nic->napi);
2850 netif_device_detach(netdev);
2851 pci_disable_device(pdev);
2853 /* Request a slot reset. */
2854 return PCI_ERS_RESULT_NEED_RESET;
2858 * e100_io_slot_reset - called after the pci bus has been reset.
2859 * @pdev: Pointer to PCI device
2861 * Restart the card from scratch.
2863 static pci_ers_result_t e100_io_slot_reset(struct pci_dev *pdev)
2865 struct net_device *netdev = pci_get_drvdata(pdev);
2866 struct nic *nic = netdev_priv(netdev);
2868 if (pci_enable_device(pdev)) {
2869 printk(KERN_ERR "e100: Cannot re-enable PCI device after reset.\n");
2870 return PCI_ERS_RESULT_DISCONNECT;
2872 pci_set_master(pdev);
2874 /* Only one device per card can do a reset */
2875 if (0 != PCI_FUNC(pdev->devfn))
2876 return PCI_ERS_RESULT_RECOVERED;
2880 return PCI_ERS_RESULT_RECOVERED;
2884 * e100_io_resume - resume normal operations
2885 * @pdev: Pointer to PCI device
2887 * Resume normal operations after an error recovery
2888 * sequence has been completed.
2890 static void e100_io_resume(struct pci_dev *pdev)
2892 struct net_device *netdev = pci_get_drvdata(pdev);
2893 struct nic *nic = netdev_priv(netdev);
2895 /* ack any pending wake events, disable PME */
2896 pci_enable_wake(pdev, 0, 0);
2898 netif_device_attach(netdev);
2899 if (netif_running(netdev)) {
2901 mod_timer(&nic->watchdog, jiffies);
2905 static struct pci_error_handlers e100_err_handler = {
2906 .error_detected = e100_io_error_detected,
2907 .slot_reset = e100_io_slot_reset,
2908 .resume = e100_io_resume,
2911 static struct pci_driver e100_driver = {
2913 .id_table = e100_id_table,
2914 .probe = e100_probe,
2915 .remove = __devexit_p(e100_remove),
2917 /* Power Management hooks */
2918 .suspend = e100_suspend,
2919 .resume = e100_resume,
2921 .shutdown = e100_shutdown,
2922 .err_handler = &e100_err_handler,
2925 static int __init e100_init_module(void)
2927 if(((1 << debug) - 1) & NETIF_MSG_DRV) {
2928 printk(KERN_INFO PFX "%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
2929 printk(KERN_INFO PFX "%s\n", DRV_COPYRIGHT);
2931 return pci_register_driver(&e100_driver);
2934 static void __exit e100_cleanup_module(void)
2936 pci_unregister_driver(&e100_driver);
2939 module_init(e100_init_module);
2940 module_exit(e100_cleanup_module);