staging: rtl8723bs: remove obsolete wext support
authorFabio Aiuto <fabioaiuto83@gmail.com>
Mon, 23 Aug 2021 14:11:59 +0000 (16:11 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Aug 2021 10:13:01 +0000 (12:13 +0200)
cfg80211 has been fully implemented so
remove all wext and wext private handlers and their
registration.

Now wext userspace calls can be managed via
cfg80211 wext compatibility.

Signed-off-by: Fabio Aiuto <fabioaiuto83@gmail.com>
Link: https://lore.kernel.org/r/61c4bb20bbb6ce30e4ddd01aa73de3f686a99445.1629727333.git.fabioaiuto83@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/Kconfig
drivers/staging/rtl8723bs/os_dep/ioctl_linux.c
drivers/staging/rtl8723bs/os_dep/os_intfs.c

index 7eae820eae3b14dfc0ff36972fa3c3953fc17fb1..f40b3021fe8a900eb35a7fcd00691229329eff68 100644 (file)
@@ -3,8 +3,7 @@ config RTL8723BS
        tristate "Realtek RTL8723BS SDIO Wireless LAN NIC driver"
        depends on WLAN && MMC && CFG80211
        depends on m
-       select WIRELESS_EXT
-       select WEXT_PRIV
+       select CFG80211_WEXT
        select CRYPTO_LIB_ARC4
        help
        This option enables support for RTL8723BS SDIO drivers, such as
index e2ab34463182b917de3593d3afa2f180a304cce9..790e3b2454e84a10347e3e867d87e3b4fa488e7f 100644 (file)
@@ -29,9 +29,6 @@
 #define WEXT_CSCAN_HOME_DWELL_SECTION  'H'
 #define WEXT_CSCAN_TYPE_SECTION                'T'
 
-static u32 rtw_rates[] = {1000000, 2000000, 5500000, 11000000,
-       6000000, 9000000, 12000000, 18000000, 24000000, 36000000, 48000000, 54000000};
-
 void indicate_wx_scan_complete_event(struct adapter *padapter)
 {
        union iwreq_data wrqu;
@@ -70,272 +67,6 @@ void rtw_indicate_wx_disassoc_event(struct adapter *padapter)
        eth_zero_addr(wrqu.ap_addr.sa_data);
 }
 
-static char *translate_scan(struct adapter *padapter,
-                               struct iw_request_info *info, struct wlan_network *pnetwork,
-                               char *start, char *stop)
-{
-       struct iw_event iwe;
-       u16 cap;
-       u32 ht_ielen = 0;
-       char *custom = NULL;
-       char *p;
-       u16 max_rate = 0, rate, ht_cap = false, vht_cap = false;
-       u32 i = 0;
-       u8 bw_40MHz = 0, short_GI = 0;
-       u16 mcs_rate = 0, vht_data_rate = 0;
-       u8 ie_offset = (pnetwork->network.reserved[0] == 2 ? 0 : 12);
-       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       u8 ss, sq;
-
-       /*  AP MAC address  */
-       iwe.cmd = SIOCGIWAP;
-       iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-
-       memcpy(iwe.u.ap_addr.sa_data, pnetwork->network.mac_address, ETH_ALEN);
-       start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_ADDR_LEN);
-
-       /* Add the ESSID */
-       iwe.cmd = SIOCGIWESSID;
-       iwe.u.data.flags = 1;
-       iwe.u.data.length = min((u16)pnetwork->network.ssid.ssid_length, (u16)32);
-       start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.ssid.ssid);
-
-       /* parsing HT_CAP_IE */
-       if (pnetwork->network.reserved[0] == 2) { /*  Probe Request */
-               p = rtw_get_ie(&pnetwork->network.ies[0], WLAN_EID_HT_CAPABILITY, &ht_ielen, pnetwork->network.ie_length);
-       } else {
-               p = rtw_get_ie(&pnetwork->network.ies[12], WLAN_EID_HT_CAPABILITY, &ht_ielen, pnetwork->network.ie_length-12);
-       }
-       if (p && ht_ielen > 0) {
-               struct ieee80211_ht_cap *pht_capie;
-               ht_cap = true;
-               pht_capie = (struct ieee80211_ht_cap *)(p+2);
-               memcpy(&mcs_rate, pht_capie->mcs.rx_mask, 2);
-               bw_40MHz = (le16_to_cpu(pht_capie->cap_info) & IEEE80211_HT_CAP_SUP_WIDTH) ? 1 : 0;
-               short_GI = (le16_to_cpu(pht_capie->cap_info) & (IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40)) ? 1 : 0;
-       }
-
-       /* Add the protocol name */
-       iwe.cmd = SIOCGIWNAME;
-       if (rtw_is_cckratesonly_included((u8 *)&pnetwork->network.supported_rates)) {
-               if (ht_cap)
-                       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bn");
-               else
-               snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11b");
-       } else if (rtw_is_cckrates_included((u8 *)&pnetwork->network.supported_rates)) {
-               if (ht_cap)
-                       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bgn");
-               else
-                       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bg");
-       } else {
-               if (pnetwork->network.configuration.ds_config <= 14) {
-                       if (ht_cap)
-                               snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11gn");
-                       else
-                               snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11g");
-               }
-       }
-
-       start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_CHAR_LEN);
-
-         /* Add mode */
-       if (pnetwork->network.reserved[0] == 2) { /*  Probe Request */
-               cap = 0;
-       } else {
-               __le16 le_tmp;
-
-               iwe.cmd = SIOCGIWMODE;
-               memcpy((u8 *)&le_tmp, rtw_get_capability_from_ie(pnetwork->network.ies), 2);
-               cap = le16_to_cpu(le_tmp);
-       }
-
-       if (cap & (WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_ESS)) {
-               if (cap & WLAN_CAPABILITY_ESS)
-                       iwe.u.mode = IW_MODE_MASTER;
-               else
-                       iwe.u.mode = IW_MODE_ADHOC;
-
-               start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_UINT_LEN);
-       }
-
-       if (pnetwork->network.configuration.ds_config < 1)
-               pnetwork->network.configuration.ds_config = 1;
-
-        /* Add frequency/channel */
-       iwe.cmd = SIOCGIWFREQ;
-       iwe.u.freq.m = rtw_ch2freq(pnetwork->network.configuration.ds_config) * 100000;
-       iwe.u.freq.e = 1;
-       iwe.u.freq.i = pnetwork->network.configuration.ds_config;
-       start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_FREQ_LEN);
-
-       /* Add encryption capability */
-       iwe.cmd = SIOCGIWENCODE;
-       if (cap & WLAN_CAPABILITY_PRIVACY)
-               iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
-       else
-               iwe.u.data.flags = IW_ENCODE_DISABLED;
-       iwe.u.data.length = 0;
-       start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.ssid.ssid);
-
-       /*Add basic and extended rates */
-       max_rate = 0;
-       custom = kzalloc(MAX_CUSTOM_LEN, GFP_ATOMIC);
-       if (!custom)
-               return start;
-       p = custom;
-       p += scnprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
-       while (pnetwork->network.supported_rates[i] != 0) {
-               rate = pnetwork->network.supported_rates[i]&0x7F;
-               if (rate > max_rate)
-                       max_rate = rate;
-               p += scnprintf(p, MAX_CUSTOM_LEN - (p - custom),
-                             "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
-               i++;
-       }
-
-       if (vht_cap) {
-               max_rate = vht_data_rate;
-       } else if (ht_cap) {
-               if (mcs_rate & 0x8000) /* MCS15 */
-                       max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
-               else /* default MCS7 */
-                       max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
-
-               max_rate = max_rate*2;/* Mbps/2; */
-       }
-
-       iwe.cmd = SIOCGIWRATE;
-       iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
-       iwe.u.bitrate.value = max_rate * 500000;
-       start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_PARAM_LEN);
-
-       /* parsing WPA/WPA2 IE */
-       if (pnetwork->network.reserved[0] != 2) { /*  Probe Request */
-               u8 *buf;
-               u8 wpa_ie[255], rsn_ie[255];
-               u16 wpa_len = 0, rsn_len = 0;
-               u8 *p;
-               rtw_get_sec_ie(pnetwork->network.ies, pnetwork->network.ie_length, rsn_ie, &rsn_len, wpa_ie, &wpa_len);
-
-               buf = kzalloc(MAX_WPA_IE_LEN*2, GFP_ATOMIC);
-               if (!buf)
-                       return start;
-               if (wpa_len > 0) {
-                       p = buf;
-                       p += scnprintf(p, (MAX_WPA_IE_LEN * 2) - (p - buf), "wpa_ie =");
-                       for (i = 0; i < wpa_len; i++)
-                               p += scnprintf(p, (MAX_WPA_IE_LEN * 2) - (p - buf),
-                                               "%02x", wpa_ie[i]);
-
-                       if (wpa_len > 100) {
-                               printk("-----------------Len %d----------------\n", wpa_len);
-                               for (i = 0; i < wpa_len; i++)
-                                       printk("%02x ", wpa_ie[i]);
-                               printk("\n");
-                               printk("-----------------Len %d----------------\n", wpa_len);
-                       }
-
-                       memset(&iwe, 0, sizeof(iwe));
-                       iwe.cmd = IWEVCUSTOM;
-                       iwe.u.data.length = strlen(buf);
-                       start = iwe_stream_add_point(info, start, stop, &iwe, buf);
-
-                       memset(&iwe, 0, sizeof(iwe));
-                       iwe.cmd = IWEVGENIE;
-                       iwe.u.data.length = wpa_len;
-                       start = iwe_stream_add_point(info, start, stop, &iwe, wpa_ie);
-               }
-               if (rsn_len > 0) {
-                       p = buf;
-                       memset(buf, 0, MAX_WPA_IE_LEN*2);
-                       p += scnprintf(p, (MAX_WPA_IE_LEN * 2) - (p - buf), "rsn_ie =");
-                       for (i = 0; i < rsn_len; i++)
-                               p += scnprintf(p, (MAX_WPA_IE_LEN * 2) - (p - buf),
-                                               "%02x", rsn_ie[i]);
-                       memset(&iwe, 0, sizeof(iwe));
-                       iwe.cmd = IWEVCUSTOM;
-                       iwe.u.data.length = strlen(buf);
-                       start = iwe_stream_add_point(info, start, stop, &iwe, buf);
-
-                       memset(&iwe, 0, sizeof(iwe));
-                       iwe.cmd = IWEVGENIE;
-                       iwe.u.data.length = rsn_len;
-                       start = iwe_stream_add_point(info, start, stop, &iwe, rsn_ie);
-               }
-               kfree(buf);
-       }
-
-       { /* parsing WPS IE */
-               uint cnt = 0, total_ielen;
-               u8 *wpsie_ptr = NULL;
-               uint wps_ielen = 0;
-
-               u8 *ie_ptr;
-               total_ielen = pnetwork->network.ie_length - ie_offset;
-
-               if (pnetwork->network.reserved[0] == 2) { /*  Probe Request */
-                       ie_ptr = pnetwork->network.ies;
-                       total_ielen = pnetwork->network.ie_length;
-               } else {    /*  Beacon or Probe Respones */
-                       ie_ptr = pnetwork->network.ies + _FIXED_IE_LENGTH_;
-                       total_ielen = pnetwork->network.ie_length - _FIXED_IE_LENGTH_;
-               }
-
-               while (cnt < total_ielen) {
-                       if (rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen > 2)) {
-                               wpsie_ptr = &ie_ptr[cnt];
-                               iwe.cmd = IWEVGENIE;
-                               iwe.u.data.length = (u16)wps_ielen;
-                               start = iwe_stream_add_point(info, start, stop, &iwe, wpsie_ptr);
-                       }
-                       cnt += ie_ptr[cnt + 1] + 2; /* goto next */
-               }
-       }
-
-       /* Add quality statistics */
-       iwe.cmd = IWEVQUAL;
-       iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED
-               | IW_QUAL_NOISE_INVALID;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) == true &&
-               is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network, 0)) {
-               ss = padapter->recvpriv.signal_strength;
-               sq = padapter->recvpriv.signal_qual;
-       } else {
-               ss = pnetwork->network.phy_info.signal_strength;
-               sq = pnetwork->network.phy_info.signal_quality;
-       }
-
-
-       iwe.u.qual.level = (u8)ss;/*  */
-
-       iwe.u.qual.qual = (u8)sq;   /*  signal quality */
-
-       iwe.u.qual.noise = 0; /*  noise level */
-
-       start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN);
-
-       {
-               u8 *buf;
-               u8 *pos;
-
-               buf = kzalloc(MAX_WPA_IE_LEN, GFP_ATOMIC);
-               if (!buf)
-                       goto exit;
-
-               pos = pnetwork->network.reserved;
-               memset(&iwe, 0, sizeof(iwe));
-               iwe.cmd = IWEVCUSTOM;
-               iwe.u.data.length = scnprintf(buf, MAX_WPA_IE_LEN, "fm =%02X%02X", pos[1], pos[0]);
-               start = iwe_stream_add_point(info, start, stop, &iwe, buf);
-               kfree(buf);
-       }
-exit:
-       kfree(custom);
-
-       return start;
-}
-
 static int wpa_set_auth_algs(struct net_device *dev, u32 value)
 {
        struct adapter *padapter = rtw_netdev_priv(dev);
@@ -617,2126 +348,55 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie
                case WPA_CIPHER_TKIP:
                        padapter->securitypriv.dot11PrivacyAlgrthm = _TKIP_;
                        padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
-                       break;
-               case WPA_CIPHER_CCMP:
-                       padapter->securitypriv.dot11PrivacyAlgrthm = _AES_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
-                       break;
-               case WPA_CIPHER_WEP104:
-                       padapter->securitypriv.dot11PrivacyAlgrthm = _WEP104_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-                       break;
-               }
-
-               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-               {/* set wps_ie */
-                       u16 cnt = 0;
-                       u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
-
-                       while (cnt < ielen) {
-                               eid = buf[cnt];
-
-                               if ((eid == WLAN_EID_VENDOR_SPECIFIC) && (!memcmp(&buf[cnt+2], wps_oui, 4))) {
-                                       padapter->securitypriv.wps_ie_len = ((buf[cnt+1]+2) < MAX_WPS_IE_LEN) ? (buf[cnt+1]+2):MAX_WPS_IE_LEN;
-
-                                       memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len);
-
-                                       set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
-
-                                       cnt += buf[cnt+1]+2;
-
-                                       break;
-                               } else {
-                                       cnt += buf[cnt+1]+2; /* goto next */
-                               }
-                       }
-               }
-       }
-
-       /* TKIP and AES disallow multicast packets until installing group key */
-        if (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
-                || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
-                || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
-                /* WPS open need to enable multicast */
-                /*  check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == true) */
-                rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
-
-exit:
-
-       kfree(buf);
-
-       return ret;
-}
-
-static int rtw_wx_get_name(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u32 ht_ielen = 0;
-       char *p;
-       u8 ht_cap = false;
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-       NDIS_802_11_RATES_EX *prates = NULL;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE) == true) {
-               /* parsing HT_CAP_IE */
-               p = rtw_get_ie(&pcur_bss->ies[12], WLAN_EID_HT_CAPABILITY, &ht_ielen, pcur_bss->ie_length-12);
-               if (p && ht_ielen > 0)
-                       ht_cap = true;
-
-               prates = &pcur_bss->supported_rates;
-
-               if (rtw_is_cckratesonly_included((u8 *)prates)) {
-                       if (ht_cap)
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11bn");
-                       else
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11b");
-               } else if (rtw_is_cckrates_included((u8 *)prates)) {
-                       if (ht_cap)
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11bgn");
-                       else
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11bg");
-               } else {
-                       if (pcur_bss->configuration.ds_config <= 14) {
-                               if (ht_cap)
-                                       snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11gn");
-                               else
-                                       snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11g");
-                       }
-               }
-       } else {
-               /* prates = &padapter->registrypriv.dev_network.supported_rates; */
-               /* snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11g"); */
-               snprintf(wrqu->name, IFNAMSIZ, "unassociated");
-       }
-       return 0;
-}
-
-static int rtw_wx_set_freq(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       return 0;
-}
-
-static int rtw_wx_get_freq(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) == true) {
-               /* wrqu->freq.m = ieee80211_wlan_frequencies[pcur_bss->configuration.ds_config-1] * 100000; */
-               wrqu->freq.m = rtw_ch2freq(pcur_bss->configuration.ds_config) * 100000;
-               wrqu->freq.e = 1;
-               wrqu->freq.i = pcur_bss->configuration.ds_config;
-
-       } else {
-               wrqu->freq.m = rtw_ch2freq(padapter->mlmeextpriv.cur_channel) * 100000;
-               wrqu->freq.e = 1;
-               wrqu->freq.i = padapter->mlmeextpriv.cur_channel;
-       }
-
-       return 0;
-}
-
-static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
-                            union iwreq_data *wrqu, char *b)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       enum ndis_802_11_network_infrastructure networkType;
-       int ret = 0;
-
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -EPERM;
-               goto exit;
-       }
-
-       if (!padapter->hw_init_completed) {
-               ret = -EPERM;
-               goto exit;
-       }
-
-       switch (wrqu->mode) {
-       case IW_MODE_AUTO:
-               networkType = Ndis802_11AutoUnknown;
-               break;
-       case IW_MODE_ADHOC:
-               networkType = Ndis802_11IBSS;
-               break;
-       case IW_MODE_MASTER:
-               networkType = Ndis802_11APMode;
-               /* rtw_setopmode_cmd(padapter, networkType, true); */
-               break;
-       case IW_MODE_INFRA:
-               networkType = Ndis802_11Infrastructure;
-               break;
-       default:
-               ret = -EINVAL;
-               goto exit;
-       }
-
-/*
-       if (Ndis802_11APMode == networkType)
-       {
-               rtw_setopmode_cmd(padapter, networkType, true);
-       }
-       else
-       {
-               rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown, true);
-       }
-*/
-
-       if (rtw_set_802_11_infrastructure_mode(padapter, networkType) == false) {
-
-               ret = -EPERM;
-               goto exit;
-
-       }
-
-       rtw_setopmode_cmd(padapter, networkType, true);
-
-exit:
-       return ret;
-}
-
-static int rtw_wx_get_mode(struct net_device *dev, struct iw_request_info *a,
-                            union iwreq_data *wrqu, char *b)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == true) {
-               wrqu->mode = IW_MODE_INFRA;
-       } else if  ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true) ||
-                      (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true)) {
-               wrqu->mode = IW_MODE_ADHOC;
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) {
-               wrqu->mode = IW_MODE_MASTER;
-       } else {
-               wrqu->mode = IW_MODE_AUTO;
-       }
-       return 0;
-}
-
-
-static int rtw_wx_set_pmkid(struct net_device *dev,
-                            struct iw_request_info *a,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u8          j, blInserted = false;
-       int         intReturn = false;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-        struct iw_pmksa *pPMK = (struct iw_pmksa *)extra;
-        u8     strZeroMacAddress[ETH_ALEN] = { 0x00 };
-        u8     strIssueBssid[ETH_ALEN] = { 0x00 };
-
-       /*
-        There are the BSSID information in the bssid.sa_data array.
-        If cmd is IW_PMKSA_FLUSH, it means the wpa_suppplicant wants to clear all the PMKID information.
-        If cmd is IW_PMKSA_ADD, it means the wpa_supplicant wants to add a PMKID/BSSID to driver.
-        If cmd is IW_PMKSA_REMOVE, it means the wpa_supplicant wants to remove a PMKID/BSSID from driver.
-        */
-
-       memcpy(strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN);
-        if (pPMK->cmd == IW_PMKSA_ADD) {
-                if (!memcmp(strIssueBssid, strZeroMacAddress, ETH_ALEN))
-                       return intReturn;
-                else
-                    intReturn = true;
-
-               blInserted = false;
-
-               /* overwrite PMKID */
-               for (j = 0; j < NUM_PMKID_CACHE; j++) {
-                       if (!memcmp(psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN)) {
-
-                               memcpy(psecuritypriv->PMKIDList[j].PMKID, pPMK->pmkid, IW_PMKID_LEN);
-                                psecuritypriv->PMKIDList[j].bUsed = true;
-                               psecuritypriv->PMKIDIndex = j+1;
-                               blInserted = true;
-                               break;
-                       }
-               }
-
-               if (!blInserted) {
-
-                   memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, strIssueBssid, ETH_ALEN);
-                   memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pPMK->pmkid, IW_PMKID_LEN);
-
-                    psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = true;
-                   psecuritypriv->PMKIDIndex++;
-                   if (psecuritypriv->PMKIDIndex == 16)
-                       psecuritypriv->PMKIDIndex = 0;
-               }
-       } else if (pPMK->cmd == IW_PMKSA_REMOVE) {
-               intReturn = true;
-               for (j = 0; j < NUM_PMKID_CACHE; j++) {
-                       if (!memcmp(psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN)) {
-                               /*  BSSID is matched, the same AP => Remove this PMKID information and reset it. */
-                               eth_zero_addr(psecuritypriv->PMKIDList[j].Bssid);
-                               psecuritypriv->PMKIDList[j].bUsed = false;
-                               break;
-                       }
-               }
-       } else if (pPMK->cmd == IW_PMKSA_FLUSH) {
-               memset(&psecuritypriv->PMKIDList[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-               psecuritypriv->PMKIDIndex = 0;
-               intReturn = true;
-       }
-       return intReturn;
-}
-
-static int rtw_wx_get_sens(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       {
-               wrqu->sens.value = 0;
-               wrqu->sens.fixed = 0;   /* no auto select */
-               wrqu->sens.disabled = 1;
-       }
-       return 0;
-}
-
-static int rtw_wx_get_range(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *extra)
-{
-       struct iw_range *range = (struct iw_range *)extra;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       u16 val;
-       int i;
-
-       wrqu->data.length = sizeof(*range);
-       memset(range, 0, sizeof(*range));
-
-       /* Let's try to keep this struct in the same order as in
-        * linux/include/wireless.h
-        */
-
-       /* TODO: See what values we can set, and remove the ones we can't
-        * set, or fill them with some default data.
-        */
-
-       /* ~5 Mb/s real (802.11b) */
-       range->throughput = 5 * 1000 * 1000;
-
-       /* signal level threshold range */
-
-       /* percent values between 0 and 100. */
-       range->max_qual.qual = 100;
-       range->max_qual.level = 100;
-       range->max_qual.noise = 100;
-       range->max_qual.updated = 7; /* Updated all three */
-
-
-       range->avg_qual.qual = 92; /* > 8% missed beacons is 'bad' */
-       /* TODO: Find real 'good' to 'bad' threshol value for RSSI */
-       range->avg_qual.level = 256 - 78;
-       range->avg_qual.noise = 0;
-       range->avg_qual.updated = 7; /* Updated all three */
-
-       range->num_bitrates = RATE_COUNT;
-
-       for (i = 0; i < RATE_COUNT && i < IW_MAX_BITRATES; i++)
-               range->bitrate[i] = rtw_rates[i];
-
-       range->min_frag = MIN_FRAG_THRESHOLD;
-       range->max_frag = MAX_FRAG_THRESHOLD;
-
-       range->pm_capa = 0;
-
-       range->we_version_compiled = WIRELESS_EXT;
-       range->we_version_source = 16;
-
-       for (i = 0, val = 0; i < MAX_CHANNEL_NUM; i++) {
-
-               /*  Include only legal frequencies for some countries */
-               if (pmlmeext->channel_set[i].ChannelNum != 0) {
-                       range->freq[val].i = pmlmeext->channel_set[i].ChannelNum;
-                       range->freq[val].m = rtw_ch2freq(pmlmeext->channel_set[i].ChannelNum) * 100000;
-                       range->freq[val].e = 1;
-                       val++;
-               }
-
-               if (val == IW_MAX_FREQUENCIES)
-                       break;
-       }
-
-       range->num_channels = val;
-       range->num_frequency = val;
-
-/*  Commented by Albert 2009/10/13 */
-/*  The following code will proivde the security capability to network manager. */
-/*  If the driver doesn't provide this capability to network manager, */
-/*  the WPA/WPA2 routers can't be chosen in the network manager. */
-
-/*
-#define IW_SCAN_CAPA_NONE              0x00
-#define IW_SCAN_CAPA_ESSID             0x01
-#define IW_SCAN_CAPA_BSSID             0x02
-#define IW_SCAN_CAPA_CHANNEL   0x04
-#define IW_SCAN_CAPA_MODE              0x08
-#define IW_SCAN_CAPA_RATE              0x10
-#define IW_SCAN_CAPA_TYPE              0x20
-#define IW_SCAN_CAPA_TIME              0x40
-*/
-
-       range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
-                         IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
-
-       range->scan_capa = IW_SCAN_CAPA_ESSID | IW_SCAN_CAPA_TYPE | IW_SCAN_CAPA_BSSID |
-                                       IW_SCAN_CAPA_CHANNEL | IW_SCAN_CAPA_MODE | IW_SCAN_CAPA_RATE;
-
-       return 0;
-}
-
-/* set bssid flow */
-/* s1. rtw_set_802_11_infrastructure_mode() */
-/* s2. rtw_set_802_11_authentication_mode() */
-/* s3. set_802_11_encryption_mode() */
-/* s4. rtw_set_802_11_bssid() */
-static int rtw_wx_set_wap(struct net_device *dev,
-                        struct iw_request_info *info,
-                        union iwreq_data *awrq,
-                        char *extra)
-{
-       uint ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct sockaddr *temp = (struct sockaddr *)awrq;
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct list_head        *phead;
-       u8 *dst_bssid, *src_bssid;
-       struct __queue  *queue  = &(pmlmepriv->scanned_queue);
-       struct  wlan_network    *pnetwork = NULL;
-       enum ndis_802_11_authentication_mode    authmode;
-
-       rtw_ps_deny(padapter, PS_DENY_JOIN);
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (!padapter->bup) {
-               ret = -1;
-               goto exit;
-       }
-
-
-       if (temp->sa_family != ARPHRD_ETHER) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       authmode = padapter->securitypriv.ndisauthtype;
-       spin_lock_bh(&queue->lock);
-       phead = get_list_head(queue);
-       list_for_each(pmlmepriv->pscanned, phead) {
-               pnetwork = list_entry(pmlmepriv->pscanned,
-                                     struct wlan_network, list);
-
-               dst_bssid = pnetwork->network.mac_address;
-
-               src_bssid = temp->sa_data;
-
-               if ((!memcmp(dst_bssid, src_bssid, ETH_ALEN))) {
-                       if (!rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.infrastructure_mode)) {
-                               ret = -1;
-                               spin_unlock_bh(&queue->lock);
-                               goto exit;
-                       }
-                       break;
-               }
-
-       }
-       spin_unlock_bh(&queue->lock);
-
-       rtw_set_802_11_authentication_mode(padapter, authmode);
-       /* set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */
-       if (rtw_set_802_11_bssid(padapter, temp->sa_data) == false) {
-               ret = -1;
-               goto exit;
-       }
-
-exit:
-
-       rtw_ps_deny_cancel(padapter, PS_DENY_JOIN);
-
-       return ret;
-}
-
-static int rtw_wx_get_wap(struct net_device *dev,
-                           struct iw_request_info *info,
-                           union iwreq_data *wrqu, char *extra)
-{
-
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-
-       wrqu->ap_addr.sa_family = ARPHRD_ETHER;
-
-       eth_zero_addr(wrqu->ap_addr.sa_data);
-
-       if  (((check_fwstate(pmlmepriv, _FW_LINKED)) == true) ||
-                       ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) == true) ||
-                       ((check_fwstate(pmlmepriv, WIFI_AP_STATE)) == true)) {
-               memcpy(wrqu->ap_addr.sa_data, pcur_bss->mac_address, ETH_ALEN);
-       } else {
-               eth_zero_addr(wrqu->ap_addr.sa_data);
-       }
-
-       return 0;
-}
-
-static int rtw_wx_set_mlme(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_mlme *mlme = (struct iw_mlme *)extra;
-
-
-       if (mlme == NULL)
-               return -1;
-
-       switch (mlme->cmd) {
-       case IW_MLME_DEAUTH:
-               if (!rtw_set_802_11_disassociate(padapter))
-                       ret = -1;
-               break;
-       case IW_MLME_DISASSOC:
-               if (!rtw_set_802_11_disassociate(padapter))
-                       ret = -1;
-               break;
-       default:
-               return -EOPNOTSUPP;
-       }
-
-       return ret;
-}
-
-static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
-                            union iwreq_data *wrqu, char *extra)
-{
-       u8 _status = false;
-       int ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-
-       rtw_ps_deny(padapter, PS_DENY_SCAN);
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (padapter->bDriverStopped) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (!padapter->bup) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (!padapter->hw_init_completed) {
-               ret = -1;
-               goto exit;
-       }
-
-       /*  When Busy Traffic, driver do not site survey. So driver return success. */
-       /*  wpa_supplicant will not issue SIOCSIWSCAN cmd again after scan timeout. */
-       /*  modify by thomas 2011-02-22. */
-       if (pmlmepriv->LinkDetectInfo.bBusyTraffic) {
-               indicate_wx_scan_complete_event(padapter);
-               goto exit;
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == true) {
-               indicate_wx_scan_complete_event(padapter);
-               goto exit;
-       }
-
-       memset(ssid, 0, sizeof(struct ndis_802_11_ssid)*RTW_SSID_SCAN_AMOUNT);
-
-       if (wrqu->data.length == sizeof(struct iw_scan_req)) {
-               struct iw_scan_req *req = (struct iw_scan_req *)extra;
-
-               if (wrqu->data.flags & IW_SCAN_THIS_ESSID) {
-                       int len = min((int)req->essid_len, IW_ESSID_MAX_SIZE);
-
-                       memcpy(ssid[0].ssid, req->essid, len);
-                       ssid[0].ssid_length = len;
-
-                       spin_lock_bh(&pmlmepriv->lock);
-
-                       _status = rtw_sitesurvey_cmd(padapter, ssid, 1, NULL, 0);
-
-                       spin_unlock_bh(&pmlmepriv->lock);
-
-               }
-
-       } else if (wrqu->data.length >= WEXT_CSCAN_HEADER_SIZE
-               && !memcmp(extra, WEXT_CSCAN_HEADER, WEXT_CSCAN_HEADER_SIZE)) {
-               int len = wrqu->data.length - WEXT_CSCAN_HEADER_SIZE;
-               char *pos = extra+WEXT_CSCAN_HEADER_SIZE;
-               char section;
-               char sec_len;
-               int ssid_index = 0;
-
-               while (len >= 1) {
-                       section = *(pos++); len -= 1;
-
-                       switch (section) {
-                       case WEXT_CSCAN_SSID_SECTION:
-                               if (len < 1) {
-                                       len = 0;
-                                       break;
-                               }
-
-                               sec_len = *(pos++); len -= 1;
-
-                               if (sec_len > 0 && sec_len <= len) {
-                                       ssid[ssid_index].ssid_length = sec_len;
-                                       memcpy(ssid[ssid_index].ssid, pos, ssid[ssid_index].ssid_length);
-                                       ssid_index++;
-                               }
-
-                               pos += sec_len; len -= sec_len;
-                               break;
-
-
-                       case WEXT_CSCAN_CHANNEL_SECTION:
-                               pos += 1; len -= 1;
-                               break;
-                       case WEXT_CSCAN_ACTV_DWELL_SECTION:
-                               pos += 2; len -= 2;
-                               break;
-                       case WEXT_CSCAN_PASV_DWELL_SECTION:
-                               pos += 2; len -= 2;
-                               break;
-                       case WEXT_CSCAN_HOME_DWELL_SECTION:
-                               pos += 2; len -= 2;
-                               break;
-                       case WEXT_CSCAN_TYPE_SECTION:
-                               pos += 1; len -= 1;
-                               break;
-                       default:
-                               len = 0; /*  stop parsing */
-                       }
-               }
-
-               /* jeff: it has still some scan parameter to parse, we only do this now... */
-               _status = rtw_set_802_11_bssid_list_scan(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
-
-       } else {
-               _status = rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
-       }
-
-       if (_status == false)
-               ret = -1;
-
-exit:
-
-       rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);
-
-       return ret;
-}
-
-static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct list_head                                        *plist, *phead;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct __queue                          *queue  = &(pmlmepriv->scanned_queue);
-       struct  wlan_network    *pnetwork = NULL;
-       char *ev = extra;
-       char *stop = ev + wrqu->data.length;
-       u32 ret = 0;
-       signed int wait_status;
-
-       if (adapter_to_pwrctl(padapter)->brfoffbyhw && padapter->bDriverStopped) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       wait_status = _FW_UNDER_SURVEY | _FW_UNDER_LINKING;
-
-       if (check_fwstate(pmlmepriv, wait_status))
-               return -EAGAIN;
-
-       spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
-
-       phead = get_list_head(queue);
-       list_for_each(plist, phead) {
-               if ((stop - ev) < SCAN_ITEM_SIZE) {
-                       ret = -E2BIG;
-                       break;
-               }
-
-               pnetwork = list_entry(plist, struct wlan_network, list);
-
-               /* report network only if the current channel set contains the channel to which this network belongs */
-               if (rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.configuration.ds_config) >= 0
-                       && true == rtw_validate_ssid(&(pnetwork->network.ssid))) {
-
-                       ev = translate_scan(padapter, a, pnetwork, ev, stop);
-               }
-
-       }
-
-       spin_unlock_bh(&(pmlmepriv->scanned_queue.lock));
-
-       wrqu->data.length = ev-extra;
-       wrqu->data.flags = 0;
-
-exit:
-
-       return ret;
-
-}
-
-/* set ssid flow */
-/* s1. rtw_set_802_11_infrastructure_mode() */
-/* s2. set_802_11_authenticaion_mode() */
-/* s3. set_802_11_encryption_mode() */
-/* s4. rtw_set_802_11_ssid() */
-static int rtw_wx_set_essid(struct net_device *dev,
-                             struct iw_request_info *a,
-                             union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct __queue *queue = &pmlmepriv->scanned_queue;
-       struct list_head *phead;
-       struct wlan_network *pnetwork = NULL;
-       enum ndis_802_11_authentication_mode authmode;
-       struct ndis_802_11_ssid ndis_ssid;
-       u8 *dst_ssid, *src_ssid;
-
-       uint ret = 0, len;
-
-       rtw_ps_deny(padapter, PS_DENY_JOIN);
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (!padapter->bup) {
-               ret = -1;
-               goto exit;
-       }
-
-       if (wrqu->essid.length > IW_ESSID_MAX_SIZE) {
-               ret = -E2BIG;
-               goto exit;
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               ret = -1;
-               goto exit;
-       }
-
-       authmode = padapter->securitypriv.ndisauthtype;
-       if (wrqu->essid.flags && wrqu->essid.length) {
-               len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? wrqu->essid.length : IW_ESSID_MAX_SIZE;
-
-               memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid));
-               ndis_ssid.ssid_length = len;
-               memcpy(ndis_ssid.ssid, extra, len);
-               src_ssid = ndis_ssid.ssid;
-
-               spin_lock_bh(&queue->lock);
-               phead = get_list_head(queue);
-               list_for_each(pmlmepriv->pscanned, phead) {
-                       pnetwork = list_entry(pmlmepriv->pscanned,
-                                             struct wlan_network, list);
-
-                       dst_ssid = pnetwork->network.ssid.ssid;
-
-                       if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.ssid_length)) &&
-                               (pnetwork->network.ssid.ssid_length == ndis_ssid.ssid_length)) {
-                               if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true) {
-                                       if (pnetwork->network.infrastructure_mode != pmlmepriv->cur_network.network.infrastructure_mode)
-                                               continue;
-                               }
-
-                               if (rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.infrastructure_mode) == false) {
-                                       ret = -1;
-                                       spin_unlock_bh(&queue->lock);
-                                       goto exit;
-                               }
-
-                               break;
-                       }
-               }
-               spin_unlock_bh(&queue->lock);
-               rtw_set_802_11_authentication_mode(padapter, authmode);
-               /* set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */
-               if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == false) {
-                       ret = -1;
-                       goto exit;
-               }
-       }
-
-exit:
-
-       rtw_ps_deny_cancel(padapter, PS_DENY_JOIN);
-
-       return ret;
-}
-
-static int rtw_wx_get_essid(struct net_device *dev,
-                             struct iw_request_info *a,
-                             union iwreq_data *wrqu, char *extra)
-{
-       u32 len, ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-
-       if ((check_fwstate(pmlmepriv, _FW_LINKED) == true) ||
-             (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true)) {
-               len = pcur_bss->ssid.ssid_length;
-
-               wrqu->essid.length = len;
-
-               memcpy(extra, pcur_bss->ssid.ssid, len);
-
-               wrqu->essid.flags = 1;
-       } else {
-               ret = -1;
-               goto exit;
-       }
-
-exit:
-       return ret;
-}
-
-static int rtw_wx_set_rate(struct net_device *dev,
-                             struct iw_request_info *a,
-                             union iwreq_data *wrqu, char *extra)
-{
-       int     i, ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u8 datarates[NumRates];
-       u32 target_rate = wrqu->bitrate.value;
-       u32 fixed = wrqu->bitrate.fixed;
-       u32 ratevalue = 0;
-       u8 mpdatarate[NumRates] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0xff};
-
-       if (target_rate == -1) {
-               ratevalue = 11;
-               goto set_rate;
-       }
-       target_rate = target_rate/100000;
-
-       switch (target_rate) {
-       case 10:
-               ratevalue = 0;
-               break;
-       case 20:
-               ratevalue = 1;
-               break;
-       case 55:
-               ratevalue = 2;
-               break;
-       case 60:
-               ratevalue = 3;
-               break;
-       case 90:
-               ratevalue = 4;
-               break;
-       case 110:
-               ratevalue = 5;
-               break;
-       case 120:
-               ratevalue = 6;
-               break;
-       case 180:
-               ratevalue = 7;
-               break;
-       case 240:
-               ratevalue = 8;
-               break;
-       case 360:
-               ratevalue = 9;
-               break;
-       case 480:
-               ratevalue = 10;
-               break;
-       case 540:
-               ratevalue = 11;
-               break;
-       default:
-               ratevalue = 11;
-               break;
-       }
-
-set_rate:
-
-       for (i = 0; i < NumRates; i++) {
-               if (ratevalue == mpdatarate[i]) {
-                       datarates[i] = mpdatarate[i];
-                       if (fixed == 0)
-                               break;
-               } else {
-                       datarates[i] = 0xff;
-               }
-       }
-
-       if (rtw_setdatarate_cmd(padapter, datarates) != _SUCCESS)
-               ret = -1;
-
-       return ret;
-}
-
-static int rtw_wx_get_rate(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       u16 max_rate = 0;
-
-       max_rate = rtw_get_cur_max_rate(rtw_netdev_priv(dev));
-
-       if (max_rate == 0)
-               return -EPERM;
-
-       wrqu->bitrate.fixed = 0;        /* no auto select */
-       wrqu->bitrate.value = max_rate * 100000;
-
-       return 0;
-}
-
-static int rtw_wx_set_rts(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       if (wrqu->rts.disabled)
-               padapter->registrypriv.rts_thresh = 2347;
-       else {
-               if (wrqu->rts.value < 0 ||
-                   wrqu->rts.value > 2347)
-                       return -EINVAL;
-
-               padapter->registrypriv.rts_thresh = wrqu->rts.value;
-       }
-
-       return 0;
-}
-
-static int rtw_wx_get_rts(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       wrqu->rts.value = padapter->registrypriv.rts_thresh;
-       wrqu->rts.fixed = 0;    /* no auto select */
-       /* wrqu->rts.disabled = (wrqu->rts.value == DEFAULT_RTS_THRESHOLD); */
-
-       return 0;
-}
-
-static int rtw_wx_set_frag(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       if (wrqu->frag.disabled)
-               padapter->xmitpriv.frag_len = MAX_FRAG_THRESHOLD;
-       else {
-               if (wrqu->frag.value < MIN_FRAG_THRESHOLD ||
-                   wrqu->frag.value > MAX_FRAG_THRESHOLD)
-                       return -EINVAL;
-
-               padapter->xmitpriv.frag_len = wrqu->frag.value & ~0x1;
-       }
-
-       return 0;
-
-}
-
-static int rtw_wx_get_frag(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       wrqu->frag.value = padapter->xmitpriv.frag_len;
-       wrqu->frag.fixed = 0;   /* no auto select */
-       /* wrqu->frag.disabled = (wrqu->frag.value == DEFAULT_FRAG_THRESHOLD); */
-
-       return 0;
-}
-
-static int rtw_wx_get_retry(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       /* struct adapter *padapter = rtw_netdev_priv(dev); */
-
-
-       wrqu->retry.value = 7;
-       wrqu->retry.fixed = 0;  /* no auto select */
-       wrqu->retry.disabled = 1;
-
-       return 0;
-
-}
-
-static int rtw_wx_set_enc(struct net_device *dev,
-                           struct iw_request_info *info,
-                           union iwreq_data *wrqu, char *keybuf)
-{
-       u32 key, ret = 0;
-       u32 keyindex_provided;
-       struct ndis_802_11_wep   wep;
-       enum ndis_802_11_authentication_mode authmode;
-
-       struct iw_point *erq = &(wrqu->encoding);
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
-       memset(&wep, 0, sizeof(struct ndis_802_11_wep));
-
-       key = erq->flags & IW_ENCODE_INDEX;
-
-       if (erq->flags & IW_ENCODE_DISABLED) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
-               padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-               padapter->securitypriv.dot118021XGrpPrivacy = _NO_PRIVACY_;
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */
-               authmode = Ndis802_11AuthModeOpen;
-               padapter->securitypriv.ndisauthtype = authmode;
-
-               goto exit;
-       }
-
-       if (key) {
-               if (key > WEP_KEYS)
-                       return -EINVAL;
-               key--;
-               keyindex_provided = 1;
-       } else {
-               keyindex_provided = 0;
-               key = padapter->securitypriv.dot11PrivacyKeyIndex;
-       }
-
-       /* set authentication mode */
-       if (erq->flags & IW_ENCODE_OPEN) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;/* Ndis802_11EncryptionDisabled; */
-
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-
-               padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-               padapter->securitypriv.dot118021XGrpPrivacy = _NO_PRIVACY_;
-               authmode = Ndis802_11AuthModeOpen;
-               padapter->securitypriv.ndisauthtype = authmode;
-       } else if (erq->flags & IW_ENCODE_RESTRICTED) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Shared;
-
-               padapter->securitypriv.dot11PrivacyAlgrthm = _WEP40_;
-               padapter->securitypriv.dot118021XGrpPrivacy = _WEP40_;
-               authmode = Ndis802_11AuthModeShared;
-               padapter->securitypriv.ndisauthtype = authmode;
-       } else {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;/* Ndis802_11EncryptionDisabled; */
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */
-               padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-               padapter->securitypriv.dot118021XGrpPrivacy = _NO_PRIVACY_;
-               authmode = Ndis802_11AuthModeOpen;
-               padapter->securitypriv.ndisauthtype = authmode;
-       }
-
-       wep.key_index = key;
-       if (erq->length > 0) {
-               wep.key_length = erq->length <= 5 ? 5 : 13;
-
-               wep.length = wep.key_length + FIELD_OFFSET(struct ndis_802_11_wep, key_material);
-       } else {
-               wep.key_length = 0;
-
-               if (keyindex_provided == 1) { /*  set key_id only, no given key_material(erq->length == 0). */
-                       padapter->securitypriv.dot11PrivacyKeyIndex = key;
-
-                       switch (padapter->securitypriv.dot11DefKeylen[key]) {
-                       case 5:
-                               padapter->securitypriv.dot11PrivacyAlgrthm = _WEP40_;
-                               break;
-                       case 13:
-                               padapter->securitypriv.dot11PrivacyAlgrthm = _WEP104_;
-                               break;
-                       default:
-                               padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-                               break;
-                       }
-
-                       goto exit;
-
-               }
-
-       }
-
-       wep.key_index |= 0x80000000;
-
-       memcpy(wep.key_material, keybuf, wep.key_length);
-
-       if (rtw_set_802_11_add_wep(padapter, &wep) == false) {
-               if (rf_on == pwrpriv->rf_pwrstate)
-                       ret = -EOPNOTSUPP;
-               goto exit;
-       }
-
-exit:
-       return ret;
-}
-
-static int rtw_wx_get_enc(struct net_device *dev,
-                           struct iw_request_info *info,
-                           union iwreq_data *wrqu, char *keybuf)
-{
-       uint key, ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_point *erq = &(wrqu->encoding);
-       struct  mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) != true) {
-                if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) != true) {
-                        erq->length = 0;
-                        erq->flags |= IW_ENCODE_DISABLED;
-                        return 0;
-                }
-       }
-
-
-       key = erq->flags & IW_ENCODE_INDEX;
-
-       if (key) {
-               if (key > WEP_KEYS)
-                       return -EINVAL;
-               key--;
-       } else {
-               key = padapter->securitypriv.dot11PrivacyKeyIndex;
-       }
-
-       erq->flags = key + 1;
-
-       /* if (padapter->securitypriv.ndisauthtype == Ndis802_11AuthModeOpen) */
-       /*  */
-       /*       erq->flags |= IW_ENCODE_OPEN; */
-       /*  */
-
-       switch (padapter->securitypriv.ndisencryptstatus) {
-       case Ndis802_11EncryptionNotSupported:
-       case Ndis802_11EncryptionDisabled:
-               erq->length = 0;
-               erq->flags |= IW_ENCODE_DISABLED;
-               break;
-       case Ndis802_11Encryption1Enabled:
-               erq->length = padapter->securitypriv.dot11DefKeylen[key];
-
-               if (erq->length) {
-                       memcpy(keybuf, padapter->securitypriv.dot11DefKey[key].skey, padapter->securitypriv.dot11DefKeylen[key]);
-
-                       erq->flags |= IW_ENCODE_ENABLED;
-
-                       if (padapter->securitypriv.ndisauthtype == Ndis802_11AuthModeOpen)
-                               erq->flags |= IW_ENCODE_OPEN;
-                       else if (padapter->securitypriv.ndisauthtype == Ndis802_11AuthModeShared)
-                               erq->flags |= IW_ENCODE_RESTRICTED;
-               } else {
-                       erq->length = 0;
-                       erq->flags |= IW_ENCODE_DISABLED;
-               }
-               break;
-       case Ndis802_11Encryption2Enabled:
-       case Ndis802_11Encryption3Enabled:
-               erq->length = 16;
-               erq->flags |= (IW_ENCODE_ENABLED | IW_ENCODE_OPEN | IW_ENCODE_NOKEY);
-               break;
-       default:
-               erq->length = 0;
-               erq->flags |= IW_ENCODE_DISABLED;
-               break;
-       }
-       return ret;
-}
-
-static int rtw_wx_get_power(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       /* struct adapter *padapter = rtw_netdev_priv(dev); */
-
-       wrqu->power.value = 0;
-       wrqu->power.fixed = 0;  /* no auto select */
-       wrqu->power.disabled = 1;
-
-       return 0;
-}
-
-static int rtw_wx_set_gen_ie(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       return rtw_set_wpa_ie(padapter, extra, wrqu->data.length);
-}
-
-static int rtw_wx_set_auth(struct net_device *dev,
-                          struct iw_request_info *info,
-                          union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_param *param = (struct iw_param *)&(wrqu->param);
-       int ret = 0;
-
-       switch (param->flags & IW_AUTH_INDEX) {
-       case IW_AUTH_WPA_VERSION:
-               break;
-       case IW_AUTH_CIPHER_PAIRWISE:
-               break;
-       case IW_AUTH_CIPHER_GROUP:
-               break;
-       case IW_AUTH_KEY_MGMT:
-               /*
-                *  ??? does not use these parameters
-                */
-               break;
-       case IW_AUTH_TKIP_COUNTERMEASURES:
-               /* wpa_supplicant is setting the tkip countermeasure. */
-               if (param->value) /* enabling */
-                       padapter->securitypriv.btkip_countermeasure = true;
-               else /* disabling */
-                       padapter->securitypriv.btkip_countermeasure = false;
-               break;
-       case IW_AUTH_DROP_UNENCRYPTED:
-               /* HACK:
-                *
-                * wpa_supplicant calls set_wpa_enabled when the driver
-                * is loaded and unloaded, regardless of if WPA is being
-                * used.  No other calls are made which can be used to
-                * determine if encryption will be used or not prior to
-                * association being expected.  If encryption is not being
-                * used, drop_unencrypted is set to false, else true -- we
-                * can use this to determine if the CAP_PRIVACY_ON bit should
-                * be set.
-                */
-
-               /*
-                * This means init value, or using wep, ndisencryptstatus =
-                * Ndis802_11Encryption1Enabled, then it needn't reset it;
-                */
-               if (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption1Enabled)
-                       break;
-
-               if (param->value) {
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
-                       padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-                       padapter->securitypriv.dot118021XGrpPrivacy = _NO_PRIVACY_;
-                       padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */
-                       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-               }
-
-               break;
-       case IW_AUTH_80211_AUTH_ALG:
-               /*
-                *  It's the starting point of a link layer connection using wpa_supplicant
-                */
-               if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-                       LeaveAllPowerSaveMode(padapter);
-                       rtw_disassoc_cmd(padapter, 500, false);
-                       rtw_indicate_disconnect(padapter);
-                       rtw_free_assoc_resources(padapter, 1);
-               }
-
-               ret = wpa_set_auth_algs(dev, (u32)param->value);
-               break;
-       case IW_AUTH_WPA_ENABLED:
-               break;
-       case IW_AUTH_RX_UNENCRYPTED_EAPOL:
-               break;
-       case IW_AUTH_PRIVACY_INVOKED:
-               break;
-       default:
-               return -EOPNOTSUPP;
-       }
-
-       return ret;
-}
-
-static int rtw_wx_set_enc_ext(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       char *alg_name;
-       u32 param_len;
-       struct ieee_param *param = NULL;
-       struct iw_point *pencoding = &wrqu->encoding;
-       struct iw_encode_ext *pext = (struct iw_encode_ext *)extra;
-       int ret = 0;
-
-       param_len = sizeof(struct ieee_param) + pext->key_len;
-       param = kzalloc(param_len, GFP_KERNEL);
-       if (param == NULL)
-               return -1;
-
-       param->cmd = IEEE_CMD_SET_ENCRYPTION;
-       eth_broadcast_addr(param->sta_addr);
-
-
-       switch (pext->alg) {
-       case IW_ENCODE_ALG_NONE:
-               /* todo: remove key */
-               /* remove = 1; */
-               alg_name = "none";
-               break;
-       case IW_ENCODE_ALG_WEP:
-               alg_name = "WEP";
-               break;
-       case IW_ENCODE_ALG_TKIP:
-               alg_name = "TKIP";
-               break;
-       case IW_ENCODE_ALG_CCMP:
-               alg_name = "CCMP";
-               break;
-       case IW_ENCODE_ALG_AES_CMAC:
-               alg_name = "BIP";
-               break;
-       default:
-               ret = -1;
-               goto exit;
-       }
-
-       strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN);
-
-       if (pext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)
-               param->u.crypt.set_tx = 1;
-
-       /* cliW: WEP does not have group key
-        * just not checking GROUP key setting
-        */
-       if ((pext->alg != IW_ENCODE_ALG_WEP) &&
-               ((pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
-               || (pext->ext_flags & IW_ENCODE_ALG_AES_CMAC))) {
-               param->u.crypt.set_tx = 0;
-       }
-
-       param->u.crypt.idx = (pencoding->flags & 0x00FF) - 1;
-
-       if (pext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)
-               memcpy(param->u.crypt.seq, pext->rx_seq, 8);
-
-       if (pext->key_len) {
-               param->u.crypt.key_len = pext->key_len;
-               /* memcpy(param + 1, pext + 1, pext->key_len); */
-               memcpy(param->u.crypt.key, pext + 1, pext->key_len);
-       }
-
-       if (pencoding->flags & IW_ENCODE_DISABLED) {
-               /* todo: remove key */
-               /* remove = 1; */
-       }
-
-       ret =  wpa_set_encryption(dev, param, param_len);
-
-exit:
-       kfree(param);
-
-       return ret;
-}
-
-
-static int rtw_wx_get_nick(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       /* struct adapter *padapter = rtw_netdev_priv(dev); */
-        /* struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); */
-        /* struct security_priv *psecuritypriv = &padapter->securitypriv; */
-
-       if (extra) {
-               wrqu->data.length = 14;
-               wrqu->data.flags = 1;
-               memcpy(extra, "<WIFI@REALTEK>", 14);
-       }
-       return 0;
-}
-
-static int rtw_wx_read32(struct net_device *dev,
-                        struct iw_request_info *info,
-                        union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter;
-       struct iw_point *p;
-       u16 len;
-       u32 addr;
-       u32 data32;
-       u32 bytes;
-       u8 *ptmp;
-       int ret;
-
-
-       ret = 0;
-       padapter = rtw_netdev_priv(dev);
-       p = &wrqu->data;
-       len = p->length;
-       if (0 == len)
-               return -EINVAL;
-
-       ptmp = rtw_malloc(len);
-       if (NULL == ptmp)
-               return -ENOMEM;
-
-       if (copy_from_user(ptmp, p->pointer, len)) {
-               ret = -EFAULT;
-               goto exit;
-       }
-
-       bytes = 0;
-       addr = 0;
-       sscanf(ptmp, "%d,%x", &bytes, &addr);
-
-       switch (bytes) {
-       case 1:
-               data32 = rtw_read8(padapter, addr);
-               sprintf(extra, "0x%02X", data32);
-               break;
-       case 2:
-               data32 = rtw_read16(padapter, addr);
-               sprintf(extra, "0x%04X", data32);
-               break;
-       case 4:
-               data32 = rtw_read32(padapter, addr);
-               sprintf(extra, "0x%08X", data32);
-               break;
-       default:
-               ret = -EINVAL;
-               goto exit;
-       }
-
-exit:
-       kfree(ptmp);
-
-       return ret;
-}
-
-static int rtw_wx_write32(struct net_device *dev,
-                         struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       u32 addr;
-       u32 data32;
-       u32 bytes;
-
-
-       bytes = 0;
-       addr = 0;
-       data32 = 0;
-       sscanf(extra, "%d,%x,%x", &bytes, &addr, &data32);
-
-       switch (bytes) {
-       case 1:
-               rtw_write8(padapter, addr, (u8)data32);
-               break;
-       case 2:
-               rtw_write16(padapter, addr, (u16)data32);
-               break;
-       case 4:
-               rtw_write32(padapter, addr, data32);
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int rtw_wx_read_rf(struct net_device *dev,
-                         struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u32 path, addr, data32;
-
-
-       path = *(u32 *)extra;
-       addr = *((u32 *)extra + 1);
-       data32 = rtw_hal_read_rfreg(padapter, path, addr, 0xFFFFF);
-       /*
-        * IMPORTANT!!
-        * Only when wireless private ioctl is at odd order,
-        * "extra" would be copied to user space.
-        */
-       sprintf(extra, "0x%05x", data32);
-
-       return 0;
-}
-
-static int rtw_wx_write_rf(struct net_device *dev,
-                          struct iw_request_info *info,
-                          union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u32 path, addr, data32;
-
-
-       path = *(u32 *)extra;
-       addr = *((u32 *)extra + 1);
-       data32 = *((u32 *)extra + 2);
-       rtw_hal_write_rfreg(padapter, path, addr, 0xFFFFF, data32);
-
-       return 0;
-}
-
-static int rtw_wx_priv_null(struct net_device *dev, struct iw_request_info *a,
-                union iwreq_data *wrqu, char *b)
-{
-       return -1;
-}
-
-static int dummy(struct net_device *dev, struct iw_request_info *a,
-                union iwreq_data *wrqu, char *b)
-{
-       /* struct adapter *padapter = rtw_netdev_priv(dev); */
-       /* struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); */
-
-       return -1;
-
-}
-
-static int rtw_wx_set_channel_plan(struct net_device *dev,
-                                  struct iw_request_info *info,
-                                  union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       u8 channel_plan_req = (u8)(*((int *)wrqu));
-
-       if (rtw_set_chplan_cmd(padapter, channel_plan_req, 1, 1) != _SUCCESS)
-               return -EPERM;
-
-       return 0;
-}
-
-static int rtw_wx_set_mtk_wps_probe_ie(struct net_device *dev,
-               struct iw_request_info *a,
-               union iwreq_data *wrqu, char *b)
-{
-       return 0;
-}
-
-static int rtw_wx_get_sensitivity(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *buf)
-{
-       return 0;
-}
-
-static int rtw_wx_set_mtk_wps_ie(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *extra)
-{
-       return 0;
-}
-
-/*
-typedef int (*iw_handler)(struct net_device *dev, struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra);
-*/
-/*
- *For all data larger than 16 octets, we need to use a
- *pointer to memory allocated in user space.
- */
-static  int rtw_drvext_hdl(struct net_device *dev, struct iw_request_info *info,
-                                               union iwreq_data *wrqu, char *extra)
-{
-       return 0;
-}
-
-static int rtw_get_ap_info(struct net_device *dev,
-                          struct iw_request_info *info,
-                          union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       int wpa_ielen;
-       u32 cnt = 0;
-       struct list_head        *plist, *phead;
-       unsigned char *pbuf;
-       u8 bssid[ETH_ALEN];
-       char data[32];
-       struct wlan_network *pnetwork = NULL;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-       struct __queue *queue = &(pmlmepriv->scanned_queue);
-       struct iw_point *pdata = &wrqu->data;
-
-       if ((padapter->bDriverStopped) || (pdata == NULL)) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       while ((check_fwstate(pmlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) == true) {
-               msleep(30);
-               cnt++;
-               if (cnt > 100)
-                       break;
-       }
-
-
-       /* pdata->length = 0;? */
-       pdata->flags = 0;
-       if (pdata->length >= 32) {
-               if (copy_from_user(data, pdata->pointer, 32)) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       } else {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
-
-       phead = get_list_head(queue);
-       list_for_each(plist, phead) {
-               pnetwork = list_entry(plist, struct wlan_network, list);
-
-               if (!mac_pton(data, bssid)) {
-                       spin_unlock_bh(&(pmlmepriv->scanned_queue.lock));
-                       return -EINVAL;
-               }
-
-
-               if (!memcmp(bssid, pnetwork->network.mac_address, ETH_ALEN)) { /* BSSID match, then check if supporting wpa/wpa2 */
-
-                       pbuf = rtw_get_wpa_ie(&pnetwork->network.ies[12], &wpa_ielen, pnetwork->network.ie_length-12);
-                       if (pbuf && (wpa_ielen > 0)) {
-                               pdata->flags = 1;
-                               break;
-                       }
-
-                       pbuf = rtw_get_wpa2_ie(&pnetwork->network.ies[12], &wpa_ielen, pnetwork->network.ie_length-12);
-                       if (pbuf && (wpa_ielen > 0)) {
-                               pdata->flags = 2;
-                               break;
-                       }
-               }
-
-       }
-
-       spin_unlock_bh(&(pmlmepriv->scanned_queue.lock));
-
-       if (pdata->length >= 34) {
-               if (copy_to_user((u8 __force __user *)pdata->pointer+32, (u8 *)&pdata->flags, 1)) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       }
-
-exit:
-
-       return ret;
-
-}
-
-static int rtw_set_pid(struct net_device *dev,
-                      struct iw_request_info *info,
-                      union iwreq_data *wrqu, char *extra)
-{
-
-       int ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       int *pdata = (int *)wrqu;
-       int selector;
-
-       if ((padapter->bDriverStopped) || (pdata == NULL)) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       selector = *pdata;
-       if (selector < 3 && selector >= 0)
-               padapter->pid[selector] = *(pdata+1);
-
-exit:
-
-       return ret;
-
-}
-
-static int rtw_wps_start(struct net_device *dev,
-                        struct iw_request_info *info,
-                        union iwreq_data *wrqu, char *extra)
-{
-
-       int ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_point *pdata = &wrqu->data;
-       u32   u32wps_start = 0;
-
-       if ((true == padapter->bDriverStopped) || (true == padapter->bSurpriseRemoved) || (NULL == pdata)) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       if (copy_from_user((void *)&u32wps_start, pdata->pointer, 4)) {
-               ret = -EFAULT;
-               goto exit;
-       }
-       if (u32wps_start == 0)
-               u32wps_start = *extra;
-
-exit:
-
-       return ret;
-
-}
-
-static int rtw_p2p_set(struct net_device *dev,
-                      struct iw_request_info *info,
-                      union iwreq_data *wrqu, char *extra)
-{
-
-       return 0;
-
-}
-
-static int rtw_p2p_get(struct net_device *dev,
-                      struct iw_request_info *info,
-                      union iwreq_data *wrqu, char *extra)
-{
-
-       return 0;
-
-}
-
-static int rtw_p2p_get2(struct net_device *dev,
-                                               struct iw_request_info *info,
-                                               union iwreq_data *wrqu, char *extra)
-{
-
-       return 0;
-
-}
-
-static int rtw_rereg_nd_name(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct rereg_nd_name_data *rereg_priv = &padapter->rereg_nd_name_priv;
-       char new_ifname[IFNAMSIZ];
-
-       if (rereg_priv->old_ifname[0] == 0) {
-               char *reg_ifname;
-               reg_ifname = padapter->registrypriv.ifname;
-
-               strncpy(rereg_priv->old_ifname, reg_ifname, IFNAMSIZ);
-               rereg_priv->old_ifname[IFNAMSIZ-1] = 0;
-       }
-
-       if (wrqu->data.length > IFNAMSIZ)
-               return -EFAULT;
-
-       if (copy_from_user(new_ifname, wrqu->data.pointer, IFNAMSIZ))
-               return -EFAULT;
-
-       if (0 == strcmp(rereg_priv->old_ifname, new_ifname))
-               return ret;
-
-       ret = rtw_change_ifname(padapter, new_ifname);
-       if (ret != 0)
-               goto exit;
-
-       strncpy(rereg_priv->old_ifname, new_ifname, IFNAMSIZ);
-       rereg_priv->old_ifname[IFNAMSIZ-1] = 0;
-
-       if (!memcmp(new_ifname, "disable%d", 9)) {
-               /*  free network queue for Android's timming issue */
-               rtw_free_network_queue(padapter, true);
-
-               /*  the interface is being "disabled", we can do deeper IPS */
-               /* rtw_ips_mode_req(&padapter->pwrctrlpriv, IPS_NORMAL); */
-       }
-exit:
-       return ret;
-
-}
-
-static int rtw_dbg_port(struct net_device *dev,
-                       struct iw_request_info *info,
-                       union iwreq_data *wrqu, char *extra)
-{
-       u8 major_cmd, minor_cmd;
-       u16 arg;
-       u32 extra_arg, *pdata, val32;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
-       pdata = (u32 *)&wrqu->data;
-
-       val32 = *pdata;
-       arg = (u16)(val32&0x0000ffff);
-       major_cmd = (u8)(val32>>24);
-       minor_cmd = (u8)((val32>>16)&0x00ff);
-
-       extra_arg = *(pdata+1);
-
-       switch (major_cmd) {
-               case 0x70:/* read_reg */
-                       switch (minor_cmd) {
-                               case 1:
-                                       break;
-                               case 2:
-                                       break;
-                               case 4:
-                                       break;
-                       }
-                       break;
-               case 0x71:/* write_reg */
-                       switch (minor_cmd) {
-                               case 1:
-                                       rtw_write8(padapter, arg, extra_arg);
-                                       break;
-                               case 2:
-                                       rtw_write16(padapter, arg, extra_arg);
-                                       break;
-                               case 4:
-                                       rtw_write32(padapter, arg, extra_arg);
-                                       break;
-                       }
-                       break;
-               case 0x72:/* read_bb */
-                       break;
-               case 0x73:/* write_bb */
-                       rtw_hal_write_bbreg(padapter, arg, 0xffffffff, extra_arg);
-                       break;
-               case 0x74:/* read_rf */
-                       break;
-               case 0x75:/* write_rf */
-                       rtw_hal_write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg);
-                       break;
-
-               case 0x76:
-                       switch (minor_cmd) {
-                               case 0x00: /* normal mode, */
-                                       padapter->recvpriv.is_signal_dbg = 0;
-                                       break;
-                               case 0x01: /* dbg mode */
-                                       padapter->recvpriv.is_signal_dbg = 1;
-                                       extra_arg = extra_arg > 100 ? 100 : extra_arg;
-                                       padapter->recvpriv.signal_strength_dbg = extra_arg;
-                                       break;
-                       }
-                       break;
-               case 0x78: /* IOL test */
-                       break;
-               case 0x79:
-                       {
-                               /*
-                               * dbg 0x79000000 [value], set RESP_TXAGC to + value, value:0~15
-                               * dbg 0x79010000 [value], set RESP_TXAGC to - value, value:0~15
-                               */
-                               u8 value =  extra_arg & 0x0f;
-                               u8 sign = minor_cmd;
-                               u16 write_value = 0;
-
-                               if (sign)
-                                       value = value | 0x10;
-
-                               write_value = value | (value << 5);
-                               rtw_write16(padapter, 0x6d9, write_value);
-                       }
-                       break;
-               case 0x7a:
-                       receive_disconnect(padapter, pmlmeinfo->network.mac_address
-                               , WLAN_REASON_EXPIRATION_CHK);
-                       break;
-               case 0x7F:
-                       switch (minor_cmd) {
-                               case 0x0:
-                                       break;
-                               case 0x01:
-                                       break;
-                               case 0x02:
-                                       break;
-                               case 0x03:
-                                       break;
-                               case 0x04:
-
-                                       break;
-                               case 0x05:
-                                       break;
-                               case 0x06:
-                                       {
-                                               u32 ODMFlag;
-                                               rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&ODMFlag));
-                                               ODMFlag = (u32)(0x0f&arg);
-                                               rtw_hal_set_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&ODMFlag));
-                                       }
-                                       break;
-                               case 0x07:
-                                       break;
-                               case 0x08:
-                                       {
-                                       }
-                                       break;
-                               case 0x09:
-                                       break;
-                               case 0x0a:
-                                       {
-                                               int max_mac_id = 0;
-                                               max_mac_id = rtw_search_max_mac_id(padapter);
-                                               printk("%s ==> max_mac_id = %d\n", __func__, max_mac_id);
-                                       }
-                                       break;
-                               case 0x0b: /* Enable = 1, Disable = 0 driver control vrtl_carrier_sense. */
-                                       if (arg == 0) {
-                                               padapter->driver_vcs_en = 0;
-                                       } else if (arg == 1) {
-                                               padapter->driver_vcs_en = 1;
-
-                                               if (extra_arg > 2)
-                                                       padapter->driver_vcs_type = 1;
-                                               else
-                                                       padapter->driver_vcs_type = extra_arg;
-                                       }
-                                       break;
-                               case 0x0c:/* dump rx/tx packet */
-                                       {
-                                               if (arg == 0)
-                                                       /* pHalData->bDumpRxPkt =extra_arg; */
-                                                       rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg));
-                                               else if (arg == 1)
-                                                       rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_TXPKT, &(extra_arg));
-                                       }
-                                       break;
-                               case 0x0e:
-                                       {
-                                               if (arg == 0) {
-                                                       padapter->driver_rx_ampdu_factor = 0xFF;
-                                               } else if (arg == 1) {
-
-                                                       if ((extra_arg & 0x03) > 0x03)
-                                                               padapter->driver_rx_ampdu_factor = 0xFF;
-                                                       else
-                                                               padapter->driver_rx_ampdu_factor = extra_arg;
-                                               }
-                                       }
-                                       break;
-
-                               case 0x10:/*  driver version display */
-                                       netdev_dbg(dev, "%s %s\n", "rtl8723bs", DRIVERVERSION);
-                                       break;
-                               case 0x11:/* dump linked status */
-                                       {
-                                                linked_info_dump(padapter, extra_arg);
-                                       }
-                                       break;
-                               case 0x12: /* set rx_stbc */
-                               {
-                                       struct registry_priv *pregpriv = &padapter->registrypriv;
-                                       /*  0: disable, bit(0):enable 2.4g */
-                                       /* default is set to enable 2.4GHZ */
-                                       if (extra_arg == 0 || extra_arg == 1)
-                                               pregpriv->rx_stbc = extra_arg;
-                               }
-                               break;
-                               case 0x13: /* set ampdu_enable */
-                               {
-                                       struct registry_priv *pregpriv = &padapter->registrypriv;
-                                       /*  0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec) */
-                                       if (extra_arg < 3)
-                                               pregpriv->ampdu_enable = extra_arg;
-                               }
-                               break;
-                               case 0x14:
-                               {
-                               }
-                               break;
-                               case 0x16:
-                               {
-                                       if (arg == 0xff) {
-                                               rtw_odm_dbg_comp_msg(padapter);
-                                       } else {
-                                               u64 dbg_comp = (u64)extra_arg;
-                                               rtw_odm_dbg_comp_set(padapter, dbg_comp);
-                                       }
-                               }
-                                       break;
-#ifdef DBG_FIXED_CHAN
-                               case 0x17:
-                                       {
-                                               struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-                                               printk("===>  Fixed channel to %d\n", extra_arg);
-                                               pmlmeext->fixed_chan = extra_arg;
-
-                                       }
-                                       break;
-#endif
-                               case 0x18:
-                                       {
-                                               printk("===>  Switch USB Mode %d\n", extra_arg);
-                                               rtw_hal_set_hwreg(padapter, HW_VAR_USB_MODE, (u8 *)&extra_arg);
-                                       }
-                                       break;
-                               case 0x19:
-                                       {
-                                               struct registry_priv *pregistrypriv = &padapter->registrypriv;
-                                               /*  extra_arg : */
-                                               /*  BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, */
-                                               /*  BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx */
-                                               if (arg == 0)
-                                                       pregistrypriv->ldpc_cap = 0x00;
-                                               else if (arg == 1)
-                                                       pregistrypriv->ldpc_cap = (u8)(extra_arg&0x33);
-                                       }
-                                       break;
-                               case 0x1a:
-                                       {
-                                               struct registry_priv *pregistrypriv = &padapter->registrypriv;
-                                               /*  extra_arg : */
-                                               /*  BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, */
-                                               /*  BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx */
-                                               if (arg == 0)
-                                                       pregistrypriv->stbc_cap = 0x00;
-                                               else if (arg == 1)
-                                                       pregistrypriv->stbc_cap = (u8)(extra_arg&0x33);
-                                       }
-                                       break;
-                               case 0x1b:
-                                       {
-                                               struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
-                                               if (arg == 0) {
-                                                       init_mlme_default_rate_set(padapter);
-                                                       pregistrypriv->ht_enable = (u8)rtw_ht_enable;
-                                               } else if (arg == 1) {
-
-                                                       int i;
-                                                       u8 max_rx_rate;
+                       break;
+               case WPA_CIPHER_CCMP:
+                       padapter->securitypriv.dot11PrivacyAlgrthm = _AES_;
+                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
+                       break;
+               case WPA_CIPHER_WEP104:
+                       padapter->securitypriv.dot11PrivacyAlgrthm = _WEP104_;
+                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
+                       break;
+               }
 
-                                                       max_rx_rate = (u8)extra_arg;
+               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
+               {/* set wps_ie */
+                       u16 cnt = 0;
+                       u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
 
-                                                       if (max_rx_rate < 0xc) { /*  max_rx_rate < MSC0 -> B or G -> disable HT */
-                                                               pregistrypriv->ht_enable = 0;
-                                                               for (i = 0; i < NumRates; i++) {
-                                                                       if (pmlmeext->datarate[i] > max_rx_rate)
-                                                                               pmlmeext->datarate[i] = 0xff;
-                                                               }
+                       while (cnt < ielen) {
+                               eid = buf[cnt];
 
-                                                       }
-                                                       else if (max_rx_rate < 0x1c) { /*  mcs0~mcs15 */
-                                                               u32 mcs_bitmap = 0x0;
+                               if ((eid == WLAN_EID_VENDOR_SPECIFIC) && (!memcmp(&buf[cnt+2], wps_oui, 4))) {
+                                       padapter->securitypriv.wps_ie_len = ((buf[cnt+1]+2) < MAX_WPS_IE_LEN) ? (buf[cnt+1]+2):MAX_WPS_IE_LEN;
 
-                                                               for (i = 0; i < ((max_rx_rate + 1) - 0xc); i++)
-                                                                       mcs_bitmap |= BIT(i);
+                                       memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len);
 
-                                                               set_mcs_rate_by_mask(pmlmeext->default_supported_mcs_set, mcs_bitmap);
-                                                       }
-                                               }
-                                       }
-                                       break;
-                               case 0x1c: /* enable/disable driver control AMPDU Density for peer sta's rx */
-                                       {
-                                               if (arg == 0) {
-                                                       padapter->driver_ampdu_spacing = 0xFF;
-                                               } else if (arg == 1) {
-
-                                                       if (extra_arg > 0x07)
-                                                               padapter->driver_ampdu_spacing = 0xFF;
-                                                       else
-                                                               padapter->driver_ampdu_spacing = extra_arg;
-                                               }
-                                       }
-                                       break;
-                               case 0x23:
-                                       {
-                                               padapter->bNotifyChannelChange = extra_arg;
-                                               break;
-                                       }
-                               case 0x24:
-                                       {
-                                               break;
-                                       }
-                               case 0xaa:
-                                       {
-                                               if ((extra_arg & 0x7F) > 0x3F)
-                                                       extra_arg = 0xFF;
-                                               padapter->fix_rate = extra_arg;
-                                       }
-                                       break;
-                               case 0xdd:/* registers dump , 0 for mac reg, 1 for bb reg, 2 for rf reg */
-                                       {
-                                               if (extra_arg == 0)
-                                                       mac_reg_dump(padapter);
-                                               else if (extra_arg == 1)
-                                                       bb_reg_dump(padapter);
-                                               else if (extra_arg == 2)
-                                                       rf_reg_dump(padapter);
-                                       }
-                                       break;
+                                       set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
 
-                               case 0xee:/* turn on/off dynamic funcs */
-                                       {
-                                               u32 odm_flag;
-
-                                               if (0xf == extra_arg) {
-                                                       rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &odm_flag);
-                                               } else {
-                                                       /*extra_arg = 0  - disable all dynamic func
-                                                               extra_arg = 1  - disable DIG
-                                                               extra_arg = 2  - disable tx power tracking
-                                                               extra_arg = 3  - turn on all dynamic func
-                                                       */
-                                                       rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
-                                                       rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &odm_flag);
-                                               }
-                                       }
-                                       break;
+                                       cnt += buf[cnt+1]+2;
 
-                               case 0xfd:
-                                       rtw_write8(padapter, 0xc50, arg);
-                                       rtw_write8(padapter, 0xc58, arg);
-                                       break;
-                               case 0xfe:
-                                       break;
-                               case 0xff:
-                                       {
-                                       }
                                        break;
+                               } else {
+                                       cnt += buf[cnt+1]+2; /* goto next */
+                               }
                        }
-                       break;
-               default:
-                       break;
+               }
        }
 
+       /* TKIP and AES disallow multicast packets until installing group key */
+        if (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
+                || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
+                || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
+                /* WPS open need to enable multicast */
+                /*  check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == true) */
+                rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
+
+exit:
 
-       return 0;
+       kfree(buf);
 
+       return ret;
 }
 
 static int wpa_set_param(struct net_device *dev, u8 name, u32 value)
@@ -3713,763 +1373,8 @@ static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
        return ret;
 }
 
-static int rtw_wx_set_priv(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *awrq,
-                               char *extra)
-{
-
-#ifdef DEBUG_RTW_WX_SET_PRIV
-       char *ext_dbg;
-#endif
-
-       int ret = 0;
-       int len = 0;
-       char *ext;
-
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_point *dwrq = (struct iw_point *)awrq;
-
-       if (dwrq->length == 0)
-               return -EFAULT;
-
-       len = dwrq->length;
-       ext = vmalloc(len);
-       if (!ext)
-               return -ENOMEM;
-
-       if (copy_from_user(ext, dwrq->pointer, len)) {
-               vfree(ext);
-               return -EFAULT;
-       }
-
-       #ifdef DEBUG_RTW_WX_SET_PRIV
-       ext_dbg = vmalloc(len);
-       if (!ext_dbg) {
-               vfree(ext, len);
-               return -ENOMEM;
-       }
-
-       memcpy(ext_dbg, ext, len);
-       #endif
-
-       /* added for wps2.0 @20110524 */
-       if (dwrq->flags == 0x8766 && len > 8) {
-               u32 cp_sz;
-               struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-               u8 *probereq_wpsie = ext;
-               int probereq_wpsie_len = len;
-               u8 wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
-
-               if ((WLAN_EID_VENDOR_SPECIFIC == probereq_wpsie[0]) &&
-                       (!memcmp(&probereq_wpsie[2], wps_oui, 4))) {
-                       cp_sz = probereq_wpsie_len > MAX_WPS_IE_LEN ? MAX_WPS_IE_LEN : probereq_wpsie_len;
-
-                       if (pmlmepriv->wps_probe_req_ie) {
-                               pmlmepriv->wps_probe_req_ie_len = 0;
-                               kfree(pmlmepriv->wps_probe_req_ie);
-                               pmlmepriv->wps_probe_req_ie = NULL;
-                       }
-
-                       pmlmepriv->wps_probe_req_ie = rtw_malloc(cp_sz);
-                       if (pmlmepriv->wps_probe_req_ie == NULL) {
-                               printk("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__);
-                               ret =  -EINVAL;
-                               goto FREE_EXT;
-
-                       }
-
-                       memcpy(pmlmepriv->wps_probe_req_ie, probereq_wpsie, cp_sz);
-                       pmlmepriv->wps_probe_req_ie_len = cp_sz;
-
-               }
-
-               goto FREE_EXT;
-
-       }
-
-       if (len >= WEXT_CSCAN_HEADER_SIZE
-               && !memcmp(ext, WEXT_CSCAN_HEADER, WEXT_CSCAN_HEADER_SIZE)) {
-               ret = rtw_wx_set_scan(dev, info, awrq, ext);
-               goto FREE_EXT;
-       }
-
-FREE_EXT:
-
-       vfree(ext);
-       #ifdef DEBUG_RTW_WX_SET_PRIV
-       vfree(ext_dbg);
-       #endif
-
-       return ret;
-
-}
-
-static int rtw_pm_set(struct net_device *dev,
-                     struct iw_request_info *info,
-                     union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       unsigned        mode = 0;
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-       if (!memcmp(extra, "lps =", 4)) {
-               sscanf(extra+4, "%u", &mode);
-               ret = rtw_pm_set_lps(padapter, mode);
-       } else if (!memcmp(extra, "ips =", 4)) {
-               sscanf(extra+4, "%u", &mode);
-               ret = rtw_pm_set_ips(padapter, mode);
-       } else {
-               ret = -EINVAL;
-       }
-
-       return ret;
-}
-
-static int rtw_test(
-       struct net_device *dev,
-       struct iw_request_info *info,
-       union iwreq_data *wrqu, char *extra)
-{
-       u32 len;
-       u8 *pbuf, *pch;
-       char *ptmp;
-       u8 *delim = ",";
-       struct adapter *padapter = rtw_netdev_priv(dev);
-
-
-       len = wrqu->data.length;
-
-       pbuf = rtw_zmalloc(len);
-       if (!pbuf)
-               return -ENOMEM;
-
-       if (copy_from_user(pbuf, wrqu->data.pointer, len)) {
-               kfree(pbuf);
-               return -EFAULT;
-       }
-
-       ptmp = (char *)pbuf;
-       pch = strsep(&ptmp, delim);
-       if ((pch == NULL) || (strlen(pch) == 0)) {
-               kfree(pbuf);
-               return -EFAULT;
-       }
-
-       if (strcmp(pch, "bton") == 0)
-               hal_btcoex_SetManualControl(padapter, false);
-
-       if (strcmp(pch, "btoff") == 0)
-               hal_btcoex_SetManualControl(padapter, true);
-
-       if (strcmp(pch, "h2c") == 0) {
-               u8 param[8];
-               u8 count = 0;
-               u32 tmp;
-               u8 i;
-               u32 pos;
-               s32 ret;
-
-
-               do {
-                       pch = strsep(&ptmp, delim);
-                       if ((pch == NULL) || (strlen(pch) == 0))
-                               break;
-
-                       sscanf(pch, "%x", &tmp);
-                       param[count++] = (u8)tmp;
-               } while (count < 8);
-
-               if (count == 0) {
-                       kfree(pbuf);
-                       return -EFAULT;
-               }
-
-               ret = rtw_hal_fill_h2c_cmd(padapter, param[0], count-1, &param[1]);
-
-               pos = sprintf(extra, "H2C ID = 0x%02x content =", param[0]);
-               for (i = 1; i < count; i++)
-                       pos += sprintf(extra+pos, "%02x,", param[i]);
-               extra[pos] = 0;
-               pos--;
-               pos += sprintf(extra+pos, " %s", ret == _FAIL?"FAIL":"OK");
-
-               wrqu->data.length = strlen(extra) + 1;
-       }
-
-       kfree(pbuf);
-       return 0;
-}
-
-static iw_handler rtw_handlers[] = {
-       NULL,                                   /* SIOCSIWCOMMIT */
-       rtw_wx_get_name,                /* SIOCGIWNAME */
-       dummy,                                  /* SIOCSIWNWID */
-       dummy,                                  /* SIOCGIWNWID */
-       rtw_wx_set_freq,                /* SIOCSIWFREQ */
-       rtw_wx_get_freq,                /* SIOCGIWFREQ */
-       rtw_wx_set_mode,                /* SIOCSIWMODE */
-       rtw_wx_get_mode,                /* SIOCGIWMODE */
-       dummy,                                  /* SIOCSIWSENS */
-       rtw_wx_get_sens,                /* SIOCGIWSENS */
-       NULL,                                   /* SIOCSIWRANGE */
-       rtw_wx_get_range,               /* SIOCGIWRANGE */
-       rtw_wx_set_priv,                /* SIOCSIWPRIV */
-       NULL,                                   /* SIOCGIWPRIV */
-       NULL,                                   /* SIOCSIWSTATS */
-       NULL,                                   /* SIOCGIWSTATS */
-       dummy,                                  /* SIOCSIWSPY */
-       dummy,                                  /* SIOCGIWSPY */
-       NULL,                                   /* SIOCGIWTHRSPY */
-       NULL,                                   /* SIOCWIWTHRSPY */
-       rtw_wx_set_wap,         /* SIOCSIWAP */
-       rtw_wx_get_wap,         /* SIOCGIWAP */
-       rtw_wx_set_mlme,                /* request MLME operation; uses struct iw_mlme */
-       dummy,                                  /* SIOCGIWAPLIST -- depricated */
-       rtw_wx_set_scan,                /* SIOCSIWSCAN */
-       rtw_wx_get_scan,                /* SIOCGIWSCAN */
-       rtw_wx_set_essid,               /* SIOCSIWESSID */
-       rtw_wx_get_essid,               /* SIOCGIWESSID */
-       dummy,                                  /* SIOCSIWNICKN */
-       rtw_wx_get_nick,                /* SIOCGIWNICKN */
-       NULL,                                   /* -- hole -- */
-       NULL,                                   /* -- hole -- */
-       rtw_wx_set_rate,                /* SIOCSIWRATE */
-       rtw_wx_get_rate,                /* SIOCGIWRATE */
-       rtw_wx_set_rts,                 /* SIOCSIWRTS */
-       rtw_wx_get_rts,                 /* SIOCGIWRTS */
-       rtw_wx_set_frag,                /* SIOCSIWFRAG */
-       rtw_wx_get_frag,                /* SIOCGIWFRAG */
-       dummy,                                  /* SIOCSIWTXPOW */
-       dummy,                                  /* SIOCGIWTXPOW */
-       dummy,                                  /* SIOCSIWRETRY */
-       rtw_wx_get_retry,               /* SIOCGIWRETRY */
-       rtw_wx_set_enc,                 /* SIOCSIWENCODE */
-       rtw_wx_get_enc,                 /* SIOCGIWENCODE */
-       dummy,                                  /* SIOCSIWPOWER */
-       rtw_wx_get_power,               /* SIOCGIWPOWER */
-       NULL,                                   /*---hole---*/
-       NULL,                                   /*---hole---*/
-       rtw_wx_set_gen_ie,              /* SIOCSIWGENIE */
-       NULL,                                   /* SIOCGWGENIE */
-       rtw_wx_set_auth,                /* SIOCSIWAUTH */
-       NULL,                                   /* SIOCGIWAUTH */
-       rtw_wx_set_enc_ext,             /* SIOCSIWENCODEEXT */
-       NULL,                                   /* SIOCGIWENCODEEXT */
-       rtw_wx_set_pmkid,               /* SIOCSIWPMKSA */
-       NULL,                                   /*---hole---*/
-};
-
-static const struct iw_priv_args rtw_private_args[] = {
-       {
-               SIOCIWFIRSTPRIV + 0x0,
-               IW_PRIV_TYPE_CHAR | 0x7FF, 0, "write"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x1,
-               IW_PRIV_TYPE_CHAR | 0x7FF,
-               IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "read"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x2, 0, 0, "driver_ext"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x3, 0, 0, "mp_ioctl"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x4,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "apinfo"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x5,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "setpid"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x6,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_start"
-       },
-/* for PLATFORM_MT53XX */
-       {
-               SIOCIWFIRSTPRIV + 0x7,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "get_sensitivity"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x8,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_prob_req_ie"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x9,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_assoc_req_ie"
-       },
-
-/* for RTK_DMP_PLATFORM */
-       {
-               SIOCIWFIRSTPRIV + 0xA,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "channel_plan"
-       },
-
-       {
-               SIOCIWFIRSTPRIV + 0xB,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "dbg"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0xC,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "rfw"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0xD,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rfr"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x10,
-               IW_PRIV_TYPE_CHAR | 1024, 0, "p2p_set"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x11,
-               IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "p2p_get"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x12, 0, 0, "NULL"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x13,
-               IW_PRIV_TYPE_CHAR | 64, IW_PRIV_TYPE_CHAR | 64, "p2p_get2"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x14,
-               IW_PRIV_TYPE_CHAR  | 64, 0, "tdls"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x15,
-               IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024, "tdls_get"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x16,
-               IW_PRIV_TYPE_CHAR | 64, 0, "pm_set"
-       },
-
-       {SIOCIWFIRSTPRIV + 0x18, IW_PRIV_TYPE_CHAR | IFNAMSIZ, 0, "rereg_nd_name"},
-       {SIOCIWFIRSTPRIV + 0x1A, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set"},
-       {SIOCIWFIRSTPRIV + 0x1B, IW_PRIV_TYPE_CHAR | 128, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get"},
-       {
-               SIOCIWFIRSTPRIV + 0x1D,
-               IW_PRIV_TYPE_CHAR | 40, IW_PRIV_TYPE_CHAR | 0x7FF, "test"
-       },
-};
-
-static iw_handler rtw_private_handler[] = {
-       rtw_wx_write32,                                 /* 0x00 */
-       rtw_wx_read32,                                  /* 0x01 */
-       rtw_drvext_hdl,                                 /* 0x02 */
-       NULL,                                           /* 0x03 */
-
-/*  for MM DTV platform */
-       rtw_get_ap_info,                                        /* 0x04 */
-
-       rtw_set_pid,                                            /* 0x05 */
-       rtw_wps_start,                                  /* 0x06 */
-
-/*  for PLATFORM_MT53XX */
-       rtw_wx_get_sensitivity,                 /* 0x07 */
-       rtw_wx_set_mtk_wps_probe_ie,    /* 0x08 */
-       rtw_wx_set_mtk_wps_ie,                  /* 0x09 */
-
-/*  for RTK_DMP_PLATFORM */
-/*  Set Channel depend on the country code */
-       rtw_wx_set_channel_plan,                /* 0x0A */
-
-       rtw_dbg_port,                                   /* 0x0B */
-       rtw_wx_write_rf,                                        /* 0x0C */
-       rtw_wx_read_rf,                                 /* 0x0D */
-       rtw_wx_priv_null,                               /* 0x0E */
-       rtw_wx_priv_null,                               /* 0x0F */
-       rtw_p2p_set,                                    /* 0x10 */
-       rtw_p2p_get,                                    /* 0x11 */
-       NULL,                                                   /* 0x12 */
-       rtw_p2p_get2,                                   /* 0x13 */
-
-       NULL,                                           /* 0x14 */
-       NULL,                                           /* 0x15 */
-
-       rtw_pm_set,                                             /* 0x16 */
-       rtw_wx_priv_null,                               /* 0x17 */
-       rtw_rereg_nd_name,                              /* 0x18 */
-       rtw_wx_priv_null,                               /* 0x19 */
-       NULL,                                           /* 0x1A */
-       NULL,                                           /* 0x1B */
-       NULL,                                                   /*  0x1C is reserved for hostapd */
-       rtw_test,                                               /*  0x1D */
-};
-
-static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
-{
-       struct adapter *padapter = rtw_netdev_priv(dev);
-       struct iw_statistics *piwstats = &padapter->iwstats;
-       int tmp_level = 0;
-       int tmp_qual = 0;
-       int tmp_noise = 0;
-
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) != true) {
-               piwstats->qual.qual = 0;
-               piwstats->qual.level = 0;
-               piwstats->qual.noise = 0;
-       } else {
-               tmp_level = padapter->recvpriv.signal_strength;
-               tmp_qual = padapter->recvpriv.signal_qual;
-               tmp_noise = padapter->recvpriv.noise;
-
-               piwstats->qual.level = tmp_level;
-               piwstats->qual.qual = tmp_qual;
-               piwstats->qual.noise = tmp_noise;
-       }
-       piwstats->qual.updated = IW_QUAL_ALL_UPDATED ;/* IW_QUAL_DBM; */
-
-       return &padapter->iwstats;
-}
-
-struct iw_handler_def rtw_handlers_def = {
-       .standard = rtw_handlers,
-       .num_standard = ARRAY_SIZE(rtw_handlers),
-#if defined(CONFIG_WEXT_PRIV)
-       .private = rtw_private_handler,
-       .private_args = (struct iw_priv_args *)rtw_private_args,
-       .num_private = ARRAY_SIZE(rtw_private_handler),
-       .num_private_args = ARRAY_SIZE(rtw_private_args),
-#endif
-       .get_wireless_stats = rtw_get_wireless_stats,
-};
-
-/*  copy from net/wireless/wext.c start */
-/* ---------------------------------------------------------------- */
-/*
- * Calculate size of private arguments
- */
-static const char iw_priv_type_size[] = {
-       0,                              /* IW_PRIV_TYPE_NONE */
-       1,                              /* IW_PRIV_TYPE_BYTE */
-       1,                              /* IW_PRIV_TYPE_CHAR */
-       0,                              /* Not defined */
-       sizeof(__u32),                  /* IW_PRIV_TYPE_INT */
-       sizeof(struct iw_freq),         /* IW_PRIV_TYPE_FLOAT */
-       sizeof(struct sockaddr),        /* IW_PRIV_TYPE_ADDR */
-       0,                              /* Not defined */
-};
-
-static int get_priv_size(__u16 args)
-{
-       int num = args & IW_PRIV_SIZE_MASK;
-       int type = (args & IW_PRIV_TYPE_MASK) >> 12;
-
-       return num * iw_priv_type_size[type];
-}
 /*  copy from net/wireless/wext.c end */
 
-static int rtw_ioctl_wext_private(struct net_device *dev, union iwreq_data *wrq_data)
-{
-       int err = 0;
-       u8 *input = NULL;
-       u32 input_len = 0;
-       const char delim[] = " ";
-       u8 *output = NULL;
-       u32 output_len = 0;
-       u32 count = 0;
-       u8 *buffer = NULL;
-       u32 buffer_len = 0;
-       char *ptr = NULL;
-       u8 cmdname[17] = {0}; /*  IFNAMSIZ+1 */
-       u32 cmdlen;
-       s32 len;
-       u8 *extra = NULL;
-       u32 extra_size = 0;
-
-       s32 k;
-       const iw_handler *priv;         /* Private ioctl */
-       const struct iw_priv_args *priv_args;   /* Private ioctl description */
-       u32 num_priv_args;                      /* Number of descriptions */
-       iw_handler handler;
-       int temp;
-       int subcmd = 0;                         /* sub-ioctl index */
-       int offset = 0;                         /* Space for sub-ioctl index */
-
-       union iwreq_data wdata;
-
-
-       memcpy(&wdata, wrq_data, sizeof(wdata));
-
-       input_len = 2048;
-       input = rtw_zmalloc(input_len);
-       if (NULL == input)
-               return -ENOMEM;
-       if (copy_from_user(input, wdata.data.pointer, input_len)) {
-               err = -EFAULT;
-               goto exit;
-       }
-       ptr = input;
-       len = strlen(input);
-
-       sscanf(ptr, "%16s", cmdname);
-       cmdlen = strlen(cmdname);
-
-       /*  skip command string */
-       if (cmdlen > 0)
-               cmdlen += 1; /*  skip one space */
-       ptr += cmdlen;
-       len -= cmdlen;
-
-       priv = rtw_private_handler;
-       priv_args = rtw_private_args;
-       num_priv_args = ARRAY_SIZE(rtw_private_args);
-
-       if (num_priv_args == 0) {
-               err = -EOPNOTSUPP;
-               goto exit;
-       }
-
-       /* Search the correct ioctl */
-       k = -1;
-       while ((++k < num_priv_args) && strcmp(priv_args[k].name, cmdname));
-
-       /* If not found... */
-       if (k == num_priv_args) {
-               err = -EOPNOTSUPP;
-               goto exit;
-       }
-
-       /* Watch out for sub-ioctls ! */
-       if (priv_args[k].cmd < SIOCDEVPRIVATE) {
-               int j = -1;
-
-               /* Find the matching *real* ioctl */
-               while ((++j < num_priv_args) && ((priv_args[j].name[0] != '\0') ||
-                       (priv_args[j].set_args != priv_args[k].set_args) ||
-                       (priv_args[j].get_args != priv_args[k].get_args)));
-
-               /* If not found... */
-               if (j == num_priv_args) {
-                       err = -EINVAL;
-                       goto exit;
-               }
-
-               /* Save sub-ioctl number */
-               subcmd = priv_args[k].cmd;
-               /* Reserve one int (simplify alignment issues) */
-               offset = sizeof(__u32);
-               /* Use real ioctl definition from now on */
-               k = j;
-       }
-
-       buffer = rtw_zmalloc(4096);
-       if (NULL == buffer) {
-               err = -ENOMEM;
-               goto exit;
-       }
-
-       /* If we have to set some data */
-       if ((priv_args[k].set_args & IW_PRIV_TYPE_MASK) &&
-               (priv_args[k].set_args & IW_PRIV_SIZE_MASK)) {
-               u8 *str;
-
-               switch (priv_args[k].set_args & IW_PRIV_TYPE_MASK) {
-               case IW_PRIV_TYPE_BYTE:
-                       /* Fetch args */
-                       count = 0;
-                       do {
-                               str = strsep(&ptr, delim);
-                               if (NULL == str)
-                                       break;
-                               sscanf(str, "%i", &temp);
-                               buffer[count++] = (u8)temp;
-                       } while (1);
-                       buffer_len = count;
-
-                       /* Number of args to fetch */
-                       wdata.data.length = count;
-                       if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK))
-                               wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK;
-
-                       break;
-
-               case IW_PRIV_TYPE_INT:
-                       /* Fetch args */
-                       count = 0;
-                       do {
-                               str = strsep(&ptr, delim);
-                               if (NULL == str)
-                                       break;
-                               sscanf(str, "%i", &temp);
-                               ((s32 *)buffer)[count++] = (s32)temp;
-                       } while (1);
-                       buffer_len = count * sizeof(s32);
-
-                       /* Number of args to fetch */
-                       wdata.data.length = count;
-                       if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK))
-                               wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK;
-
-                       break;
-
-               case IW_PRIV_TYPE_CHAR:
-                       if (len > 0) {
-                               /* Size of the string to fetch */
-                               wdata.data.length = len;
-                               if (wdata.data.length > (priv_args[k].set_args & IW_PRIV_SIZE_MASK))
-                                       wdata.data.length = priv_args[k].set_args & IW_PRIV_SIZE_MASK;
-
-                               /* Fetch string */
-                               memcpy(buffer, ptr, wdata.data.length);
-                       } else {
-                               wdata.data.length = 1;
-                               buffer[0] = '\0';
-                       }
-                       buffer_len = wdata.data.length;
-                       break;
-
-               default:
-                       err = -1;
-                       goto exit;
-               }
-
-               if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) &&
-                       (wdata.data.length != (priv_args[k].set_args & IW_PRIV_SIZE_MASK))) {
-                       err = -EINVAL;
-                       goto exit;
-               }
-       } else { /* if args to set */
-               wdata.data.length = 0L;
-       }
-
-       /* Those two tests are important. They define how the driver
-       * will have to handle the data */
-       if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) &&
-               ((get_priv_size(priv_args[k].set_args) + offset) <= IFNAMSIZ)) {
-               /* First case : all SET args fit within wrq */
-               if (offset)
-                       wdata.mode = subcmd;
-               memcpy(wdata.name + offset, buffer, IFNAMSIZ - offset);
-       } else {
-               if ((priv_args[k].set_args == 0) &&
-                       (priv_args[k].get_args & IW_PRIV_SIZE_FIXED) &&
-                       (get_priv_size(priv_args[k].get_args) <= IFNAMSIZ)) {
-                       /* Second case : no SET args, GET args fit within wrq */
-                       if (offset)
-                               wdata.mode = subcmd;
-               } else {
-                       /* Third case : args won't fit in wrq, or variable number of args */
-                       if (copy_to_user(wdata.data.pointer, buffer, buffer_len)) {
-                               err = -EFAULT;
-                               goto exit;
-                       }
-                       wdata.data.flags = subcmd;
-               }
-       }
-
-       kfree(input);
-       input = NULL;
-
-       extra_size = 0;
-       if (IW_IS_SET(priv_args[k].cmd)) {
-               /* Size of set arguments */
-               extra_size = get_priv_size(priv_args[k].set_args);
-
-               /* Does it fits in iwr ? */
-               if ((priv_args[k].set_args & IW_PRIV_SIZE_FIXED) &&
-                       ((extra_size + offset) <= IFNAMSIZ))
-                       extra_size = 0;
-       } else {
-               /* Size of get arguments */
-               extra_size = get_priv_size(priv_args[k].get_args);
-
-               /* Does it fits in iwr ? */
-               if ((priv_args[k].get_args & IW_PRIV_SIZE_FIXED) &&
-                       (extra_size <= IFNAMSIZ))
-                       extra_size = 0;
-       }
-
-       if (extra_size == 0) {
-               extra = (u8 *)&wdata;
-               kfree(buffer);
-               buffer = NULL;
-       } else
-               extra = buffer;
-
-       handler = priv[priv_args[k].cmd - SIOCIWFIRSTPRIV];
-       err = handler(dev, NULL, &wdata, extra);
-
-       /* If we have to get some data */
-       if ((priv_args[k].get_args & IW_PRIV_TYPE_MASK) &&
-               (priv_args[k].get_args & IW_PRIV_SIZE_MASK)) {
-               int j;
-               int n = 0;      /* number of args */
-               u8 str[20] = {0};
-
-               /* Check where is the returned data */
-               if ((priv_args[k].get_args & IW_PRIV_SIZE_FIXED) &&
-                       (get_priv_size(priv_args[k].get_args) <= IFNAMSIZ))
-                       n = priv_args[k].get_args & IW_PRIV_SIZE_MASK;
-               else
-                       n = wdata.data.length;
-
-               output = rtw_zmalloc(4096);
-               if (NULL == output) {
-                       err =  -ENOMEM;
-                       goto exit;
-               }
-
-               switch (priv_args[k].get_args & IW_PRIV_TYPE_MASK) {
-               case IW_PRIV_TYPE_BYTE:
-                       /* Display args */
-                       for (j = 0; j < n; j++) {
-                               len = scnprintf(str, sizeof(str), "%d  ", extra[j]);
-                               output_len = strlen(output);
-                               if ((output_len + len + 1) > 4096) {
-                                       err = -E2BIG;
-                                       goto exit;
-                               }
-                               memcpy(output+output_len, str, len);
-                       }
-                       break;
-
-               case IW_PRIV_TYPE_INT:
-                       /* Display args */
-                       for (j = 0; j < n; j++) {
-                               len = scnprintf(str, sizeof(str), "%d  ", ((__s32 *)extra)[j]);
-                               output_len = strlen(output);
-                               if ((output_len + len + 1) > 4096) {
-                                       err = -E2BIG;
-                                       goto exit;
-                               }
-                               memcpy(output+output_len, str, len);
-                       }
-                       break;
-
-               case IW_PRIV_TYPE_CHAR:
-                       /* Display args */
-                       memcpy(output, extra, n);
-                       break;
-
-               default:
-                       err = -1;
-                       goto exit;
-               }
-
-               output_len = strlen(output) + 1;
-               wrq_data->data.length = output_len;
-               if (copy_to_user(wrq_data->data.pointer, output, output_len)) {
-                       err = -EFAULT;
-                       goto exit;
-               }
-       } else { /* if args to set */
-               wrq_data->data.length = 0;
-       }
-
-exit:
-       kfree(input);
-       kfree(buffer);
-       kfree(output);
-
-       return err;
-}
-
 int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct iwreq *wrq = (struct iwreq *)rq;
@@ -4482,9 +1387,6 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        case RTL_IOCTL_HOSTAPD:
                ret = rtw_hostapd_ioctl(dev, &wrq->u.data);
                break;
-       case SIOCDEVPRIVATE:
-               ret = rtw_ioctl_wext_private(dev, &wrq->u);
-               break;
        default:
                ret = -EOPNOTSUPP;
                break;
index d772a044185d2b1c26d7f40f4a19a14079f86f8e..f78bf174de8e2721a2a45c5a4e3bc468f012dfc4 100644 (file)
@@ -474,7 +474,6 @@ struct net_device *rtw_init_netdev(struct adapter *old_padapter)
 
        /* pnetdev->tx_timeout = NULL; */
        pnetdev->watchdog_timeo = HZ * 3; /* 3 second timeout */
-       pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
 
        /* step 2. */
        loadparam(padapter, pnetdev);