linux-bk/drivers/net/tulip/winbond-840.c
<<
>>
Prefs
   1/* winbond-840.c: A Linux PCI network adapter device driver. */
   2/*
   3        Written 1998-2001 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/drivers.html
  19
  20        Do not remove the copyright information.
  21        Do not change the version information unless an improvement has been made.
  22        Merely removing my name, as Compex has done in the past, does not count
  23        as an improvement.
  24
  25        Changelog:
  26        * ported to 2.4
  27                ???
  28        * spin lock update, memory barriers, new style dma mappings
  29                limit each tx buffer to < 1024 bytes
  30                remove DescIntr from Rx descriptors (that's an Tx flag)
  31                remove next pointer from Tx descriptors
  32                synchronize tx_q_bytes
  33                software reset in tx_timeout
  34                        Copyright (C) 2000 Manfred Spraul
  35        * further cleanups
  36                power management.
  37                support for big endian descriptors
  38                        Copyright (C) 2001 Manfred Spraul
  39        * ethtool support (jgarzik)
  40        * Replace some MII-related magic numbers with constants (jgarzik)
  41  
  42        TODO:
  43        * enable pci_power_off
  44        * Wake-On-LAN
  45*/
  46  
  47#define DRV_NAME        "winbond-840"
  48#define DRV_VERSION     "1.01-d"
  49#define DRV_RELDATE     "Nov-17-2001"
  50
  51
  52/* Automatically extracted configuration info:
  53probe-func: winbond840_probe
  54config-in: tristate 'Winbond W89c840 Ethernet support' CONFIG_WINBOND_840
  55
  56c-help-name: Winbond W89c840 PCI Ethernet support
  57c-help-symbol: CONFIG_WINBOND_840
  58c-help: This driver is for the Winbond W89c840 chip.  It also works with
  59c-help: the TX9882 chip on the Compex RL100-ATX board.
  60c-help: More specific information and updates are available from 
  61c-help: http://www.scyld.com/network/drivers.html
  62*/
  63
  64/* The user-configurable values.
  65   These may be modified when a driver module is loaded.*/
  66
  67static int debug = 1;                   /* 1 normal messages, 0 quiet .. 7 verbose. */
  68static int max_interrupt_work = 20;
  69/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
  70   The '840 uses a 64 element hash table based on the Ethernet CRC.  */
  71static int multicast_filter_limit = 32;
  72
  73/* Set the copy breakpoint for the copy-only-tiny-frames scheme.
  74   Setting to > 1518 effectively disables this feature. */
  75static int rx_copybreak;
  76
  77/* Used to pass the media type, etc.
  78   Both 'options[]' and 'full_duplex[]' should exist for driver
  79   interoperability.
  80   The media type is usually passed in 'options[]'.
  81*/
  82#define MAX_UNITS 8             /* More are supported, limit only on options */
  83static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  84static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  85
  86/* Operational parameters that are set at compile time. */
  87
  88/* Keep the ring sizes a power of two for compile efficiency.
  89   The compiler will convert <unsigned>'%'<2^N> into a bit mask.
  90   Making the Tx ring too large decreases the effectiveness of channel
  91   bonding and packet priority.
  92   There are no ill effects from too-large receive rings. */
  93#define TX_RING_SIZE    16
  94#define TX_QUEUE_LEN    10              /* Limit ring entries actually used.  */
  95#define TX_QUEUE_LEN_RESTART    5
  96#define RX_RING_SIZE    32
  97
  98#define TX_BUFLIMIT     (1024-128)
  99
 100/* The presumed FIFO size for working around the Tx-FIFO-overflow bug.
 101   To avoid overflowing we don't queue again until we have room for a
 102   full-size packet.
 103 */
 104#define TX_FIFO_SIZE (2048)
 105#define TX_BUG_FIFO_LIMIT (TX_FIFO_SIZE-1514-16)
 106
 107
 108/* Operational parameters that usually are not changed. */
 109/* Time in jiffies before concluding the transmitter is hung. */
 110#define TX_TIMEOUT  (2*HZ)
 111
 112#define PKT_BUF_SZ              1536                    /* Size of each temporary Rx buffer.*/
 113
 114#ifndef __KERNEL__
 115#define __KERNEL__
 116#endif
 117#if !defined(__OPTIMIZE__)
 118#warning  You must compile this file with the correct options!
 119#warning  See the last lines of the source file.
 120#error You must compile this driver with "-O".
 121#endif
 122
 123/* Include files, designed to support most kernel versions 2.0.0 and later. */
 124#include <linux/module.h>
 125#include <linux/kernel.h>
 126#include <linux/string.h>
 127#include <linux/timer.h>
 128#include <linux/errno.h>
 129#include <linux/ioport.h>
 130#include <linux/slab.h>
 131#include <linux/interrupt.h>
 132#include <linux/pci.h>
 133#include <linux/netdevice.h>
 134#include <linux/etherdevice.h>
 135#include <linux/skbuff.h>
 136#include <linux/init.h>
 137#include <linux/delay.h>
 138#include <linux/ethtool.h>
 139#include <linux/mii.h>
 140#include <linux/rtnetlink.h>
 141#include <linux/crc32.h>
 142#include <asm/uaccess.h>
 143#include <asm/processor.h>              /* Processor type for cache alignment. */
 144#include <asm/bitops.h>
 145#include <asm/io.h>
 146#include <asm/irq.h>
 147
 148/* These identify the driver base version and may not be removed. */
 149static char version[] __devinitdata =
 150KERN_INFO DRV_NAME ".c:v" DRV_VERSION " (2.4 port) " DRV_RELDATE "  Donald Becker <becker@scyld.com>\n"
 151KERN_INFO "  http://www.scyld.com/network/drivers.html\n";
 152
 153MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
 154MODULE_DESCRIPTION("Winbond W89c840 Ethernet driver");
 155MODULE_LICENSE("GPL");
 156
 157MODULE_PARM(max_interrupt_work, "i");
 158MODULE_PARM(debug, "i");
 159MODULE_PARM(rx_copybreak, "i");
 160MODULE_PARM(multicast_filter_limit, "i");
 161MODULE_PARM(options, "1-" __MODULE_STRING(MAX_UNITS) "i");
 162MODULE_PARM(full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i");
 163MODULE_PARM_DESC(max_interrupt_work, "winbond-840 maximum events handled per interrupt");
 164MODULE_PARM_DESC(debug, "winbond-840 debug level (0-6)");
 165MODULE_PARM_DESC(rx_copybreak, "winbond-840 copy breakpoint for copy-only-tiny-frames");
 166MODULE_PARM_DESC(multicast_filter_limit, "winbond-840 maximum number of filtered multicast addresses");
 167MODULE_PARM_DESC(options, "winbond-840: Bits 0-3: media type, bit 17: full duplex");
 168MODULE_PARM_DESC(full_duplex, "winbond-840 full duplex setting(s) (1)");
 169
 170/*
 171                                Theory of Operation
 172
 173I. Board Compatibility
 174
 175This driver is for the Winbond w89c840 chip.
 176
 177II. Board-specific settings
 178
 179None.
 180
 181III. Driver operation
 182
 183This chip is very similar to the Digital 21*4* "Tulip" family.  The first
 184twelve registers and the descriptor format are nearly identical.  Read a
 185Tulip manual for operational details.
 186
 187A significant difference is that the multicast filter and station address are
 188stored in registers rather than loaded through a pseudo-transmit packet.
 189
 190Unlike the Tulip, transmit buffers are limited to 1KB.  To transmit a
 191full-sized packet we must use both data buffers in a descriptor.  Thus the
 192driver uses ring mode where descriptors are implicitly sequential in memory,
 193rather than using the second descriptor address as a chain pointer to
 194subsequent descriptors.
 195
 196IV. Notes
 197
 198If you are going to almost clone a Tulip, why not go all the way and avoid
 199the need for a new driver?
 200
 201IVb. References
 202
 203http://www.scyld.com/expert/100mbps.html
 204http://www.scyld.com/expert/NWay.html
 205http://www.winbond.com.tw/
 206
 207IVc. Errata
 208
 209A horrible bug exists in the transmit FIFO.  Apparently the chip doesn't
 210correctly detect a full FIFO, and queuing more than 2048 bytes may result in
 211silent data corruption.
 212
 213Test with 'ping -s 10000' on a fast computer.
 214
 215*/
 216
 217
 218
 219/*
 220  PCI probe table.
 221*/
 222enum pci_id_flags_bits {
 223        /* Set PCI command register bits before calling probe1(). */
 224        PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
 225        /* Read and map the single following PCI BAR. */
 226        PCI_ADDR0=0<<4, PCI_ADDR1=1<<4, PCI_ADDR2=2<<4, PCI_ADDR3=3<<4,
 227        PCI_ADDR_64BITS=0x100, PCI_NO_ACPI_WAKE=0x200, PCI_NO_MIN_LATENCY=0x400,
 228};
 229enum chip_capability_flags {
 230        CanHaveMII=1, HasBrokenTx=2, AlwaysFDX=4, FDXOnNoMII=8,};
 231#ifdef USE_IO_OPS
 232#define W840_FLAGS (PCI_USES_IO | PCI_ADDR0 | PCI_USES_MASTER)
 233#else
 234#define W840_FLAGS (PCI_USES_MEM | PCI_ADDR1 | PCI_USES_MASTER)
 235#endif
 236
 237static struct pci_device_id w840_pci_tbl[] = {
 238        { 0x1050, 0x0840, PCI_ANY_ID, 0x8153,     0, 0, 0 },
 239        { 0x1050, 0x0840, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 240        { 0x11f6, 0x2011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
 241        { 0, }
 242};
 243MODULE_DEVICE_TABLE(pci, w840_pci_tbl);
 244
 245struct pci_id_info {
 246        const char *name;
 247        struct match_info {
 248                int     pci, pci_mask, subsystem, subsystem_mask;
 249                int revision, revision_mask;                            /* Only 8 bits. */
 250        } id;
 251        enum pci_id_flags_bits pci_flags;
 252        int io_size;                            /* Needed for I/O region check or ioremap(). */
 253        int drv_flags;                          /* Driver use, intended as capability flags. */
 254};
 255static struct pci_id_info pci_id_tbl[] = {
 256        {"Winbond W89c840",                     /* Sometime a Level-One switch card. */
 257         { 0x08401050, 0xffffffff, 0x81530000, 0xffff0000 },
 258         W840_FLAGS, 128, CanHaveMII | HasBrokenTx | FDXOnNoMII},
 259        {"Winbond W89c840", { 0x08401050, 0xffffffff, },
 260         W840_FLAGS, 128, CanHaveMII | HasBrokenTx},
 261        {"Compex RL100-ATX", { 0x201111F6, 0xffffffff,},
 262         W840_FLAGS, 128, CanHaveMII | HasBrokenTx},
 263        {0,},                                           /* 0 terminated list. */
 264};
 265
 266/* This driver was written to use PCI memory space, however some x86 systems
 267   work only with I/O space accesses.  Pass -DUSE_IO_OPS to use PCI I/O space
 268   accesses instead of memory space. */
 269
 270#ifdef USE_IO_OPS
 271#undef readb
 272#undef readw
 273#undef readl
 274#undef writeb
 275#undef writew
 276#undef writel
 277#define readb inb
 278#define readw inw
 279#define readl inl
 280#define writeb outb
 281#define writew outw
 282#define writel outl
 283#endif
 284
 285/* Offsets to the Command and Status Registers, "CSRs".
 286   While similar to the Tulip, these registers are longword aligned.
 287   Note: It's not useful to define symbolic names for every register bit in
 288   the device.  The name can only partially document the semantics and make
 289   the driver longer and more difficult to read.
 290*/
 291enum w840_offsets {
 292        PCIBusCfg=0x00, TxStartDemand=0x04, RxStartDemand=0x08,
 293        RxRingPtr=0x0C, TxRingPtr=0x10,
 294        IntrStatus=0x14, NetworkConfig=0x18, IntrEnable=0x1C,
 295        RxMissed=0x20, EECtrl=0x24, MIICtrl=0x24, BootRom=0x28, GPTimer=0x2C,
 296        CurRxDescAddr=0x30, CurRxBufAddr=0x34,                  /* Debug use */
 297        MulticastFilter0=0x38, MulticastFilter1=0x3C, StationAddr=0x40,
 298        CurTxDescAddr=0x4C, CurTxBufAddr=0x50,
 299};
 300
 301/* Bits in the interrupt status/enable registers. */
 302/* The bits in the Intr Status/Enable registers, mostly interrupt sources. */
 303enum intr_status_bits {
 304        NormalIntr=0x10000, AbnormalIntr=0x8000,
 305        IntrPCIErr=0x2000, TimerInt=0x800,
 306        IntrRxDied=0x100, RxNoBuf=0x80, IntrRxDone=0x40,
 307        TxFIFOUnderflow=0x20, RxErrIntr=0x10,
 308        TxIdle=0x04, IntrTxStopped=0x02, IntrTxDone=0x01,
 309};
 310
 311/* Bits in the NetworkConfig register. */
 312enum rx_mode_bits {
 313        AcceptErr=0x80, AcceptRunt=0x40,
 314        AcceptBroadcast=0x20, AcceptMulticast=0x10,
 315        AcceptAllPhys=0x08, AcceptMyPhys=0x02,
 316};
 317
 318enum mii_reg_bits {
 319        MDIO_ShiftClk=0x10000, MDIO_DataIn=0x80000, MDIO_DataOut=0x20000,
 320        MDIO_EnbOutput=0x40000, MDIO_EnbIn = 0x00000,
 321};
 322
 323/* The Tulip Rx and Tx buffer descriptors. */
 324struct w840_rx_desc {
 325        s32 status;
 326        s32 length;
 327        u32 buffer1;
 328        u32 buffer2;
 329};
 330
 331struct w840_tx_desc {
 332        s32 status;
 333        s32 length;
 334        u32 buffer1, buffer2;
 335};
 336
 337/* Bits in network_desc.status */
 338enum desc_status_bits {
 339        DescOwn=0x80000000, DescEndRing=0x02000000, DescUseLink=0x01000000,
 340        DescWholePkt=0x60000000, DescStartPkt=0x20000000, DescEndPkt=0x40000000,
 341        DescIntr=0x80000000,
 342};
 343
 344#define MII_CNT         1 /* winbond only supports one MII */
 345struct netdev_private {
 346        struct w840_rx_desc *rx_ring;
 347        dma_addr_t      rx_addr[RX_RING_SIZE];
 348        struct w840_tx_desc *tx_ring;
 349        dma_addr_t      tx_addr[TX_RING_SIZE];
 350        dma_addr_t ring_dma_addr;
 351        /* The addresses of receive-in-place skbuffs. */
 352        struct sk_buff* rx_skbuff[RX_RING_SIZE];
 353        /* The saved address of a sent-in-place packet/buffer, for later free(). */
 354        struct sk_buff* tx_skbuff[TX_RING_SIZE];
 355        struct net_device_stats stats;
 356        struct timer_list timer;        /* Media monitoring timer. */
 357        /* Frequently used values: keep some adjacent for cache effect. */
 358        spinlock_t lock;
 359        int chip_id, drv_flags;
 360        struct pci_dev *pci_dev;
 361        int csr6;
 362        struct w840_rx_desc *rx_head_desc;
 363        unsigned int cur_rx, dirty_rx;          /* Producer/consumer ring indices */
 364        unsigned int rx_buf_sz;                         /* Based on MTU+slack. */
 365        unsigned int cur_tx, dirty_tx;
 366        unsigned int tx_q_bytes;
 367        unsigned int tx_full;                           /* The Tx queue is full. */
 368        /* MII transceiver section. */
 369        int mii_cnt;                                            /* MII device addresses. */
 370        unsigned char phys[MII_CNT];            /* MII device addresses, but only the first is used */
 371        u32 mii;
 372        struct mii_if_info mii_if;
 373};
 374
 375static int  eeprom_read(long ioaddr, int location);
 376static int  mdio_read(struct net_device *dev, int phy_id, int location);
 377static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
 378static int  netdev_open(struct net_device *dev);
 379static int  update_link(struct net_device *dev);
 380static void netdev_timer(unsigned long data);
 381static void init_rxtx_rings(struct net_device *dev);
 382static void free_rxtx_rings(struct netdev_private *np);
 383static void init_registers(struct net_device *dev);
 384static void tx_timeout(struct net_device *dev);
 385static int alloc_ringdesc(struct net_device *dev);
 386static void free_ringdesc(struct netdev_private *np);
 387static int  start_tx(struct sk_buff *skb, struct net_device *dev);
 388static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *regs);
 389static void netdev_error(struct net_device *dev, int intr_status);
 390static int  netdev_rx(struct net_device *dev);
 391static u32 __set_rx_mode(struct net_device *dev);
 392static void set_rx_mode(struct net_device *dev);
 393static struct net_device_stats *get_stats(struct net_device *dev);
 394static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 395static struct ethtool_ops netdev_ethtool_ops;
 396static int  netdev_close(struct net_device *dev);
 397
 398
 399
 400static int __devinit w840_probe1 (struct pci_dev *pdev,
 401                                  const struct pci_device_id *ent)
 402{
 403        struct net_device *dev;
 404        struct netdev_private *np;
 405        static int find_cnt;
 406        int chip_idx = ent->driver_data;
 407        int irq;
 408        int i, option = find_cnt < MAX_UNITS ? options[find_cnt] : 0;
 409        long ioaddr;
 410
 411        i = pci_enable_device(pdev);
 412        if (i) return i;
 413
 414        pci_set_master(pdev);
 415
 416        irq = pdev->irq;
 417
 418        if (pci_set_dma_mask(pdev,0xFFFFffff)) {
 419                printk(KERN_WARNING "Winbond-840: Device %s disabled due to DMA limitations.\n",
 420                       pci_name(pdev));
 421                return -EIO;
 422        }
 423        dev = alloc_etherdev(sizeof(*np));
 424        if (!dev)
 425                return -ENOMEM;
 426        SET_MODULE_OWNER(dev);
 427        SET_NETDEV_DEV(dev, &pdev->dev);
 428
 429        if (pci_request_regions(pdev, DRV_NAME))
 430                goto err_out_netdev;
 431
 432#ifdef USE_IO_OPS
 433        ioaddr = pci_resource_start(pdev, 0);
 434#else
 435        ioaddr = pci_resource_start(pdev, 1);
 436        ioaddr = (long) ioremap (ioaddr, pci_id_tbl[chip_idx].io_size);
 437        if (!ioaddr)
 438                goto err_out_free_res;
 439#endif
 440
 441        for (i = 0; i < 3; i++)
 442                ((u16 *)dev->dev_addr)[i] = le16_to_cpu(eeprom_read(ioaddr, i));
 443
 444        /* Reset the chip to erase previous misconfiguration.
 445           No hold time required! */
 446        writel(0x00000001, ioaddr + PCIBusCfg);
 447
 448        dev->base_addr = ioaddr;
 449        dev->irq = irq;
 450
 451        np = dev->priv;
 452        np->pci_dev = pdev;
 453        np->chip_id = chip_idx;
 454        np->drv_flags = pci_id_tbl[chip_idx].drv_flags;
 455        spin_lock_init(&np->lock);
 456        np->mii_if.dev = dev;
 457        np->mii_if.mdio_read = mdio_read;
 458        np->mii_if.mdio_write = mdio_write;
 459        
 460        pci_set_drvdata(pdev, dev);
 461
 462        if (dev->mem_start)
 463                option = dev->mem_start;
 464
 465        /* The lower four bits are the media type. */
 466        if (option > 0) {
 467                if (option & 0x200)
 468                        np->mii_if.full_duplex = 1;
 469                if (option & 15)
 470                        printk(KERN_INFO "%s: ignoring user supplied media type %d",
 471                                dev->name, option & 15);
 472        }
 473        if (find_cnt < MAX_UNITS  &&  full_duplex[find_cnt] > 0)
 474                np->mii_if.full_duplex = 1;
 475
 476        if (np->mii_if.full_duplex)
 477                np->mii_if.force_media = 1;
 478
 479        /* The chip-specific entries in the device structure. */
 480        dev->open = &netdev_open;
 481        dev->hard_start_xmit = &start_tx;
 482        dev->stop = &netdev_close;
 483        dev->get_stats = &get_stats;
 484        dev->set_multicast_list = &set_rx_mode;
 485        dev->do_ioctl = &netdev_ioctl;
 486        dev->ethtool_ops = &netdev_ethtool_ops;
 487        dev->tx_timeout = &tx_timeout;
 488        dev->watchdog_timeo = TX_TIMEOUT;
 489
 490        i = register_netdev(dev);
 491        if (i)
 492                goto err_out_cleardev;
 493
 494        printk(KERN_INFO "%s: %s at 0x%lx, ",
 495                   dev->name, pci_id_tbl[chip_idx].name, ioaddr);
 496        for (i = 0; i < 5; i++)
 497                        printk("%2.2x:", dev->dev_addr[i]);
 498        printk("%2.2x, IRQ %d.\n", dev->dev_addr[i], irq);
 499
 500        if (np->drv_flags & CanHaveMII) {
 501                int phy, phy_idx = 0;
 502                for (phy = 1; phy < 32 && phy_idx < MII_CNT; phy++) {
 503                        int mii_status = mdio_read(dev, phy, MII_BMSR);
 504                        if (mii_status != 0xffff  &&  mii_status != 0x0000) {
 505                                np->phys[phy_idx++] = phy;
 506                                np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE);
 507                                np->mii = (mdio_read(dev, phy, MII_PHYSID1) << 16)+
 508                                                mdio_read(dev, phy, MII_PHYSID2);
 509                                printk(KERN_INFO "%s: MII PHY %8.8xh found at address %d, status "
 510                                           "0x%4.4x advertising %4.4x.\n",
 511                                           dev->name, np->mii, phy, mii_status, np->mii_if.advertising);
 512                        }
 513                }
 514                np->mii_cnt = phy_idx;
 515                np->mii_if.phy_id = np->phys[0];
 516                if (phy_idx == 0) {
 517                                printk(KERN_WARNING "%s: MII PHY not found -- this device may "
 518                                           "not operate correctly.\n", dev->name);
 519                }
 520        }
 521
 522        find_cnt++;
 523        return 0;
 524
 525err_out_cleardev:
 526        pci_set_drvdata(pdev, NULL);
 527#ifndef USE_IO_OPS
 528        iounmap((void *)ioaddr);
 529err_out_free_res:
 530#endif
 531        pci_release_regions(pdev);
 532err_out_netdev:
 533        kfree (dev);
 534        return -ENODEV;
 535}
 536
 537
 538/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces.  These are
 539   often serial bit streams generated by the host processor.
 540   The example below is for the common 93c46 EEPROM, 64 16 bit words. */
 541
 542/* Delay between EEPROM clock transitions.
 543   No extra delay is needed with 33Mhz PCI, but future 66Mhz access may need
 544   a delay.  Note that pre-2.0.34 kernels had a cache-alignment bug that
 545   made udelay() unreliable.
 546   The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is
 547   depricated.
 548*/
 549#define eeprom_delay(ee_addr)   readl(ee_addr)
 550
 551enum EEPROM_Ctrl_Bits {
 552        EE_ShiftClk=0x02, EE_Write0=0x801, EE_Write1=0x805,
 553        EE_ChipSelect=0x801, EE_DataIn=0x08,
 554};
 555
 556/* The EEPROM commands include the alway-set leading bit. */
 557enum EEPROM_Cmds {
 558        EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6),
 559};
 560
 561static int eeprom_read(long addr, int location)
 562{
 563        int i;
 564        int retval = 0;
 565        long ee_addr = addr + EECtrl;
 566        int read_cmd = location | EE_ReadCmd;
 567        writel(EE_ChipSelect, ee_addr);
 568
 569        /* Shift the read command bits out. */
 570        for (i = 10; i >= 0; i--) {
 571                short dataval = (read_cmd & (1 << i)) ? EE_Write1 : EE_Write0;
 572                writel(dataval, ee_addr);
 573                eeprom_delay(ee_addr);
 574                writel(dataval | EE_ShiftClk, ee_addr);
 575                eeprom_delay(ee_addr);
 576        }
 577        writel(EE_ChipSelect, ee_addr);
 578        eeprom_delay(ee_addr);
 579
 580        for (i = 16; i > 0; i--) {
 581                writel(EE_ChipSelect | EE_ShiftClk, ee_addr);
 582                eeprom_delay(ee_addr);
 583                retval = (retval << 1) | ((readl(ee_addr) & EE_DataIn) ? 1 : 0);
 584                writel(EE_ChipSelect, ee_addr);
 585                eeprom_delay(ee_addr);
 586        }
 587
 588        /* Terminate the EEPROM access. */
 589        writel(0, ee_addr);
 590        return retval;
 591}
 592
 593/*  MII transceiver control section.
 594        Read and write the MII registers using software-generated serial
 595        MDIO protocol.  See the MII specifications or DP83840A data sheet
 596        for details.
 597
 598        The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
 599        met by back-to-back 33Mhz PCI cycles. */
 600#define mdio_delay(mdio_addr) readl(mdio_addr)
 601
 602/* Set iff a MII transceiver on any interface requires mdio preamble.
 603   This only set with older transceivers, so the extra
 604   code size of a per-interface flag is not worthwhile. */
 605static char mii_preamble_required = 1;
 606
 607#define MDIO_WRITE0 (MDIO_EnbOutput)
 608#define MDIO_WRITE1 (MDIO_DataOut | MDIO_EnbOutput)
 609
 610/* Generate the preamble required for initial synchronization and
 611   a few older transceivers. */
 612static void mdio_sync(long mdio_addr)
 613{
 614        int bits = 32;
 615
 616        /* Establish sync by sending at least 32 logic ones. */
 617        while (--bits >= 0) {
 618                writel(MDIO_WRITE1, mdio_addr);
 619                mdio_delay(mdio_addr);
 620                writel(MDIO_WRITE1 | MDIO_ShiftClk, mdio_addr);
 621                mdio_delay(mdio_addr);
 622        }
 623}
 624
 625static int mdio_read(struct net_device *dev, int phy_id, int location)
 626{
 627        long mdio_addr = dev->base_addr + MIICtrl;
 628        int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
 629        int i, retval = 0;
 630
 631        if (mii_preamble_required)
 632                mdio_sync(mdio_addr);
 633
 634        /* Shift the read command bits out. */
 635        for (i = 15; i >= 0; i--) {
 636                int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
 637
 638                writel(dataval, mdio_addr);
 639                mdio_delay(mdio_addr);
 640                writel(dataval | MDIO_ShiftClk, mdio_addr);
 641                mdio_delay(mdio_addr);
 642        }
 643        /* Read the two transition, 16 data, and wire-idle bits. */
 644        for (i = 20; i > 0; i--) {
 645                writel(MDIO_EnbIn, mdio_addr);
 646                mdio_delay(mdio_addr);
 647                retval = (retval << 1) | ((readl(mdio_addr) & MDIO_DataIn) ? 1 : 0);
 648                writel(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
 649                mdio_delay(mdio_addr);
 650        }
 651        return (retval>>1) & 0xffff;
 652}
 653
 654static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
 655{
 656        struct netdev_private *np = dev->priv;
 657        long mdio_addr = dev->base_addr + MIICtrl;
 658        int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value;
 659        int i;
 660
 661        if (location == 4  &&  phy_id == np->phys[0])
 662                np->mii_if.advertising = value;
 663
 664        if (mii_preamble_required)
 665                mdio_sync(mdio_addr);
 666
 667        /* Shift the command bits out. */
 668        for (i = 31; i >= 0; i--) {
 669                int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
 670
 671                writel(dataval, mdio_addr);
 672                mdio_delay(mdio_addr);
 673                writel(dataval | MDIO_ShiftClk, mdio_addr);
 674                mdio_delay(mdio_addr);
 675        }
 676        /* Clear out extra bits. */
 677        for (i = 2; i > 0; i--) {
 678                writel(MDIO_EnbIn, mdio_addr);
 679                mdio_delay(mdio_addr);
 680                writel(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
 681                mdio_delay(mdio_addr);
 682        }
 683        return;
 684}
 685
 686
 687static int netdev_open(struct net_device *dev)
 688{
 689        struct netdev_private *np = dev->priv;
 690        long ioaddr = dev->base_addr;
 691        int i;
 692
 693        writel(0x00000001, ioaddr + PCIBusCfg);         /* Reset */
 694
 695        netif_device_detach(dev);
 696        i = request_irq(dev->irq, &intr_handler, SA_SHIRQ, dev->name, dev);
 697        if (i)
 698                goto out_err;
 699
 700        if (debug > 1)
 701                printk(KERN_DEBUG "%s: w89c840_open() irq %d.\n",
 702                           dev->name, dev->irq);
 703
 704        if((i=alloc_ringdesc(dev)))
 705                goto out_err;
 706
 707        spin_lock_irq(&np->lock);
 708        netif_device_attach(dev);
 709        init_registers(dev);
 710        spin_unlock_irq(&np->lock);
 711
 712        netif_start_queue(dev);
 713        if (debug > 2)
 714                printk(KERN_DEBUG "%s: Done netdev_open().\n", dev->name);
 715
 716        /* Set the timer to check for link beat. */
 717        init_timer(&np->timer);
 718        np->timer.expires = jiffies + 1*HZ;
 719        np->timer.data = (unsigned long)dev;
 720        np->timer.function = &netdev_timer;                             /* timer handler */
 721        add_timer(&np->timer);
 722        return 0;
 723out_err:
 724        netif_device_attach(dev);
 725        return i;
 726}
 727
 728#define MII_DAVICOM_DM9101      0x0181b800
 729
 730static int update_link(struct net_device *dev)
 731{
 732        struct netdev_private *np = dev->priv;
 733        int duplex, fasteth, result, mii_reg;
 734
 735        /* BSMR */
 736        mii_reg = mdio_read(dev, np->phys[0], MII_BMSR);
 737
 738        if (mii_reg == 0xffff)
 739                return np->csr6;
 740        /* reread: the link status bit is sticky */
 741        mii_reg = mdio_read(dev, np->phys[0], MII_BMSR);
 742        if (!(mii_reg & 0x4)) {
 743                if (netif_carrier_ok(dev)) {
 744                        if (debug)
 745                                printk(KERN_INFO "%s: MII #%d reports no link. Disabling watchdog.\n",
 746                                        dev->name, np->phys[0]);
 747                        netif_carrier_off(dev);
 748                }
 749                return np->csr6;
 750        }
 751        if (!netif_carrier_ok(dev)) {
 752                if (debug)
 753                        printk(KERN_INFO "%s: MII #%d link is back. Enabling watchdog.\n",
 754                                dev->name, np->phys[0]);
 755                netif_carrier_on(dev);
 756        }
 757        
 758        if ((np->mii & ~0xf) == MII_DAVICOM_DM9101) {
 759                /* If the link partner doesn't support autonegotiation
 760                 * the MII detects it's abilities with the "parallel detection".
 761                 * Some MIIs update the LPA register to the result of the parallel
 762                 * detection, some don't.
 763                 * The Davicom PHY [at least 0181b800] doesn't.
 764                 * Instead bit 9 and 13 of the BMCR are updated to the result
 765                 * of the negotiation..
 766                 */
 767                mii_reg = mdio_read(dev, np->phys[0], MII_BMCR);
 768                duplex = mii_reg & BMCR_FULLDPLX;
 769                fasteth = mii_reg & BMCR_SPEED100;
 770        } else {
 771                int negotiated;
 772                mii_reg = mdio_read(dev, np->phys[0], MII_LPA);
 773                negotiated = mii_reg & np->mii_if.advertising;
 774
 775                duplex = (negotiated & LPA_100FULL) || ((negotiated & 0x02C0) == LPA_10FULL);
 776                fasteth = negotiated & 0x380;
 777        }
 778        duplex |= np->mii_if.force_media;
 779        /* remove fastether and fullduplex */
 780        result = np->csr6 & ~0x20000200;
 781        if (duplex)
 782                result |= 0x200;
 783        if (fasteth)
 784                result |= 0x20000000;
 785        if (result != np->csr6 && debug)
 786                printk(KERN_INFO "%s: Setting %dMBit-%s-duplex based on MII#%d\n",
 787                                 dev->name, fasteth ? 100 : 10, 
 788                                duplex ? "full" : "half", np->phys[0]);
 789        return result;
 790}
 791
 792#define RXTX_TIMEOUT    2000
 793static inline void update_csr6(struct net_device *dev, int new)
 794{
 795        struct netdev_private *np = dev->priv;
 796        long ioaddr = dev->base_addr;
 797        int limit = RXTX_TIMEOUT;
 798
 799        if (!netif_device_present(dev))
 800                new = 0;
 801        if (new==np->csr6)
 802                return;
 803        /* stop both Tx and Rx processes */
 804        writel(np->csr6 & ~0x2002, ioaddr + NetworkConfig);
 805        /* wait until they have really stopped */
 806        for (;;) {
 807                int csr5 = readl(ioaddr + IntrStatus);
 808                int t;
 809
 810                t = (csr5 >> 17) & 0x07;
 811                if (t==0||t==1) {
 812                        /* rx stopped */
 813                        t = (csr5 >> 20) & 0x07;
 814                        if (t==0||t==1)
 815                                break;
 816                }
 817
 818                limit--;
 819                if(!limit) {
 820                        printk(KERN_INFO "%s: couldn't stop rxtx, IntrStatus %xh.\n",
 821                                        dev->name, csr5);
 822                        break;
 823                }
 824                udelay(1);
 825        }
 826        np->csr6 = new;
 827        /* and restart them with the new configuration */
 828        writel(np->csr6, ioaddr + NetworkConfig);
 829        if (new & 0x200)
 830                np->mii_if.full_duplex = 1;
 831}
 832
 833static void netdev_timer(unsigned long data)
 834{
 835        struct net_device *dev = (struct net_device *)data;
 836        struct netdev_private *np = dev->priv;
 837        long ioaddr = dev->base_addr;
 838
 839        if (debug > 2)
 840                printk(KERN_DEBUG "%s: Media selection timer tick, status %8.8x "
 841                           "config %8.8x.\n",
 842                           dev->name, (int)readl(ioaddr + IntrStatus),
 843                           (int)readl(ioaddr + NetworkConfig));
 844        spin_lock_irq(&np->lock);
 845        update_csr6(dev, update_link(dev));
 846        spin_unlock_irq(&np->lock);
 847        np->timer.expires = jiffies + 10*HZ;
 848        add_timer(&np->timer);
 849}
 850
 851static void init_rxtx_rings(struct net_device *dev)
 852{
 853        struct netdev_private *np = dev->priv;
 854        int i;
 855
 856        np->rx_head_desc = &np->rx_ring[0];
 857        np->tx_ring = (struct w840_tx_desc*)&np->rx_ring[RX_RING_SIZE];
 858
 859        /* Initial all Rx descriptors. */
 860        for (i = 0; i < RX_RING_SIZE; i++) {
 861                np->rx_ring[i].length = np->rx_buf_sz;
 862                np->rx_ring[i].status = 0;
 863                np->rx_skbuff[i] = 0;
 864        }
 865        /* Mark the last entry as wrapping the ring. */
 866        np->rx_ring[i-1].length |= DescEndRing;
 867
 868        /* Fill in the Rx buffers.  Handle allocation failure gracefully. */
 869        for (i = 0; i < RX_RING_SIZE; i++) {
 870                struct sk_buff *skb = dev_alloc_skb(np->rx_buf_sz);
 871                np->rx_skbuff[i] = skb;
 872                if (skb == NULL)
 873                        break;
 874                skb->dev = dev;                 /* Mark as being used by this device. */
 875                np->rx_addr[i] = pci_map_single(np->pci_dev,skb->tail,
 876                                        skb->len,PCI_DMA_FROMDEVICE);
 877
 878                np->rx_ring[i].buffer1 = np->rx_addr[i];
 879                np->rx_ring[i].status = DescOwn;
 880        }
 881
 882        np->cur_rx = 0;
 883        np->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
 884
 885        /* Initialize the Tx descriptors */
 886        for (i = 0; i < TX_RING_SIZE; i++) {
 887                np->tx_skbuff[i] = 0;
 888                np->tx_ring[i].status = 0;
 889        }
 890        np->tx_full = 0;
 891        np->tx_q_bytes = np->dirty_tx = np->cur_tx = 0;
 892
 893        writel(np->ring_dma_addr, dev->base_addr + RxRingPtr);
 894        writel(np->ring_dma_addr+sizeof(struct w840_rx_desc)*RX_RING_SIZE,
 895                dev->base_addr + TxRingPtr);
 896
 897}
 898
 899static void free_rxtx_rings(struct netdev_private* np)
 900{
 901        int i;
 902        /* Free all the skbuffs in the Rx queue. */
 903        for (i = 0; i < RX_RING_SIZE; i++) {
 904                np->rx_ring[i].status = 0;
 905                if (np->rx_skbuff[i]) {
 906                        pci_unmap_single(np->pci_dev,
 907                                                np->rx_addr[i],
 908                                                np->rx_skbuff[i]->len,
 909                                                PCI_DMA_FROMDEVICE);
 910                        dev_kfree_skb(np->rx_skbuff[i]);
 911                }
 912                np->rx_skbuff[i] = 0;
 913        }
 914        for (i = 0; i < TX_RING_SIZE; i++) {
 915                if (np->tx_skbuff[i]) {
 916                        pci_unmap_single(np->pci_dev,
 917                                                np->tx_addr[i],
 918                                                np->tx_skbuff[i]->len,
 919                                                PCI_DMA_TODEVICE);
 920                        dev_kfree_skb(np->tx_skbuff[i]);
 921                }
 922                np->tx_skbuff[i] = 0;
 923        }
 924}
 925
 926static void init_registers(struct net_device *dev)
 927{
 928        struct netdev_private *np = dev->priv;
 929        long ioaddr = dev->base_addr;
 930        int i;
 931
 932        for (i = 0; i < 6; i++)
 933                writeb(dev->dev_addr[i], ioaddr + StationAddr + i);
 934
 935        /* Initialize other registers. */
 936#ifdef __BIG_ENDIAN
 937        i = (1<<20);    /* Big-endian descriptors */
 938#else
 939        i = 0;
 940#endif
 941        i |= (0x04<<2);         /* skip length 4 u32 */
 942        i |= 0x02;              /* give Rx priority */
 943
 944        /* Configure the PCI bus bursts and FIFO thresholds.
 945           486: Set 8 longword cache alignment, 8 longword burst.
 946           586: Set 16 longword cache alignment, no burst limit.
 947           Cache alignment bits 15:14        Burst length 13:8
 948                0000    <not allowed>           0000 align to cache     0800 8 longwords
 949                4000    8  longwords            0100 1 longword         1000 16 longwords
 950                8000    16 longwords            0200 2 longwords        2000 32 longwords
 951                C000    32  longwords           0400 4 longwords */
 952
 953#if defined (__i386__) && !defined(MODULE)
 954        /* When not a module we can work around broken '486 PCI boards. */
 955        if (boot_cpu_data.x86 <= 4) {
 956                i |= 0x4800;
 957                printk(KERN_INFO "%s: This is a 386/486 PCI system, setting cache "
 958                           "alignment to 8 longwords.\n", dev->name);
 959        } else {
 960                i |= 0xE000;
 961        }
 962#elif defined(__powerpc__) || defined(__i386__) || defined(__alpha__) || defined(__ia64__) || defined(__x86_64__)
 963        i |= 0xE000;
 964#elif defined(__sparc__)
 965        i |= 0x4800;
 966#else
 967#warning Processor architecture undefined
 968        i |= 0x4800;
 969#endif
 970        writel(i, ioaddr + PCIBusCfg);
 971
 972        np->csr6 = 0;
 973        /* 128 byte Tx threshold; 
 974                Transmit on; Receive on; */
 975        update_csr6(dev, 0x00022002 | update_link(dev) | __set_rx_mode(dev));
 976
 977        /* Clear and Enable interrupts by setting the interrupt mask. */
 978        writel(0x1A0F5, ioaddr + IntrStatus);
 979        writel(0x1A0F5, ioaddr + IntrEnable);
 980
 981        writel(0, ioaddr + RxStartDemand);
 982}
 983
 984static void tx_timeout(struct net_device *dev)
 985{
 986        struct netdev_private *np = dev->priv;
 987        long ioaddr = dev->base_addr;
 988
 989        printk(KERN_WARNING "%s: Transmit timed out, status %8.8x,"
 990                   " resetting...\n", dev->name, (int)readl(ioaddr + IntrStatus));
 991
 992        {
 993                int i;
 994                printk(KERN_DEBUG "  Rx ring %p: ", np->rx_ring);
 995                for (i = 0; i < RX_RING_SIZE; i++)
 996                        printk(" %8.8x", (unsigned int)np->rx_ring[i].status);
 997                printk("\n"KERN_DEBUG"  Tx ring %p: ", np->tx_ring);
 998                for (i = 0; i < TX_RING_SIZE; i++)
 999                        printk(" %8.8x", np->tx_ring[i].status);
1000                printk("\n");
1001        }
1002        printk(KERN_DEBUG "Tx cur %d Tx dirty %d Tx Full %d, q bytes %d.\n",
1003                                np->cur_tx, np->dirty_tx, np->tx_full, np->tx_q_bytes);
1004        printk(KERN_DEBUG "Tx Descriptor addr %xh.\n",readl(ioaddr+0x4C));
1005
1006        disable_irq(dev->irq);
1007        spin_lock_irq(&np->lock);
1008        /*
1009         * Under high load dirty_tx and the internal tx descriptor pointer
1010         * come out of sync, thus perform a software reset and reinitialize
1011         * everything.
1012         */
1013
1014        writel(1, dev->base_addr+PCIBusCfg);
1015        udelay(1);
1016
1017        free_rxtx_rings(np);
1018        init_rxtx_rings(dev);
1019        init_registers(dev);
1020        spin_unlock_irq(&np->lock);
1021        enable_irq(dev->irq);
1022
1023        netif_wake_queue(dev);
1024        dev->trans_start = jiffies;
1025        np->stats.tx_errors++;
1026        return;
1027}
1028
1029/* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1030static int alloc_ringdesc(struct net_device *dev)
1031{
1032        struct netdev_private *np = dev->priv;
1033
1034        np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1035
1036        np->rx_ring = pci_alloc_consistent(np->pci_dev,
1037                        sizeof(struct w840_rx_desc)*RX_RING_SIZE +
1038                        sizeof(struct w840_tx_desc)*TX_RING_SIZE,
1039                        &np->ring_dma_addr);
1040        if(!np->rx_ring)
1041                return -ENOMEM;
1042        init_rxtx_rings(dev);
1043        return 0;
1044}
1045
1046static void free_ringdesc(struct netdev_private *np)
1047{
1048        pci_free_consistent(np->pci_dev,
1049                        sizeof(struct w840_rx_desc)*RX_RING_SIZE +
1050                        sizeof(struct w840_tx_desc)*TX_RING_SIZE,
1051                        np->rx_ring, np->ring_dma_addr);
1052
1053}
1054
1055static int start_tx(struct sk_buff *skb, struct net_device *dev)
1056{
1057        struct netdev_private *np = dev->priv;
1058        unsigned entry;
1059
1060        /* Caution: the write order is important here, set the field
1061           with the "ownership" bits last. */
1062
1063        /* Calculate the next Tx descriptor entry. */
1064        entry = np->cur_tx % TX_RING_SIZE;
1065
1066        np->tx_addr[entry] = pci_map_single(np->pci_dev,
1067                                skb->data,skb->len, PCI_DMA_TODEVICE);
1068        np->tx_skbuff[entry] = skb;
1069
1070        np->tx_ring[entry].buffer1 = np->tx_addr[entry];
1071        if (skb->len < TX_BUFLIMIT) {
1072                np->tx_ring[entry].length = DescWholePkt | skb->len;
1073        } else {
1074                int len = skb->len - TX_BUFLIMIT;
1075
1076                np->tx_ring[entry].buffer2 = np->tx_addr[entry]+TX_BUFLIMIT;
1077                np->tx_ring[entry].length = DescWholePkt | (len << 11) | TX_BUFLIMIT;
1078        }
1079        if(entry == TX_RING_SIZE-1)
1080                np->tx_ring[entry].length |= DescEndRing;
1081
1082        /* Now acquire the irq spinlock.
1083         * The difficult race is the the ordering between
1084         * increasing np->cur_tx and setting DescOwn:
1085         * - if np->cur_tx is increased first the interrupt
1086         *   handler could consider the packet as transmitted
1087         *   since DescOwn is cleared.
1088         * - If DescOwn is set first the NIC could report the
1089         *   packet as sent, but the interrupt handler would ignore it
1090         *   since the np->cur_tx was not yet increased.
1091         */
1092        spin_lock_irq(&np->lock);
1093        np->cur_tx++;
1094
1095        wmb(); /* flush length, buffer1, buffer2 */
1096        np->tx_ring[entry].status = DescOwn;
1097        wmb(); /* flush status and kick the hardware */
1098        writel(0, dev->base_addr + TxStartDemand);
1099        np->tx_q_bytes += skb->len;
1100        /* Work around horrible bug in the chip by marking the queue as full
1101           when we do not have FIFO room for a maximum sized packet. */
1102        if (np->cur_tx - np->dirty_tx > TX_QUEUE_LEN ||
1103                ((np->drv_flags & HasBrokenTx) && np->tx_q_bytes > TX_BUG_FIFO_LIMIT)) {
1104                netif_stop_queue(dev);
1105                wmb();
1106                np->tx_full = 1;
1107        }
1108        spin_unlock_irq(&np->lock);
1109
1110        dev->trans_start = jiffies;
1111
1112        if (debug > 4) {
1113                printk(KERN_DEBUG "%s: Transmit frame #%d queued in slot %d.\n",
1114                           dev->name, np->cur_tx, entry);
1115        }
1116        return 0;
1117}
1118
1119static void netdev_tx_done(struct net_device *dev)
1120{
1121        struct netdev_private *np = dev->priv;
1122        for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {
1123                int entry = np->dirty_tx % TX_RING_SIZE;
1124                int tx_status = np->tx_ring[entry].status;
1125
1126                if (tx_status < 0)
1127                        break;
1128                if (tx_status & 0x8000) {       /* There was an error, log it. */
1129#ifndef final_version
1130                        if (debug > 1)
1131                                printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1132                                           dev->name, tx_status);
1133#endif
1134                        np->stats.tx_errors++;
1135                        if (tx_status & 0x0104) np->stats.tx_aborted_errors++;
1136                        if (tx_status & 0x0C80) np->stats.tx_carrier_errors++;
1137                        if (tx_status & 0x0200) np->stats.tx_window_errors++;
1138                        if (tx_status & 0x0002) np->stats.tx_fifo_errors++;
1139                        if ((tx_status & 0x0080) && np->mii_if.full_duplex == 0)
1140                                np->stats.tx_heartbeat_errors++;
1141                } else {
1142#ifndef final_version
1143                        if (debug > 3)
1144                                printk(KERN_DEBUG "%s: Transmit slot %d ok, Tx status %8.8x.\n",
1145                                           dev->name, entry, tx_status);
1146#endif
1147                        np->stats.tx_bytes += np->tx_skbuff[entry]->len;
1148                        np->stats.collisions += (tx_status >> 3) & 15;
1149                        np->stats.tx_packets++;
1150                }
1151                /* Free the original skb. */
1152                pci_unmap_single(np->pci_dev,np->tx_addr[entry],
1153                                        np->tx_skbuff[entry]->len,
1154                                        PCI_DMA_TODEVICE);
1155                np->tx_q_bytes -= np->tx_skbuff[entry]->len;
1156                dev_kfree_skb_irq(np->tx_skbuff[entry]);
1157                np->tx_skbuff[entry] = 0;
1158        }
1159        if (np->tx_full &&
1160                np->cur_tx - np->dirty_tx < TX_QUEUE_LEN_RESTART &&
1161                np->tx_q_bytes < TX_BUG_FIFO_LIMIT) {
1162                /* The ring is no longer full, clear tbusy. */
1163                np->tx_full = 0;
1164                wmb();
1165                netif_wake_queue(dev);
1166        }
1167}
1168
1169/* The interrupt handler does all of the Rx thread work and cleans up
1170   after the Tx thread. */
1171static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs)
1172{
1173        struct net_device *dev = (struct net_device *)dev_instance;
1174        struct netdev_private *np = dev->priv;
1175        long ioaddr = dev->base_addr;
1176        int work_limit = max_interrupt_work;
1177        int handled = 0;
1178
1179        if (!netif_device_present(dev))
1180                return IRQ_NONE;
1181        do {
1182                u32 intr_status = readl(ioaddr + IntrStatus);
1183
1184                /* Acknowledge all of the current interrupt sources ASAP. */
1185                writel(intr_status & 0x001ffff, ioaddr + IntrStatus);
1186
1187                if (debug > 4)
1188                        printk(KERN_DEBUG "%s: Interrupt, status %4.4x.\n",
1189                                   dev->name, intr_status);
1190
1191                if ((intr_status & (NormalIntr|AbnormalIntr)) == 0)
1192                        break;
1193
1194                handled = 1;
1195
1196                if (intr_status & (IntrRxDone | RxNoBuf))
1197                        netdev_rx(dev);
1198                if (intr_status & RxNoBuf)
1199                        writel(0, ioaddr + RxStartDemand);
1200
1201                if (intr_status & (TxIdle | IntrTxDone) &&
1202                        np->cur_tx != np->dirty_tx) {
1203                        spin_lock(&np->lock);
1204                        netdev_tx_done(dev);
1205                        spin_unlock(&np->lock);
1206                }
1207
1208                /* Abnormal error summary/uncommon events handlers. */
1209                if (intr_status & (AbnormalIntr | TxFIFOUnderflow | IntrPCIErr |
1210                                                   TimerInt | IntrTxStopped))
1211                        netdev_error(dev, intr_status);
1212
1213                if (--work_limit < 0) {
1214                        printk(KERN_WARNING "%s: Too much work at interrupt, "
1215                                   "status=0x%4.4x.\n", dev->name, intr_status);
1216                        /* Set the timer to re-enable the other interrupts after
1217                           10*82usec ticks. */
1218                        spin_lock(&np->lock);
1219                        if (netif_device_present(dev)) {
1220                                writel(AbnormalIntr | TimerInt, ioaddr + IntrEnable);
1221                                writel(10, ioaddr + GPTimer);
1222                        }
1223                        spin_unlock(&np->lock);
1224                        break;
1225                }
1226        } while (1);
1227
1228        if (debug > 3)
1229                printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
1230                           dev->name, (int)readl(ioaddr + IntrStatus));
1231        return IRQ_RETVAL(handled);
1232}
1233
1234/* This routine is logically part of the interrupt handler, but separated
1235   for clarity and better register allocation. */
1236static int netdev_rx(struct net_device *dev)
1237{
1238        struct netdev_private *np = dev->priv;
1239        int entry = np->cur_rx % RX_RING_SIZE;
1240        int work_limit = np->dirty_rx + RX_RING_SIZE - np->cur_rx;
1241
1242        if (debug > 4) {
1243                printk(KERN_DEBUG " In netdev_rx(), entry %d status %4.4x.\n",
1244                           entry, np->rx_ring[entry].status);
1245        }
1246
1247        /* If EOP is set on the next entry, it's a new packet. Send it up. */
1248        while (--work_limit >= 0) {
1249                struct w840_rx_desc *desc = np->rx_head_desc;
1250                s32 status = desc->status;
1251
1252                if (debug > 4)
1253                        printk(KERN_DEBUG "  netdev_rx() status was %8.8x.\n",
1254                                   status);
1255                if (status < 0)
1256                        break;
1257                if ((status & 0x38008300) != 0x0300) {
1258                        if ((status & 0x38000300) != 0x0300) {
1259                                /* Ingore earlier buffers. */
1260                                if ((status & 0xffff) != 0x7fff) {
1261                                        printk(KERN_WARNING "%s: Oversized Ethernet frame spanned "
1262                                                   "multiple buffers, entry %#x status %4.4x!\n",
1263                                                   dev->name, np->cur_rx, status);
1264                                        np->stats.rx_length_errors++;
1265                                }
1266                        } else if (status & 0x8000) {
1267                                /* There was a fatal error. */
1268                                if (debug > 2)
1269                                        printk(KERN_DEBUG "%s: Receive error, Rx status %8.8x.\n",
1270                                                   dev->name, status);
1271                                np->stats.rx_errors++; /* end of a packet.*/
1272                                if (status & 0x0890) np->stats.rx_length_errors++;
1273                                if (status & 0x004C) np->stats.rx_frame_errors++;
1274                                if (status & 0x0002) np->stats.rx_crc_errors++;
1275                        }
1276                } else {
1277                        struct sk_buff *skb;
1278                        /* Omit the four octet CRC from the length. */
1279                        int pkt_len = ((status >> 16) & 0x7ff) - 4;
1280
1281#ifndef final_version
1282                        if (debug > 4)
1283                                printk(KERN_DEBUG "  netdev_rx() normal Rx pkt length %d"
1284                                           " status %x.\n", pkt_len, status);
1285#endif
1286                        /* Check if the packet is long enough to accept without copying
1287                           to a minimally-sized skbuff. */
1288                        if (pkt_len < rx_copybreak
1289                                && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1290                                skb->dev = dev;
1291                                skb_reserve(skb, 2);    /* 16 byte align the IP header */
1292                                pci_dma_sync_single(np->pci_dev,np->rx_addr[entry],
1293                                                        np->rx_skbuff[entry]->len,
1294                                                        PCI_DMA_FROMDEVICE);
1295                                /* Call copy + cksum if available. */
1296#if HAS_IP_COPYSUM
1297                                eth_copy_and_sum(skb, np->rx_skbuff[entry]->tail, pkt_len, 0);
1298                                skb_put(skb, pkt_len);
1299#else
1300                                memcpy(skb_put(skb, pkt_len), np->rx_skbuff[entry]->tail,
1301                                           pkt_len);
1302#endif
1303                        } else {
1304                                pci_unmap_single(np->pci_dev,np->rx_addr[entry],
1305                                                        np->rx_skbuff[entry]->len,
1306                                                        PCI_DMA_FROMDEVICE);
1307                                skb_put(skb = np->rx_skbuff[entry], pkt_len);
1308                                np->rx_skbuff[entry] = NULL;
1309                        }
1310#ifndef final_version                           /* Remove after testing. */
1311                        /* You will want this info for the initial debug. */
1312                        if (debug > 5)
1313                                printk(KERN_DEBUG "  Rx data %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:"
1314                                           "%2.2x %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x %2.2x%2.2x "
1315                                           "%d.%d.%d.%d.\n",
1316                                           skb->data[0], skb->data[1], skb->data[2], skb->data[3],
1317                                           skb->data[4], skb->data[5], skb->data[6], skb->data[7],
1318                                           skb->data[8], skb->data[9], skb->data[10],
1319                                           skb->data[11], skb->data[12], skb->data[13],
1320                                           skb->data[14], skb->data[15], skb->data[16],
1321                                           skb->data[17]);
1322#endif
1323                        skb->protocol = eth_type_trans(skb, dev);
1324                        netif_rx(skb);
1325                        dev->last_rx = jiffies;
1326                        np->stats.rx_packets++;
1327                        np->stats.rx_bytes += pkt_len;
1328                }
1329                entry = (++np->cur_rx) % RX_RING_SIZE;
1330                np->rx_head_desc = &np->rx_ring[entry];
1331        }
1332
1333        /* Refill the Rx ring buffers. */
1334        for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) {
1335                struct sk_buff *skb;
1336                entry = np->dirty_rx % RX_RING_SIZE;
1337                if (np->rx_skbuff[entry] == NULL) {
1338                        skb = dev_alloc_skb(np->rx_buf_sz);
1339                        np->rx_skbuff[entry] = skb;
1340                        if (skb == NULL)
1341                                break;                  /* Better luck next round. */
1342                        skb->dev = dev;                 /* Mark as being used by this device. */
1343                        np->rx_addr[entry] = pci_map_single(np->pci_dev,
1344                                                        skb->tail,
1345                                                        skb->len, PCI_DMA_FROMDEVICE);
1346                        np->rx_ring[entry].buffer1 = np->rx_addr[entry];
1347                }
1348                wmb();
1349                np->rx_ring[entry].status = DescOwn;
1350        }
1351
1352        return 0;
1353}
1354
1355static void netdev_error(struct net_device *dev, int intr_status)
1356{
1357        long ioaddr = dev->base_addr;
1358        struct netdev_private *np = dev->priv;
1359
1360        if (debug > 2)
1361                printk(KERN_DEBUG "%s: Abnormal event, %8.8x.\n",
1362                           dev->name, intr_status);
1363        if (intr_status == 0xffffffff)
1364                return;
1365        spin_lock(&np->lock);
1366        if (intr_status & TxFIFOUnderflow) {
1367                int new;
1368                /* Bump up the Tx threshold */
1369#if 0
1370                /* This causes lots of dropped packets,
1371                 * and under high load even tx_timeouts
1372                 */
1373                new = np->csr6 + 0x4000;
1374#else
1375                new = (np->csr6 >> 14)&0x7f;
1376                if (new < 64)
1377                        new *= 2;
1378                 else
1379                        new = 127; /* load full packet before starting */
1380                new = (np->csr6 & ~(0x7F << 14)) | (new<<14);
1381#endif
1382                printk(KERN_DEBUG "%s: Tx underflow, new csr6 %8.8x.\n",
1383                           dev->name, new);
1384                update_csr6(dev, new);
1385        }
1386        if (intr_status & IntrRxDied) {         /* Missed a Rx frame. */
1387                np->stats.rx_errors++;
1388        }
1389        if (intr_status & TimerInt) {
1390                /* Re-enable other interrupts. */
1391                if (netif_device_present(dev))
1392                        writel(0x1A0F5, ioaddr + IntrEnable);
1393        }
1394        np->stats.rx_missed_errors += readl(ioaddr + RxMissed) & 0xffff;
1395        writel(0, ioaddr + RxStartDemand);
1396        spin_unlock(&np->lock);
1397}
1398
1399static struct net_device_stats *get_stats(struct net_device *dev)
1400{
1401        long ioaddr = dev->base_addr;
1402        struct netdev_private *np = dev->priv;
1403
1404        /* The chip only need report frame silently dropped. */
1405        spin_lock_irq(&np->lock);
1406        if (netif_running(dev) && netif_device_present(dev))
1407                np->stats.rx_missed_errors += readl(ioaddr + RxMissed) & 0xffff;
1408        spin_unlock_irq(&np->lock);
1409
1410        return &np->stats;
1411}
1412
1413
1414static u32 __set_rx_mode(struct net_device *dev)
1415{
1416        long ioaddr = dev->base_addr;
1417        u32 mc_filter[2];                       /* Multicast hash filter */
1418        u32 rx_mode;
1419
1420        if (dev->flags & IFF_PROMISC) {                 /* Set promiscuous. */
1421                /* Unconditionally log net taps. */
1422                printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name);
1423                memset(mc_filter, 0xff, sizeof(mc_filter));
1424                rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAllPhys
1425                        | AcceptMyPhys;
1426        } else if ((dev->mc_count > multicast_filter_limit)
1427                           ||  (dev->flags & IFF_ALLMULTI)) {
1428                /* Too many to match, or accept all multicasts. */
1429                memset(mc_filter, 0xff, sizeof(mc_filter));
1430                rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
1431        } else {
1432                struct dev_mc_list *mclist;
1433                int i;
1434                memset(mc_filter, 0, sizeof(mc_filter));
1435                for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1436                         i++, mclist = mclist->next) {
1437                        int filterbit = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26) ^ 0x3F;
1438                        filterbit &= 0x3f;
1439                        mc_filter[filterbit >> 5] |= cpu_to_le32(1 << (filterbit & 31));
1440                }
1441                rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
1442        }
1443        writel(mc_filter[0], ioaddr + MulticastFilter0);
1444        writel(mc_filter[1], ioaddr + MulticastFilter1);
1445        return rx_mode;
1446}
1447
1448static void set_rx_mode(struct net_device *dev)
1449{
1450        struct netdev_private *np = dev->priv;
1451        u32 rx_mode = __set_rx_mode(dev);
1452        spin_lock_irq(&np->lock);
1453        update_csr6(dev, (np->csr6 & ~0x00F8) | rx_mode);
1454        spin_unlock_irq(&np->lock);
1455}
1456
1457static void netdev_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info)
1458{
1459        struct netdev_private *np = dev->priv;
1460
1461        strcpy (info->driver, DRV_NAME);
1462        strcpy (info->version, DRV_VERSION);
1463        strcpy (info->bus_info, pci_name(np->pci_dev));
1464}
1465
1466static int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1467{
1468        struct netdev_private *np = dev->priv;
1469        int rc;
1470
1471        spin_lock_irq(&np->lock);
1472        rc = mii_ethtool_gset(&np->mii_if, cmd);
1473        spin_unlock_irq(&np->lock);
1474
1475        return rc;
1476}
1477
1478static int netdev_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1479{
1480        struct netdev_private *np = dev->priv;
1481        int rc;
1482
1483        spin_lock_irq(&np->lock);
1484        rc = mii_ethtool_sset(&np->mii_if, cmd);
1485        spin_unlock_irq(&np->lock);
1486
1487        return rc;
1488}
1489
1490static int netdev_nway_reset(struct net_device *dev)
1491{
1492        struct netdev_private *np = dev->priv;
1493        return mii_nway_restart(&np->mii_if);
1494}
1495
1496static u32 netdev_get_link(struct net_device *dev)
1497{
1498        struct netdev_private *np = dev->priv;
1499        return mii_link_ok(&np->mii_if);
1500}
1501
1502static u32 netdev_get_msglevel(struct net_device *dev)
1503{
1504        return debug;
1505}
1506
1507static void netdev_set_msglevel(struct net_device *dev, u32 value)
1508{
1509        debug = value;
1510}
1511
1512static struct ethtool_ops netdev_ethtool_ops = {
1513        .get_drvinfo            = netdev_get_drvinfo,
1514        .get_settings           = netdev_get_settings,
1515        .set_settings           = netdev_set_settings,
1516        .nway_reset             = netdev_nway_reset,
1517        .get_link               = netdev_get_link,
1518        .get_msglevel           = netdev_get_msglevel,
1519        .set_msglevel           = netdev_set_msglevel,
1520        .get_sg                 = ethtool_op_get_sg,
1521        .get_tx_csum            = ethtool_op_get_tx_csum,
1522};
1523
1524static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1525{
1526        struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data;
1527        struct netdev_private *np = dev->priv;
1528
1529        switch(cmd) {
1530        case SIOCGMIIPHY:               /* Get address of MII PHY in use. */
1531                data->phy_id = ((struct netdev_private *)dev->priv)->phys[0] & 0x1f;
1532                /* Fall Through */
1533
1534        case SIOCGMIIREG:               /* Read MII PHY register. */
1535                spin_lock_irq(&np->lock);
1536                data->val_out = mdio_read(dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
1537                spin_unlock_irq(&np->lock);
1538                return 0;
1539
1540        case SIOCSMIIREG:               /* Write MII PHY register. */
1541                if (!capable(CAP_NET_ADMIN))
1542                        return -EPERM;
1543                spin_lock_irq(&np->lock);
1544                mdio_write(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
1545                spin_unlock_irq(&np->lock);
1546                return 0;
1547        default:
1548                return -EOPNOTSUPP;
1549        }
1550}
1551
1552static int netdev_close(struct net_device *dev)
1553{
1554        long ioaddr = dev->base_addr;
1555        struct netdev_private *np = dev->priv;
1556
1557        netif_stop_queue(dev);
1558
1559        if (debug > 1) {
1560                printk(KERN_DEBUG "%s: Shutting down ethercard, status was %8.8x "
1561                           "Config %8.8x.\n", dev->name, (int)readl(ioaddr + IntrStatus),
1562                           (int)readl(ioaddr + NetworkConfig));
1563                printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d,  Rx %d / %d.\n",
1564                           dev->name, np->cur_tx, np->dirty_tx, np->cur_rx, np->dirty_rx);
1565        }
1566
1567        /* Stop the chip's Tx and Rx processes. */
1568        spin_lock_irq(&np->lock);
1569        netif_device_detach(dev);
1570        update_csr6(dev, 0);
1571        writel(0x0000, ioaddr + IntrEnable);
1572        spin_unlock_irq(&np->lock);
1573
1574        free_irq(dev->irq, dev);
1575        wmb();
1576        netif_device_attach(dev);
1577
1578        if (readl(ioaddr + NetworkConfig) != 0xffffffff)
1579                np->stats.rx_missed_errors += readl(ioaddr + RxMissed) & 0xffff;
1580
1581#ifdef __i386__
1582        if (debug > 2) {
1583                int i;
1584
1585                printk(KERN_DEBUG"  Tx ring at %8.8x:\n",
1586                           (int)np->tx_ring);
1587                for (i = 0; i < TX_RING_SIZE; i++)
1588                        printk(KERN_DEBUG " #%d desc. %4.4x %4.4x %8.8x.\n",
1589                                   i, np->tx_ring[i].length,
1590                                   np->tx_ring[i].status, np->tx_ring[i].buffer1);
1591                printk("\n"KERN_DEBUG "  Rx ring %8.8x:\n",
1592                           (int)np->rx_ring);
1593                for (i = 0; i < RX_RING_SIZE; i++) {
1594                        printk(KERN_DEBUG " #%d desc. %4.4x %4.4x %8.8x\n",
1595                                   i, np->rx_ring[i].length,
1596                                   np->rx_ring[i].status, np->rx_ring[i].buffer1);
1597                }
1598        }
1599#endif /* __i386__ debugging only */
1600
1601        del_timer_sync(&np->timer);
1602
1603        free_rxtx_rings(np);
1604        free_ringdesc(np);
1605
1606        return 0;
1607}
1608
1609static void __devexit w840_remove1 (struct pci_dev *pdev)
1610{
1611        struct net_device *dev = pci_get_drvdata(pdev);
1612        
1613        if (dev) {
1614                unregister_netdev(dev);
1615                pci_release_regions(pdev);
1616#ifndef USE_IO_OPS
1617                iounmap((char *)(dev->base_addr));
1618#endif
1619                free_netdev(dev);
1620        }
1621
1622        pci_set_drvdata(pdev, NULL);
1623}
1624
1625#ifdef CONFIG_PM
1626
1627/*
1628 * suspend/resume synchronization:
1629 * - open, close, do_ioctl:
1630 *      rtnl_lock, & netif_device_detach after the rtnl_unlock.
1631 * - get_stats:
1632 *      spin_lock_irq(np->lock), doesn't touch hw if not present
1633 * - hard_start_xmit:
1634 *      netif_stop_queue + spin_unlock_wait(&dev->xmit_lock);
1635 * - tx_timeout:
1636 *      netif_device_detach + spin_unlock_wait(&dev->xmit_lock);
1637 * - set_multicast_list
1638 *      netif_device_detach + spin_unlock_wait(&dev->xmit_lock);
1639 * - interrupt handler
1640 *      doesn't touch hw if not present, synchronize_irq waits for
1641 *      running instances of the interrupt handler.
1642 *
1643 * Disabling hw requires clearing csr6 & IntrEnable.
1644 * update_csr6 & all function that write IntrEnable check netif_device_present
1645 * before settings any bits.
1646 *
1647 * Detach must occur under spin_unlock_irq(), interrupts from a detached
1648 * device would cause an irq storm.
1649 */
1650static int w840_suspend (struct pci_dev *pdev, u32 state)
1651{
1652        struct net_device *dev = pci_get_drvdata (pdev);
1653        struct netdev_private *np = dev->priv;
1654        long ioaddr = dev->base_addr;
1655
1656        rtnl_lock();
1657        if (netif_running (dev)) {
1658                del_timer_sync(&np->timer);
1659
1660                spin_lock_irq(&np->lock);
1661                netif_device_detach(dev);
1662                update_csr6(dev, 0);
1663                writel(0, ioaddr + IntrEnable);
1664                netif_stop_queue(dev);
1665                spin_unlock_irq(&np->lock);
1666
1667                spin_unlock_wait(&dev->xmit_lock);
1668                synchronize_irq(dev->irq);
1669        
1670                np->stats.rx_missed_errors += readl(ioaddr + RxMissed) & 0xffff;
1671
1672                /* no more hardware accesses behind this line. */
1673
1674                if (np->csr6) BUG();
1675                if (readl(ioaddr + IntrEnable)) BUG();
1676
1677                /* pci_power_off(pdev, -1); */
1678
1679                free_rxtx_rings(np);
1680        } else {
1681                netif_device_detach(dev);
1682        }
1683        rtnl_unlock();
1684        return 0;
1685}
1686
1687static int w840_resume (struct pci_dev *pdev)
1688{
1689        struct net_device *dev = pci_get_drvdata (pdev);
1690        struct netdev_private *np = dev->priv;
1691
1692        rtnl_lock();
1693        if (netif_device_present(dev))
1694                goto out; /* device not suspended */
1695        if (netif_running(dev)) {
1696                pci_enable_device(pdev);
1697        /*      pci_power_on(pdev); */
1698
1699                spin_lock_irq(&np->lock);
1700                writel(1, dev->base_addr+PCIBusCfg);
1701                readl(dev->base_addr+PCIBusCfg);
1702                udelay(1);
1703                netif_device_attach(dev);
1704                init_rxtx_rings(dev);
1705                init_registers(dev);
1706                spin_unlock_irq(&np->lock);
1707
1708                netif_wake_queue(dev);
1709
1710                mod_timer(&np->timer, jiffies + 1*HZ);
1711        } else {
1712                netif_device_attach(dev);
1713        }
1714out:
1715        rtnl_unlock();
1716        return 0;
1717}
1718#endif
1719
1720static struct pci_driver w840_driver = {
1721        .name           = DRV_NAME,
1722        .id_table       = w840_pci_tbl,
1723        .probe          = w840_probe1,
1724        .remove         = __devexit_p(w840_remove1),
1725#ifdef CONFIG_PM
1726        .suspend        = w840_suspend,
1727        .resume         = w840_resume,
1728#endif
1729};
1730
1731static int __init w840_init(void)
1732{
1733/* when a module, this is printed whether or not devices are found in probe */
1734#ifdef MODULE
1735        printk(version);
1736#endif
1737        return pci_module_init(&w840_driver);
1738}
1739
1740static void __exit w840_exit(void)
1741{
1742        pci_unregister_driver(&w840_driver);
1743}
1744
1745module_init(w840_init);
1746module_exit(w840_exit);
1747
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.