]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/net/sundance.c
[PATCH] sundance: remove TxStartThresh and RxEarlyThresh
[mv-sheeva.git] / drivers / net / sundance.c
1 /* sundance.c: A Linux device driver for the Sundance ST201 "Alta". */
2 /*
3         Written 1999-2000 by Donald Becker.
4
5         This software may be used and distributed according to the terms of
6         the GNU General Public License (GPL), incorporated herein by reference.
7         Drivers based on or derived from this code fall under the GPL and must
8         retain the authorship, copyright and license notice.  This file is not
9         a complete program and may only be used when the entire operating
10         system is licensed under the GPL.
11
12         The author may be reached as becker@scyld.com, or C/O
13         Scyld Computing Corporation
14         410 Severn Ave., Suite 210
15         Annapolis MD 21403
16
17         Support and updates available at
18         http://www.scyld.com/network/sundance.html
19         [link no longer provides useful info -jgarzik]
20         Archives of the mailing list are still available at
21         http://www.beowulf.org/pipermail/netdrivers/
22
23 */
24
25 #define DRV_NAME        "sundance"
26 #define DRV_VERSION     "1.2"
27 #define DRV_RELDATE     "11-Sep-2006"
28
29
30 /* The user-configurable values.
31    These may be modified when a driver module is loaded.*/
32 static int debug = 1;                   /* 1 normal messages, 0 quiet .. 7 verbose. */
33 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
34    Typical is a 64 element hash table based on the Ethernet CRC.  */
35 static const int multicast_filter_limit = 32;
36
37 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
38    Setting to > 1518 effectively disables this feature.
39    This chip can receive into offset buffers, so the Alpha does not
40    need a copy-align. */
41 static int rx_copybreak;
42 static int flowctrl=1;
43
44 /* media[] specifies the media type the NIC operates at.
45                  autosense      Autosensing active media.
46                  10mbps_hd      10Mbps half duplex.
47                  10mbps_fd      10Mbps full duplex.
48                  100mbps_hd     100Mbps half duplex.
49                  100mbps_fd     100Mbps full duplex.
50                  0              Autosensing active media.
51                  1              10Mbps half duplex.
52                  2              10Mbps full duplex.
53                  3              100Mbps half duplex.
54                  4              100Mbps full duplex.
55 */
56 #define MAX_UNITS 8
57 static char *media[MAX_UNITS];
58
59
60 /* Operational parameters that are set at compile time. */
61
62 /* Keep the ring sizes a power of two for compile efficiency.
63    The compiler will convert <unsigned>'%'<2^N> into a bit mask.
64    Making the Tx ring too large decreases the effectiveness of channel
65    bonding and packet priority, and more than 128 requires modifying the
66    Tx error recovery.
67    Large receive rings merely waste memory. */
68 #define TX_RING_SIZE    32
69 #define TX_QUEUE_LEN    (TX_RING_SIZE - 1) /* Limit ring entries actually used.  */
70 #define RX_RING_SIZE    64
71 #define RX_BUDGET       32
72 #define TX_TOTAL_SIZE   TX_RING_SIZE*sizeof(struct netdev_desc)
73 #define RX_TOTAL_SIZE   RX_RING_SIZE*sizeof(struct netdev_desc)
74
75 /* Operational parameters that usually are not changed. */
76 /* Time in jiffies before concluding the transmitter is hung. */
77 #define TX_TIMEOUT  (4*HZ)
78 #define PKT_BUF_SZ              1536    /* Size of each temporary Rx buffer.*/
79
80 /* Include files, designed to support most kernel versions 2.0.0 and later. */
81 #include <linux/module.h>
82 #include <linux/kernel.h>
83 #include <linux/string.h>
84 #include <linux/timer.h>
85 #include <linux/errno.h>
86 #include <linux/ioport.h>
87 #include <linux/slab.h>
88 #include <linux/interrupt.h>
89 #include <linux/pci.h>
90 #include <linux/netdevice.h>
91 #include <linux/etherdevice.h>
92 #include <linux/skbuff.h>
93 #include <linux/init.h>
94 #include <linux/bitops.h>
95 #include <asm/uaccess.h>
96 #include <asm/processor.h>              /* Processor type for cache alignment. */
97 #include <asm/io.h>
98 #include <linux/delay.h>
99 #include <linux/spinlock.h>
100 #ifndef _COMPAT_WITH_OLD_KERNEL
101 #include <linux/crc32.h>
102 #include <linux/ethtool.h>
103 #include <linux/mii.h>
104 #else
105 #include "crc32.h"
106 #include "ethtool.h"
107 #include "mii.h"
108 #include "compat.h"
109 #endif
110
111 /* These identify the driver base version and may not be removed. */
112 static char version[] =
113 KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE "  Written by Donald Becker\n"
114 KERN_INFO "  http://www.scyld.com/network/sundance.html\n";
115
116 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
117 MODULE_DESCRIPTION("Sundance Alta Ethernet driver");
118 MODULE_LICENSE("GPL");
119
120 module_param(debug, int, 0);
121 module_param(rx_copybreak, int, 0);
122 module_param_array(media, charp, NULL, 0);
123 module_param(flowctrl, int, 0);
124 MODULE_PARM_DESC(debug, "Sundance Alta debug level (0-5)");
125 MODULE_PARM_DESC(rx_copybreak, "Sundance Alta copy breakpoint for copy-only-tiny-frames");
126 MODULE_PARM_DESC(flowctrl, "Sundance Alta flow control [0|1]");
127
128 /*
129                                 Theory of Operation
130
131 I. Board Compatibility
132
133 This driver is designed for the Sundance Technologies "Alta" ST201 chip.
134
135 II. Board-specific settings
136
137 III. Driver operation
138
139 IIIa. Ring buffers
140
141 This driver uses two statically allocated fixed-size descriptor lists
142 formed into rings by a branch from the final descriptor to the beginning of
143 the list.  The ring sizes are set at compile time by RX/TX_RING_SIZE.
144 Some chips explicitly use only 2^N sized rings, while others use a
145 'next descriptor' pointer that the driver forms into rings.
146
147 IIIb/c. Transmit/Receive Structure
148
149 This driver uses a zero-copy receive and transmit scheme.
150 The driver allocates full frame size skbuffs for the Rx ring buffers at
151 open() time and passes the skb->data field to the chip as receive data
152 buffers.  When an incoming frame is less than RX_COPYBREAK bytes long,
153 a fresh skbuff is allocated and the frame is copied to the new skbuff.
154 When the incoming frame is larger, the skbuff is passed directly up the
155 protocol stack.  Buffers consumed this way are replaced by newly allocated
156 skbuffs in a later phase of receives.
157
158 The RX_COPYBREAK value is chosen to trade-off the memory wasted by
159 using a full-sized skbuff for small frames vs. the copying costs of larger
160 frames.  New boards are typically used in generously configured machines
161 and the underfilled buffers have negligible impact compared to the benefit of
162 a single allocation size, so the default value of zero results in never
163 copying packets.  When copying is done, the cost is usually mitigated by using
164 a combined copy/checksum routine.  Copying also preloads the cache, which is
165 most useful with small frames.
166
167 A subtle aspect of the operation is that the IP header at offset 14 in an
168 ethernet frame isn't longword aligned for further processing.
169 Unaligned buffers are permitted by the Sundance hardware, so
170 frames are received into the skbuff at an offset of "+2", 16-byte aligning
171 the IP header.
172
173 IIId. Synchronization
174
175 The driver runs as two independent, single-threaded flows of control.  One
176 is the send-packet routine, which enforces single-threaded use by the
177 dev->tbusy flag.  The other thread is the interrupt handler, which is single
178 threaded by the hardware and interrupt handling software.
179
180 The send packet thread has partial control over the Tx ring and 'dev->tbusy'
181 flag.  It sets the tbusy flag whenever it's queuing a Tx packet. If the next
182 queue slot is empty, it clears the tbusy flag when finished otherwise it sets
183 the 'lp->tx_full' flag.
184
185 The interrupt handler has exclusive control over the Rx ring and records stats
186 from the Tx ring.  After reaping the stats, it marks the Tx queue entry as
187 empty by incrementing the dirty_tx mark. Iff the 'lp->tx_full' flag is set, it
188 clears both the tx_full and tbusy flags.
189
190 IV. Notes
191
192 IVb. References
193
194 The Sundance ST201 datasheet, preliminary version.
195 The Kendin KS8723 datasheet, preliminary version.
196 The ICplus IP100 datasheet, preliminary version.
197 http://www.scyld.com/expert/100mbps.html
198 http://www.scyld.com/expert/NWay.html
199
200 IVc. Errata
201
202 */
203
204 /* Work-around for Kendin chip bugs. */
205 #ifndef CONFIG_SUNDANCE_MMIO
206 #define USE_IO_OPS 1
207 #endif
208
209 static const struct pci_device_id sundance_pci_tbl[] = {
210         { 0x1186, 0x1002, 0x1186, 0x1002, 0, 0, 0 },
211         { 0x1186, 0x1002, 0x1186, 0x1003, 0, 0, 1 },
212         { 0x1186, 0x1002, 0x1186, 0x1012, 0, 0, 2 },
213         { 0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3 },
214         { 0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
215         { 0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
216         { 0x13F0, 0x0200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
217         { }
218 };
219 MODULE_DEVICE_TABLE(pci, sundance_pci_tbl);
220
221 enum {
222         netdev_io_size = 128
223 };
224
225 struct pci_id_info {
226         const char *name;
227 };
228 static const struct pci_id_info pci_id_tbl[] __devinitdata = {
229         {"D-Link DFE-550TX FAST Ethernet Adapter"},
230         {"D-Link DFE-550FX 100Mbps Fiber-optics Adapter"},
231         {"D-Link DFE-580TX 4 port Server Adapter"},
232         {"D-Link DFE-530TXS FAST Ethernet Adapter"},
233         {"D-Link DL10050-based FAST Ethernet Adapter"},
234         {"Sundance Technology Alta"},
235         {"IC Plus Corporation IP100A FAST Ethernet Adapter"},
236         { }     /* terminate list. */
237 };
238
239 /* This driver was written to use PCI memory space, however x86-oriented
240    hardware often uses I/O space accesses. */
241
242 /* Offsets to the device registers.
243    Unlike software-only systems, device drivers interact with complex hardware.
244    It's not useful to define symbolic names for every register bit in the
245    device.  The name can only partially document the semantics and make
246    the driver longer and more difficult to read.
247    In general, only the important configuration values or bits changed
248    multiple times should be defined symbolically.
249 */
250 enum alta_offsets {
251         DMACtrl = 0x00,
252         TxListPtr = 0x04,
253         TxDMABurstThresh = 0x08,
254         TxDMAUrgentThresh = 0x09,
255         TxDMAPollPeriod = 0x0a,
256         RxDMAStatus = 0x0c,
257         RxListPtr = 0x10,
258         DebugCtrl0 = 0x1a,
259         DebugCtrl1 = 0x1c,
260         RxDMABurstThresh = 0x14,
261         RxDMAUrgentThresh = 0x15,
262         RxDMAPollPeriod = 0x16,
263         LEDCtrl = 0x1a,
264         ASICCtrl = 0x30,
265         EEData = 0x34,
266         EECtrl = 0x36,
267         FlashAddr = 0x40,
268         FlashData = 0x44,
269         TxStatus = 0x46,
270         TxFrameId = 0x47,
271         DownCounter = 0x18,
272         IntrClear = 0x4a,
273         IntrEnable = 0x4c,
274         IntrStatus = 0x4e,
275         MACCtrl0 = 0x50,
276         MACCtrl1 = 0x52,
277         StationAddr = 0x54,
278         MaxFrameSize = 0x5A,
279         RxMode = 0x5c,
280         MIICtrl = 0x5e,
281         MulticastFilter0 = 0x60,
282         MulticastFilter1 = 0x64,
283         RxOctetsLow = 0x68,
284         RxOctetsHigh = 0x6a,
285         TxOctetsLow = 0x6c,
286         TxOctetsHigh = 0x6e,
287         TxFramesOK = 0x70,
288         RxFramesOK = 0x72,
289         StatsCarrierError = 0x74,
290         StatsLateColl = 0x75,
291         StatsMultiColl = 0x76,
292         StatsOneColl = 0x77,
293         StatsTxDefer = 0x78,
294         RxMissed = 0x79,
295         StatsTxXSDefer = 0x7a,
296         StatsTxAbort = 0x7b,
297         StatsBcastTx = 0x7c,
298         StatsBcastRx = 0x7d,
299         StatsMcastTx = 0x7e,
300         StatsMcastRx = 0x7f,
301         /* Aliased and bogus values! */
302         RxStatus = 0x0c,
303 };
304 enum ASICCtrl_HiWord_bit {
305         GlobalReset = 0x0001,
306         RxReset = 0x0002,
307         TxReset = 0x0004,
308         DMAReset = 0x0008,
309         FIFOReset = 0x0010,
310         NetworkReset = 0x0020,
311         HostReset = 0x0040,
312         ResetBusy = 0x0400,
313 };
314
315 /* Bits in the interrupt status/mask registers. */
316 enum intr_status_bits {
317         IntrSummary=0x0001, IntrPCIErr=0x0002, IntrMACCtrl=0x0008,
318         IntrTxDone=0x0004, IntrRxDone=0x0010, IntrRxStart=0x0020,
319         IntrDrvRqst=0x0040,
320         StatsMax=0x0080, LinkChange=0x0100,
321         IntrTxDMADone=0x0200, IntrRxDMADone=0x0400,
322 };
323
324 /* Bits in the RxMode register. */
325 enum rx_mode_bits {
326         AcceptAllIPMulti=0x20, AcceptMultiHash=0x10, AcceptAll=0x08,
327         AcceptBroadcast=0x04, AcceptMulticast=0x02, AcceptMyPhys=0x01,
328 };
329 /* Bits in MACCtrl. */
330 enum mac_ctrl0_bits {
331         EnbFullDuplex=0x20, EnbRcvLargeFrame=0x40,
332         EnbFlowCtrl=0x100, EnbPassRxCRC=0x200,
333 };
334 enum mac_ctrl1_bits {
335         StatsEnable=0x0020,     StatsDisable=0x0040, StatsEnabled=0x0080,
336         TxEnable=0x0100, TxDisable=0x0200, TxEnabled=0x0400,
337         RxEnable=0x0800, RxDisable=0x1000, RxEnabled=0x2000,
338 };
339
340 /* The Rx and Tx buffer descriptors. */
341 /* Note that using only 32 bit fields simplifies conversion to big-endian
342    architectures. */
343 struct netdev_desc {
344         u32 next_desc;
345         u32 status;
346         struct desc_frag { u32 addr, length; } frag[1];
347 };
348
349 /* Bits in netdev_desc.status */
350 enum desc_status_bits {
351         DescOwn=0x8000,
352         DescEndPacket=0x4000,
353         DescEndRing=0x2000,
354         LastFrag=0x80000000,
355         DescIntrOnTx=0x8000,
356         DescIntrOnDMADone=0x80000000,
357         DisableAlign = 0x00000001,
358 };
359
360 #define PRIV_ALIGN      15      /* Required alignment mask */
361 /* Use  __attribute__((aligned (L1_CACHE_BYTES)))  to maintain alignment
362    within the structure. */
363 #define MII_CNT         4
364 struct netdev_private {
365         /* Descriptor rings first for alignment. */
366         struct netdev_desc *rx_ring;
367         struct netdev_desc *tx_ring;
368         struct sk_buff* rx_skbuff[RX_RING_SIZE];
369         struct sk_buff* tx_skbuff[TX_RING_SIZE];
370         dma_addr_t tx_ring_dma;
371         dma_addr_t rx_ring_dma;
372         struct net_device_stats stats;
373         struct timer_list timer;                /* Media monitoring timer. */
374         /* Frequently used values: keep some adjacent for cache effect. */
375         spinlock_t lock;
376         spinlock_t rx_lock;                     /* Group with Tx control cache line. */
377         int msg_enable;
378         int chip_id;
379         unsigned int cur_rx, dirty_rx;          /* Producer/consumer ring indices */
380         unsigned int rx_buf_sz;                 /* Based on MTU+slack. */
381         struct netdev_desc *last_tx;            /* Last Tx descriptor used. */
382         unsigned int cur_tx, dirty_tx;
383         /* These values are keep track of the transceiver/media in use. */
384         unsigned int flowctrl:1;
385         unsigned int default_port:4;            /* Last dev->if_port value. */
386         unsigned int an_enable:1;
387         unsigned int speed;
388         struct tasklet_struct rx_tasklet;
389         struct tasklet_struct tx_tasklet;
390         int budget;
391         int cur_task;
392         /* Multicast and receive mode. */
393         spinlock_t mcastlock;                   /* SMP lock multicast updates. */
394         u16 mcast_filter[4];
395         /* MII transceiver section. */
396         struct mii_if_info mii_if;
397         int mii_preamble_required;
398         unsigned char phys[MII_CNT];            /* MII device addresses, only first one used. */
399         struct pci_dev *pci_dev;
400         void __iomem *base;
401         unsigned char pci_rev_id;
402 };
403
404 /* The station address location in the EEPROM. */
405 #define EEPROM_SA_OFFSET        0x10
406 #define DEFAULT_INTR (IntrRxDMADone | IntrPCIErr | \
407                         IntrDrvRqst | IntrTxDone | StatsMax | \
408                         LinkChange)
409
410 static int  change_mtu(struct net_device *dev, int new_mtu);
411 static int  eeprom_read(void __iomem *ioaddr, int location);
412 static int  mdio_read(struct net_device *dev, int phy_id, int location);
413 static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
414 static int  netdev_open(struct net_device *dev);
415 static void check_duplex(struct net_device *dev);
416 static void netdev_timer(unsigned long data);
417 static void tx_timeout(struct net_device *dev);
418 static void init_ring(struct net_device *dev);
419 static int  start_tx(struct sk_buff *skb, struct net_device *dev);
420 static int reset_tx (struct net_device *dev);
421 static irqreturn_t intr_handler(int irq, void *dev_instance);
422 static void rx_poll(unsigned long data);
423 static void tx_poll(unsigned long data);
424 static void refill_rx (struct net_device *dev);
425 static void netdev_error(struct net_device *dev, int intr_status);
426 static void netdev_error(struct net_device *dev, int intr_status);
427 static void set_rx_mode(struct net_device *dev);
428 static int __set_mac_addr(struct net_device *dev);
429 static struct net_device_stats *get_stats(struct net_device *dev);
430 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
431 static int  netdev_close(struct net_device *dev);
432 static const struct ethtool_ops ethtool_ops;
433
434 static void sundance_reset(struct net_device *dev, unsigned long reset_cmd)
435 {
436         struct netdev_private *np = netdev_priv(dev);
437         void __iomem *ioaddr = np->base + ASICCtrl;
438         int countdown;
439
440         /* ST201 documentation states ASICCtrl is a 32bit register */
441         iowrite32 (reset_cmd | ioread32 (ioaddr), ioaddr);
442         /* ST201 documentation states reset can take up to 1 ms */
443         countdown = 10 + 1;
444         while (ioread32 (ioaddr) & (ResetBusy << 16)) {
445                 if (--countdown == 0) {
446                         printk(KERN_WARNING "%s : reset not completed !!\n", dev->name);
447                         break;
448                 }
449                 udelay(100);
450         }
451 }
452
453 static int __devinit sundance_probe1 (struct pci_dev *pdev,
454                                       const struct pci_device_id *ent)
455 {
456         struct net_device *dev;
457         struct netdev_private *np;
458         static int card_idx;
459         int chip_idx = ent->driver_data;
460         int irq;
461         int i;
462         void __iomem *ioaddr;
463         u16 mii_ctl;
464         void *ring_space;
465         dma_addr_t ring_dma;
466 #ifdef USE_IO_OPS
467         int bar = 0;
468 #else
469         int bar = 1;
470 #endif
471         int phy, phy_idx = 0;
472
473
474 /* when built into the kernel, we only print version if device is found */
475 #ifndef MODULE
476         static int printed_version;
477         if (!printed_version++)
478                 printk(version);
479 #endif
480
481         if (pci_enable_device(pdev))
482                 return -EIO;
483         pci_set_master(pdev);
484
485         irq = pdev->irq;
486
487         dev = alloc_etherdev(sizeof(*np));
488         if (!dev)
489                 return -ENOMEM;
490         SET_MODULE_OWNER(dev);
491         SET_NETDEV_DEV(dev, &pdev->dev);
492
493         if (pci_request_regions(pdev, DRV_NAME))
494                 goto err_out_netdev;
495
496         ioaddr = pci_iomap(pdev, bar, netdev_io_size);
497         if (!ioaddr)
498                 goto err_out_res;
499
500         for (i = 0; i < 3; i++)
501                 ((u16 *)dev->dev_addr)[i] =
502                         le16_to_cpu(eeprom_read(ioaddr, i + EEPROM_SA_OFFSET));
503         memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
504
505         dev->base_addr = (unsigned long)ioaddr;
506         dev->irq = irq;
507
508         np = netdev_priv(dev);
509         np->base = ioaddr;
510         np->pci_dev = pdev;
511         np->chip_id = chip_idx;
512         np->msg_enable = (1 << debug) - 1;
513         spin_lock_init(&np->lock);
514         tasklet_init(&np->rx_tasklet, rx_poll, (unsigned long)dev);
515         tasklet_init(&np->tx_tasklet, tx_poll, (unsigned long)dev);
516
517         ring_space = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma);
518         if (!ring_space)
519                 goto err_out_cleardev;
520         np->tx_ring = (struct netdev_desc *)ring_space;
521         np->tx_ring_dma = ring_dma;
522
523         ring_space = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma);
524         if (!ring_space)
525                 goto err_out_unmap_tx;
526         np->rx_ring = (struct netdev_desc *)ring_space;
527         np->rx_ring_dma = ring_dma;
528
529         np->mii_if.dev = dev;
530         np->mii_if.mdio_read = mdio_read;
531         np->mii_if.mdio_write = mdio_write;
532         np->mii_if.phy_id_mask = 0x1f;
533         np->mii_if.reg_num_mask = 0x1f;
534
535         /* The chip-specific entries in the device structure. */
536         dev->open = &netdev_open;
537         dev->hard_start_xmit = &start_tx;
538         dev->stop = &netdev_close;
539         dev->get_stats = &get_stats;
540         dev->set_multicast_list = &set_rx_mode;
541         dev->do_ioctl = &netdev_ioctl;
542         SET_ETHTOOL_OPS(dev, &ethtool_ops);
543         dev->tx_timeout = &tx_timeout;
544         dev->watchdog_timeo = TX_TIMEOUT;
545         dev->change_mtu = &change_mtu;
546         pci_set_drvdata(pdev, dev);
547
548         pci_read_config_byte(pdev, PCI_REVISION_ID, &np->pci_rev_id);
549
550         i = register_netdev(dev);
551         if (i)
552                 goto err_out_unmap_rx;
553
554         printk(KERN_INFO "%s: %s at %p, ",
555                    dev->name, pci_id_tbl[chip_idx].name, ioaddr);
556         for (i = 0; i < 5; i++)
557                         printk("%2.2x:", dev->dev_addr[i]);
558         printk("%2.2x, IRQ %d.\n", dev->dev_addr[i], irq);
559
560         np->phys[0] = 1;                /* Default setting */
561         np->mii_preamble_required++;
562         /*
563          * It seems some phys doesn't deal well with address 0 being accessed
564          * first, so leave address zero to the end of the loop (32 & 31).
565          */
566         for (phy = 1; phy <= 32 && phy_idx < MII_CNT; phy++) {
567                 int phyx = phy & 0x1f;
568                 int mii_status = mdio_read(dev, phyx, MII_BMSR);
569                 if (mii_status != 0xffff  &&  mii_status != 0x0000) {
570                         np->phys[phy_idx++] = phyx;
571                         np->mii_if.advertising = mdio_read(dev, phyx, MII_ADVERTISE);
572                         if ((mii_status & 0x0040) == 0)
573                                 np->mii_preamble_required++;
574                         printk(KERN_INFO "%s: MII PHY found at address %d, status "
575                                    "0x%4.4x advertising %4.4x.\n",
576                                    dev->name, phyx, mii_status, np->mii_if.advertising);
577                 }
578         }
579         np->mii_preamble_required--;
580
581         if (phy_idx == 0) {
582                 printk(KERN_INFO "%s: No MII transceiver found, aborting.  ASIC status %x\n",
583                            dev->name, ioread32(ioaddr + ASICCtrl));
584                 goto err_out_unregister;
585         }
586
587         np->mii_if.phy_id = np->phys[0];
588
589         /* Parse override configuration */
590         np->an_enable = 1;
591         if (card_idx < MAX_UNITS) {
592                 if (media[card_idx] != NULL) {
593                         np->an_enable = 0;
594                         if (strcmp (media[card_idx], "100mbps_fd") == 0 ||
595                             strcmp (media[card_idx], "4") == 0) {
596                                 np->speed = 100;
597                                 np->mii_if.full_duplex = 1;
598                         } else if (strcmp (media[card_idx], "100mbps_hd") == 0
599                                    || strcmp (media[card_idx], "3") == 0) {
600                                 np->speed = 100;
601                                 np->mii_if.full_duplex = 0;
602                         } else if (strcmp (media[card_idx], "10mbps_fd") == 0 ||
603                                    strcmp (media[card_idx], "2") == 0) {
604                                 np->speed = 10;
605                                 np->mii_if.full_duplex = 1;
606                         } else if (strcmp (media[card_idx], "10mbps_hd") == 0 ||
607                                    strcmp (media[card_idx], "1") == 0) {
608                                 np->speed = 10;
609                                 np->mii_if.full_duplex = 0;
610                         } else {
611                                 np->an_enable = 1;
612                         }
613                 }
614                 if (flowctrl == 1)
615                         np->flowctrl = 1;
616         }
617
618         /* Fibre PHY? */
619         if (ioread32 (ioaddr + ASICCtrl) & 0x80) {
620                 /* Default 100Mbps Full */
621                 if (np->an_enable) {
622                         np->speed = 100;
623                         np->mii_if.full_duplex = 1;
624                         np->an_enable = 0;
625                 }
626         }
627         /* Reset PHY */
628         mdio_write (dev, np->phys[0], MII_BMCR, BMCR_RESET);
629         mdelay (300);
630         /* If flow control enabled, we need to advertise it.*/
631         if (np->flowctrl)
632                 mdio_write (dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising | 0x0400);
633         mdio_write (dev, np->phys[0], MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART);
634         /* Force media type */
635         if (!np->an_enable) {
636                 mii_ctl = 0;
637                 mii_ctl |= (np->speed == 100) ? BMCR_SPEED100 : 0;
638                 mii_ctl |= (np->mii_if.full_duplex) ? BMCR_FULLDPLX : 0;
639                 mdio_write (dev, np->phys[0], MII_BMCR, mii_ctl);
640                 printk (KERN_INFO "Override speed=%d, %s duplex\n",
641                         np->speed, np->mii_if.full_duplex ? "Full" : "Half");
642
643         }
644
645         /* Perhaps move the reset here? */
646         /* Reset the chip to erase previous misconfiguration. */
647         if (netif_msg_hw(np))
648                 printk("ASIC Control is %x.\n", ioread32(ioaddr + ASICCtrl));
649         sundance_reset(dev, 0x00ff << 16);
650         if (netif_msg_hw(np))
651                 printk("ASIC Control is now %x.\n", ioread32(ioaddr + ASICCtrl));
652
653         card_idx++;
654         return 0;
655
656 err_out_unregister:
657         unregister_netdev(dev);
658 err_out_unmap_rx:
659         pci_free_consistent(pdev, RX_TOTAL_SIZE, np->rx_ring, np->rx_ring_dma);
660 err_out_unmap_tx:
661         pci_free_consistent(pdev, TX_TOTAL_SIZE, np->tx_ring, np->tx_ring_dma);
662 err_out_cleardev:
663         pci_set_drvdata(pdev, NULL);
664         pci_iounmap(pdev, ioaddr);
665 err_out_res:
666         pci_release_regions(pdev);
667 err_out_netdev:
668         free_netdev (dev);
669         return -ENODEV;
670 }
671
672 static int change_mtu(struct net_device *dev, int new_mtu)
673 {
674         if ((new_mtu < 68) || (new_mtu > 8191)) /* Set by RxDMAFrameLen */
675                 return -EINVAL;
676         if (netif_running(dev))
677                 return -EBUSY;
678         dev->mtu = new_mtu;
679         return 0;
680 }
681
682 #define eeprom_delay(ee_addr)   ioread32(ee_addr)
683 /* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. */
684 static int __devinit eeprom_read(void __iomem *ioaddr, int location)
685 {
686         int boguscnt = 10000;           /* Typical 1900 ticks. */
687         iowrite16(0x0200 | (location & 0xff), ioaddr + EECtrl);
688         do {
689                 eeprom_delay(ioaddr + EECtrl);
690                 if (! (ioread16(ioaddr + EECtrl) & 0x8000)) {
691                         return ioread16(ioaddr + EEData);
692                 }
693         } while (--boguscnt > 0);
694         return 0;
695 }
696
697 /*  MII transceiver control section.
698         Read and write the MII registers using software-generated serial
699         MDIO protocol.  See the MII specifications or DP83840A data sheet
700         for details.
701
702         The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
703         met by back-to-back 33Mhz PCI cycles. */
704 #define mdio_delay() ioread8(mdio_addr)
705
706 enum mii_reg_bits {
707         MDIO_ShiftClk=0x0001, MDIO_Data=0x0002, MDIO_EnbOutput=0x0004,
708 };
709 #define MDIO_EnbIn  (0)
710 #define MDIO_WRITE0 (MDIO_EnbOutput)
711 #define MDIO_WRITE1 (MDIO_Data | MDIO_EnbOutput)
712
713 /* Generate the preamble required for initial synchronization and
714    a few older transceivers. */
715 static void mdio_sync(void __iomem *mdio_addr)
716 {
717         int bits = 32;
718
719         /* Establish sync by sending at least 32 logic ones. */
720         while (--bits >= 0) {
721                 iowrite8(MDIO_WRITE1, mdio_addr);
722                 mdio_delay();
723                 iowrite8(MDIO_WRITE1 | MDIO_ShiftClk, mdio_addr);
724                 mdio_delay();
725         }
726 }
727
728 static int mdio_read(struct net_device *dev, int phy_id, int location)
729 {
730         struct netdev_private *np = netdev_priv(dev);
731         void __iomem *mdio_addr = np->base + MIICtrl;
732         int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
733         int i, retval = 0;
734
735         if (np->mii_preamble_required)
736                 mdio_sync(mdio_addr);
737
738         /* Shift the read command bits out. */
739         for (i = 15; i >= 0; i--) {
740                 int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
741
742                 iowrite8(dataval, mdio_addr);
743                 mdio_delay();
744                 iowrite8(dataval | MDIO_ShiftClk, mdio_addr);
745                 mdio_delay();
746         }
747         /* Read the two transition, 16 data, and wire-idle bits. */
748         for (i = 19; i > 0; i--) {
749                 iowrite8(MDIO_EnbIn, mdio_addr);
750                 mdio_delay();
751                 retval = (retval << 1) | ((ioread8(mdio_addr) & MDIO_Data) ? 1 : 0);
752                 iowrite8(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
753                 mdio_delay();
754         }
755         return (retval>>1) & 0xffff;
756 }
757
758 static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
759 {
760         struct netdev_private *np = netdev_priv(dev);
761         void __iomem *mdio_addr = np->base + MIICtrl;
762         int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value;
763         int i;
764
765         if (np->mii_preamble_required)
766                 mdio_sync(mdio_addr);
767
768         /* Shift the command bits out. */
769         for (i = 31; i >= 0; i--) {
770                 int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
771
772                 iowrite8(dataval, mdio_addr);
773                 mdio_delay();
774                 iowrite8(dataval | MDIO_ShiftClk, mdio_addr);
775                 mdio_delay();
776         }
777         /* Clear out extra bits. */
778         for (i = 2; i > 0; i--) {
779                 iowrite8(MDIO_EnbIn, mdio_addr);
780                 mdio_delay();
781                 iowrite8(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
782                 mdio_delay();
783         }
784         return;
785 }
786
787 static int netdev_open(struct net_device *dev)
788 {
789         struct netdev_private *np = netdev_priv(dev);
790         void __iomem *ioaddr = np->base;
791         int i;
792
793         /* Do we need to reset the chip??? */
794
795         i = request_irq(dev->irq, &intr_handler, IRQF_SHARED, dev->name, dev);
796         if (i)
797                 return i;
798
799         if (netif_msg_ifup(np))
800                 printk(KERN_DEBUG "%s: netdev_open() irq %d.\n",
801                            dev->name, dev->irq);
802         init_ring(dev);
803
804         iowrite32(np->rx_ring_dma, ioaddr + RxListPtr);
805         /* The Tx list pointer is written as packets are queued. */
806
807         /* Initialize other registers. */
808         __set_mac_addr(dev);
809 #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
810         iowrite16(dev->mtu + 18, ioaddr + MaxFrameSize);
811 #else
812         iowrite16(dev->mtu + 14, ioaddr + MaxFrameSize);
813 #endif
814         if (dev->mtu > 2047)
815                 iowrite32(ioread32(ioaddr + ASICCtrl) | 0x0C, ioaddr + ASICCtrl);
816
817         /* Configure the PCI bus bursts and FIFO thresholds. */
818
819         if (dev->if_port == 0)
820                 dev->if_port = np->default_port;
821
822         spin_lock_init(&np->mcastlock);
823
824         set_rx_mode(dev);
825         iowrite16(0, ioaddr + IntrEnable);
826         iowrite16(0, ioaddr + DownCounter);
827         /* Set the chip to poll every N*320nsec. */
828         iowrite8(100, ioaddr + RxDMAPollPeriod);
829         iowrite8(127, ioaddr + TxDMAPollPeriod);
830         /* Fix DFE-580TX packet drop issue */
831         if (np->pci_rev_id >= 0x14)
832                 iowrite8(0x01, ioaddr + DebugCtrl1);
833         netif_start_queue(dev);
834
835         iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
836
837         if (netif_msg_ifup(np))
838                 printk(KERN_DEBUG "%s: Done netdev_open(), status: Rx %x Tx %x "
839                            "MAC Control %x, %4.4x %4.4x.\n",
840                            dev->name, ioread32(ioaddr + RxStatus), ioread8(ioaddr + TxStatus),
841                            ioread32(ioaddr + MACCtrl0),
842                            ioread16(ioaddr + MACCtrl1), ioread16(ioaddr + MACCtrl0));
843
844         /* Set the timer to check for link beat. */
845         init_timer(&np->timer);
846         np->timer.expires = jiffies + 3*HZ;
847         np->timer.data = (unsigned long)dev;
848         np->timer.function = &netdev_timer;                             /* timer handler */
849         add_timer(&np->timer);
850
851         /* Enable interrupts by setting the interrupt mask. */
852         iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
853
854         return 0;
855 }
856
857 static void check_duplex(struct net_device *dev)
858 {
859         struct netdev_private *np = netdev_priv(dev);
860         void __iomem *ioaddr = np->base;
861         int mii_lpa = mdio_read(dev, np->phys[0], MII_LPA);
862         int negotiated = mii_lpa & np->mii_if.advertising;
863         int duplex;
864
865         /* Force media */
866         if (!np->an_enable || mii_lpa == 0xffff) {
867                 if (np->mii_if.full_duplex)
868                         iowrite16 (ioread16 (ioaddr + MACCtrl0) | EnbFullDuplex,
869                                 ioaddr + MACCtrl0);
870                 return;
871         }
872
873         /* Autonegotiation */
874         duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040;
875         if (np->mii_if.full_duplex != duplex) {
876                 np->mii_if.full_duplex = duplex;
877                 if (netif_msg_link(np))
878                         printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d "
879                                    "negotiated capability %4.4x.\n", dev->name,
880                                    duplex ? "full" : "half", np->phys[0], negotiated);
881                 iowrite16(ioread16(ioaddr + MACCtrl0) | duplex ? 0x20 : 0, ioaddr + MACCtrl0);
882         }
883 }
884
885 static void netdev_timer(unsigned long data)
886 {
887         struct net_device *dev = (struct net_device *)data;
888         struct netdev_private *np = netdev_priv(dev);
889         void __iomem *ioaddr = np->base;
890         int next_tick = 10*HZ;
891
892         if (netif_msg_timer(np)) {
893                 printk(KERN_DEBUG "%s: Media selection timer tick, intr status %4.4x, "
894                            "Tx %x Rx %x.\n",
895                            dev->name, ioread16(ioaddr + IntrEnable),
896                            ioread8(ioaddr + TxStatus), ioread32(ioaddr + RxStatus));
897         }
898         check_duplex(dev);
899         np->timer.expires = jiffies + next_tick;
900         add_timer(&np->timer);
901 }
902
903 static void tx_timeout(struct net_device *dev)
904 {
905         struct netdev_private *np = netdev_priv(dev);
906         void __iomem *ioaddr = np->base;
907         unsigned long flag;
908
909         netif_stop_queue(dev);
910         tasklet_disable(&np->tx_tasklet);
911         iowrite16(0, ioaddr + IntrEnable);
912         printk(KERN_WARNING "%s: Transmit timed out, TxStatus %2.2x "
913                    "TxFrameId %2.2x,"
914                    " resetting...\n", dev->name, ioread8(ioaddr + TxStatus),
915                    ioread8(ioaddr + TxFrameId));
916
917         {
918                 int i;
919                 for (i=0; i<TX_RING_SIZE; i++) {
920                         printk(KERN_DEBUG "%02x %08llx %08x %08x(%02x) %08x %08x\n", i,
921                                 (unsigned long long)(np->tx_ring_dma + i*sizeof(*np->tx_ring)),
922                                 le32_to_cpu(np->tx_ring[i].next_desc),
923                                 le32_to_cpu(np->tx_ring[i].status),
924                                 (le32_to_cpu(np->tx_ring[i].status) >> 2) & 0xff,
925                                 le32_to_cpu(np->tx_ring[i].frag[0].addr),
926                                 le32_to_cpu(np->tx_ring[i].frag[0].length));
927                 }
928                 printk(KERN_DEBUG "TxListPtr=%08x netif_queue_stopped=%d\n",
929                         ioread32(np->base + TxListPtr),
930                         netif_queue_stopped(dev));
931                 printk(KERN_DEBUG "cur_tx=%d(%02x) dirty_tx=%d(%02x)\n",
932                         np->cur_tx, np->cur_tx % TX_RING_SIZE,
933                         np->dirty_tx, np->dirty_tx % TX_RING_SIZE);
934                 printk(KERN_DEBUG "cur_rx=%d dirty_rx=%d\n", np->cur_rx, np->dirty_rx);
935                 printk(KERN_DEBUG "cur_task=%d\n", np->cur_task);
936         }
937         spin_lock_irqsave(&np->lock, flag);
938
939         /* Stop and restart the chip's Tx processes . */
940         reset_tx(dev);
941         spin_unlock_irqrestore(&np->lock, flag);
942
943         dev->if_port = 0;
944
945         dev->trans_start = jiffies;
946         np->stats.tx_errors++;
947         if (np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 4) {
948                 netif_wake_queue(dev);
949         }
950         iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
951         tasklet_enable(&np->tx_tasklet);
952 }
953
954
955 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
956 static void init_ring(struct net_device *dev)
957 {
958         struct netdev_private *np = netdev_priv(dev);
959         int i;
960
961         np->cur_rx = np->cur_tx = 0;
962         np->dirty_rx = np->dirty_tx = 0;
963         np->cur_task = 0;
964
965         np->rx_buf_sz = (dev->mtu <= 1520 ? PKT_BUF_SZ : dev->mtu + 16);
966
967         /* Initialize all Rx descriptors. */
968         for (i = 0; i < RX_RING_SIZE; i++) {
969                 np->rx_ring[i].next_desc = cpu_to_le32(np->rx_ring_dma +
970                         ((i+1)%RX_RING_SIZE)*sizeof(*np->rx_ring));
971                 np->rx_ring[i].status = 0;
972                 np->rx_ring[i].frag[0].length = 0;
973                 np->rx_skbuff[i] = NULL;
974         }
975
976         /* Fill in the Rx buffers.  Handle allocation failure gracefully. */
977         for (i = 0; i < RX_RING_SIZE; i++) {
978                 struct sk_buff *skb = dev_alloc_skb(np->rx_buf_sz);
979                 np->rx_skbuff[i] = skb;
980                 if (skb == NULL)
981                         break;
982                 skb->dev = dev;         /* Mark as being used by this device. */
983                 skb_reserve(skb, 2);    /* 16 byte align the IP header. */
984                 np->rx_ring[i].frag[0].addr = cpu_to_le32(
985                         pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz,
986                                 PCI_DMA_FROMDEVICE));
987                 np->rx_ring[i].frag[0].length = cpu_to_le32(np->rx_buf_sz | LastFrag);
988         }
989         np->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
990
991         for (i = 0; i < TX_RING_SIZE; i++) {
992                 np->tx_skbuff[i] = NULL;
993                 np->tx_ring[i].status = 0;
994         }
995         return;
996 }
997
998 static void tx_poll (unsigned long data)
999 {
1000         struct net_device *dev = (struct net_device *)data;
1001         struct netdev_private *np = netdev_priv(dev);
1002         unsigned head = np->cur_task % TX_RING_SIZE;
1003         struct netdev_desc *txdesc =
1004                 &np->tx_ring[(np->cur_tx - 1) % TX_RING_SIZE];
1005
1006         /* Chain the next pointer */
1007         for (; np->cur_tx - np->cur_task > 0; np->cur_task++) {
1008                 int entry = np->cur_task % TX_RING_SIZE;
1009                 txdesc = &np->tx_ring[entry];
1010                 if (np->last_tx) {
1011                         np->last_tx->next_desc = cpu_to_le32(np->tx_ring_dma +
1012                                 entry*sizeof(struct netdev_desc));
1013                 }
1014                 np->last_tx = txdesc;
1015         }
1016         /* Indicate the latest descriptor of tx ring */
1017         txdesc->status |= cpu_to_le32(DescIntrOnTx);
1018
1019         if (ioread32 (np->base + TxListPtr) == 0)
1020                 iowrite32 (np->tx_ring_dma + head * sizeof(struct netdev_desc),
1021                         np->base + TxListPtr);
1022         return;
1023 }
1024
1025 static int
1026 start_tx (struct sk_buff *skb, struct net_device *dev)
1027 {
1028         struct netdev_private *np = netdev_priv(dev);
1029         struct netdev_desc *txdesc;
1030         unsigned entry;
1031
1032         /* Calculate the next Tx descriptor entry. */
1033         entry = np->cur_tx % TX_RING_SIZE;
1034         np->tx_skbuff[entry] = skb;
1035         txdesc = &np->tx_ring[entry];
1036
1037         txdesc->next_desc = 0;
1038         txdesc->status = cpu_to_le32 ((entry << 2) | DisableAlign);
1039         txdesc->frag[0].addr = cpu_to_le32 (pci_map_single (np->pci_dev, skb->data,
1040                                                         skb->len,
1041                                                         PCI_DMA_TODEVICE));
1042         txdesc->frag[0].length = cpu_to_le32 (skb->len | LastFrag);
1043
1044         /* Increment cur_tx before tasklet_schedule() */
1045         np->cur_tx++;
1046         mb();
1047         /* Schedule a tx_poll() task */
1048         tasklet_schedule(&np->tx_tasklet);
1049
1050         /* On some architectures: explicitly flush cache lines here. */
1051         if (np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 1
1052                         && !netif_queue_stopped(dev)) {
1053                 /* do nothing */
1054         } else {
1055                 netif_stop_queue (dev);
1056         }
1057         dev->trans_start = jiffies;
1058         if (netif_msg_tx_queued(np)) {
1059                 printk (KERN_DEBUG
1060                         "%s: Transmit frame #%d queued in slot %d.\n",
1061                         dev->name, np->cur_tx, entry);
1062         }
1063         return 0;
1064 }
1065
1066 /* Reset hardware tx and free all of tx buffers */
1067 static int
1068 reset_tx (struct net_device *dev)
1069 {
1070         struct netdev_private *np = netdev_priv(dev);
1071         void __iomem *ioaddr = np->base;
1072         struct sk_buff *skb;
1073         int i;
1074         int irq = in_interrupt();
1075
1076         /* Reset tx logic, TxListPtr will be cleaned */
1077         iowrite16 (TxDisable, ioaddr + MACCtrl1);
1078         sundance_reset(dev, (NetworkReset|FIFOReset|DMAReset|TxReset) << 16);
1079
1080         /* free all tx skbuff */
1081         for (i = 0; i < TX_RING_SIZE; i++) {
1082                 skb = np->tx_skbuff[i];
1083                 if (skb) {
1084                         pci_unmap_single(np->pci_dev,
1085                                 np->tx_ring[i].frag[0].addr, skb->len,
1086                                 PCI_DMA_TODEVICE);
1087                         if (irq)
1088                                 dev_kfree_skb_irq (skb);
1089                         else
1090                                 dev_kfree_skb (skb);
1091                         np->tx_skbuff[i] = NULL;
1092                         np->stats.tx_dropped++;
1093                 }
1094         }
1095         np->cur_tx = np->dirty_tx = 0;
1096         np->cur_task = 0;
1097         iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
1098         return 0;
1099 }
1100
1101 /* The interrupt handler cleans up after the Tx thread,
1102    and schedule a Rx thread work */
1103 static irqreturn_t intr_handler(int irq, void *dev_instance)
1104 {
1105         struct net_device *dev = (struct net_device *)dev_instance;
1106         struct netdev_private *np = netdev_priv(dev);
1107         void __iomem *ioaddr = np->base;
1108         int hw_frame_id;
1109         int tx_cnt;
1110         int tx_status;
1111         int handled = 0;
1112         int i;
1113
1114
1115         do {
1116                 int intr_status = ioread16(ioaddr + IntrStatus);
1117                 iowrite16(intr_status, ioaddr + IntrStatus);
1118
1119                 if (netif_msg_intr(np))
1120                         printk(KERN_DEBUG "%s: Interrupt, status %4.4x.\n",
1121                                    dev->name, intr_status);
1122
1123                 if (!(intr_status & DEFAULT_INTR))
1124                         break;
1125
1126                 handled = 1;
1127
1128                 if (intr_status & (IntrRxDMADone)) {
1129                         iowrite16(DEFAULT_INTR & ~(IntrRxDone|IntrRxDMADone),
1130                                         ioaddr + IntrEnable);
1131                         if (np->budget < 0)
1132                                 np->budget = RX_BUDGET;
1133                         tasklet_schedule(&np->rx_tasklet);
1134                 }
1135                 if (intr_status & (IntrTxDone | IntrDrvRqst)) {
1136                         tx_status = ioread16 (ioaddr + TxStatus);
1137                         for (tx_cnt=32; tx_status & 0x80; --tx_cnt) {
1138                                 if (netif_msg_tx_done(np))
1139                                         printk
1140                                             ("%s: Transmit status is %2.2x.\n",
1141                                         dev->name, tx_status);
1142                                 if (tx_status & 0x1e) {
1143                                         if (netif_msg_tx_err(np))
1144                                                 printk("%s: Transmit error status %4.4x.\n",
1145                                                            dev->name, tx_status);
1146                                         np->stats.tx_errors++;
1147                                         if (tx_status & 0x10)
1148                                                 np->stats.tx_fifo_errors++;
1149                                         if (tx_status & 0x08)
1150                                                 np->stats.collisions++;
1151                                         if (tx_status & 0x04)
1152                                                 np->stats.tx_fifo_errors++;
1153                                         if (tx_status & 0x02)
1154                                                 np->stats.tx_window_errors++;
1155
1156                                         /*
1157                                         ** This reset has been verified on
1158                                         ** DFE-580TX boards ! phdm@macqel.be.
1159                                         */
1160                                         if (tx_status & 0x10) { /* TxUnderrun */
1161                                                 /* Restart Tx FIFO and transmitter */
1162                                                 sundance_reset(dev, (NetworkReset|FIFOReset|TxReset) << 16);
1163                                                 /* No need to reset the Tx pointer here */
1164                                         }
1165                                         /* Restart the Tx. */
1166                                         iowrite16 (TxEnable, ioaddr + MACCtrl1);
1167                                 }
1168                                 /* Yup, this is a documentation bug.  It cost me *hours*. */
1169                                 iowrite16 (0, ioaddr + TxStatus);
1170                                 if (tx_cnt < 0) {
1171                                         iowrite32(5000, ioaddr + DownCounter);
1172                                         break;
1173                                 }
1174                                 tx_status = ioread16 (ioaddr + TxStatus);
1175                         }
1176                         hw_frame_id = (tx_status >> 8) & 0xff;
1177                 } else  {
1178                         hw_frame_id = ioread8(ioaddr + TxFrameId);
1179                 }
1180
1181                 if (np->pci_rev_id >= 0x14) {
1182                         spin_lock(&np->lock);
1183                         for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {
1184                                 int entry = np->dirty_tx % TX_RING_SIZE;
1185                                 struct sk_buff *skb;
1186                                 int sw_frame_id;
1187                                 sw_frame_id = (le32_to_cpu(
1188                                         np->tx_ring[entry].status) >> 2) & 0xff;
1189                                 if (sw_frame_id == hw_frame_id &&
1190                                         !(le32_to_cpu(np->tx_ring[entry].status)
1191                                         & 0x00010000))
1192                                                 break;
1193                                 if (sw_frame_id == (hw_frame_id + 1) %
1194                                         TX_RING_SIZE)
1195                                                 break;
1196                                 skb = np->tx_skbuff[entry];
1197                                 /* Free the original skb. */
1198                                 pci_unmap_single(np->pci_dev,
1199                                         np->tx_ring[entry].frag[0].addr,
1200                                         skb->len, PCI_DMA_TODEVICE);
1201                                 dev_kfree_skb_irq (np->tx_skbuff[entry]);
1202                                 np->tx_skbuff[entry] = NULL;
1203                                 np->tx_ring[entry].frag[0].addr = 0;
1204                                 np->tx_ring[entry].frag[0].length = 0;
1205                         }
1206                         spin_unlock(&np->lock);
1207                 } else {
1208                         spin_lock(&np->lock);
1209                         for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {
1210                                 int entry = np->dirty_tx % TX_RING_SIZE;
1211                                 struct sk_buff *skb;
1212                                 if (!(le32_to_cpu(np->tx_ring[entry].status)
1213                                                         & 0x00010000))
1214                                         break;
1215                                 skb = np->tx_skbuff[entry];
1216                                 /* Free the original skb. */
1217                                 pci_unmap_single(np->pci_dev,
1218                                         np->tx_ring[entry].frag[0].addr,
1219                                         skb->len, PCI_DMA_TODEVICE);
1220                                 dev_kfree_skb_irq (np->tx_skbuff[entry]);
1221                                 np->tx_skbuff[entry] = NULL;
1222                                 np->tx_ring[entry].frag[0].addr = 0;
1223                                 np->tx_ring[entry].frag[0].length = 0;
1224                         }
1225                         spin_unlock(&np->lock);
1226                 }
1227
1228                 if (netif_queue_stopped(dev) &&
1229                         np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 4) {
1230                         /* The ring is no longer full, clear busy flag. */
1231                         netif_wake_queue (dev);
1232                 }
1233                 /* Abnormal error summary/uncommon events handlers. */
1234                 if (intr_status & (IntrPCIErr | LinkChange | StatsMax))
1235                         netdev_error(dev, intr_status);
1236         } while (0);
1237         if (netif_msg_intr(np))
1238                 printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
1239                            dev->name, ioread16(ioaddr + IntrStatus));
1240         return IRQ_RETVAL(handled);
1241 }
1242
1243 static void rx_poll(unsigned long data)
1244 {
1245         struct net_device *dev = (struct net_device *)data;
1246         struct netdev_private *np = netdev_priv(dev);
1247         int entry = np->cur_rx % RX_RING_SIZE;
1248         int boguscnt = np->budget;
1249         void __iomem *ioaddr = np->base;
1250         int received = 0;
1251
1252         /* If EOP is set on the next entry, it's a new packet. Send it up. */
1253         while (1) {
1254                 struct netdev_desc *desc = &(np->rx_ring[entry]);
1255                 u32 frame_status = le32_to_cpu(desc->status);
1256                 int pkt_len;
1257
1258                 if (--boguscnt < 0) {
1259                         goto not_done;
1260                 }
1261                 if (!(frame_status & DescOwn))
1262                         break;
1263                 pkt_len = frame_status & 0x1fff;        /* Chip omits the CRC. */
1264                 if (netif_msg_rx_status(np))
1265                         printk(KERN_DEBUG "  netdev_rx() status was %8.8x.\n",
1266                                    frame_status);
1267                 if (frame_status & 0x001f4000) {
1268                         /* There was a error. */
1269                         if (netif_msg_rx_err(np))
1270                                 printk(KERN_DEBUG "  netdev_rx() Rx error was %8.8x.\n",
1271                                            frame_status);
1272                         np->stats.rx_errors++;
1273                         if (frame_status & 0x00100000) np->stats.rx_length_errors++;
1274                         if (frame_status & 0x00010000) np->stats.rx_fifo_errors++;
1275                         if (frame_status & 0x00060000) np->stats.rx_frame_errors++;
1276                         if (frame_status & 0x00080000) np->stats.rx_crc_errors++;
1277                         if (frame_status & 0x00100000) {
1278                                 printk(KERN_WARNING "%s: Oversized Ethernet frame,"
1279                                            " status %8.8x.\n",
1280                                            dev->name, frame_status);
1281                         }
1282                 } else {
1283                         struct sk_buff *skb;
1284 #ifndef final_version
1285                         if (netif_msg_rx_status(np))
1286                                 printk(KERN_DEBUG "  netdev_rx() normal Rx pkt length %d"
1287                                            ", bogus_cnt %d.\n",
1288                                            pkt_len, boguscnt);
1289 #endif
1290                         /* Check if the packet is long enough to accept without copying
1291                            to a minimally-sized skbuff. */
1292                         if (pkt_len < rx_copybreak
1293                                 && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1294                                 skb->dev = dev;
1295                                 skb_reserve(skb, 2);    /* 16 byte align the IP header */
1296                                 pci_dma_sync_single_for_cpu(np->pci_dev,
1297                                                             desc->frag[0].addr,
1298                                                             np->rx_buf_sz,
1299                                                             PCI_DMA_FROMDEVICE);
1300
1301                                 eth_copy_and_sum(skb, np->rx_skbuff[entry]->data, pkt_len, 0);
1302                                 pci_dma_sync_single_for_device(np->pci_dev,
1303                                                                desc->frag[0].addr,
1304                                                                np->rx_buf_sz,
1305                                                                PCI_DMA_FROMDEVICE);
1306                                 skb_put(skb, pkt_len);
1307                         } else {
1308                                 pci_unmap_single(np->pci_dev,
1309                                         desc->frag[0].addr,
1310                                         np->rx_buf_sz,
1311                                         PCI_DMA_FROMDEVICE);
1312                                 skb_put(skb = np->rx_skbuff[entry], pkt_len);
1313                                 np->rx_skbuff[entry] = NULL;
1314                         }
1315                         skb->protocol = eth_type_trans(skb, dev);
1316                         /* Note: checksum -> skb->ip_summed = CHECKSUM_UNNECESSARY; */
1317                         netif_rx(skb);
1318                         dev->last_rx = jiffies;
1319                 }
1320                 entry = (entry + 1) % RX_RING_SIZE;
1321                 received++;
1322         }
1323         np->cur_rx = entry;
1324         refill_rx (dev);
1325         np->budget -= received;
1326         iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
1327         return;
1328
1329 not_done:
1330         np->cur_rx = entry;
1331         refill_rx (dev);
1332         if (!received)
1333                 received = 1;
1334         np->budget -= received;
1335         if (np->budget <= 0)
1336                 np->budget = RX_BUDGET;
1337         tasklet_schedule(&np->rx_tasklet);
1338         return;
1339 }
1340
1341 static void refill_rx (struct net_device *dev)
1342 {
1343         struct netdev_private *np = netdev_priv(dev);
1344         int entry;
1345         int cnt = 0;
1346
1347         /* Refill the Rx ring buffers. */
1348         for (;(np->cur_rx - np->dirty_rx + RX_RING_SIZE) % RX_RING_SIZE > 0;
1349                 np->dirty_rx = (np->dirty_rx + 1) % RX_RING_SIZE) {
1350                 struct sk_buff *skb;
1351                 entry = np->dirty_rx % RX_RING_SIZE;
1352                 if (np->rx_skbuff[entry] == NULL) {
1353                         skb = dev_alloc_skb(np->rx_buf_sz);
1354                         np->rx_skbuff[entry] = skb;
1355                         if (skb == NULL)
1356                                 break;          /* Better luck next round. */
1357                         skb->dev = dev;         /* Mark as being used by this device. */
1358                         skb_reserve(skb, 2);    /* Align IP on 16 byte boundaries */
1359                         np->rx_ring[entry].frag[0].addr = cpu_to_le32(
1360                                 pci_map_single(np->pci_dev, skb->data,
1361                                         np->rx_buf_sz, PCI_DMA_FROMDEVICE));
1362                 }
1363                 /* Perhaps we need not reset this field. */
1364                 np->rx_ring[entry].frag[0].length =
1365                         cpu_to_le32(np->rx_buf_sz | LastFrag);
1366                 np->rx_ring[entry].status = 0;
1367                 cnt++;
1368         }
1369         return;
1370 }
1371 static void netdev_error(struct net_device *dev, int intr_status)
1372 {
1373         struct netdev_private *np = netdev_priv(dev);
1374         void __iomem *ioaddr = np->base;
1375         u16 mii_ctl, mii_advertise, mii_lpa;
1376         int speed;
1377
1378         if (intr_status & LinkChange) {
1379                 if (np->an_enable) {
1380                         mii_advertise = mdio_read (dev, np->phys[0], MII_ADVERTISE);
1381                         mii_lpa= mdio_read (dev, np->phys[0], MII_LPA);
1382                         mii_advertise &= mii_lpa;
1383                         printk (KERN_INFO "%s: Link changed: ", dev->name);
1384                         if (mii_advertise & ADVERTISE_100FULL) {
1385                                 np->speed = 100;
1386                                 printk ("100Mbps, full duplex\n");
1387                         } else if (mii_advertise & ADVERTISE_100HALF) {
1388                                 np->speed = 100;
1389                                 printk ("100Mbps, half duplex\n");
1390                         } else if (mii_advertise & ADVERTISE_10FULL) {
1391                                 np->speed = 10;
1392                                 printk ("10Mbps, full duplex\n");
1393                         } else if (mii_advertise & ADVERTISE_10HALF) {
1394                                 np->speed = 10;
1395                                 printk ("10Mbps, half duplex\n");
1396                         } else
1397                                 printk ("\n");
1398
1399                 } else {
1400                         mii_ctl = mdio_read (dev, np->phys[0], MII_BMCR);
1401                         speed = (mii_ctl & BMCR_SPEED100) ? 100 : 10;
1402                         np->speed = speed;
1403                         printk (KERN_INFO "%s: Link changed: %dMbps ,",
1404                                 dev->name, speed);
1405                         printk ("%s duplex.\n", (mii_ctl & BMCR_FULLDPLX) ?
1406                                 "full" : "half");
1407                 }
1408                 check_duplex (dev);
1409                 if (np->flowctrl && np->mii_if.full_duplex) {
1410                         iowrite16(ioread16(ioaddr + MulticastFilter1+2) | 0x0200,
1411                                 ioaddr + MulticastFilter1+2);
1412                         iowrite16(ioread16(ioaddr + MACCtrl0) | EnbFlowCtrl,
1413                                 ioaddr + MACCtrl0);
1414                 }
1415         }
1416         if (intr_status & StatsMax) {
1417                 get_stats(dev);
1418         }
1419         if (intr_status & IntrPCIErr) {
1420                 printk(KERN_ERR "%s: Something Wicked happened! %4.4x.\n",
1421                            dev->name, intr_status);
1422                 /* We must do a global reset of DMA to continue. */
1423         }
1424 }
1425
1426 static struct net_device_stats *get_stats(struct net_device *dev)
1427 {
1428         struct netdev_private *np = netdev_priv(dev);
1429         void __iomem *ioaddr = np->base;
1430         int i;
1431
1432         /* We should lock this segment of code for SMP eventually, although
1433            the vulnerability window is very small and statistics are
1434            non-critical. */
1435         /* The chip only need report frame silently dropped. */
1436         np->stats.rx_missed_errors      += ioread8(ioaddr + RxMissed);
1437         np->stats.tx_packets += ioread16(ioaddr + TxFramesOK);
1438         np->stats.rx_packets += ioread16(ioaddr + RxFramesOK);
1439         np->stats.collisions += ioread8(ioaddr + StatsLateColl);
1440         np->stats.collisions += ioread8(ioaddr + StatsMultiColl);
1441         np->stats.collisions += ioread8(ioaddr + StatsOneColl);
1442         np->stats.tx_carrier_errors += ioread8(ioaddr + StatsCarrierError);
1443         ioread8(ioaddr + StatsTxDefer);
1444         for (i = StatsTxDefer; i <= StatsMcastRx; i++)
1445                 ioread8(ioaddr + i);
1446         np->stats.tx_bytes += ioread16(ioaddr + TxOctetsLow);
1447         np->stats.tx_bytes += ioread16(ioaddr + TxOctetsHigh) << 16;
1448         np->stats.rx_bytes += ioread16(ioaddr + RxOctetsLow);
1449         np->stats.rx_bytes += ioread16(ioaddr + RxOctetsHigh) << 16;
1450
1451         return &np->stats;
1452 }
1453
1454 static void set_rx_mode(struct net_device *dev)
1455 {
1456         struct netdev_private *np = netdev_priv(dev);
1457         void __iomem *ioaddr = np->base;
1458         u16 mc_filter[4];                       /* Multicast hash filter */
1459         u32 rx_mode;
1460         int i;
1461
1462         if (dev->flags & IFF_PROMISC) {                 /* Set promiscuous. */
1463                 memset(mc_filter, 0xff, sizeof(mc_filter));
1464                 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAll | AcceptMyPhys;
1465         } else if ((dev->mc_count > multicast_filter_limit)
1466                            ||  (dev->flags & IFF_ALLMULTI)) {
1467                 /* Too many to match, or accept all multicasts. */
1468                 memset(mc_filter, 0xff, sizeof(mc_filter));
1469                 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
1470         } else if (dev->mc_count) {
1471                 struct dev_mc_list *mclist;
1472                 int bit;
1473                 int index;
1474                 int crc;
1475                 memset (mc_filter, 0, sizeof (mc_filter));
1476                 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1477                      i++, mclist = mclist->next) {
1478                         crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr);
1479                         for (index=0, bit=0; bit < 6; bit++, crc <<= 1)
1480                                 if (crc & 0x80000000) index |= 1 << bit;
1481                         mc_filter[index/16] |= (1 << (index % 16));
1482                 }
1483                 rx_mode = AcceptBroadcast | AcceptMultiHash | AcceptMyPhys;
1484         } else {
1485                 iowrite8(AcceptBroadcast | AcceptMyPhys, ioaddr + RxMode);
1486                 return;
1487         }
1488         if (np->mii_if.full_duplex && np->flowctrl)
1489                 mc_filter[3] |= 0x0200;
1490
1491         for (i = 0; i < 4; i++)
1492                 iowrite16(mc_filter[i], ioaddr + MulticastFilter0 + i*2);
1493         iowrite8(rx_mode, ioaddr + RxMode);
1494 }
1495
1496 static int __set_mac_addr(struct net_device *dev)
1497 {
1498         struct netdev_private *np = netdev_priv(dev);
1499         u16 addr16;
1500
1501         addr16 = (dev->dev_addr[0] | (dev->dev_addr[1] << 8));
1502         iowrite16(addr16, np->base + StationAddr);
1503         addr16 = (dev->dev_addr[2] | (dev->dev_addr[3] << 8));
1504         iowrite16(addr16, np->base + StationAddr+2);
1505         addr16 = (dev->dev_addr[4] | (dev->dev_addr[5] << 8));
1506         iowrite16(addr16, np->base + StationAddr+4);
1507         return 0;
1508 }
1509
1510 static int check_if_running(struct net_device *dev)
1511 {
1512         if (!netif_running(dev))
1513                 return -EINVAL;
1514         return 0;
1515 }
1516
1517 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1518 {
1519         struct netdev_private *np = netdev_priv(dev);
1520         strcpy(info->driver, DRV_NAME);
1521         strcpy(info->version, DRV_VERSION);
1522         strcpy(info->bus_info, pci_name(np->pci_dev));
1523 }
1524
1525 static int get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1526 {
1527         struct netdev_private *np = netdev_priv(dev);
1528         spin_lock_irq(&np->lock);
1529         mii_ethtool_gset(&np->mii_if, ecmd);
1530         spin_unlock_irq(&np->lock);
1531         return 0;
1532 }
1533
1534 static int set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1535 {
1536         struct netdev_private *np = netdev_priv(dev);
1537         int res;
1538         spin_lock_irq(&np->lock);
1539         res = mii_ethtool_sset(&np->mii_if, ecmd);
1540         spin_unlock_irq(&np->lock);
1541         return res;
1542 }
1543
1544 static int nway_reset(struct net_device *dev)
1545 {
1546         struct netdev_private *np = netdev_priv(dev);
1547         return mii_nway_restart(&np->mii_if);
1548 }
1549
1550 static u32 get_link(struct net_device *dev)
1551 {
1552         struct netdev_private *np = netdev_priv(dev);
1553         return mii_link_ok(&np->mii_if);
1554 }
1555
1556 static u32 get_msglevel(struct net_device *dev)
1557 {
1558         struct netdev_private *np = netdev_priv(dev);
1559         return np->msg_enable;
1560 }
1561
1562 static void set_msglevel(struct net_device *dev, u32 val)
1563 {
1564         struct netdev_private *np = netdev_priv(dev);
1565         np->msg_enable = val;
1566 }
1567
1568 static const struct ethtool_ops ethtool_ops = {
1569         .begin = check_if_running,
1570         .get_drvinfo = get_drvinfo,
1571         .get_settings = get_settings,
1572         .set_settings = set_settings,
1573         .nway_reset = nway_reset,
1574         .get_link = get_link,
1575         .get_msglevel = get_msglevel,
1576         .set_msglevel = set_msglevel,
1577         .get_perm_addr = ethtool_op_get_perm_addr,
1578 };
1579
1580 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1581 {
1582         struct netdev_private *np = netdev_priv(dev);
1583         void __iomem *ioaddr = np->base;
1584         int rc;
1585         int i;
1586
1587         if (!netif_running(dev))
1588                 return -EINVAL;
1589
1590         spin_lock_irq(&np->lock);
1591         rc = generic_mii_ioctl(&np->mii_if, if_mii(rq), cmd, NULL);
1592         spin_unlock_irq(&np->lock);
1593         switch (cmd) {
1594                 case SIOCDEVPRIVATE:
1595                 for (i=0; i<TX_RING_SIZE; i++) {
1596                         printk(KERN_DEBUG "%02x %08llx %08x %08x(%02x) %08x %08x\n", i,
1597                                 (unsigned long long)(np->tx_ring_dma + i*sizeof(*np->tx_ring)),
1598                                 le32_to_cpu(np->tx_ring[i].next_desc),
1599                                 le32_to_cpu(np->tx_ring[i].status),
1600                                 (le32_to_cpu(np->tx_ring[i].status) >> 2)
1601                                         & 0xff,
1602                                 le32_to_cpu(np->tx_ring[i].frag[0].addr),
1603                                 le32_to_cpu(np->tx_ring[i].frag[0].length));
1604                 }
1605                 printk(KERN_DEBUG "TxListPtr=%08x netif_queue_stopped=%d\n",
1606                         ioread32(np->base + TxListPtr),
1607                         netif_queue_stopped(dev));
1608                 printk(KERN_DEBUG "cur_tx=%d(%02x) dirty_tx=%d(%02x)\n",
1609                         np->cur_tx, np->cur_tx % TX_RING_SIZE,
1610                         np->dirty_tx, np->dirty_tx % TX_RING_SIZE);
1611                 printk(KERN_DEBUG "cur_rx=%d dirty_rx=%d\n", np->cur_rx, np->dirty_rx);
1612                 printk(KERN_DEBUG "cur_task=%d\n", np->cur_task);
1613                 printk(KERN_DEBUG "TxStatus=%04x\n", ioread16(ioaddr + TxStatus));
1614                         return 0;
1615         }
1616
1617
1618         return rc;
1619 }
1620
1621 static int netdev_close(struct net_device *dev)
1622 {
1623         struct netdev_private *np = netdev_priv(dev);
1624         void __iomem *ioaddr = np->base;
1625         struct sk_buff *skb;
1626         int i;
1627
1628         netif_stop_queue(dev);
1629
1630         if (netif_msg_ifdown(np)) {
1631                 printk(KERN_DEBUG "%s: Shutting down ethercard, status was Tx %2.2x "
1632                            "Rx %4.4x Int %2.2x.\n",
1633                            dev->name, ioread8(ioaddr + TxStatus),
1634                            ioread32(ioaddr + RxStatus), ioread16(ioaddr + IntrStatus));
1635                 printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d,  Rx %d / %d.\n",
1636                            dev->name, np->cur_tx, np->dirty_tx, np->cur_rx, np->dirty_rx);
1637         }
1638
1639         /* Disable interrupts by clearing the interrupt mask. */
1640         iowrite16(0x0000, ioaddr + IntrEnable);
1641
1642         /* Stop the chip's Tx and Rx processes. */
1643         iowrite16(TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl1);
1644
1645         /* Wait and kill tasklet */
1646         tasklet_kill(&np->rx_tasklet);
1647         tasklet_kill(&np->tx_tasklet);
1648
1649 #ifdef __i386__
1650         if (netif_msg_hw(np)) {
1651                 printk("\n"KERN_DEBUG"  Tx ring at %8.8x:\n",
1652                            (int)(np->tx_ring_dma));
1653                 for (i = 0; i < TX_RING_SIZE; i++)
1654                         printk(" #%d desc. %4.4x %8.8x %8.8x.\n",
1655                                    i, np->tx_ring[i].status, np->tx_ring[i].frag[0].addr,
1656                                    np->tx_ring[i].frag[0].length);
1657                 printk("\n"KERN_DEBUG "  Rx ring %8.8x:\n",
1658                            (int)(np->rx_ring_dma));
1659                 for (i = 0; i < /*RX_RING_SIZE*/4 ; i++) {
1660                         printk(KERN_DEBUG " #%d desc. %4.4x %4.4x %8.8x\n",
1661                                    i, np->rx_ring[i].status, np->rx_ring[i].frag[0].addr,
1662                                    np->rx_ring[i].frag[0].length);
1663                 }
1664         }
1665 #endif /* __i386__ debugging only */
1666
1667         free_irq(dev->irq, dev);
1668
1669         del_timer_sync(&np->timer);
1670
1671         /* Free all the skbuffs in the Rx queue. */
1672         for (i = 0; i < RX_RING_SIZE; i++) {
1673                 np->rx_ring[i].status = 0;
1674                 np->rx_ring[i].frag[0].addr = 0xBADF00D0; /* An invalid address. */
1675                 skb = np->rx_skbuff[i];
1676                 if (skb) {
1677                         pci_unmap_single(np->pci_dev,
1678                                 np->rx_ring[i].frag[0].addr, np->rx_buf_sz,
1679                                 PCI_DMA_FROMDEVICE);
1680                         dev_kfree_skb(skb);
1681                         np->rx_skbuff[i] = NULL;
1682                 }
1683         }
1684         for (i = 0; i < TX_RING_SIZE; i++) {
1685                 skb = np->tx_skbuff[i];
1686                 if (skb) {
1687                         pci_unmap_single(np->pci_dev,
1688                                 np->tx_ring[i].frag[0].addr, skb->len,
1689                                 PCI_DMA_TODEVICE);
1690                         dev_kfree_skb(skb);
1691                         np->tx_skbuff[i] = NULL;
1692                 }
1693         }
1694
1695         return 0;
1696 }
1697
1698 static void __devexit sundance_remove1 (struct pci_dev *pdev)
1699 {
1700         struct net_device *dev = pci_get_drvdata(pdev);
1701
1702         if (dev) {
1703                 struct netdev_private *np = netdev_priv(dev);
1704
1705                 unregister_netdev(dev);
1706                 pci_free_consistent(pdev, RX_TOTAL_SIZE, np->rx_ring,
1707                         np->rx_ring_dma);
1708                 pci_free_consistent(pdev, TX_TOTAL_SIZE, np->tx_ring,
1709                         np->tx_ring_dma);
1710                 pci_iounmap(pdev, np->base);
1711                 pci_release_regions(pdev);
1712                 free_netdev(dev);
1713                 pci_set_drvdata(pdev, NULL);
1714         }
1715 }
1716
1717 static struct pci_driver sundance_driver = {
1718         .name           = DRV_NAME,
1719         .id_table       = sundance_pci_tbl,
1720         .probe          = sundance_probe1,
1721         .remove         = __devexit_p(sundance_remove1),
1722 };
1723
1724 static int __init sundance_init(void)
1725 {
1726 /* when a module, this is printed whether or not devices are found in probe */
1727 #ifdef MODULE
1728         printk(version);
1729 #endif
1730         return pci_register_driver(&sundance_driver);
1731 }
1732
1733 static void __exit sundance_exit(void)
1734 {
1735         pci_unregister_driver(&sundance_driver);
1736 }
1737
1738 module_init(sundance_init);
1739 module_exit(sundance_exit);
1740
1741