]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/staging/wlan-ng/p80211wext.c
Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / staging / wlan-ng / p80211wext.c
index 906ba439237669b0150f12fb0f57cd42afd36ea4..0d570f1f378cd2274df70c0a43c596e5de686e27 100644 (file)
@@ -38,7 +38,6 @@
 /* System Includes */
 
 
-#include <linux/version.h>
 
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -47,9 +46,7 @@
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/wireless.h>
-#if WIRELESS_EXT > 12
 #include <net/iw_handler.h>
-#endif
 #include <linux/if_arp.h>
 #include <asm/bitops.h>
 #include <asm/uaccess.h>
@@ -58,7 +55,6 @@
 /*================================================================*/
 /* Project Includes */
 
-#include "version.h"
 #include "wlan_compat.h"
 
 #include "p80211types.h"
@@ -78,10 +74,8 @@ static int p80211wext_giwrate(netdevice_t *dev,
 static int p80211wext_giwessid(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_point *data, char *essid);
-/* compatibility to wireless extensions */
-#ifdef WIRELESS_EXT
 
-static UINT8 p80211_mhz_to_channel(UINT16 mhz)
+static u8 p80211_mhz_to_channel(u16 mhz)
 {
        if (mhz >= 5000) {
                return ((mhz - 5000) / 5);
@@ -97,7 +91,7 @@ static UINT8 p80211_mhz_to_channel(UINT16 mhz)
        return 0;
 }
 
-static UINT16 p80211_channel_to_mhz(UINT8 ch, int dot11a)
+static u16 p80211_channel_to_mhz(u8 ch, int dot11a)
 {
 
        if (ch == 0)
@@ -128,7 +122,7 @@ static const long p80211wext_channel_freq[] = {
        2412, 2417, 2422, 2427, 2432, 2437, 2442,
        2447, 2452, 2457, 2462, 2467, 2472, 2484
 };
-#define NUM_CHANNELS (sizeof(p80211wext_channel_freq) / sizeof(p80211wext_channel_freq[0]))
+#define NUM_CHANNELS ARRAY_SIZE(p80211wext_channel_freq)
 
 /* steal a spare bit to store the shared/opensystems state. should default to open if not set */
 #define HOSTWEP_SHAREDKEY BIT3
@@ -147,7 +141,7 @@ static int qual_as_percent(int snr ) {
 
 
 
-static int p80211wext_dorequest(wlandevice_t *wlandev, UINT32 did, UINT32 data)
+static int p80211wext_dorequest(wlandevice_t *wlandev, u32 did, u32 data)
 {
        p80211msg_dot11req_mibset_t     msg;
        p80211item_uint32_t             mibitem;
@@ -159,7 +153,7 @@ static int p80211wext_dorequest(wlandevice_t *wlandev, UINT32 did, UINT32 data)
        mibitem.did = did;
        mibitem.data = data;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        DBFEXIT;
        return result;
@@ -200,7 +194,7 @@ static int p80211wext_autojoin(wlandevice_t *wlandev)
        memcpy(msg.ssid.data.data, ssid, data.length);
        msg.ssid.data.len = data.length;
 
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -218,7 +212,7 @@ exit:
 struct iw_statistics* p80211wext_get_wireless_stats (netdevice_t *dev)
 {
        p80211msg_lnxreq_commsquality_t  quality;
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        struct iw_statistics* wstats = &wlandev->wstats;
        int retval;
 
@@ -245,20 +239,14 @@ struct iw_statistics* p80211wext_get_wireless_stats (netdevice_t *dev)
        wstats->qual.level = quality.level.data;  /* instant signal level */
        wstats->qual.noise = quality.noise.data;  /* instant noise level */
 
-#if WIRELESS_EXT > 18
        wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
-#else
-       wstats->qual.updated = 7;
-#endif
        wstats->discard.code = wlandev->rx.decrypt_err;
        wstats->discard.nwid = 0;
        wstats->discard.misc = 0;
 
-#if WIRELESS_EXT > 11
        wstats->discard.fragment = 0;  // incomplete fragments
        wstats->discard.retries = 0;   // tx retries.
        wstats->miss.beacon = 0;
-#endif
 
        DBFEXIT;
 
@@ -301,7 +289,7 @@ static int p80211wext_giwfreq(netdevice_t *dev,
                              struct iw_request_info *info,
                              struct iw_freq *freq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -312,7 +300,7 @@ static int p80211wext_giwfreq(netdevice_t *dev,
        msg.msgcode = DIDmsg_dot11req_mibget;
        mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -339,7 +327,7 @@ static int p80211wext_siwfreq(netdevice_t *dev,
                              struct iw_request_info *info,
                              struct iw_freq *freq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -362,7 +350,7 @@ static int p80211wext_siwfreq(netdevice_t *dev,
                mibitem.data = p80211_mhz_to_channel(freq->m);
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -374,13 +362,11 @@ static int p80211wext_siwfreq(netdevice_t *dev,
        return err;
 }
 
-#if WIRELESS_EXT > 8
-
 static int p80211wext_giwmode(netdevice_t *dev,
                              struct iw_request_info *info,
                              __u32 *mode, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
 
        DBFENTER;
 
@@ -407,7 +393,7 @@ static int p80211wext_siwmode(netdevice_t *dev,
                              struct iw_request_info *info,
                              __u32 *mode, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int     result;
@@ -447,14 +433,11 @@ static int p80211wext_siwmode(netdevice_t *dev,
        }
 
        /* Set Operation mode to the PORT TYPE RID */
-
-#warning "get rid of p2mib here"
-
        msg.msgcode = DIDmsg_dot11req_mibset;
        mibitem.did = DIDmib_p2_p2Static_p2CnfPortType;
        mibitem.data = (*mode == IW_MODE_ADHOC) ? 0 : 1;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result)
                err = -EFAULT;
@@ -479,12 +462,9 @@ static int p80211wext_giwrange(netdevice_t *dev,
        data->length = sizeof(*range);
        memset(range,0,sizeof(*range));
 
-#if WIRELESS_EXT > 9
        range->txpower_capa = IW_TXPOW_DBM;
        // XXX what about min/max_pmp, min/max_pmt, etc.
-#endif
 
-#if WIRELESS_EXT > 10
        range->we_version_compiled = WIRELESS_EXT;
        range->we_version_source = 13;
 
@@ -492,16 +472,13 @@ static int p80211wext_giwrange(netdevice_t *dev,
        range->retry_flags = IW_RETRY_LIMIT;
        range->min_retry = 0;
        range->max_retry = 255;
-#endif /* WIRELESS_EXT > 10 */
 
-#if WIRELESS_EXT > 16
         range->event_capa[0] = (IW_EVENT_CAPA_K_0 |  //mode/freq/ssid
                                 IW_EVENT_CAPA_MASK(SIOCGIWAP) |
                                 IW_EVENT_CAPA_MASK(SIOCGIWSCAN));
         range->event_capa[1] = IW_EVENT_CAPA_K_1;  //encode
         range->event_capa[4] = (IW_EVENT_CAPA_MASK(IWEVQUAL) |
                                 IW_EVENT_CAPA_MASK(IWEVCUSTOM) );
-#endif
 
        range->num_channels = NUM_CHANNELS;
 
@@ -543,14 +520,13 @@ static int p80211wext_giwrange(netdevice_t *dev,
        DBFEXIT;
        return 0;
 }
-#endif
 
 static int p80211wext_giwap(netdevice_t *dev,
                            struct iw_request_info *info,
                            struct sockaddr *ap_addr, char *extra)
 {
 
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
 
        DBFENTER;
 
@@ -561,21 +537,23 @@ static int p80211wext_giwap(netdevice_t *dev,
        return 0;
 }
 
-#if WIRELESS_EXT > 8
 static int p80211wext_giwencode(netdevice_t *dev,
                                struct iw_request_info *info,
                                struct iw_point *erq, char *key)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        int err = 0;
        int i;
 
        DBFENTER;
 
+       i = (erq->flags & IW_ENCODE_INDEX) - 1;
+       erq->flags = 0;
+
        if (wlandev->hostwep & HOSTWEP_PRIVACYINVOKED)
-               erq->flags = IW_ENCODE_ENABLED;
+               erq->flags |= IW_ENCODE_ENABLED;
        else
-               erq->flags = IW_ENCODE_DISABLED;
+               erq->flags |= IW_ENCODE_DISABLED;
 
        if (wlandev->hostwep & HOSTWEP_EXCLUDEUNENCRYPTED)
                erq->flags |= IW_ENCODE_RESTRICTED;
@@ -607,13 +585,12 @@ static int p80211wext_siwencode(netdevice_t *dev,
                                struct iw_request_info *info,
                                struct iw_point *erq, char *key)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211msg_dot11req_mibset_t     msg;
        p80211item_pstr32_t             pstr;
 
        int err = 0;
        int result = 0;
-       int enable = 0;
        int i;
 
        DBFENTER;
@@ -632,23 +609,23 @@ static int p80211wext_siwencode(netdevice_t *dev,
                else
                        i--;
 
-               result = p80211wext_dorequest(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, i);
+               /* Set current key number only if no keys are given */
+               if (erq->flags & IW_ENCODE_NOKEY) {
+                       result = p80211wext_dorequest(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, i);
 
-               if (result) {
-                       err = -EFAULT;
-                       goto exit;
-               }
-               else {
-                       enable = 1;
+                       if (result) {
+                               err = -EFAULT;
+                               goto exit;
+                       }
                }
 
-       }
-       else {
-               // Do not thing when no Key Index
+       } else {
+               // Use defaultkey if no Key Index
+               i = wlandev->hostwep & HOSTWEP_DEFAULTKEY_MASK;
        }
 
        /* Check if there is no key information in the iwconfig request */
-       if((erq->flags & IW_ENCODE_NOKEY) == 0 && enable == 1) {
+       if((erq->flags & IW_ENCODE_NOKEY) == 0 ) {
 
                /*------------------------------------------------------------
                 * If there is WEP Key for setting, check the Key Information
@@ -690,7 +667,7 @@ static int p80211wext_siwencode(netdevice_t *dev,
 
                        msg.msgcode = DIDmsg_dot11req_mibset;
                        memcpy(&msg.mibattribute.data, &pstr, sizeof(pstr));
-                       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+                       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
                        if (result) {
                                err = -EFAULT;
@@ -703,8 +680,7 @@ static int p80211wext_siwencode(netdevice_t *dev,
        /* Check the PrivacyInvoked flag */
        if (erq->flags & IW_ENCODE_DISABLED) {
                result = p80211wext_dorequest(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_false);
-       }
-       else if((erq->flags & IW_ENCODE_ENABLED) || enable == 1) {
+       } else {
                result = p80211wext_dorequest(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_true);
        }
 
@@ -713,7 +689,13 @@ static int p80211wext_siwencode(netdevice_t *dev,
                goto exit;
        }
 
-       /* Check the ExcludeUnencrypted flag */
+       /*  The  security  mode  may  be open or restricted, and its meaning
+           depends on the card used. With  most  cards,  in  open  mode  no
+           authentication  is  used  and  the  card  may  also  accept non-
+           encrypted sessions, whereas in restricted  mode  only  encrypted
+           sessions  are  accepted  and the card will use authentication if
+           available.
+       */
        if (erq->flags & IW_ENCODE_RESTRICTED) {
                result = p80211wext_dorequest(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, P80211ENUM_truth_true);
        }
@@ -736,7 +718,7 @@ static int p80211wext_giwessid(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_point *data, char *essid)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
 
        DBFENTER;
 
@@ -762,7 +744,7 @@ static int p80211wext_siwessid(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_point *data, char *essid)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211msg_lnxreq_autojoin_t     msg;
 
        int result;
@@ -798,7 +780,7 @@ static int p80211wext_siwessid(netdevice_t *dev,
        msg.ssid.data.len = length;
 
        WLAN_LOG_DEBUG(1,"autojoin_ssid for %s \n",essid);
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
         WLAN_LOG_DEBUG(1,"autojoin_ssid %d\n",result);
 
        if (result) {
@@ -816,7 +798,7 @@ static int p80211wext_siwcommit(netdevice_t *dev,
                                struct iw_request_info *info,
                                struct iw_point *data, char *essid)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        int err = 0;
 
        DBFENTER;
@@ -839,7 +821,7 @@ static int p80211wext_giwrate(netdevice_t *dev,
                              struct iw_request_info *info,
                              struct iw_param *rrq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -850,7 +832,7 @@ static int p80211wext_giwrate(netdevice_t *dev,
        msg.msgcode = DIDmsg_dot11req_mibget;
        mibitem.did = DIDmib_p2_p2MAC_p2CurrentTxRate;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -863,10 +845,10 @@ static int p80211wext_giwrate(netdevice_t *dev,
        rrq->disabled = 0;
        rrq->value = 0;
 
-#define                HFA384x_RATEBIT_1                       ((UINT16)1)
-#define                HFA384x_RATEBIT_2                       ((UINT16)2)
-#define                HFA384x_RATEBIT_5dot5                   ((UINT16)4)
-#define                HFA384x_RATEBIT_11                      ((UINT16)8)
+#define                HFA384x_RATEBIT_1                       ((u16)1)
+#define                HFA384x_RATEBIT_2                       ((u16)2)
+#define                HFA384x_RATEBIT_5dot5                   ((u16)4)
+#define                HFA384x_RATEBIT_11                      ((u16)8)
 
        switch (mibitem.data) {
        case HFA384x_RATEBIT_1:
@@ -893,7 +875,7 @@ static int p80211wext_giwrts(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_param *rts, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -904,7 +886,7 @@ static int p80211wext_giwrts(netdevice_t *dev,
        msg.msgcode = DIDmsg_dot11req_mibget;
        mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -927,7 +909,7 @@ static int p80211wext_siwrts(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_param *rts, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -948,7 +930,7 @@ static int p80211wext_siwrts(netdevice_t *dev,
                mibitem.data = rts->value;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -964,7 +946,7 @@ static int p80211wext_giwfrag(netdevice_t *dev,
                              struct iw_request_info *info,
                              struct iw_param *frag, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -975,7 +957,7 @@ static int p80211wext_giwfrag(netdevice_t *dev,
        msg.msgcode = DIDmsg_dot11req_mibget;
        mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold;
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -997,7 +979,7 @@ static int p80211wext_siwfrag(netdevice_t *dev,
                              struct iw_request_info *info,
                              struct iw_param *frag, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -1019,7 +1001,7 @@ static int p80211wext_siwfrag(netdevice_t *dev,
                mibitem.data = frag->value;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -1031,10 +1013,6 @@ static int p80211wext_siwfrag(netdevice_t *dev,
        return err;
 }
 
-#endif  /* WIRELESS_EXT > 8 */
-
-#if WIRELESS_EXT > 10
-
 #ifndef IW_RETRY_LONG
 #define IW_RETRY_LONG IW_RETRY_MAX
 #endif
@@ -1047,12 +1025,12 @@ static int p80211wext_giwretry(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_param *rrq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
        int err = 0;
-       UINT16 shortretry, longretry, lifetime;
+       u16 shortretry, longretry, lifetime;
 
        DBFENTER;
 
@@ -1060,7 +1038,7 @@ static int p80211wext_giwretry(netdevice_t *dev,
        mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -1074,7 +1052,7 @@ static int p80211wext_giwretry(netdevice_t *dev,
        mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -1088,7 +1066,7 @@ static int p80211wext_giwretry(netdevice_t *dev,
        mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -1126,7 +1104,7 @@ static int p80211wext_siwretry(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_param *rrq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -1151,7 +1129,7 @@ static int p80211wext_siwretry(netdevice_t *dev,
                mibitem.data =  rrq->value /= 1024;
 
                memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-               result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+               result = p80211req_dorequest(wlandev, (u8*)&msg);
 
                if (result) {
                        err = -EFAULT;
@@ -1163,7 +1141,7 @@ static int p80211wext_siwretry(netdevice_t *dev,
                        mibitem.data = rrq->value;
 
                        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-                       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+                       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
                        if (result) {
                                err = -EFAULT;
@@ -1176,7 +1154,7 @@ static int p80211wext_siwretry(netdevice_t *dev,
                        mibitem.data = rrq->value;
 
                        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-                       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+                       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
                        if (result) {
                                err = -EFAULT;
@@ -1191,14 +1169,11 @@ static int p80211wext_siwretry(netdevice_t *dev,
 
 }
 
-#endif /* WIRELESS_EXT > 10 */
-
-#if WIRELESS_EXT > 9
 static int p80211wext_siwtxpow(netdevice_t *dev,
                                struct iw_request_info *info,
                                struct iw_param *rrq, char *extra)
 {
-        wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
         p80211item_uint32_t             mibitem;
         p80211msg_dot11req_mibset_t     msg;
         int result;
@@ -1212,22 +1187,13 @@ static int p80211wext_siwtxpow(netdevice_t *dev,
         }
 
         msg.msgcode = DIDmsg_dot11req_mibset;
-
-        switch (rrq->value) {
-
-          case 1 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel1; break;
-          case 2 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel2; break;
-          case 3 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel3; break;
-          case 4 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel4; break;
-          case 5 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel5; break;
-          case 6 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel6; break;
-          case 7 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel7; break;
-          case 8 : mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel8; break;
-          default: mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel8; break;
-       }
-
+       mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel;
+       if (rrq->fixed == 0)
+         mibitem.data = 30;
+       else
+         mibitem.data = rrq->value;
         memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-        result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+        result = p80211req_dorequest(wlandev, (u8*)&msg);
 
         if (result) {
                 err = -EFAULT;
@@ -1243,7 +1209,7 @@ static int p80211wext_giwtxpow(netdevice_t *dev,
                               struct iw_request_info *info,
                               struct iw_param *rrq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211item_uint32_t             mibitem;
        p80211msg_dot11req_mibset_t     msg;
        int result;
@@ -1255,7 +1221,7 @@ static int p80211wext_giwtxpow(netdevice_t *dev,
        mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel;
 
        memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
 
        if (result) {
                err = -EFAULT;
@@ -1275,13 +1241,12 @@ static int p80211wext_giwtxpow(netdevice_t *dev,
        DBFEXIT;
        return err;
 }
-#endif /* WIRELESS_EXT > 9 */
 
 static int p80211wext_siwspy(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_point *srq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
         struct sockaddr address[IW_MAX_SPY];
         int number = srq->length;
         int i;
@@ -1317,7 +1282,7 @@ static int p80211wext_giwspy(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_point *srq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
 
         struct sockaddr address[IW_MAX_SPY];
         struct iw_quality spy_stat[IW_MAX_SPY];
@@ -1373,12 +1338,11 @@ static int prism2_result2err (int prism2_result)
        return err;
 }
 
-#if WIRELESS_EXT > 13
 static int p80211wext_siwscan(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_point *srq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211msg_dot11req_scan_t       msg;
        int result;
        int err = 0;
@@ -1409,7 +1373,7 @@ static int p80211wext_siwscan(netdevice_t *dev,
        msg.maxchanneltime.data = 250;
        msg.minchanneltime.data = 200;
 
-       result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+       result = p80211req_dorequest(wlandev, (u8*)&msg);
        if (result)
                err = prism2_result2err (msg.resultcode.data);
 
@@ -1501,7 +1465,7 @@ static int p80211wext_giwscan(netdevice_t *dev,
                             struct iw_request_info *info,
                             struct iw_point *srq, char *extra)
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        p80211msg_dot11req_scan_results_t       msg;
        int result = 0;
        int err = 0;
@@ -1520,7 +1484,7 @@ static int p80211wext_giwscan(netdevice_t *dev,
                msg.msgcode = DIDmsg_dot11req_scan_results;
                msg.bssindex.data = i;
 
-               result = p80211req_dorequest(wlandev, (UINT8*)&msg);
+               result = p80211req_dorequest(wlandev, (u8*)&msg);
                if ((result != 0) ||
                    (msg.resultcode.data != P80211ENUM_resultcode_success)) {
                        break;
@@ -1540,18 +1504,16 @@ static int p80211wext_giwscan(netdevice_t *dev,
        DBFEXIT;
        return err;
 }
-#endif
 
 /*****************************************************/
 //extra wireless extensions stuff to support NetworkManager (I hope)
 
-#if WIRELESS_EXT > 17
 /* SIOCSIWENCODEEXT */
 static int p80211wext_set_encodeext(struct net_device *dev,
                                struct iw_request_info *info,
                                union iwreq_data *wrqu, char *extra)
 {
-  wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+  wlandevice_t *wlandev = dev->ml_priv;
   struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
        p80211msg_dot11req_mibset_t     msg;
        p80211item_pstr32_t             *pstr;
@@ -1580,7 +1542,7 @@ static int p80211wext_set_encodeext(struct net_device *dev,
 
 
   if ( ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY ) {
-    if ( ! ext->alg & IW_ENCODE_ALG_WEP) {
+    if (!(ext->alg & IW_ENCODE_ALG_WEP)) {
       WLAN_LOG_DEBUG(1,"asked to set a non wep key :(");
       return -EINVAL;
     }
@@ -1615,7 +1577,7 @@ static int p80211wext_set_encodeext(struct net_device *dev,
       break;
     }
     msg.msgcode = DIDmsg_dot11req_mibset;
-    result = p80211req_dorequest(wlandev,(UINT8*)&msg);
+    result = p80211req_dorequest(wlandev,(u8*)&msg);
     WLAN_LOG_DEBUG(1,"result (%d)\n",result);
   }
   return result;
@@ -1627,7 +1589,7 @@ static int p80211wext_get_encodeext(struct net_device *dev,
                                union iwreq_data *wrqu, char *extra)
 
 {
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+       wlandevice_t *wlandev = dev->ml_priv;
        struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
 
        struct iw_point *encoding = &wrqu->encoding;
@@ -1682,7 +1644,7 @@ static int p80211_wext_set_iwauth (struct net_device *dev,
                                   struct iw_request_info *info,
                                   union iwreq_data *wrqu, char *extra)
 {
-  wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+  wlandevice_t *wlandev = dev->ml_priv;
   struct iw_param *param = &wrqu->param;
   int result =0;
 
@@ -1734,7 +1696,7 @@ static int p80211_wext_get_iwauth (struct net_device *dev,
                                   struct iw_request_info *info,
                                   union iwreq_data *wrqu, char *extra)
 {
-  wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
+  wlandevice_t *wlandev = dev->ml_priv;
   struct iw_param *param = &wrqu->param;
   int result =0;
 
@@ -1763,26 +1725,6 @@ static int p80211_wext_get_iwauth (struct net_device *dev,
   return result;
 }
 
-
-#endif
-
-
-
-
-
-
-/*****************************************************/
-
-
-
-
-
-/*
-typedef int (*iw_handler)(netdevice_t *dev, struct iw_request_info *info,
-                          union iwreq_data *wrqu, char *extra);
-*/
-
-#if WIRELESS_EXT > 12
 static iw_handler p80211wext_handlers[] =  {
        (iw_handler) p80211wext_siwcommit,              /* SIOCSIWCOMMIT */
        (iw_handler) p80211wext_giwname,                /* SIOCGIWNAME */
@@ -1808,13 +1750,8 @@ static iw_handler p80211wext_handlers[] =  {
        (iw_handler) p80211wext_giwap,                  /* SIOCGIWAP */
        (iw_handler) NULL,                              /* -- hole -- */
        (iw_handler) NULL,                              /* SIOCGIWAPLIST */
-#if WIRELESS_EXT > 13
-       (iw_handler) p80211wext_siwscan,                        /* SIOCSIWSCAN */
-       (iw_handler) p80211wext_giwscan,                        /* SIOCGIWSCAN */
-#else /* WIRELESS_EXT > 13 */
-       (iw_handler) NULL,      /* null */              /* SIOCSIWSCAN */
-       (iw_handler) NULL,      /* null */              /* SIOCGIWSCAN */
-#endif /* WIRELESS_EXT > 13 */
+       (iw_handler) p80211wext_siwscan,                /* SIOCSIWSCAN */
+       (iw_handler) p80211wext_giwscan,                /* SIOCGIWSCAN */
        (iw_handler) p80211wext_siwessid,               /* SIOCSIWESSID */
        (iw_handler) p80211wext_giwessid,               /* SIOCGIWESSID */
        (iw_handler) NULL,                              /* SIOCSIWNICKN */
@@ -1835,9 +1772,7 @@ static iw_handler p80211wext_handlers[] =  {
        (iw_handler) p80211wext_giwencode,              /* SIOCGIWENCODE */
        (iw_handler) NULL,                              /* SIOCSIWPOWER */
        (iw_handler) NULL,                              /* SIOCGIWPOWER */
-#if WIRELESS_EXT > 17
 /* WPA operations */
-
        (iw_handler) NULL,                              /* -- hole -- */
        (iw_handler) NULL,                              /* -- hole -- */
        (iw_handler) NULL, /* SIOCSIWGENIE      set generic IE */
@@ -1848,170 +1783,18 @@ static iw_handler p80211wext_handlers[] =  {
        (iw_handler) p80211wext_set_encodeext, /* SIOCSIWENCODEEXT  set encoding token & mode */
        (iw_handler) p80211wext_get_encodeext, /* SIOCGIWENCODEEXT  get encoding token & mode */
        (iw_handler) NULL, /* SIOCSIWPMKSA      PMKSA cache operation */
-#endif
 };
 
 struct iw_handler_def p80211wext_handler_def = {
-       .num_standard = sizeof(p80211wext_handlers) / sizeof(iw_handler),
+       .num_standard = ARRAY_SIZE(p80211wext_handlers),
        .num_private = 0,
        .num_private_args = 0,
         .standard = p80211wext_handlers,
        .private = NULL,
        .private_args = NULL,
-#if WIRELESS_EXT > 16
        .get_wireless_stats = p80211wext_get_wireless_stats
-#endif
 };
 
-#endif
-
-/* wireless extensions' ioctls */
-int p80211wext_support_ioctl(netdevice_t *dev, struct ifreq *ifr, int cmd)
-{
-       wlandevice_t *wlandev = (wlandevice_t*)dev->priv;
-
-#if WIRELESS_EXT < 13
-       struct iwreq *iwr = (struct iwreq*)ifr;
-#endif
-
-       p80211item_uint32_t             mibitem;
-       int err = 0;
-
-       DBFENTER;
-
-       mibitem.status = P80211ENUM_msgitem_status_data_ok;
-
-       if ( wlandev->msdstate != WLAN_MSD_RUNNING ) {
-               err = -ENODEV;
-               goto exit;
-       }
-
-       WLAN_LOG_DEBUG(1, "Received wireless extension ioctl #%d.\n", cmd);
-
-       switch (cmd) {
-#if WIRELESS_EXT < 13
-       case SIOCSIWNAME:  /* unused  */
-               err = (-EOPNOTSUPP);
-               break;
-       case SIOCGIWNAME: /* get name == wireless protocol */
-                err = p80211wext_giwname(dev, NULL, (char *) &iwr->u, NULL);
-               break;
-       case SIOCSIWNWID:
-       case SIOCGIWNWID:
-               err = (-EOPNOTSUPP);
-               break;
-       case SIOCSIWFREQ: /* set channel */
-                err = p80211wext_siwfreq(dev, NULL, &(iwr->u.freq), NULL);
-               break;
-       case SIOCGIWFREQ: /* get channel */
-                err = p80211wext_giwfreq(dev, NULL, &(iwr->u.freq), NULL);
-               break;
-       case SIOCSIWRANGE:
-       case SIOCSIWPRIV:
-       case SIOCSIWAP: /* set access point MAC addresses (BSSID) */
-               err = (-EOPNOTSUPP);
-               break;
-
-       case SIOCGIWAP: /* get access point MAC addresses (BSSID) */
-                err = p80211wext_giwap(dev, NULL, &(iwr->u.ap_addr), NULL);
-               break;
-
-#if WIRELESS_EXT > 8
-       case SIOCSIWMODE: /* set operation mode */
-       case SIOCSIWESSID: /* set SSID (network name) */
-       case SIOCSIWRATE: /* set default bit rate (bps) */
-               err = (-EOPNOTSUPP);
-               break;
-
-       case SIOCGIWMODE: /* get operation mode */
-               err = p80211wext_giwmode(dev, NULL, &iwr->u.mode, NULL);
-
-               break;
-       case SIOCGIWNICKN: /* get node name/nickname */
-       case SIOCGIWESSID: /* get SSID */
-               if(iwr->u.essid.pointer) {
-                        char ssid[IW_ESSID_MAX_SIZE+1];
-                       memset(ssid, 0, sizeof(ssid));
-
-                       err = p80211wext_giwessid(dev, NULL, &iwr->u.essid, ssid);
-                       if(copy_to_user(iwr->u.essid.pointer, ssid, sizeof(ssid)))
-                               err = (-EFAULT);
-               }
-               break;
-       case SIOCGIWRATE:
-                err = p80211wext_giwrate(dev, NULL, &iwr->u.bitrate, NULL);
-               break;
-       case SIOCGIWRTS:
-               err = p80211wext_giwrts(dev, NULL, &iwr->u.rts, NULL);
-               break;
-       case SIOCGIWFRAG:
-               err = p80211wext_giwfrag(dev, NULL, &iwr->u.rts, NULL);
-               break;
-       case SIOCGIWENCODE:
-               if (!capable(CAP_NET_ADMIN))
-                       err = -EPERM;
-               else if (iwr->u.encoding.pointer) {
-                       char keybuf[MAX_KEYLEN];
-                       err = p80211wext_giwencode(dev, NULL,
-                                                    &iwr->u.encoding, keybuf);
-                       if (copy_to_user(iwr->u.encoding.pointer, keybuf,
-                                        iwr->u.encoding.length))
-                               err = -EFAULT;
-               }
-               break;
-       case SIOCGIWAPLIST:
-       case SIOCSIWRTS:
-       case SIOCSIWFRAG:
-       case SIOCSIWSENS:
-       case SIOCGIWSENS:
-       case SIOCSIWNICKN: /* set node name/nickname */
-       case SIOCSIWENCODE: /* set encoding token & mode */
-       case SIOCSIWSPY:
-       case SIOCGIWSPY:
-       case SIOCSIWPOWER:
-       case SIOCGIWPOWER:
-       case SIOCGIWPRIV:
-               err = (-EOPNOTSUPP);
-               break;
-       case SIOCGIWRANGE:
-               if(iwr->u.data.pointer != NULL) {
-                        struct iw_range range;
-                        err = p80211wext_giwrange(dev, NULL, &iwr->u.data,
-                                                 (char *) &range);
-                       /* Push that up to the caller */
-                       if (copy_to_user(iwr->u.data.pointer, &range, sizeof(range)))
-                               err = -EFAULT;
-               }
-               break;
-#endif /* WIRELESS_EXT > 8 */
-#if WIRELESS_EXT > 9
-       case SIOCSIWTXPOW:
-               err = (-EOPNOTSUPP);
-               break;
-       case SIOCGIWTXPOW:
-               err = p80211wext_giwtxpow(dev, NULL, &iwr->u.txpower, NULL);
-               break;
-#endif /* WIRELESS_EXT > 9 */
-#if WIRELESS_EXT > 10
-       case SIOCSIWRETRY:
-               err = (-EOPNOTSUPP);
-               break;
-       case SIOCGIWRETRY:
-               err = p80211wext_giwretry(dev, NULL, &iwr->u.retry, NULL);
-               break;
-#endif /* WIRELESS_EXT > 10 */
-
-#endif /* WIRELESS_EXT <= 12 */
-
-       default:
-               err = (-EOPNOTSUPP);
-               break;
-       }
-
- exit:
-       DBFEXIT;
-       return (err);
-}
 
 int p80211wext_event_associated(wlandevice_t *wlandev, int assoc)
 {
@@ -2019,7 +1802,6 @@ int p80211wext_event_associated(wlandevice_t *wlandev, int assoc)
 
         DBFENTER;
 
-#if WIRELESS_EXT > 13
         /* Send the association state first */
         data.ap_addr.sa_family = ARPHRD_ETHER;
         if (assoc) {
@@ -2034,15 +1816,12 @@ int p80211wext_event_associated(wlandevice_t *wlandev, int assoc)
         if (!assoc) goto done;
 
         // XXX send association data, like IEs, etc etc.
-#endif
+
  done:
         DBFEXIT;
         return 0;
 }
 
 
-#endif /* compatibility to wireless extensions */
-
-