bcmdhd: use the wiphy from private data structure (i.e., wl_priv)
[linux-2.6.git] / drivers / net / eql.c
index f1cc66d..a59cf96 100644 (file)
  * Sorry, I had to rewrite most of this for 2.5.x -DaveM
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/capability.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/slab.h>
 #include <linux/timer.h>
 #include <linux/netdevice.h>
 #include <net/net_namespace.h>
 static int eql_open(struct net_device *dev);
 static int eql_close(struct net_device *dev);
 static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-static int eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);
-static struct net_device_stats *eql_get_stats(struct net_device *dev);
+static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);
 
 #define eql_is_slave(dev)      ((dev->flags & IFF_SLAVE) == IFF_SLAVE)
 #define eql_is_master(dev)     ((dev->flags & IFF_MASTER) == IFF_MASTER)
@@ -160,15 +163,20 @@ static void eql_timer(unsigned long param)
        add_timer(&eql->timer);
 }
 
-static char version[] __initdata =
-       "Equalizer2002: Simon Janes (simon@ncm.com) and David S. Miller (davem@redhat.com)\n";
+static const char version[] __initconst =
+       "Equalizer2002: Simon Janes (simon@ncm.com) and David S. Miller (davem@redhat.com)";
+
+static const struct net_device_ops eql_netdev_ops = {
+       .ndo_open       = eql_open,
+       .ndo_stop       = eql_close,
+       .ndo_do_ioctl   = eql_ioctl,
+       .ndo_start_xmit = eql_slave_xmit,
+};
 
 static void __init eql_setup(struct net_device *dev)
 {
        equalizer_t *eql = netdev_priv(dev);
 
-       SET_MODULE_OWNER(dev);
-
        init_timer(&eql->timer);
        eql->timer.data         = (unsigned long) eql;
        eql->timer.expires      = jiffies + EQL_DEFAULT_RESCHED_IVAL;
@@ -178,11 +186,7 @@ static void __init eql_setup(struct net_device *dev)
        INIT_LIST_HEAD(&eql->queue.all_slaves);
        eql->queue.master_dev   = dev;
 
-       dev->open               = eql_open;
-       dev->stop               = eql_close;
-       dev->do_ioctl           = eql_ioctl;
-       dev->hard_start_xmit    = eql_slave_xmit;
-       dev->get_stats          = eql_get_stats;
+       dev->netdev_ops         = &eql_netdev_ops;
 
        /*
         *      Now we undo some of the things that eth_setup does
@@ -194,6 +198,7 @@ static void __init eql_setup(struct net_device *dev)
 
        dev->type               = ARPHRD_SLIP;
        dev->tx_queue_len       = 5;            /* Hands them off fast */
+       dev->priv_flags        &= ~IFF_XMIT_DST_RELEASE;
 }
 
 static int eql_open(struct net_device *dev)
@@ -201,8 +206,8 @@ static int eql_open(struct net_device *dev)
        equalizer_t *eql = netdev_priv(dev);
 
        /* XXX We should force this off automatically for the user. */
-       printk(KERN_INFO "%s: remember to turn off Van-Jacobson compression on "
-              "your slave devices.\n", dev->name);
+       netdev_info(dev,
+                   "remember to turn off Van-Jacobson compression on your slave devices\n");
 
        BUG_ON(!list_empty(&eql->queue.all_slaves));
 
@@ -285,7 +290,7 @@ static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                        return eql_s_master_cfg(dev, ifr->ifr_data);
                default:
                        return -EOPNOTSUPP;
-       };
+       }
 }
 
 /* queue->lock must be held */
@@ -324,7 +329,7 @@ static slave_t *__eql_schedule_slaves(slave_queue_t *queue)
        return best_slave;
 }
 
-static int eql_slave_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        equalizer_t *eql = netdev_priv(dev);
        slave_t *slave;
@@ -339,21 +344,15 @@ static int eql_slave_xmit(struct sk_buff *skb, struct net_device *dev)
                skb->priority = 1;
                slave->bytes_queued += skb->len;
                dev_queue_xmit(skb);
-               eql->stats.tx_packets++;
+               dev->stats.tx_packets++;
        } else {
-               eql->stats.tx_dropped++;
+               dev->stats.tx_dropped++;
                dev_kfree_skb(skb);
        }
 
        spin_unlock(&eql->queue.lock);
 
-       return 0;
-}
-
-static struct net_device_stats * eql_get_stats(struct net_device *dev)
-{
-       equalizer_t *eql = netdev_priv(dev);
-       return &eql->stats;
+       return NETDEV_TX_OK;
 }
 
 /*
@@ -548,6 +547,8 @@ static int eql_s_slave_cfg(struct net_device *dev, slave_config_t __user *scp)
        }
        spin_unlock_bh(&eql->queue.lock);
 
+       dev_put(slave_dev);
+
        return ret;
 }
 
@@ -556,6 +557,8 @@ static int eql_g_master_cfg(struct net_device *dev, master_config_t __user *mcp)
        equalizer_t *eql;
        master_config_t mc;
 
+       memset(&mc, 0, sizeof(master_config_t));
+
        if (eql_is_master(dev)) {
                eql = netdev_priv(dev);
                mc.max_slaves = eql->max_slaves;
@@ -590,7 +593,7 @@ static int __init eql_init_module(void)
 {
        int err;
 
-       printk(version);
+       pr_info("%s\n", version);
 
        dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", eql_setup);
        if (!dev_eql)