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

Archive Download this file



interactive