net: use symbolic values for ndo_start_xmit() return codes
[safe/jmp/linux-2.6] / drivers / staging / wlan-ng / p80211netdev.c
index 1f166b3..bc0d764 100644 (file)
@@ -80,7 +80,6 @@
 /*================================================================*/
 /* Project Includes */
 
-#include "wlan_compat.h"
 #include "p80211types.h"
 #include "p80211hdr.h"
 #include "p80211conv.h"
@@ -433,21 +432,21 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
                /* success and more buf */
                /* avail, re: hw_txdata */
                netif_wake_queue(wlandev->netdev);
-               result = 0;
+               result = NETDEV_TX_OK;
        } else if (txresult == 1) {
                /* success, no more avail */
                pr_debug("txframe success, no more bufs\n");
                /* netdev->tbusy = 1;  don't set here, irqhdlr */
                /*   may have already cleared it */
-               result = 0;
+               result = NETDEV_TX_OK;
        } else if (txresult == 2) {
                /* alloc failure, drop frame */
                pr_debug("txframe returned alloc_fail\n");
-               result = 1;
+               result = NETDEV_TX_BUSY;
        } else {
                /* buffer full or queue busy, drop frame. */
                pr_debug("txframe returned full or busy\n");
-               result = 1;
+               result = NETDEV_TX_BUSY;
        }
 
 failed:
@@ -568,6 +567,8 @@ static int p80211knetdev_do_ioctl(netdevice_t *dev, struct ifreq *ifr, int cmd)
 
        pr_debug("rx'd ioctl, cmd=%d, len=%d\n", cmd, req->len);
 
+       mutex_lock(&wlandev->ioctl_lock);
+
 #ifdef SIOCETHTOOL
        if (cmd == SIOCETHTOOL) {
                result =
@@ -608,6 +609,8 @@ static int p80211knetdev_do_ioctl(netdevice_t *dev, struct ifreq *ifr, int cmd)
                result = -ENOMEM;
        }
 bail:
+       mutex_unlock(&wlandev->ioctl_lock);
+
        return result;          /* If allocate,copyfrom or copyto fails, return errno */
 }
 
@@ -708,6 +711,20 @@ static int wlan_change_mtu(netdevice_t *dev, int new_mtu)
        return 0;
 }
 
+static const struct net_device_ops p80211_netdev_ops = {
+       .ndo_init               = p80211knetdev_init,
+       .ndo_open               = p80211knetdev_open,
+       .ndo_stop               = p80211knetdev_stop,
+       .ndo_get_stats          = p80211knetdev_get_stats,
+       .ndo_start_xmit         = p80211knetdev_hard_start_xmit,
+       .ndo_set_multicast_list = p80211knetdev_set_multicast_list,
+       .ndo_do_ioctl           = p80211knetdev_do_ioctl,
+       .ndo_set_mac_address    = p80211knetdev_set_mac_address,
+       .ndo_tx_timeout         = p80211knetdev_tx_timeout,
+       .ndo_change_mtu         = wlan_change_mtu,
+       .ndo_validate_addr      = eth_validate_addr,
+};
+
 /*----------------------------------------------------------------
 * wlan_setup
 *
@@ -753,17 +770,12 @@ int wlan_setup(wlandevice_t *wlandev)
        } else {
                wlandev->netdev = dev;
                dev->ml_priv = wlandev;
-               dev->hard_start_xmit = p80211knetdev_hard_start_xmit;
-               dev->get_stats = p80211knetdev_get_stats;
-#ifdef HAVE_PRIVATE_IOCTL
-               dev->do_ioctl = p80211knetdev_do_ioctl;
-#endif
-#ifdef HAVE_MULTICAST
-               dev->set_multicast_list = p80211knetdev_set_multicast_list;
-#endif
-               dev->init = p80211knetdev_init;
-               dev->open = p80211knetdev_open;
-               dev->stop = p80211knetdev_stop;
+               dev->netdev_ops = &p80211_netdev_ops;
+
+               mutex_init(&wlandev->ioctl_lock);
+               /* block ioctls until fully initialised. Don't forget to call
+                  allow_ioctls at some point!*/
+               mutex_lock(&wlandev->ioctl_lock);
 
 #if (WIRELESS_EXT < 21)
                dev->get_wireless_stats = p80211wext_get_wireless_stats;
@@ -771,16 +783,6 @@ int wlan_setup(wlandevice_t *wlandev)
                dev->wireless_handlers = &p80211wext_handler_def;
 
                netif_stop_queue(dev);
-#ifdef HAVE_CHANGE_MTU
-               dev->change_mtu = wlan_change_mtu;
-#endif
-#ifdef HAVE_SET_MAC_ADDR
-               dev->set_mac_address = p80211knetdev_set_mac_address;
-#endif
-#ifdef HAVE_TX_TIMEOUT
-               dev->tx_timeout = &p80211knetdev_tx_timeout;
-               dev->watchdog_timeo = (wlan_watchdog * HZ) / 1000;
-#endif
                netif_carrier_off(dev);
        }
 
@@ -1115,3 +1117,8 @@ static void p80211knetdev_tx_timeout(netdevice_t *netdev)
                netif_wake_queue(wlandev->netdev);
        }
 }
+
+void p80211_allow_ioctls(wlandevice_t *wlandev)
+{
+       mutex_unlock(&wlandev->ioctl_lock);
+}