net:wireless:bcmdhd: rename bcmsdh_remove & bcmsdh_probe
[linux-2.6.git] / drivers / net / 3c507.c
index 96b8665..1e94555 100644 (file)
@@ -56,8 +56,8 @@ static const char version[] =
 #include <linux/errno.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
+#include <linux/if_ether.h>
 #include <linux/skbuff.h>
-#include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/bitops.h>
 
@@ -201,7 +201,7 @@ struct net_local {
 #define RX_BUF_SIZE    (1518+14+18)    /* packet+header+RBD */
 #define RX_BUF_END             (dev->mem_end - dev->mem_start)
 
-#define TX_TIMEOUT 5
+#define TX_TIMEOUT (HZ/20)
 
 /*
   That's it: only 86 bytes to set up the beast, including every extra
@@ -284,7 +284,8 @@ static unsigned short init_words[] = {
 
 static int     el16_probe1(struct net_device *dev, int ioaddr);
 static int     el16_open(struct net_device *dev);
-static int     el16_send_packet(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t el16_send_packet(struct sk_buff *skb,
+                                   struct net_device *dev);
 static irqreturn_t el16_interrupt(int irq, void *dev_id);
 static void el16_rx(struct net_device *dev);
 static int     el16_close(struct net_device *dev);
@@ -310,8 +311,8 @@ static int mem_start;
 struct net_device * __init el16_probe(int unit)
 {
        struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
-       static unsigned ports[] = { 0x300, 0x320, 0x340, 0x280, 0};
-       unsigned *port;
+       static const unsigned ports[] = { 0x300, 0x320, 0x340, 0x280, 0};
+       const unsigned *port;
        int err = -ENODEV;
 
        if (!dev)
@@ -398,7 +399,7 @@ static int __init el16_probe1(struct net_device *dev, int ioaddr)
 
        irq = inb(ioaddr + IRQ_CONFIG) & 0x0f;
 
-       irqval = request_irq(irq, &el16_interrupt, 0, DRV_NAME, dev);
+       irqval = request_irq(irq, el16_interrupt, 0, DRV_NAME, dev);
        if (irqval) {
                pr_cont("\n");
                pr_err("3c507: unable to get IRQ %d (irqval=%d).\n", irq, irqval);
@@ -448,7 +449,6 @@ static int __init el16_probe1(struct net_device *dev, int ioaddr)
                pr_debug("%s", version);
 
        lp = netdev_priv(dev);
-       memset(lp, 0, sizeof(*lp));
        spin_lock_init(&lp->lock);
        lp->base = ioremap(dev->mem_start, RX_BUF_END);
        if (!lp->base) {
@@ -504,12 +504,13 @@ static void el16_tx_timeout (struct net_device *dev)
                outb (0, ioaddr + SIGNAL_CA);   /* Issue channel-attn. */
                lp->last_restart = dev->stats.tx_packets;
        }
-       dev->trans_start = jiffies;
+       dev->trans_start = jiffies; /* prevent tx timeout */
        netif_wake_queue (dev);
 }
 
 
-static int el16_send_packet (struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t el16_send_packet (struct sk_buff *skb,
+                                    struct net_device *dev)
 {
        struct net_local *lp = netdev_priv(dev);
        int ioaddr = dev->base_addr;
@@ -527,7 +528,6 @@ static int el16_send_packet (struct sk_buff *skb, struct net_device *dev)
 
        hardware_send_packet (dev, buf, skb->len, length - skb->len);
 
-       dev->trans_start = jiffies;
        /* Enable the 82586 interrupt input. */
        outb (0x84, ioaddr + MISC_CTRL);
 
@@ -537,7 +537,7 @@ static int el16_send_packet (struct sk_buff *skb, struct net_device *dev)
 
        /* You might need to clean up and record Tx statistics here. */
 
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 /*     The typical workload of the driver:
@@ -551,8 +551,7 @@ static irqreturn_t el16_interrupt(int irq, void *dev_id)
        void __iomem *shmem;
 
        if (dev == NULL) {
-               pr_err("%s: net_interrupt(): irq %d for unknown device.\n",
-                       dev->name, irq);
+               pr_err("net_interrupt(): irq %d for unknown device.\n", irq);
                return IRQ_NONE;
        }
 
@@ -732,8 +731,7 @@ static void init_82586_mem(struct net_device *dev)
        memcpy_toio(lp->base, init_words + 5, sizeof(init_words) - 10);
 
        /* Fill in the station address. */
-       memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr,
-                  sizeof(dev->dev_addr));
+       memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr, ETH_ALEN);
 
        /* The Tx-block list is written as needed.  We just set up the values. */
        lp->tx_cmd_link = IDLELOOP + 4;
@@ -765,7 +763,6 @@ static void init_82586_mem(struct net_device *dev)
        if (net_debug > 4)
                pr_debug("%s: Initialized 82586, status %04x.\n", dev->name,
                           readw(shmem+iSCB_STATUS));
-       return;
 }
 
 static void hardware_send_packet(struct net_device *dev, void *buf, short length, short pad)
@@ -834,8 +831,8 @@ static void el16_rx(struct net_device *dev)
                void __iomem *data_frame = lp->base + data_buffer_addr;
                ushort pkt_len = readw(data_frame);
 
-               if (rfd_cmd != 0 || data_buffer_addr != rx_head + 22
-                       || (pkt_len & 0xC000) != 0xC000) {
+               if (rfd_cmd != 0 || data_buffer_addr != rx_head + 22 ||
+                   (pkt_len & 0xC000) != 0xC000) {
                        pr_err("%s: Rx frame at %#x corrupted, "
                               "status %04x cmd %04x next %04x "
                               "data-buf @%04x %04x.\n",