net: wireless: bcmdhd: Enable wlan access on resume for all sdio functions
[linux-2.6.git] / drivers / net / ni5010.c
index 0cf6add..4d3f2e2 100644 (file)
@@ -51,7 +51,6 @@
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
-#include <linux/slab.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 #include <linux/init.h>
@@ -189,6 +188,17 @@ static void __init trigger_irq(int ioaddr)
                outb(MM_EN_XMT|MM_MUX, IE_MMODE); /* Start transmission */
 }
 
+static const struct net_device_ops ni5010_netdev_ops = {
+       .ndo_open               = ni5010_open,
+       .ndo_stop               = ni5010_close,
+       .ndo_start_xmit         = ni5010_send_packet,
+       .ndo_set_multicast_list = ni5010_set_multicast_list,
+       .ndo_tx_timeout         = ni5010_timeout,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_change_mtu         = eth_change_mtu,
+};
+
 /*
  *      This is the real probe routine.  Linux has a history of friendly device
  *      probes on the ISA bus.  A good device probes avoids doing writes, and
@@ -328,13 +338,8 @@ static int __init ni5010_probe1(struct net_device *dev, int ioaddr)
                outb(0, IE_RBUF);       /* set buffer byte 0 to 0 again */
        }
         printk("-> bufsize rcv/xmt=%d/%d\n", bufsize_rcv, NI5010_BUFSIZE);
-       memset(netdev_priv(dev), 0, sizeof(struct ni5010_local));
 
-       dev->open               = ni5010_open;
-       dev->stop               = ni5010_close;
-       dev->hard_start_xmit    = ni5010_send_packet;
-       dev->set_multicast_list = ni5010_set_multicast_list;
-       dev->tx_timeout         = ni5010_timeout;
+       dev->netdev_ops         = &ni5010_netdev_ops;
        dev->watchdog_timeo     = HZ/20;
 
        dev->flags &= ~IFF_MULTICAST;   /* Multicast doesn't work */
@@ -371,7 +376,7 @@ static int ni5010_open(struct net_device *dev)
 
        PRINTK2((KERN_DEBUG "%s: entering ni5010_open()\n", dev->name));
 
-       if (request_irq(dev->irq, &ni5010_interrupt, 0, boardname, dev)) {
+       if (request_irq(dev->irq, ni5010_interrupt, 0, boardname, dev)) {
                printk(KERN_WARNING "%s: Cannot get irq %#2x\n", dev->name, dev->irq);
                return -EAGAIN;
        }
@@ -439,7 +444,7 @@ static void ni5010_timeout(struct net_device *dev)
        /* Try to restart the adaptor. */
        /* FIXME: Give it a real kick here */
        chipset_init(dev, 1);
-       dev->trans_start = jiffies;
+       dev->trans_start = jiffies; /* prevent tx timeout */
        netif_wake_queue(dev);
 }
 
@@ -455,9 +460,8 @@ static int ni5010_send_packet(struct sk_buff *skb, struct net_device *dev)
 
        netif_stop_queue(dev);
        hardware_send_packet(dev, (unsigned char *)skb->data, skb->len, length-skb->len);
-       dev->trans_start = jiffies;
        dev_kfree_skb (skb);
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 /*
@@ -510,8 +514,6 @@ static void dump_packet(void *buf, int len)
                if (i % 16 == 15) printk("\n");
        }
        printk("\n");
-
-       return;
 }
 
 /* We have a good packet, get it out of the buffer. */
@@ -645,7 +647,8 @@ static void ni5010_set_multicast_list(struct net_device *dev)
 
        PRINTK2((KERN_DEBUG "%s: entering set_multicast_list\n", dev->name));
 
-       if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI || dev->mc_list) {
+       if (dev->flags & IFF_PROMISC || dev->flags & IFF_ALLMULTI ||
+           !netdev_mc_empty(dev)) {
                outb(RMD_PROMISC, EDLC_RMODE); /* Enable promiscuous mode */
                PRINTK((KERN_DEBUG "%s: Entering promiscuous mode\n", dev->name));
        } else {
@@ -766,12 +769,3 @@ module_init(ni5010_init_module);
 module_exit(ni5010_cleanup_module);
 #endif /* MODULE */
 MODULE_LICENSE("GPL");
-
-/*
- * Local variables:
- *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c ni5010.c"
- *  version-control: t
- *  kept-new-versions: 5
- *  tab-width: 4
- * End:
- */