Merge master.kernel.org:/pub/scm/linux/kernel/git/acme/net-2.6
[pandora-kernel.git] / drivers / net / depca.c
index 0941d40..af59466 100644 (file)
@@ -4,9 +4,9 @@
 
 
                       Copyright 1994 David C. Davies
-                                  and 
+                                  and
                         United States Government
-        (as represented by the Director, National Security Agency).  
+        (as represented by the Director, National Security Agency).
 
                Copyright 1995  Digital Equipment Corporation.
 
@@ -61,7 +61,7 @@
        Digital Equipment Corporation, 1989
     8) "DEC EtherWORKS Turbo_(TP BNC) Ethernet Controller Owners Manual",
        Digital Equipment corporation, 1991, Pub. #EK-DE202-OM.001
-    
+
 
     Peter Bauer's depca.c (V0.5) was referred to when debugging V0.1 of this
     driver.
        [Alan Cox: Changed the code to allow command line irq/io assignments]
        [Dave Davies: Changed the code to allow command line mem/name
                                                                 assignments]
-    6) run the net startup bits for your eth?? interface manually 
-    (usually /etc/rc.inet[12] at boot time). 
+    6) run the net startup bits for your eth?? interface manually
+    (usually /etc/rc.inet[12] at boot time).
     7) enjoy!
 
     Note that autoprobing is not allowed in loadable modules - the system is
     already up and running and you're messing with interrupts.
 
-    To unload a module, turn off the associated interface 
+    To unload a module, turn off the associated interface
     'ifconfig eth?? down' then 'rmmod depca'.
 
     To assign a base memory address for the shared memory  when running as a
     loadable module, see 5 above.  To include the adapter  name (if you have
     no PROM  but know the card name)  also see 5  above. Note that this last
-    option  will not work  with kernel  built-in  depca's. 
+    option  will not work  with kernel  built-in  depca's.
 
     The shared memory assignment for a loadable module  makes sense to avoid
     the 'memory autoprobe' picking the wrong shared memory  (for the case of
     ************************************************************************
     Support for MCA EtherWORKS cards added 11-3-98.
     Verified to work with up to 2 DE212 cards in a system (although not
-      fully stress-tested).  
+      fully stress-tested).
 
     Currently known bugs/limitations:
 
     ----------------
 
     Version   Date        Description
-  
+
       0.1     25-jan-94   Initial writing.
       0.2     27-jan-94   Added LANCE TX hardware buffer chaining.
       0.3      1-feb-94   Added multiple DEPCA support.
       0.351   30-apr-94   Added EISA support. Added DE422 recognition.
       0.36    16-may-94   DE422 fix released.
       0.37    22-jul-94   Added MODULE support
-      0.38    15-aug-94   Added DBR ROM switch in depca_close(). 
+      0.38    15-aug-94   Added DBR ROM switch in depca_close().
                           Multi DEPCA bug fix.
       0.38axp 15-sep-94   Special version for Alpha AXP Linux V1.0.
       0.381   12-dec-94   Added DE101 recognition, fix multicast bug.
       0.383   22-feb-95   Fix for conflict with VESA SCSI reported by
                           <stromain@alf.dec.com>
       0.384   17-mar-95   Fix a ring full bug reported by <bkm@star.rl.ac.uk>
-      0.385    3-apr-95   Fix a recognition bug reported by 
+      0.385    3-apr-95   Fix a recognition bug reported by
                                                 <ryan.niemi@lastfrontier.com>
       0.386   21-apr-95   Fix the last fix...sorry, must be galloping senility
       0.40    25-May-95   Rewrite for portability & updated.
                           ALPHA support from <jestabro@amt.tay1.dec.com>
       0.41    26-Jun-95   Added verify_area() calls in depca_ioctl() from
                           suggestion by <heiko@colossus.escape.de>
-      0.42    27-Dec-95   Add 'mem' shared memory assignment for loadable 
+      0.42    27-Dec-95   Add 'mem' shared memory assignment for loadable
                           modules.
                           Add 'adapter_name' for loadable modules when no PROM.
-                         Both above from a suggestion by 
+                         Both above from a suggestion by
                          <pchen@woodruffs121.residence.gatech.edu>.
                          Add new multicasting code.
       0.421   22-Apr-96          Fix alloc_device() bug <jari@markkus2.fimr.fi>
       0.44     1-Sep-97   Fix *_probe() to test check_region() first - bug
                            reported by <mmogilvi@elbert.uccs.edu>
       0.45     3-Nov-98   Added support for MCA EtherWORKS (DE210/DE212) cards
-                           by <tymm@computer.org> 
+                           by <tymm@computer.org>
       0.451    5-Nov-98   Fixed mca stuff cuz I'm a dummy. <tymm@computer.org>
       0.5     14-Nov-98   Re-spin for 2.1.x kernels.
       0.51    27-Jun-99   Correct received packet length for CRC from
     =========================================================================
 */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
@@ -412,7 +411,7 @@ static struct platform_driver depca_isa_driver = {
                .name   = depca_string,
        },
 };
-       
+
 /*
 ** Miscellaneous info...
 */
@@ -422,14 +421,14 @@ static struct platform_driver depca_isa_driver = {
 ** Memory Alignment. Each descriptor is 4 longwords long. To force a
 ** particular alignment on the TX descriptor, adjust DESC_SKIP_LEN and
 ** DESC_ALIGN. DEPCA_ALIGN aligns the start address of the private memory area
-** and hence the RX descriptor ring's first entry. 
+** and hence the RX descriptor ring's first entry.
 */
 #define DEPCA_ALIGN4      ((u_long)4 - 1)      /* 1 longword align */
 #define DEPCA_ALIGN8      ((u_long)8 - 1)      /* 2 longword (quadword) align */
 #define DEPCA_ALIGN         DEPCA_ALIGN8       /* Keep the LANCE happy... */
 
 /*
-** The DEPCA Rx and Tx ring descriptors. 
+** The DEPCA Rx and Tx ring descriptors.
 */
 struct depca_rx_desc {
        volatile s32 base;
@@ -592,7 +591,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
         */
 
        ioaddr = dev->base_addr;
-       
+
        STOP_DEPCA;
 
        nicsr = inb(DEPCA_NICSR);
@@ -611,7 +610,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
 
        printk ("%s: %s at 0x%04lx",
                device->bus_id, depca_signature[lp->adapter], ioaddr);
-       
+
        switch (lp->depca_bus) {
 #ifdef CONFIG_MCA
        case DEPCA_BUS_MCA:
@@ -658,7 +657,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
                if (lp->depca_bus != DEPCA_BUS_MCA)
                        mem_start += 0x8000;
        }
-       
+
        if ((mem_len = (NUM_RX_DESC * (sizeof(struct depca_rx_desc) + RX_BUFF_SZ) + NUM_TX_DESC * (sizeof(struct depca_tx_desc) + TX_BUFF_SZ) + sizeof(struct depca_init)))
            > (netRAM << 10)) {
                printk(",\n       requests %dkB RAM: only %dkB is available!\n", (mem_len >> 10), netRAM);
@@ -683,7 +682,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
                printk(KERN_ERR "depca: cannot request ISA memory, aborting\n");
                goto out_priv;
        }
-               
+
        status = -EIO;
        lp->sh_mem = ioremap(mem_start, mem_len);
        if (lp->sh_mem == NULL) {
@@ -812,7 +811,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
 
        device->driver_data = dev;
        SET_NETDEV_DEV (dev, device);
-       
+
        status = register_netdev(dev);
        if (status == 0)
                return 0;
@@ -823,7 +822,7 @@ out1:
 out_priv:
        return status;
 }
-\f
+
 
 static int depca_open(struct net_device *dev)
 {
@@ -925,8 +924,8 @@ static void depca_tx_timeout(struct net_device *dev)
 }
 
 
-/* 
-** Writes a socket buffer to TX descriptor ring and starts transmission 
+/*
+** Writes a socket buffer to TX descriptor ring and starts transmission
 */
 static int depca_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
@@ -938,12 +937,9 @@ static int depca_start_xmit(struct sk_buff *skb, struct net_device *dev)
        if (skb->len < 1)
                goto out;
 
-       if (skb->len < ETH_ZLEN) {
-               skb = skb_padto(skb, ETH_ZLEN);
-               if (skb == NULL)
-                       goto out;
-       }
-       
+       if (skb_padto(skb, ETH_ZLEN))
+               goto out;
+
        netif_stop_queue(dev);
 
        if (TX_BUFFS_AVAIL) {   /* Fill in a Tx ring entry */
@@ -967,7 +963,7 @@ static int depca_start_xmit(struct sk_buff *skb, struct net_device *dev)
 }
 
 /*
-** The DEPCA interrupt handler. 
+** The DEPCA interrupt handler.
 */
 static irqreturn_t depca_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
@@ -1057,8 +1053,8 @@ static int depca_rx(struct net_device *dev)
                                                memcpy_fromio(buf, lp->rx_buff[lp->rx_old], pkt_len);
                                        }
 
-                                       /* 
-                                          ** Notify the upper protocol layers that there is another 
+                                       /*
+                                          ** Notify the upper protocol layers that there is another
                                           ** packet to handle
                                         */
                                        skb->protocol = eth_type_trans(skb, dev);
@@ -1171,9 +1167,9 @@ static int depca_close(struct net_device *dev)
                printk("%s: Shutting down ethercard, status was %2.2x.\n", dev->name, inw(DEPCA_DATA));
        }
 
-       /* 
+       /*
           ** We stop the DEPCA here -- it occasionally polls
-          ** memory if we don't. 
+          ** memory if we don't.
         */
        outw(STOP, DEPCA_DATA);
 
@@ -1324,12 +1320,12 @@ static void SetMulticastFilter(struct net_device *dev)
 static int __init depca_common_init (u_long ioaddr, struct net_device **devp)
 {
        int status = 0;
-       
+
        if (!request_region (ioaddr, DEPCA_TOTAL_SIZE, depca_string)) {
                status = -EBUSY;
                goto out;
        }
-       
+
        if (DevicePresent(ioaddr)) {
                status = -ENODEV;
                goto out_release;
@@ -1341,7 +1337,7 @@ static int __init depca_common_init (u_long ioaddr, struct net_device **devp)
        }
 
        return 0;
-       
+
  out_release:
        release_region (ioaddr, DEPCA_TOTAL_SIZE);
  out:
@@ -1363,16 +1359,16 @@ static int __init depca_mca_probe(struct device *device)
        struct depca_private *lp;
 
        /*
-       ** Search for the adapter.  If an address has been given, search 
+       ** Search for the adapter.  If an address has been given, search
        ** specifically for the card at that address.  Otherwise find the
        ** first card in the system.
        */
-       
+
        pos[0] = mca_device_read_stored_pos(mdev, 2);
        pos[1] = mca_device_read_stored_pos(mdev, 3);
 
        /*
-       ** IO of card is handled by bits 1 and 2 of pos0.    
+       ** IO of card is handled by bits 1 and 2 of pos0.
        **
        **    bit2 bit1    IO
        **       0    0    0x2c00
@@ -1385,12 +1381,12 @@ static int __init depca_mca_probe(struct device *device)
 
        /*
        ** Found the adapter we were looking for. Now start setting it up.
-       ** 
+       **
        ** First work on decoding the IRQ.  It's stored in the lower 4 bits
        ** of pos1.  Bits are as follows (from the ADF file):
        **
-       **      Bits           
-       **   3   2   1   0    IRQ 
+       **      Bits
+       **   3   2   1   0    IRQ
        **   --------------------
        **   0   0   1   0     5
        **   0   0   0   1     9
@@ -1439,7 +1435,7 @@ static int __init depca_mca_probe(struct device *device)
        strncpy(mdev->name, depca_mca_adapter_name[mdev->index],
                sizeof(mdev->name));
        mca_device_set_claim(mdev, 1);
-       
+
         /*
        ** Get everything allocated and initialized...  (almost just
        ** like the ISA and EISA probes)
@@ -1456,10 +1452,10 @@ static int __init depca_mca_probe(struct device *device)
        lp->depca_bus = DEPCA_BUS_MCA;
        lp->adapter = depca_mca_adapter_type[mdev->index];
        lp->mem_start = mem_start;
-       
+
        if ((err = depca_hw_init(dev, device)))
                goto out_free;
-                       
+
        return 0;
 
  out_free:
@@ -1483,7 +1479,7 @@ static void __init depca_platform_probe (void)
 
        for (i = 0; depca_io_ports[i].iobase; i++) {
                depca_io_ports[i].device = NULL;
-               
+
                /* if an address has been specified on the command
                 * line, use it (if valid) */
                if (io && io != depca_io_ports[i].iobase)
@@ -1507,7 +1503,7 @@ static void __init depca_platform_probe (void)
                 * no hardware at this address. Unregister it, as the
                 * release fuction will take care of freeing the
                 * allocated structure */
-                       
+
                        depca_io_ports[i].device = NULL;
                        pldev->dev.platform_data = NULL;
                        platform_device_unregister (pldev);
@@ -1545,7 +1541,7 @@ static int __init depca_isa_probe (struct platform_device *device)
                goto out;
 
        adapter = depca_shmem_probe (&mem_start);
-       
+
        if (adapter == unknown) {
                status = -ENODEV;
                goto out_free;
@@ -1558,10 +1554,10 @@ static int __init depca_isa_probe (struct platform_device *device)
        lp->depca_bus = DEPCA_BUS_ISA;
        lp->adapter = adapter;
        lp->mem_start = mem_start;
-       
+
        if ((status = depca_hw_init(dev, &device->dev)))
                goto out_free;
-       
+
        return 0;
 
  out_free:
@@ -1595,7 +1591,7 @@ static int __init depca_eisa_probe (struct device *device)
         * it's address with the ethernet prom)... As we don't parse
         * the EISA configuration structures (yet... :-), just rely on
         * the ISA probing to sort it out... */
-       
+
        depca_shmem_probe (&mem_start);
 
        dev->base_addr = ioaddr;
@@ -1604,10 +1600,10 @@ static int __init depca_eisa_probe (struct device *device)
        lp->depca_bus = DEPCA_BUS_EISA;
        lp->adapter = edev->id.driver_data;
        lp->mem_start = mem_start;
-       
+
        if ((status = depca_hw_init(dev, device)))
                goto out_free;
-       
+
        return 0;
 
  out_free:
@@ -1654,7 +1650,7 @@ static int __init DepcaSignature(char *name, u_long base_addr)
         * used, at least on x86. Instead, reserve a memory region a
         * board would certainly use. If it works, go ahead. If not,
         * run like hell... */
-       
+
        if (!request_mem_region (mem_addr, 16, depca_string))
                return unknown;
 
@@ -1703,7 +1699,7 @@ static int __init DepcaSignature(char *name, u_long base_addr)
 ** if the first address octet is a 0x08 - this minimises the chances of
 ** messing around with some other hardware, but it assumes that this DEPCA
 ** card initialized itself correctly.
-** 
+**
 ** Search the Ethernet address ROM for the signature. Since the ROM address
 ** counter can start at an arbitrary point, the search must include the entire
 ** probe sequence length plus the (length_of_the_signature - 1).
@@ -1808,7 +1804,7 @@ static int load_packet(struct net_device *dev, struct sk_buff *skb)
        entry = lp->tx_new;     /* Ring around buffer number. */
        end = (entry + (skb->len - 1) / TX_BUFF_SZ) & lp->txRingMask;
        if (!(readl(&lp->tx_ring[end].base) & T_OWN)) { /* Enough room? */
-               /* 
+               /*
                   ** Caution: the write order is important here... don't set up the
                   ** ownership rights until all the other information is in place.
                 */
@@ -2090,7 +2086,7 @@ static int __init depca_module_init (void)
 #endif
        err |= platform_driver_register (&depca_isa_driver);
        depca_platform_probe ();
-       
+
         return err;
 }